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 )