Source code for serge.registry
"""A general registry for objects
This is used as a base class for other concrete types.
"""
import os
import serialize
class DuplicateItem(Exception): """The item was already registered"""
class UnknownItem(Exception): """The item was not found"""
class BadPath(Exception): """The base path was not a valid directory"""
[docs]class GeneralStore(serialize.Serializable):
"""Stores things"""
my_properties = (
serialize.S('base_path', '', 'the base location to find files'),
serialize.L('raw_items', [], 'the items we have registered'),
)
def __init__(self):
"""Initialize the store"""
self.items = {}
self.raw_items = []
self.base_path = ''
[docs] def init(self):
"""Initialise from serialized form"""
self.items = {}
old_items, self.raw_items = self.raw_items, []
for item in old_items:
self.registerItem(*item)
[docs] def setPath(self, path):
"""Set our base path to locate images"""
if not os.path.isdir(path):
raise BadPath('The path %s is not a directory' % path)
self.base_path = path
def _resolveFilename(self, name):
"""Return the name to a file"""
if os.path.isfile(name):
return name
else:
return os.path.join(self.base_path, name)
[docs] def registerItem(self, name, *args, **kw):
"""Register an item"""
#
# Make sure we only register once
if name in self.items:
raise DuplicateItem('The item named "%s" is already registered' % name)
#
return self._registerItem(name, *args, **kw)
[docs] def getItems(self):
"""Return all the items"""
return self.items.values()
[docs] def getItemDefinitions(self):
"""Return all the item definitions"""
return self.raw_items
[docs] def clearItems(self):
"""Clear all the items"""
self.items = {}
self.raw_items = []
[docs] def removeItem(self, name):
"""Remove the named item"""
try:
del(self.items[name])
except KeyError:
raise UnknownItem('The item "%s" was not in the collection' % name)
self.raw_items = [item for item in self.raw_items if item[0] != name]
[docs] def getNames(self):
"""Return the names of all the items"""
return self.items.keys()
[docs] def getItem(self, name):
"""Return an item"""
try:
return self.items[name]
except KeyError:
raise UnknownItem('The item called "%s" could not be found' % name)
[docs] def hasItem(self, name):
"""Return True if the named item is in the registry"""
return name in self.items
[docs] def duplicateItem(self, name, new_name):
"""Create a duplicate of the named item with a new name"""
#
# Find parameters of this item
self.items[new_name] = self.getItem(name)