Changeset 1232

Show
Ignore:
Timestamp:
04/17/07 23:08:21 (2 years ago)
Author:
arj..@yirdis.nl
Message:

load element_factory as service, make on demand service initialization work.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/application.py

    r1229 r1232  
    2424     
    2525    def __init__(self): 
    26         self.services = { 
    27             'element_factory': gaphor.UML.ElementFactory() 
    28         } 
    29      
    30 #    def __getattr__(self, key): 
    31 #        return self.services[key] 
     26        self._uninitialized_services = {} 
    3227 
    3328    def init(self): 
     
    3530        Initialize the application. 
    3631        """ 
    37         #import gaphor.adapters 
    38         #import gaphor.actions 
    3932        self.load_services() 
    4033 
     
    4639        Service should provide an interface gaphor.interfaces.IService. 
    4740        """ 
    48         services = [] 
    4941        for ep in pkg_resources.iter_entry_points('gaphor.services'): 
    5042            #print ep, dir(ep) 
     
    5446                raise 'MisConfigurationException', 'Entry point %s doesn''t provide IService' % ep.name 
    5547            srv = cls() 
    56             services.append((ep.name, srv)) 
     48            self._uninitialized_services[ep.name] = srv 
    5749 
    58         for name, srv in services: 
    59             log.debug('initializing service.%s' % name) 
     50        # HACK: implicitly add UML.ElementFactory for now. 
     51        from gaphor import UML 
     52        self._uninitialized_services['element_factory'] = resource(UML.ElementFactory) 
     53        # /HACK 
     54 
     55        while self._uninitialized_services: 
     56            self.init_service(self._uninitialized_services.iterkeys().next()) 
     57 
     58    def init_service(self, name): 
     59        """ 
     60        Initialize a not yet initialized service. 
     61 
     62        Raises ComponentLookupError if the service has nor been found 
     63        """ 
     64        try: 
     65            srv = self._uninitialized_services.pop(name) 
     66        except KeyError: 
     67            raise component.ComponentLookupError(IService, name) 
     68        else: 
     69            log.info('initializing service service.%s' % name) 
     70            # TODO: do init() before provideUtility! 
    6071            component.provideUtility(srv, IService, name) 
    6172            srv.init(self) 
     73            return srv 
    6274 
    6375    distribution = property(lambda s: pkg_resources.get_distribution('gaphor'), 
     
    6577 
    6678    def get_service(self, name): 
    67         return component.getUtility(IService, name) 
     79        try: 
     80            return component.getUtility(IService, name) 
     81        except component.ComponentLookupError: 
     82            return self.init_service(name) 
    6883 
    6984    def run(self):