All pastes #37026 Raw Edit

Diff

public text v1 · immutable
#37026 ·published 2006-01-17 01:59 UTC
rendered paste body
=== trac/core.py==================================================================--- trac/core.py	(revision 6827)+++ trac/core.py	(local)@@ -18,8 +18,8 @@  from trac.util import TracError -__all__ = ['Component', 'ExtensionPoint', 'implements', 'Interface',-           'TracError']+__all__ = ['Component', 'ExtensionPoint', 'SingletonExtensionPoint',+           'implements', 'Interface', 'TracError']   class Interface(object):@@ -51,6 +51,24 @@         return '<ExtensionPoint %s>' % self.interface.__name__  +class SingletonExtensionPoint(property):+    def __init__(self, interface, cfg_section, cfg_property, default=None):+        property.__init__(self, self.implementation)+        self.xtnpt = ExtensionPoint(interface)+        self.cfg_section = cfg_section+        self.cfg_property = cfg_property+        self.default = default++    def implementation(self, component):+        cfgvalue = component.config.get(self.cfg_section, self.cfg_property)+        for impl in self.xtnpt.extensions(component):+            if impl.__class__.__name__ == cfgvalue:+                return impl+        if self.default is not None:+            return self.default+        raise AttributeError, "Can't find implementation"++ class ComponentMeta(type):     """Meta class for components.     === trac/perm.py==================================================================--- trac/perm.py	(revision 6827)+++ trac/perm.py	(local)@@ -78,7 +78,7 @@     implements(IPermissionRequestor)      requestors = ExtensionPoint(IPermissionRequestor)-    stores = ExtensionPoint(IPermissionStore)+    store = SingletonExtensionPoint(IPermissionStore, 'trac', 'permission_store')      # Public API @@ -160,19 +160,7 @@                     actions.append(action)         return [('TRAC_ADMIN', actions)] -    # Internal methods -    def _get_store(self):-        """Return the `IPermissionStore` implementation selected in the-        configuration."""-        selected_store = self.config.get('trac', 'permission_store')-        for store in self.stores:-            if store.__class__.__name__ == selected_store:-                return store-        raise TracError, 'Invalid permission store "%s"' % selected_store-    store = property(fget=lambda self: self._get_store())-- class IPermissionGroupProvider(Interface):     """     Extension point interface for components that provide information about user=== trac/web/main.py==================================================================--- trac/web/main.py	(revision 6827)+++ trac/web/main.py	(local)@@ -60,6 +60,8 @@      authenticators = ExtensionPoint(IAuthenticator)     handlers = ExtensionPoint(IRequestHandler)+    default_handler = SingletonExtensionPoint(IRequestHandler,+                                              'trac', 'default_handler')      def authenticate(self, req):         for authenticator in self.authenticators:@@ -88,14 +90,13 @@          # Select the component that should handle the request         chosen_handler = None-        default_handler = None         if not req.path_info or req.path_info == '/':-            default_handler = self.config.get('trac', 'default_handler')-        for handler in self.handlers:-            if handler.match_request(req) or \-               handler.__class__.__name__ == default_handler:-                chosen_handler = handler-                break+            chosen_handler = self.default_handler+        else:+            for handler in self.handlers:+                if handler.match_request(req):+                    chosen_handler = handler+                    break          chrome.populate_hdf(req, chosen_handler)