Example #1
0
def pynamespace(module, filterfn=None):
    """if ``module`` is string import module and collect all attributes
    defined in the module that do not start with `_`. If ``__all__`` is
    defined, only fetch attributes listed under __all__. Additionally apply
    ``filterfn`` function and return a dictionary of namespace from module."""
    module = h.string_import(module) if isinstance(module, str) else module
    d = { k:getattr(module,k) for k in getattr(module,'__all__',vars(module)) }
    [ d.pop(k) for k,v in d.items() if filterfn(k, v) ] if filterfn else None
    return d
 def _resourceof( self, request, viewd ):
     """For resolved view ``viewd``, fetch the resource-callable."""
     res = viewd['resource']
     self.pa.logdebug( "%r resource callable: %r " % (request.uri, res) )
     if isinstance( res, str ) and isplugin( res ) :
         return self.qp( IHTTPResource, res )
     elif isinstance( res, str ) :
         return h.string_import( res )
     else :
         return res
 def _viewof( self, request, name, viewd ):
     """For resolved view ``viewd``, fetch the view-callable."""
     v = viewd['view']
     self.pa.logdebug( "%r view callable: %r " % (request.uri, v) )
     if isinstance(v, str) and isplugin(v) :
         view = self.qp( IHTTPView, v, name, viewd )
     elif isinstance( v, str ):
         view = h.string_import( v )
     else :
         view = v
     return getattr( view, viewd['attr'] ) if viewd['attr'] else view
    def onboot( self ):
        """:meth:`pluggapps.web.interfaces.IHTTPRouter.onboot` interface
        method. Deriving class must override this method and use
        :meth:`add_view` to create router mapping."""
        self.views = {}
        self.viewlist = []
        self.negotiator = None
        if self['IHTTPNegotiator'] :
            self.negotiator = self.qp(IHTTPNegotiator, self['IHTTPNegotiator'])
        self['defaultview'] = h.string_import( self['defaultview'] )

        # Route mapping file is configured, populate view-callables from the
        # file.
        mapfile = self['routemapper']
        if mapfile and isfile( mapfile ) :
            for kwargs in eval( open( mapfile ).read() ) :
                name = kwargs.pop('name')
                pattern = kwargs.pop('pattern')
                self.add_view( name, pattern, **kwargs )

        elif mapfile :
            msg = "Wrong configuration for routemapper : %r" % mapfile
            raise Exception( msg )