1from django.conf.urls import url 2from django.core.exceptions import ObjectDoesNotExist 3from django.http import HttpResponse 4from django.urls import reverse 5from django.utils.translation import ugettext_lazy as _ 6 7from cms.app_base import CMSApp 8from cms.test_utils.project.sampleapp.cms_menus import SampleAppMenu, StaticMenu3, StaticMenu4 9from cms.apphook_pool import apphook_pool 10 11from .models import SampleAppConfig 12 13 14class AppWithNoMenu(CMSApp): 15 app_name = 'app_with_no_menu' 16 17 def get_urls(self, page=None, language=None, **kwargs): 18 return ["cms.test_utils.project.sampleapp.urls"] 19 20 21class SampleApp(CMSApp): 22 name = _("Sample App") 23 permissions = True 24 25 def get_menus(self, page=None, language=None, **kwargs): 26 return [SampleAppMenu] 27 28 def get_urls(self, page=None, language=None, **kwargs): 29 return ["cms.test_utils.project.sampleapp.urls"] 30 31 32class SampleAppWithConfig(CMSApp): 33 name = _("Sample App with config") 34 app_config = SampleAppConfig 35 36 def get_urls(self, page=None, language=None, **kwargs): 37 return ["cms.test_utils.project.sampleapp.urls_sample_config"] 38 39 def get_configs(self): 40 return self.app_config.objects.all() 41 42 def get_config(self, namespace): 43 try: 44 return self.app_config.objects.get(namespace=namespace) 45 except ObjectDoesNotExist: 46 return None 47 48 def get_config_add_url(self): 49 return reverse('admin:%s_%s_add' % (self.app_config._meta.app_label, self.app_config._meta.model_name)) 50 51 52class SampleAppWithExcludedPermissions(CMSApp): 53 name = _("Sample App with excluded permissions") 54 permissions = True 55 exclude_permissions = ['excluded'] 56 57 def get_urls(self, page=None, language=None, **kwargs): 58 return ["cms.test_utils.project.sampleapp.urls_excluded"] 59 60 61class SampleApp2(CMSApp): 62 name = _("Sample App 2") 63 64 def get_menus(self, page=None, language=None, **kwargs): 65 return [StaticMenu3] 66 67 def get_urls(self, page=None, language=None, **kwargs): 68 return ["cms.test_utils.project.sampleapp.urls2"] 69 70 71class SampleApp3(CMSApp): 72 # CMSApp which returns the url directly rather than trough another Python module 73 name = _("Sample App 3") 74 75 def get_urls(self, page=None, language=None, **kwargs): 76 def my_view(request): 77 return HttpResponse("Sample App 3 Response") 78 79 return [ 80 url(r'^$', my_view, name='sample3-root'), 81 ] 82 83 84class NamespacedApp(CMSApp): 85 name = _("Namespaced App") 86 app_name = 'namespaced_app_ns' 87 88 def get_menus(self, page=None, language=None, **kwargs): 89 return [SampleAppMenu, StaticMenu3] 90 91 def get_urls(self, page=None, language=None, **kwargs): 92 return [ 93 "cms.test_utils.project.sampleapp.ns_urls", 94 "cms.test_utils.project.sampleapp.urls" 95 ] 96 97 98class ParentApp(CMSApp): 99 name = _("Parent app") 100 101 def get_urls(self, page=None, language=None, **kwargs): 102 return ["cms.test_utils.project.sampleapp.urls_parentapp"] 103 104 105class ChildApp(CMSApp): 106 name = _("Child app") 107 108 def get_urls(self, page=None, language=None, **kwargs): 109 return ["cms.test_utils.project.sampleapp.urls_childapp"] 110 111 112class VariableUrlsApp(CMSApp): 113 name = _("Variable urls-menus App") 114 115 def get_menus(self, page=None, language=None, **kwargs): 116 if page and page.reverse_id == 'page1': 117 return [SampleAppMenu] 118 elif page and page.reverse_id == 'page2': 119 return [StaticMenu4] 120 else: 121 return [StaticMenu4, SampleAppMenu] 122 123 def get_urls(self, page=None, language=None, **kwargs): 124 if page and page.reverse_id == 'page1': 125 return ["cms.test_utils.project.sampleapp.urls"] 126 127 else: 128 return ["cms.test_utils.project.sampleapp.urls2"] 129 130 131apphook_pool.register(ChildApp) 132apphook_pool.register(SampleApp) 133apphook_pool.register(SampleAppWithExcludedPermissions) 134apphook_pool.register(SampleApp2) 135apphook_pool.register(SampleApp3) 136apphook_pool.register(NamespacedApp) 137apphook_pool.register(ParentApp) 138apphook_pool.register(VariableUrlsApp) 139