def build_sitetree(): """Строит древо сайта, исходя из достпных областей сайта. :return: """ from sitetree.sitetreeapp import register_dynamic_trees, compose_dynamic_tree # Потакаем поведению Django 1.7 при загрузке приложений. register_dynamic_trees( compose_dynamic_tree(( tree('main', 'Основное дерево', ( item('PYTHONZ', '/', alias='topmenu', url_as_pattern=False, children=(realm.get_sitetree_items() for realm in get_realms())), item('Вход', 'login', access_guest=True, in_menu=False, in_breadcrumbs=False), item('Личное меню', '#', alias='personal', url_as_pattern=False, access_loggedin=True, in_menu=False, in_sitetree=False, children=( item('Профиль', 'users:details request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Настройки', 'users:edit request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Выход', 'logout', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), )), )), tree('about', 'О проекте', ( item('Что такое Python', '/promo/', url_as_pattern=False), item('О проекте', '/about/', url_as_pattern=False), item('Карта сайта', '/sitemap/', url_as_pattern=False), item('Поиск по сайту', '/search/', url_as_pattern=False), )) )), reset_cache=True )
def test_access_restricted(self): # Test that default is False i0 = item('root', 'url', access_by_perms=1) self.assertEqual(i0.access_restricted, True) # True is respected i1 = item('root', 'url') self.assertEqual(i1.access_restricted, False)
def test_permission_any(self): i1 = item('root', 'url') self.assertEqual(i1.access_perm_type, i1.PERM_TYPE_ANY) i2 = item('root', 'url', perm_any=True) self.assertEqual(i2.access_perm_type, i1.PERM_TYPE_ANY) i3 = item('root', 'url', perm_any=False) self.assertEqual(i3.access_perm_type, i1.PERM_TYPE_ALL)
def test_permission_any(self): i1 = item('root', 'url') self.assertEqual(i1.access_perm_type, i1.PERM_TYPE_ALL) i2 = item('root', 'url', perms_mode_all=True) self.assertEqual(i2.access_perm_type, i1.PERM_TYPE_ALL) i3 = item('root', 'url', perms_mode_all=False) self.assertEqual(i3.access_perm_type, i1.PERM_TYPE_ANY)
def build_menu(self, lang): current_date = datetime.date.today() child_items = [ item('Atbalstītāji', 'competition:supporters %i' % self.competition.id), item('Starta saraksts', 'competition:participant_list %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items, lang) if self.competition.map_set.count(): child_items.append(item('Kartes', 'competition:maps %i' % self.competition.id)) if self.competition.competition_date <= current_date: child_items.append(item('Rezultāti', '/media/results/2015_RM_bernu_rezultati.pdf', url_as_pattern=False)) return item(str(self.competition), 'competition:competition %i' % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu)
def build_menu(self, lang): activate(lang) current_date = datetime.date.today() child_items = [ item(_('Start List'), 'competition:participant_list %i' % self.competition.id), item(_("Maps"), 'competition:maps %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items, lang) if self.competition.competition_date <= current_date + datetime.timedelta(days=1): child_items.append(item(_("Results"), 'competition:result_distance_list %i' % self.competition.id)) return item(str(self.competition), 'competition:competition %i' % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu)
def get_sitetree_add_item(cls): """Возвращает элемент древа сайта, указывающий на страницу добавления объекта. :return: """ realm_name, realm_name_plural = cls.get_names() return item(cls.txt_form_add, '%s:add' % realm_name_plural, access_loggedin=True)
def get_sitetree_edit_item(cls): """Возвращает элемент древа сайта, указывающий на страницу редактирования объекта. :return: """ realm_name, _tmp = cls.get_names() return item(cls.txt_form_edit, '%s %s.id' % (cls.get_edit_urlname(), realm_name), in_menu=False, in_sitetree=False, access_loggedin=True)
def get_sitetree_items(cls): """Возвращает элементы древа сайта. :return: """ if cls.sitetree_items is None: children = [] for view_name in cls.allowed_views: if view_name != 'edit': items = getattr(cls, 'get_sitetree_%s_item' % view_name)() if not isinstance(items, list): items = [items] children.extend(items) cls.sitetree_items = item( cls.view_listing_title or str(cls.model._meta.verbose_name_plural), cls.get_listing_urlname(), description=cls.view_listing_description, children=children, ) cls.sitetree_items.show_on_top = cls.show_on_top return cls.sitetree_items
def get_sitetree_tags_item(cls): """Возвращает элемент древа сайта, указывающий на страницу разбивки объектов по метке (категории). :return: """ return item('Категория «{{ category.title }}»', '%s category.id' % cls.get_tags_urlname(), in_menu=False, in_sitetree=False)
def build_manager_menu(self): return item( unicode(self.competition), "#", url_as_pattern=False, in_menu=self.competition.is_in_menu, access_loggedin=True, )
def get_item(urlname, id_attr='id'): return item( '{{ %s.title }}' % realm_name, '%s %s.%s' % (urlname, realm_name, id_attr), # Например books:details book.id children=children, in_menu=False, in_sitetree=False)
def get_item(urlname, id_attr='id'): return item( '{{ %s.title }}' % realm_name, '%s %s.%s' % (urlname, realm_name, id_attr), # Например books:details book.id children=children, in_menu=False, in_sitetree=False )
def get_sitetree_add_item(cls): """Возвращает элемент древа сайта, указывающий на страницу добавления объекта. :return: """ return item(cls.txt_form_add, cls.get_add_urlname(), access_loggedin=True)
def get_sitetree_listing_item(cls): """Возвращает элемент древа сайта, указывающий на страницу со списком объектов. :return: """ return item('Список', cls.get_listing_urlname(), description=cls.view_listing_description, in_menu=False)
def get_tree_item(ref_item): item_id = getattr(ref_item, 'id', root_id) tree_item = temp_ref_items.get(item_id) if not tree_item: tree_item = item(ref_item.title, ref_item.get_absolute_url(), url_as_pattern=False) temp_ref_items[item_id] = tree_item return tree_item
def test_basic(self): register_dynamic_trees( ( compose_dynamic_tree( ( tree( "dynamic_main_root", items=( item("dynamic_main_root_1", "dynamic_main_root_1_url", url_as_pattern=False), item("dynamic_main_root_2", "dynamic_main_root_2_url", url_as_pattern=False), ), ), ), target_tree_alias="main", ), compose_dynamic_tree( ( tree( "dynamic_main_sub", items=( item("dynamic_main_sub_1", "dynamic_main_sub_1_url", url_as_pattern=False), item("dynamic_main_sub_2", "dynamic_main_sub_2_url", url_as_pattern=False), ), ), ), target_tree_alias="main", parent_tree_item_alias="for_dynamic", ), compose_dynamic_tree( ( tree( "dynamic", items=( item( "dynamic_1", "dynamic_1_url", children=(item("dynamic_1_sub_1", "dynamic_1_sub_1_url", url_as_pattern=False),), url_as_pattern=False, ), item("dynamic_2", "dynamic_2_url", url_as_pattern=False), ), ), ) ), ) ) self.sitetree._global_context = get_mock_context(path="/the_same_url/") tree_alias, sitetree_items = self.sitetree.get_sitetree("main") self.assertEqual(len(sitetree_items), 5) self.assertEqual(sitetree_items[3].title, "dynamic_main_root_1") self.assertEqual(sitetree_items[4].title, "dynamic_main_root_2") children = self.sitetree.get_children("main", self.t1_root) self.assertEqual(len(children), 2) tree_alias, sitetree_items = self.sitetree.get_sitetree("dynamic") self.assertEqual(len(sitetree_items), 3) children = self.sitetree.get_children("dynamic", sitetree_items[0]) self.assertEqual(len(children), 1)
def build_manager_menu(self): child_items = [] # for child in self.competition.get_children(): # children = [] # children.append(item('Dalībnieki', '#', url_as_pattern=False, access_loggedin=True, children=[ # item('Pieteikt dalībnieku', 'manager:participant_create %i' % child.id, access_loggedin=True), # item('Dalībnieku saraksts', 'manager:participant_list %i' % child.id, access_loggedin=True), # item('{{ object }}', 'manager:participant %i object.id' % child.id, in_menu=False, access_loggedin=True), # ])) return item(unicode(self.competition), 'manager:competition %i' % self.competition.id, children=child_items, in_menu=self.competition.is_in_menu, access_loggedin=True)
def get_sitetree_add_item(cls): """Возвращает элемент древа сайта, указывающий на страницу добавления объекта. :return: """ tree_item = item(cls.txt_form_add, cls.get_add_urlname(), access_loggedin=True) tree_item.show_on_top = True return tree_item
def basic_test(self, new_style=False, reset_cache=False): trees = ( compose_dynamic_tree((tree('dynamic_main_root', items=( item('dynamic_main_root_1', 'dynamic_main_root_1_url', url_as_pattern=False), item('dynamic_main_root_2', 'dynamic_main_root_2_url', url_as_pattern=False), )), ), target_tree_alias='main'), compose_dynamic_tree((tree('dynamic_main_sub', items=( item('dynamic_main_sub_1', 'dynamic_main_sub_1_url', url_as_pattern=False), item('dynamic_main_sub_2', 'dynamic_main_sub_2_url', url_as_pattern=False), )), ), target_tree_alias='main', parent_tree_item_alias='for_dynamic'), compose_dynamic_tree( (tree('dynamic', items=( item('dynamic_1', 'dynamic_1_url', children=(item('dynamic_1_sub_1', 'dynamic_1_sub_1_url', url_as_pattern=False), ), url_as_pattern=False), item('dynamic_2', 'dynamic_2_url', url_as_pattern=False), )), )), ) kwargs = {'reset_cache': reset_cache} if new_style: register_dynamic_trees(*trees, **kwargs) else: register_dynamic_trees(trees, **kwargs) self.sitetree._global_context = get_mock_context(path='/the_same_url/') tree_alias, sitetree_items = self.sitetree.get_sitetree('main') self.assertEqual(len(sitetree_items), 5) self.assertEqual(sitetree_items[3].title, 'dynamic_main_root_1') self.assertEqual(sitetree_items[4].title, 'dynamic_main_root_2') children = self.sitetree.get_children('main', self.t1_root) self.assertEqual(len(children), 2) tree_alias, sitetree_items = self.sitetree.get_sitetree('dynamic') self.assertEqual(len(sitetree_items), 3) children = self.sitetree.get_children('dynamic', sitetree_items[0]) self.assertEqual(len(children), 1)
def build_menu(self): current_date = datetime.date.today() child_items = [ item("Atbalstītāji", "competition:supporters %i" % self.competition.id), item("Starta saraksts", "competition:participant_list %i" % self.competition.id), ] self.build_flat_pages(self.competition, child_items) if self.competition.map_set.count(): child_items.append(item("Kartes", "competition:maps %i" % self.competition.id)) if self.competition.competition_date <= current_date: child_items.append(item("Rezultāti", "/media/results/2015_RM_bernu_rezultati.pdf", url_as_pattern=False)) return item( unicode(self.competition), "competition:competition %i" % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu, )
def get_sitetree_details_item(cls): """Возвращает элемент древа сайта, указывающий на страницу с детальной информацией об объекте. :return: """ realm_name, realm_name_plural = cls.get_names() children = [] if 'edit' in cls.allowed_views: children.append(cls.get_sitetree_edit_item()) return item('{{ %s.title }}' % realm_name, '%s %s.id' % (cls.get_details_urlname(), realm_name), children=children, in_menu=False, in_sitetree=False)
def build_sitetree(): """Строит древо сайта, исходя из доступных областей сайта. :return: """ # Потакаем поведению Django 1.7 при загрузке приложений. from sitetree.sitetreeapp import register_dynamic_trees, compose_dynamic_tree register_dynamic_trees( compose_dynamic_tree(( tree('main', 'Основное дерево', ( get_sitetree_root_item((realm.get_sitetree_items() for realm in get_realms().values())), item('Вход', 'login', access_guest=True, in_menu=False, in_breadcrumbs=False), item('Личное меню', '#', alias='personal', url_as_pattern=False, access_loggedin=True, in_menu=False, in_sitetree=False, children=( item('Профиль', 'users:details request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Настройки', 'users:edit request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Выход', 'logout', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), )), )), tree('about', 'О проекте', ( item('Что такое Python', '/promo/', description='Краткие сведения о возможностях и областях применения языка программирования Python.', url_as_pattern=False), item('О проекте', '/about/', description='Информация о проекте. О том, как, кем и для чего разрабатывается данный сайт.', url_as_pattern=False), item('Карта сайта', '/sitemap/', description='Список разделов на сайте оформленный в виде карты сайта.', url_as_pattern=False), item('Поиск по сайту', '/search/site/', description='Глобальный поиск по материалам, расположенным на сайте.', url_as_pattern=False), item('Результаты поиска «{{ search_term }}»', '/search/', url_as_pattern=False, in_menu=False, in_sitetree=False), )) )), reset_cache=True ) ReferenceRealm.build_sitetree()
def build_sitetree(): """Строит древо сайта, исходя из доступных областей сайта. :return: """ # Потакаем поведению Django 1.7 при загрузке приложений. from sitetree.sitetreeapp import register_dynamic_trees, compose_dynamic_tree register_dynamic_trees( compose_dynamic_tree(( tree('main', 'Основное дерево', ( get_sitetree_root_item((realm.get_sitetree_items() for realm in get_realms().values())), item('Вход', 'login', access_guest=True, in_menu=False, in_breadcrumbs=False), item('', '/', alias='personal', url_as_pattern=False, access_loggedin=True, in_menu=False, in_sitetree=False, children=( item('Профиль', 'users:details request.user.id', access_loggedin=True, in_breadcrumbs=True, in_sitetree=False), item('Настройки', 'users:edit request.user.id', access_loggedin=True, in_breadcrumbs=True, in_sitetree=False), item('Выход', 'logout', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), )), )), tree('about', 'О проекте', ( item('Что такое Python', '/promo/', description='Краткие сведения о возможностях и областях применения языка программирования Python.', url_as_pattern=False), item('О проекте', '/about/', description='Информация о проекте. О том, как, кем и для чего разрабатывается данный сайт.', url_as_pattern=False), item('Карта сайта', '/sitemap/', description='Список разделов на сайте оформленный в виде карты сайта.', url_as_pattern=False), item('Поиск по сайту', '/search/site/', description='Глобальный поиск по материалам, расположенным на сайте.', url_as_pattern=False), item('Результаты поиска «{{ search_term }}»', '/search/', url_as_pattern=False, in_menu=False, in_sitetree=False), )) )), reset_cache=True ) ReferenceRealm.build_sitetree()
def sitetrees_build(): items = [] for competition in Competition.objects.filter(is_in_menu=True): children = [] if competition.processing_class: _class = load_class(competition.processing_class) processing = _class(competition=competition) items.append(processing.build_menu()) else: items.append(item(unicode(competition), '#', url_as_pattern=False, children=children)) return (tree('dynamic_competition', items=items),)
def get_sitetree_root_item(children=None): """Возвращает корневой элемент динамического древа сайта. :param tuple|generator children: Дочерние динамические элементы. """ return item( 'Про Python', '/', alias='topmenu', url_as_pattern=False, description='Сайт про Питон. Различные материалы по языку программирования Python: ' 'книги, видео, справочник, сообщества, события, обсуждения и многое другое.', children=children)
def get_sitetree_items(cls): """Возвращает элементы древа сайта. :return: """ if cls.sitetree_items is None: cls.sitetree_items = item( str(cls.model._meta.verbose_name_plural), cls.get_listing_urlname(), children=[getattr(cls, 'get_sitetree_%s_item' % view_name)() for view_name in cls.allowed_views if view_name != 'edit'] ) return cls.sitetree_items
def sitetrees_build(): activate("lv") items = [] for competition in Competition.objects.filter(is_in_menu=True): children = [] if competition.processing_class: _class = load_class(competition.processing_class) processing = _class(competition=competition) items.append(processing.build_manager_menu()) else: items.append(item(str(competition), '#', url_as_pattern=False, children=children, access_loggedin=True)) return (tree('dynamic_competition_manager', items=items),)
def build_menu(self, lang): activate(lang) current_date = datetime.date.today() child_items = [ item(_('Start List'), 'competition:participant_list %i' % self.competition.id), item(_("Maps"), 'competition:maps %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items, lang) if self.competition.competition_date <= current_date + datetime.timedelta( days=1): child_items.append( item( _("Results"), 'competition:result_distance_list %i' % self.competition.id)) return item(str(self.competition), 'competition:competition %i' % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu)
def get_sitetree_items(cls): """Возвращает элементы древа сайта. :return: """ if cls.sitetree_items is None: cls.sitetree_items = item( str(cls.model._meta.verbose_name_plural), cls.get_listing_urlname(), children=[ getattr(cls, 'get_sitetree_%s_item' % view_name)() for view_name in cls.allowed_views if view_name != 'edit' ]) return cls.sitetree_items
def build_menu(self): current_date = datetime.date.today() child_items = [ item('Atbalstītāji', 'competition:supporters %i' % self.competition.id), item('Komandas', 'competition:team %i' % self.competition.id, children=[ item('{{ object }}', 'competition:team %i object.id' % self.competition.id, in_menu=False), ]), item('Starta saraksts', 'competition:participant_list %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items) if self.competition.map_set.count(): child_items.append(item('Kartes', 'competition:maps %i' % self.competition.id)) if self.competition.competition_date <= current_date: child_items.append(item('Rezultāti', 'competition:result_distance_list %i' % self.competition.id)) child_items.append(item('Komandu rezultāti', 'competition:result_team_by_name %i' % self.competition.id)) return item(unicode(self.competition), '#', url_as_pattern=False, children=child_items, in_menu=self.competition.is_in_menu)
def test_access_restricted(self): # Test that default is False i0 = item('root', 'url', permissions=1) self.assertEqual(i0.access_restricted, False) # True is respected i1 = item('root', 'url', access_restricted=True, permissions=1) self.assertEqual(i1.access_restricted, True) # False is respected i2 = item('root', 'url', access_restricted=False, permissions=1) self.assertEqual(i2.access_restricted, False) # None => True w/ permission i3 = item('root', 'url', access_restricted=None, permissions=1) self.assertEqual(i3.access_restricted, True) # None => False w/o permission i3 = item('root', 'url', access_restricted=None, permissions=[]) self.assertEqual(i3.access_restricted, False) # Invalid value raises error self.assertRaises( ValueError, item, 'root', 'url', access_restricted='invalid')
def build_sitetree(): """Строит древо сайта, исходя из доступных областей сайта. :return: """ # Потакаем поведению Django 1.7 при загрузке приложений. from sitetree.sitetreeapp import register_dynamic_trees, compose_dynamic_tree register_dynamic_trees( compose_dynamic_tree(( tree('main', 'Основное дерево', ( item('Про Python', '/', alias='topmenu', url_as_pattern=False, description='Материалы по языку программирования Python. Книги, видео, сообщества ' 'и многое другое.', children=(realm.get_sitetree_items() for realm in get_realms().values())), item('Вход', 'login', access_guest=True, in_menu=False, in_breadcrumbs=False), item('Личное меню', '#', alias='personal', url_as_pattern=False, access_loggedin=True, in_menu=False, in_sitetree=False, children=( item('Профиль', 'users:details request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Настройки', 'users:edit request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Выход', 'logout', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), )), )), tree('about', 'О проекте', ( item('Что такое Python', '/promo/', description='Краткие сведения о языке программирования Python.', url_as_pattern=False), item('О проекте', '/about/', description='Информация о проекте pythonz.net.', url_as_pattern=False), item('Карта сайта', '/sitemap/', description='Список разделов проекта pythonz.net.', url_as_pattern=False), item('Поиск по сайту', '/search/', url_as_pattern=False), )) )), reset_cache=True )
def sitetrees_build(lang): items = [] for competition in Competition.objects.filter(is_in_menu=True): children = [] if competition.processing_class: _class = load_class(competition.processing_class) processing = _class(competition=competition) items.append(processing.build_menu(lang)) else: items.append( item(str(competition), '#', url_as_pattern=False, children=children)) return tree('dynamic_competition', items=items),
def test_basic(self): register_dynamic_trees(( compose_dynamic_tree((tree('dynamic_main_root', items=( item('dynamic_main_root_1', 'dynamic_main_root_1_url', url_as_pattern=False), item('dynamic_main_root_2', 'dynamic_main_root_2_url', url_as_pattern=False), )), ), target_tree_alias='main'), compose_dynamic_tree((tree('dynamic_main_sub', items=( item('dynamic_main_sub_1', 'dynamic_main_sub_1_url', url_as_pattern=False), item('dynamic_main_sub_2', 'dynamic_main_sub_2_url', url_as_pattern=False), )), ), target_tree_alias='main', parent_tree_item_alias='for_dynamic'), compose_dynamic_tree( (tree('dynamic', items=( item('dynamic_1', 'dynamic_1_url', children=(item('dynamic_1_sub_1', 'dynamic_1_sub_1_url', url_as_pattern=False), ), url_as_pattern=False), item('dynamic_2', 'dynamic_2_url', url_as_pattern=False), )), )), )) self.sitetree._global_context = get_mock_context(path='/the_same_url/') tree_alias, sitetree_items = self.sitetree.get_sitetree('main') self.assertEqual(len(sitetree_items), 5) self.assertEqual(sitetree_items[3].title, 'dynamic_main_root_1') self.assertEqual(sitetree_items[4].title, 'dynamic_main_root_2') children = self.sitetree.get_children('main', self.t1_root) self.assertEqual(len(children), 2) tree_alias, sitetree_items = self.sitetree.get_sitetree('dynamic') self.assertEqual(len(sitetree_items), 3) children = self.sitetree.get_children('dynamic', sitetree_items[0]) self.assertEqual(len(children), 1)
def basic_test(self, new_style=False, reset_cache=False): trees = ( compose_dynamic_tree(( tree('dynamic_main_root', items=( item('dynamic_main_root_1', 'dynamic_main_root_1_url', url_as_pattern=False), item('dynamic_main_root_2', 'dynamic_main_root_2_url', url_as_pattern=False), )), ), target_tree_alias='main'), compose_dynamic_tree(( tree('dynamic_main_sub', items=( item('dynamic_main_sub_1', 'dynamic_main_sub_1_url', url_as_pattern=False), item('dynamic_main_sub_2', 'dynamic_main_sub_2_url', url_as_pattern=False), )), ), target_tree_alias='main', parent_tree_item_alias='for_dynamic'), compose_dynamic_tree(( tree('dynamic', items=( item('dynamic_1', 'dynamic_1_url', children=( item('dynamic_1_sub_1', 'dynamic_1_sub_1_url', url_as_pattern=False), ), url_as_pattern=False), item('dynamic_2', 'dynamic_2_url', url_as_pattern=False), )), )), ) kwargs = { 'reset_cache': reset_cache } if new_style: register_dynamic_trees(*trees, **kwargs) else: register_dynamic_trees(trees, **kwargs) self.sitetree._global_context = get_mock_context(path='/the_same_url/') tree_alias, sitetree_items = self.sitetree.get_sitetree('main') self.assertEqual(len(sitetree_items), 5) self.assertEqual(sitetree_items[3].title, 'dynamic_main_root_1') self.assertEqual(sitetree_items[4].title, 'dynamic_main_root_2') children = self.sitetree.get_children('main', self.t1_root) self.assertEqual(len(children), 2) tree_alias, sitetree_items = self.sitetree.get_sitetree('dynamic') self.assertEqual(len(sitetree_items), 3) children = self.sitetree.get_children('dynamic', sitetree_items[0]) self.assertEqual(len(children), 1)
def build_menu(self, lang): activate(lang) current_date = datetime.date.today() child_items = [ item(_("Teams"), 'competition:team %i' % self.competition.id, children=[ item('{{ object }}', 'competition:team %i object.id' % self.competition.id, in_menu=False), ]), item(_("Start List"), 'competition:participant_list %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items, lang) if self.competition.map_set.count(): child_items.append( item(_("Maps"), 'competition:maps %i' % self.competition.id)) if self.competition.competition_date <= current_date + datetime.timedelta( days=1): child_items.append( item( _("Results"), 'competition:result_distance_list %i' % self.competition.id)) child_items.append( item( _("Team Results"), 'competition:result_team_by_name %i' % self.competition.id)) if self.competition_id == 35: child_items.append( item( _("Team Results betw. distances"), 'competition:result_team_by_name_btw_distances %i' % self.competition.id)) return item(str(self.competition), 'competition:competition %i' % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu)
def build_menu(self, lang): activate(lang) current_date = datetime.date.today() child_items = [ item(_("Teams"), 'competition:team %i' % self.competition.id, children=[ item('{{ object }}', 'competition:team %i object.id' % self.competition.id, in_menu=False), ]), item(_("Start List"), 'competition:participant_list %i' % self.competition.id), ] self.build_flat_pages(self.competition, child_items, lang) if self.competition.map_set.count(): child_items.append(item(_("Maps"), 'competition:maps %i' % self.competition.id)) if self.competition.competition_date <= current_date + datetime.timedelta(days=1): child_items.append(item(_("Results"), 'competition:result_distance_list %i' % self.competition.id)) child_items.append(item(_("Team Results"), 'competition:result_team_by_name %i' % self.competition.id)) if self.competition_id == 35: child_items.append(item(_("Team Results betw. distances"), 'competition:result_team_by_name_btw_distances %i' % self.competition.id)) return item(str(self.competition), 'competition:competition %i' % self.competition.id, url_as_pattern=True, children=child_items, in_menu=self.competition.is_in_menu)
def get_sitetree_items(cls): """Возвращает элементы древа сайта. :return: """ if cls.sitetree_items is None: children = [] for view_name in cls.allowed_views: if view_name != 'edit': items = getattr(cls, 'get_sitetree_%s_item' % view_name)() if not isinstance(items, list): items = [items] children.extend(items) cls.sitetree_items = item( cls.view_listing_title or str(cls.model._meta.verbose_name_plural), cls.get_listing_urlname(), description=cls.view_listing_description, children=children ) return cls.sitetree_items
def ralph_item(*args, **kwargs): kwargs.setdefault('access_loggedin', True) # create access_by_perms entries by iterating through all children # and extracting app and model name from it # permission is created in '<app>.{add|change|view}_<model>' format access_by_perms = kwargs.get('access_by_perms', []) if isinstance(access_by_perms, (str, int)): access_by_perms = [access_by_perms] for child in kwargs.get('children', []): if hasattr(child, '_model') and hasattr(child, '_app'): model = child._model.lower() app = child._app.lower() access_by_perms.extend([ '{}.add_{}'.format(app, model), '{}.change_{}'.format(app, model), '{}.view_{}'.format(app, model), ]) elif hasattr(child, 'permissions'): access_by_perms.extend(child.permissions) if access_by_perms: kwargs['access_by_perms'] = list(set(access_by_perms)) return item(*args, **kwargs)
def test_basic(self): register_dynamic_trees(( compose_dynamic_tree(( tree('dynamic_main_root', items=( item('dynamic_main_root_1', 'dynamic_main_root_1_url', url_as_pattern=False), item('dynamic_main_root_2', 'dynamic_main_root_2_url', url_as_pattern=False), )), ), target_tree_alias='main'), compose_dynamic_tree(( tree('dynamic_main_sub', items=( item('dynamic_main_sub_1', 'dynamic_main_sub_1_url', url_as_pattern=False), item('dynamic_main_sub_2', 'dynamic_main_sub_2_url', url_as_pattern=False), )), ), target_tree_alias='main', parent_tree_item_alias='for_dynamic'), compose_dynamic_tree(( tree('dynamic', items=( item('dynamic_1', 'dynamic_1_url', children=( item('dynamic_1_sub_1', 'dynamic_1_sub_1_url', url_as_pattern=False), ), url_as_pattern=False), item('dynamic_2', 'dynamic_2_url', url_as_pattern=False), )), )), )) self.sitetree._global_context = get_mock_context(path='/the_same_url/') tree_alias, sitetree_items = self.sitetree.get_sitetree('main') self.assertEqual(len(sitetree_items), 5) self.assertEqual(sitetree_items[3].title, 'dynamic_main_root_1') self.assertEqual(sitetree_items[4].title, 'dynamic_main_root_2') children = self.sitetree.get_children('main', self.t1_root) self.assertEqual(len(children), 2) tree_alias, sitetree_items = self.sitetree.get_sitetree('dynamic') self.assertEqual(len(sitetree_items), 3) children = self.sitetree.get_children('dynamic', sitetree_items[0]) self.assertEqual(len(children), 1)
def get_sitetree_details_item(cls): return item( 'Категория «{{ category.parent.title }} — {{ category.title }}»', 'categories:details category.id', in_menu=False, in_sitetree=False)
def get_sitetree_details_item(cls): return item('{{ user.get_display_name }}', 'users:details user.id', in_menu=False, in_sitetree=False)
# -*- coding: utf-8 -*- from sitetree.utils import tree, item sitetrees = ( tree('main', title='Main Menu', items=[ item('Home', 'home', in_menu=True, in_sitetree=True, url_as_pattern=True, children=[ item('About', 'about', in_menu=True, in_sitetree=True, url_as_pattern=True), item('Contact', 'contact', in_menu=True, in_sitetree=True, url_as_pattern=True), ]), # item('Test', 'test', in_menu=True, in_sitetree=True, url_as_pattern=True, access_loggedin=True), item('Articles', 'articles', in_menu=True, in_sitetree=True, url_as_pattern=True), item('News', 'news', in_menu=True, in_sitetree=True, url_as_pattern=True), # item('Articles', 'articles-listing', children=[ # item('{{ article.title }}', 'articles-details', in_menu=False, in_sitetree=False), # item('Add article', 'article-add', access_by_perms=['main.allow_article_add']), # item('Edit: {{ article.title }}', 'articles-edit', in_menu=False, in_sitetree=False) # ]) ]), )
def test_perm_obj_permissions(self): perm = Permission.objects.all()[0] i1 = item('root', 'url', permissions=perm) self.assertEqual(i1.permissions, [perm])
def test_valid_string_permissions(self): perm = Permission.objects.all()[0] perm_name = "{}.{}".format(perm.content_type.app_label, perm.codename) i1 = item('root', 'url', permissions=perm_name) self.assertEqual(i1.permissions, [perm])
items=[ # Then define items and their children with `item` function. item( 'Главная', '/', url_as_pattern=False, children=[ item('Авторизация', '/auth/signin/', url_as_pattern=False), item('Регистрация', '/register/', url_as_pattern=False), item('Администрирование', '/admin_panel/', url_as_pattern=False, children=[ item('{{ object.username }}', 'admin_panel:user_detail object.id', url_as_pattern=True, children=[ item('Обновление', 'admin_panel:user_update object.id', url_as_pattern=True), item('Удалить', 'admin_panel:user_delete object.id', url_as_pattern=True) ]), item('Создание пользователя', 'admin_panel:user_create', url_as_pattern=True) ]) ]) ]), # ... You can define more than one tree for your app.
from sitetree.utils import item, tree sitetrees = ( tree( "maintree", "Hlavní menu", items=[ item("Zapsat jízdu!", "switch_rides_view", title_en="Take a Ride!"), item( "Profil", "edit_profile_detailed", title_en="Profile", children=[ item( "Změnit osobní údaje", "edit_profile_detailed", title_en="Change Personal Details", ), item("Změnit tým", "zmenit_tym", title_en="Change Team"), item("Triko", "zmenit_triko", title_en="Change T-Shirts"), item("Platba", "typ_platby", title_en="Payment"), item("Aplikace", "application", title_en="Applications"), ], ), item("Tým", "team_members", title_en="Team"), item("Mapa", "map", title_en="Map"), item( "Výsledky", None, title_en="Results",
def build_sitetree(): """Строит древо сайта, исходя из доступных областей сайта. :return: """ # Потакаем поведению Django 1.7 при загрузке приложений. from sitetree.sitetreeapp import register_dynamic_trees, compose_dynamic_tree register_dynamic_trees(compose_dynamic_tree( (tree('main', 'Основное дерево', ( item( 'Про Python', '/', alias='topmenu', url_as_pattern=False, description= 'Материалы по языку программирования Python. Книги, видео, сообщества ' 'и многое другое.', children=(realm.get_sitetree_items() for realm in get_realms().values())), item('Вход', 'login', access_guest=True, in_menu=False, in_breadcrumbs=False), item('Личное меню', '#', alias='personal', url_as_pattern=False, access_loggedin=True, in_menu=False, in_sitetree=False, children=( item('Профиль', 'users:details request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Настройки', 'users:edit request.user.id', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), item('Выход', 'logout', access_loggedin=True, in_breadcrumbs=False, in_sitetree=False), )), )), tree('about', 'О проекте', ( item('Что такое Python', '/promo/', description= 'Краткие сведения о языке программирования Python.', url_as_pattern=False), item('О проекте', '/about/', description='Информация о проекте pythonz.net.', url_as_pattern=False), item('Карта сайта', '/sitemap/', description='Список разделов проекта pythonz.net.', url_as_pattern=False), item('Поиск по сайту', '/search/site/', url_as_pattern=False), item('Результаты поиска «{{ search_term }}»', '/search/', url_as_pattern=False, in_menu=False, in_sitetree=False), )))), reset_cache=True)
from sitetree.utils import item from core.utils.tree import G3Wtree sitetrees = ( # Define a tree with `tree` function. G3Wtree('filemanager_sidebar_right', title='File Manager sidebar right', module='filemanager', items=[ item('FILE MANAGER', '#', type_header=True), item('Files', 'filemanager-home', icon_css_class='fa fa-database', description='Accedi al file manager...'), ]), G3Wtree('filemanager_sidebar_right_en', title='STRESS navabar', module='filemanager', items=[ item('FILE MANAGER', '#', type_header=True), item('Files', 'filemanager-home', icon_css_class='fa fa-database', description='Go to file manager application...'), ]), )
from sitetree.utils import tree, item # Be sure you defined `sitetrees` in your module. sitetrees = ( # Define a tree with `tree` function. tree('metab_all', items=[ # Then define items and their children with `item` function. item('METAB', 'add_run', children=[ item('Add run', 'add_run', in_menu=True, in_sitetree=True), item('Add File to Run','upload_mfile', in_menu=True, in_sitetree=True), item('Batch upload of files', 'upload_mfiles_batch', in_menu=True, in_sitetree=True), item('Show all metabolomics files', 'mfile_summary', in_menu=True, in_sitetree=True), item('Show LC-MS datasets', 'cpeakgroupmeta_summary', in_menu=True, in_sitetree=True), item('Fragmentation search', 'frag_search', in_menu=True, in_sitetree=True), item('Mass search', 'mass_search', in_menu=True, in_sitetree=True), item('Upload library spectra', 'library_upload', in_menu=True, in_sitetree=True) ]) ]), # ... You can define more than one tree for your app. )
from sitetree.utils import item from core.utils.tree import G3Wtree # Be sure you defined `sitetrees` in your module. sitetrees = ( # Define a tree with `tree` function. G3Wtree( 'qdjango', title='Qdjango', module='qdjango', items=[ # Then define items and their children with `item` function. item('Aggiungi progetto QGIS {{ group.slug }}', 'qdjango-project-add group.slug', in_menu=False, url_as_pattern=True, icon_css_class='fa fa-plus', access_by_perms=['qdjango.add_project']), item('Agg. progetto QGIS {{ group.slug }} {{ object.slug }}', 'qdjango-project-update group.slug object.slug', in_menu=False, url_as_pattern=True, icon_css_class='fa fa-edit'), item( 'Lista strati progetto QGIS {{ group.slug }} {{ object.slug }}', 'qdjango-project-layers-list group.slug project_slug', in_menu=False, url_as_pattern=True, icon_css_class='fa fa-edit') ]), G3Wtree(