Add a scope parameter to objreg functions.

This commit is contained in:
Florian Bruhin 2014-09-25 00:30:52 +02:00
parent 4783df8c32
commit c77057e88e

View File

@ -77,14 +77,24 @@ meta_registry = ObjectRegistry()
meta_registry['global'] = global_registry meta_registry['global'] = global_registry
def get(name, default=_UNSET): def _get_registry(scope):
"""Get the correct registry for a given scope."""
if scope == 'global':
return global_registry
else:
raise ValueError("Invalid scope '{}'!".format(scope))
def get(name, default=_UNSET, scope='global'):
"""Helper function to get an object. """Helper function to get an object.
Args: Args:
default: A default to return if the object does not exist. default: A default to return if the object does not exist.
""" """
reg = _get_registry(scope)
try: try:
return global_registry[name] return reg[name]
except KeyError: except KeyError:
if default is not _UNSET: if default is not _UNSET:
return default return default
@ -92,7 +102,7 @@ def get(name, default=_UNSET):
raise raise
def register(name, obj, update=False): def register(name, obj, update=False, scope='global'):
"""Helper function to register an object. """Helper function to register an object.
Args: Args:
@ -100,12 +110,14 @@ def register(name, obj, update=False):
obj: The object to register. obj: The object to register.
update: If True, allows to update an already registered object. update: If True, allows to update an already registered object.
""" """
if not update and name in global_registry: reg = _get_registry(scope)
if not update and name in reg:
raise KeyError("Object '{}' is already registered ({})!".format( raise KeyError("Object '{}' is already registered ({})!".format(
name, repr(global_registry[name]))) name, repr(reg[name])))
global_registry[name] = obj reg[name] = obj
def delete(name): def delete(name, scope='global'):
"""Helper function to unregister an object.""" """Helper function to unregister an object."""
del global_registry[name] reg = _get_registry(scope)
del reg[name]