Source code for openalea.vpltk.catalog.controller
import string
from .catalog import Catalog
class Implementation(object): pass
[docs]
class Controller(object):
[docs] def __init__(self):
self.catalog = Catalog()
self._implementations = set()
def __setattr__(self, attrib, value):
if value == Implementation:
self._implementations.add(attrib)
else:
super(Controller, self).__setattr__(attrib, value)
def __getattr__(self, attrib):
try:
value = super(Controller, self).__getattr__(attrib)
except AttributeError:
if attrib in self._implementations :
if attrib[0] in string.lowercase:
value = self.catalog.service(interfaces=self.catalog._lowername[attrib])
else:
value = self.catalog.factory(interfaces=self.catalog._lowername[attrib.lower()], tags=['plugin'])
else :
if attrib.startswith('I'):
value = self.catalog.interface(attrib)
elif attrib[0] in string.lowercase:
if attrib.endswith('s'):
value = self.catalog.services(interfaces=self.catalog._lowername[attrib[:-1]])
else:
value = self.catalog.service(interfaces=self.catalog._lowername[attrib])
else:
if attrib.endswith('s'):
value = self.catalog.factories(interfaces=self.catalog._lowername[attrib.lower()[:-1]], tags=['plugin'])
else:
value = self.catalog.factory(interfaces=self.catalog._lowername[attrib.lower()], tags=['plugin'])
return value
def __getattr__old(self, attrib):
try:
value = super(Controller, self).__getattr__(attrib)
except AttributeError:
if attrib.startswith('I') and attrib in self._implementations:
value = self.catalog.factory(interfaces=self.catalog._lowername[attrib.lower()], tags=['plugin'])
elif attrib.startswith('I'):
value = self.catalog.interface(attrib)
elif attrib[0] in string.lowercase:
value = self.catalog.service(interfaces=self.catalog._lowername[attrib])
else:
value = self.catalog.factory(interfaces=self.catalog._lowername[attrib.lower()], tags=['plugin'])
return value