コード例 #1
0
ファイル: resource.py プロジェクト: vivek2010/django_bolts
 def __init__(self,parent=None,url_prefix=None):
     self.parent = parent                     
     if url_prefix is not None: self.url_prefix = url_prefix
     classes= inspect.getmembers(self.__class__, lambda a : inspect.isclass(a) and issubclass(a,ChildResource) )        
     for name,cls in classes:            
         setattr(self,name,cls(parent=self,url_prefix=name))
     self.helper = ListHelper(sorters=self.sorters,filters=self.filters)
コード例 #2
0
ファイル: resource.py プロジェクト: vivek2010/django_bolts
class ResourceBase(object):
    
    page_size = 25
    template_prefix = None
    url_prefix = None      
    verbose_name = None
    verbose_name_plural = None
    abstract = False    
    
    model = None
    
    filters = None
    
    sorters = None
    
    def __init__(self,parent=None,url_prefix=None):
        self.parent = parent                     
        if url_prefix is not None: self.url_prefix = url_prefix
        classes= inspect.getmembers(self.__class__, lambda a : inspect.isclass(a) and issubclass(a,ChildResource) )        
        for name,cls in classes:            
            setattr(self,name,cls(parent=self,url_prefix=name))
        self.helper = ListHelper(sorters=self.sorters,filters=self.filters)
        
    def get_template_name(self,view,prefix=None):        
        return "%s/%s.html"%(prefix or self.template_prefix,view)
    
    def get_view_name(self,view):
        rootname = self.get_url_name()            
        fname = view.__name__ if inspect.ismethod(view) else view                
        fname = cutils.camel_to_underscore(fname).lower()                        
        name = join_with_underscore(rootname,fname)   
        return name
    
    def get_view_url(self,view):
        rootname = self.get_url_name()           
        func = view if inspect.ismethod(view) else getattr(self,view)
        rx = func.rx or '' 
        if rx.startswith("-"):
            path = rx[1:]
        else:   
            fname = func.name
            if fname.startswith('-'): parts = [fname[1:]]    
            else: parts = [ a for a in (rootname,func.name,rx) if a ]                             
            if parts:
                path = '/'.join(parts).replace('_', '/')
            else:
                path = ''
        if path:
            if path[-1] == '-': path = path[:-1]
            else: path += '/'             
        path = "^%s$"%path        
        return path
    
    def get_url_name(self):
        basename = self.parent.get_url_name() if self.parent else ''
        return join_with_underscore(self.url_prefix,basename)         
    
    def get_url_pattern(self):
        rsrc = self
        
        members = inspect.getmembers(rsrc)
        
        urlpatterns = []          
        
        result = patterns('')
        for fname,func in members:                                 
            if inspect.ismethod(func) and hasattr(func,'__view__'):                
                fname = cutils.camel_to_underscore(fname).lower()                
                name = self.get_view_name(func)
                path = self.get_view_url(func)
                                
                u = url( path, getattr(rsrc,fname) ,name=name)
                            
                urlpatterns.append(u)
                
            elif isinstance(func,ChildResource):                        
                result+= func.get_url_pattern(func)
                            
        return result + urlpatterns
    
    def paginate(self,request,object_list=None,ctx=None):
        object_list = object_list or self.model.objects.all()
        return self.helper.process(request, object_list, ctx or {})