sitetree/sitetreeapp.py
def get_sitetree(self, alias):
        """Gets site tree items from the given site tree.
        Caches result to dictionary.
        Returns (tree alias, tree items) tuple.

        :param str|unicode alias:
        :rtype: tuple
        """
        cache_ = self.cache
        get_cache_entry = cache_.get_entry
        set_cache_entry = cache_.set_entry

        caching_required = False

        if not self.current_app_is_admin():
            # We do not need i18n for a tree rendered in Admin dropdown.
            alias = self.resolve_tree_i18n_alias(alias)

        sitetree = get_cache_entry('sitetrees', alias)

        if not sitetree:
            if DYNAMIC_ONLY:
                sitetree = []

            else:
                sitetree = (
                    MODEL_TREE_ITEM_CLASS.objects.
                    select_related('parent', 'tree').
                    prefetch_related('access_permissions__content_type').
                    filter(tree__alias__exact=alias).
                    order_by('parent__sort_order', 'sort_order'))

            sitetree = self.attach_dynamic_tree_items(alias, sitetree)
            set_cache_entry('sitetrees', alias, sitetree)
            caching_required = True

        parents = get_cache_entry('parents', alias)
        if not parents:
            parents = defaultdict(list)
            for item in sitetree:
                parent = getattr(item, 'parent')
                parents[parent].append(item)
            set_cache_entry('parents', alias, parents)

        # Prepare items by ids cache if needed.
        if caching_required:
            # We need this extra pass to avoid future problems on items depth calculation.
            cache_update = cache_.update_entry_value
            for item in sitetree:
                cache_update('items_by_ids', alias, {item.id: item})

        url = self.url
        calculate_item_depth = self.calculate_item_depth

        for item in sitetree:
            if caching_required:
                item.has_children = False

                if not hasattr(item, 'depth'):
                    item.depth = calculate_item_depth(alias, item.id)
                item.depth_range = range(item.depth)

                # Resolve item permissions.
                if item.access_restricted:
                    permissions_src = (
                        item.permissions if getattr(item, 'is_dynamic', False)
                        else item.access_permissions.all())

                    item.perms = set(
                        ['%s.%s' % (perm.content_type.app_label, perm.codename) for perm in permissions_src])

            # Contextual properties.
            item.url_resolved = url(item)
            item.title_resolved = LazyTitle(item.title) if VARIABLE_TAG_START in item.title else item.title
            item.is_current = False
            item.in_current_branch = False

        # Get current item for the given sitetree.
        self.get_tree_current_item(alias)

        # Save sitetree data into cache if needed.
        if caching_required:
            cache_.save()

        return alias, sitetree
def get_sitetree(self, alias):
        """Gets site tree items from the given site tree.
        Caches result to dictionary.
        Returns (tree alias, tree items) tuple.

        :param str|unicode alias:
        :rtype: tuple
        """
        cache_ = self.cache
        get_cache_entry = cache_.get_entry
        set_cache_entry = cache_.set_entry

        caching_required = False

        if not self.current_app_is_admin():
            # We do not need i18n for a tree rendered in Admin dropdown.
            alias = self.resolve_tree_i18n_alias(alias)

        sitetree = get_cache_entry('sitetrees', alias)

        if not sitetree:
            if DYNAMIC_ONLY:
                sitetree = []

            else:
                sitetree = (
                    MODEL_TREE_ITEM_CLASS.objects.
                    select_related('parent', 'tree').
                    prefetch_related('access_permissions__content_type').
                    filter(tree__alias__exact=alias).
                    order_by('parent__sort_order', 'sort_order'))

            sitetree = self.attach_dynamic_tree_items(alias, sitetree)
            set_cache_entry('sitetrees', alias, sitetree)
            caching_required = True

        parents = get_cache_entry('parents', alias)
        if not parents:
            parents = defaultdict(list)
            for item in sitetree:
                parent = getattr(item, 'parent')
                parents[parent].append(item)
            set_cache_entry('parents', alias, parents)

        # Prepare items by ids cache if needed.
        if caching_required:
            # We need this extra pass to avoid future problems on items depth calculation.
            cache_update = cache_.update_entry_value
            for item in sitetree:
                cache_update('items_by_ids', alias, {item.id: item})

        url = self.url
        calculate_item_depth = self.calculate_item_depth

        for item in sitetree:
            if caching_required:
                item.has_children = False

                if not hasattr(item, 'depth'):
                    item.depth = calculate_item_depth(alias, item.id)
                item.depth_range = range(item.depth)

                # Resolve item permissions.
                if item.access_restricted:
                    permissions_src = (
                        item.permissions if getattr(item, 'is_dynamic', False)
                        else item.access_permissions.all())

                    item.perms = set(
                        ['%s.%s' % (perm.content_type.app_label, perm.codename) for perm in permissions_src])

            # Contextual properties.
            item.url_resolved = url(item)
            item.title_resolved = LazyTitle(item.title) if VARIABLE_TAG_START in item.title else item.title
            item.is_current = False
            item.in_current_branch = False

        # Get current item for the given sitetree.
        self.get_tree_current_item(alias)

        # Save sitetree data into cache if needed.
        if caching_required:
            cache_.save()

        return alias, sitetree
def get_sitetree ( self , alias ) : cache_ = self . cache get_cache_entry = cache_ . get_entry set_cache_entry = cache_ . set_entry caching_required = False if not self . current_app_is_admin ( ) : # We do not need i18n for a tree rendered in Admin dropdown. alias = self . resolve_tree_i18n_alias ( alias ) sitetree = get_cache_entry ( 'sitetrees' , alias ) if not sitetree : if DYNAMIC_ONLY : sitetree = [ ] else : sitetree = ( MODEL_TREE_ITEM_CLASS . objects . select_related ( 'parent' , 'tree' ) . prefetch_related ( 'access_permissions__content_type' ) . filter ( tree__alias__exact = alias ) . order_by ( 'parent__sort_order' , 'sort_order' ) ) sitetree = self . attach_dynamic_tree_items ( alias , sitetree ) set_cache_entry ( 'sitetrees' , alias , sitetree ) caching_required = True parents = get_cache_entry ( 'parents' , alias ) if not parents : parents = defaultdict ( list ) for item in sitetree : parent = getattr ( item , 'parent' ) parents [ parent ] . append ( item ) set_cache_entry ( 'parents' , alias , parents ) # Prepare items by ids cache if needed. if caching_required : # We need this extra pass to avoid future problems on items depth calculation. cache_update = cache_ . update_entry_value for item in sitetree : cache_update ( 'items_by_ids' , alias , { item . id : item } ) url = self . url calculate_item_depth = self . calculate_item_depth for item in sitetree : if caching_required : item . has_children = False if not hasattr ( item , 'depth' ) : item . depth = calculate_item_depth ( alias , item . id ) item . depth_range = range ( item . depth ) # Resolve item permissions. if item . access_restricted : permissions_src = ( item . permissions if getattr ( item , 'is_dynamic' , False ) else item . access_permissions . all ( ) ) item . perms = set ( [ '%s.%s' % ( perm . content_type . app_label , perm . codename ) for perm in permissions_src ] ) # Contextual properties. item . url_resolved = url ( item ) item . title_resolved = LazyTitle ( item . title ) if VARIABLE_TAG_START in item . title else item . title item . is_current = False item . in_current_branch = False # Get current item for the given sitetree. self . get_tree_current_item ( alias ) # Save sitetree data into cache if needed. if caching_required : cache_ . save ( ) return alias , sitetree
Gets site tree items from the given site tree.
        Caches result to dictionary.
        Returns (tree alias, tree items) tuple.

        :param str|unicode alias:
        :rtype: tuple
Gets site tree items from the given site tree . Caches result to dictionary . Returns ( tree alias tree items ) tuple .