예제 #1
0
파일: base.py 프로젝트: pombredanne/djpcms
 def _stream(self):
     if self.rendered:
         raise StopIteration()
     self.rendered = True
     data = []
     for k,v in self._attributes:
         v = Variable.cssvalue(v)
         if v is not None:
             data.append('    {0}: {1};'.format(k,v))
     if data:
         # yield the element
         if self.comment:
             yield '/*---------------------------------------------------'
             yield self.comment
             yield '---------------------------------------------------*/'
         yield self.tag + ' {'
         for s in data:
             yield s
         yield '}\n'
     # yield mixins and children
     for child_list in itervalues(self._children):
         child = child_list[0]
         for c in child_list[1:]:
             child.extend(c)
         for s in child._stream():
             yield s
예제 #2
0
파일: tree.py 프로젝트: pombredanne/djpcms
    def __init__(self, views, site = None):
        self.site = site
        m = {}
        for view in views:
            route = view.route
            path = route.path
            if path in m:
                raise ValueError('There seems to be multiple values for\
 "{0}" path'.format(path))
            node = Node(view)
            m[node.path] = node
        if not m:
            raise ValueError('No views')
        # order by level
        nodes = sorted(itervalues(m), key = lambda x : x.level)
        start = nodes.pop(0)
        parent_level = start.level
        self.roots = roots = [start]
        for node in nodes:
            if node.level == parent_level:
                roots.append(node)
            else:
                if node.level > parent_level+1:
                    # we go up a level
                    parent_level += 1
                route = node.route
                while route.level > parent_level:
                    route,bit = route.split()
                    if route.path in m:
                        node.parent = m[route.path]
                        break
        super(NRT,self).__init__(m)
예제 #3
0
    def __init__(self, route, model=None, editavailable=None,
                 list_display_links=None, object_display=None,
                 related_field=None, url_bits_mapping=None,
                 routes=None, always_load_fields=None, **kwargs):
        self.model = model
        ResolverMixin.__init__(self, route)
        RendererMixin.__init__(self, **kwargs)
        if routes:
            base_routes = OrderedDict(((r.name,r) for r in self.base_routes))
            base_routes.update(((r.name,r) for r in routes))
            self.base_routes = list(itervalues(base_routes))
        else:
            self.base_routes = list(self.base_routes)
        if not self.pagination:
            self.pagination = html.Pagination()
        self.object_views = []
        self.model_url_bits = ()
        self.editavailable = editavailable if editavailable is not None else\
                                self.editavailable
        self.list_display_links = list_display_links or self.list_display_links
        self.related_field = related_field or self.related_field
        self.always_load_fields = always_load_fields or self.always_load_fields
        if self.parent_view and not self.related_field:
            raise UrlException('Parent view "{0}" specified in\
 application {1} without a "related_field".'.format(self.parent_view,self))
        self.object_display = object_display or self.object_display
        self.url_bits_mapping = self.url_bits_mapping or url_bits_mapping
        self.clear()
예제 #4
0
 def _all_ordered_choices(self, bfield, selected):
     options = OrderedDict(((opt.attr('value'), opt) for opt in\
                                self._all_choices(bfield, selected)))
     for value in selected:
         opt = options.pop(value, None)
         if opt is not None:
             yield opt
     for opt in itervalues(options):
         yield opt
예제 #5
0
파일: tree.py 프로젝트: pombredanne/djpcms
 def __init__(self, tree, pages = None):
     # create the tree for flat pages
     self.tree_pages = tree_pages = {}
     if pages:
         flat_pages_trees = {}
         for page in pages:
             node = tree.get(page.url)
             if node:
                 tree_pages[node.path] = page
             else:
                 flat_pages_trees[page.url] = page
         if flat_pages_trees:
             flat_pages_trees = NRT(itervalues(flat_pages_trees))
             super(DjpcmsTree,self).__init__(flat_pages_trees, tree)
         else:
             super(DjpcmsTree,self).__init__(tree)
     else:
         super(DjpcmsTree,self).__init__(tree)
예제 #6
0
def get_declared_application_routes(bases, attrs):
    """Create a list of Application views instances from the passed
in 'attrs', plus any similar fields on the base classes (in 'bases')."""
    inherit = attrs.pop('inherit', True)
    pviews = {}
    if inherit:
        for base in reversed(bases):
            if hasattr(base, 'base_routes') and base.base_routes:
                pviews.update(((r.name, r) for r in base.base_routes))
    for app_name, obj in list(attrs.items()):
        if hasattr(obj, '__class__'):
            if isinstance(obj, RouteMixin):
                r = attrs.pop(app_name)
                r.name = app_name
                if r.name in pviews:
                    # pick up the same order number
                    r.route_ordering = pviews[r.name].route_ordering
                pviews[r.name] = r
    return list(sorted(itervalues(pviews), key= lambda x: x.route_ordering))
예제 #7
0
 def _addroutes(self):
     # Clone base_routes
     routes = []
     for route in self.base_routes:
         if not isinstance(route, RendererMixin):
             raise UrlException('Route "{0}" is not a view instance. '\
             'Error in constructing application "{2}".'.format(route,self))
         route = deepcopy(route)
         route.code = self.name + SPLITTER + route.name
         routes.append(route)
     #and now set the routes
     processed = self.views
     while routes:
         N = len(routes)
         for idx, route in enumerate(routes):
             if route.parent_view:
                 if route.parent_view in processed:
                     p = processed[route.parent_view]
                     try:
                         route.rel_route = p.rel_route + route.rel_route
                     except Exception as e:
                         raise UrlException('Error while constructing '\
                                     'application {0}. {1}'.format(self,e))
                 else:
                     continue
             processed[route.name] = route
             routes.pop(idx)
             break
         if len(routes) == N:
             raise UrlException('Cannot find parent views in "{0}"'\
                                 .format(self.__repr__()))
     # Add routes sorted by creation counter
     for route in sorted(itervalues(processed),
                         key=lambda x: x.route_ordering):
         if route.path == '/':
             self.root_view = route
         if isinstance(route, View) and route.object_view:
             self.object_views.append(route)
         self.routes.append(route)
예제 #8
0
파일: tree.py 프로젝트: pombredanne/djpcms
 def nodes(self):
     return itervalues(self)
예제 #9
0
파일: base.py 프로젝트: pombredanne/djpcms
 def allchildren(self):
     return itervalues(self.children)
예제 #10
0
 def extend(self, elem):
     '''Extend by adding *elem* attributes and children.'''
     self._attributes.extend(elem._attributes)
     for child_list in itervalues(elem._children):
         for child in tuple(child_list): 
             child._set_parent(self) 
예제 #11
0
 def css_children(self):
     '''Generator of all direct :class:`css` children'''
     for cl in itervalues(self._children):
         if isinstance(cl, list):
             for c in cl:
                 yield c