add utilitly method to split an object name into its type name and object_id

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
Steven Armstrong 2011-11-02 07:52:08 +01:00
parent 70ee0f1681
commit afba5e9280

View file

@ -60,9 +60,7 @@ class Object(object):
def list_objects(cls, object_base_path, type_base_path): def list_objects(cls, object_base_path, type_base_path):
"""Return a list of object instances""" """Return a list of object instances"""
for object_name in cls.list_object_names(object_base_path): for object_name in cls.list_object_names(object_base_path):
type_name = object_name.split(os.sep)[0] type_name, object_id = cls.split_name(object_name)
# FIXME: allow object without object_id? e.g. for singleton
object_id = os.sep.join(object_name.split(os.sep)[1:])
yield cls(cdist.core.Type(type_base_path, type_name), object_base_path, object_id=object_id) yield cls(cdist.core.Type(type_base_path, type_name), object_base_path, object_id=object_id)
@classmethod @classmethod
@ -77,20 +75,17 @@ class Object(object):
if DOT_CDIST in dirs: if DOT_CDIST in dirs:
yield os.path.relpath(path, object_base_path) yield os.path.relpath(path, object_base_path)
def object_from_name(self, object_name): @staticmethod
"""Convenience method for creating an object instance from an object name. def split_name(object_name):
"""split_name('__type_name/the/object_id') -> ('__type_name', 'the/object_id')
Mainly intended to create objects when resolving requirements. Split the given object name into it's type and object_id parts.
e.g:
<Object __foo/bar>.object_from_name('__other/object') -> <Object __other/object>
""" """
type_path = self.type.base_path
object_path = self.base_path
type_name = object_name.split(os.sep)[0] type_name = object_name.split(os.sep)[0]
# FIXME: allow object without object_id? e.g. for singleton
object_id = os.sep.join(object_name.split(os.sep)[1:]) object_id = os.sep.join(object_name.split(os.sep)[1:])
return self.__class__(self.type.__class__(type_path, type_name), object_path, object_id=object_id) return type_name, object_id
def __init__(self, cdist_type, base_path, object_id=None): def __init__(self, cdist_type, base_path, object_id=None):
if object_id: if object_id:
@ -118,6 +113,19 @@ class Object(object):
def __lt__(self, other): def __lt__(self, other):
return isinstance(other, self.__class__) and self.name < other.name return isinstance(other, self.__class__) and self.name < other.name
def object_from_name(self, object_name):
"""Convenience method for creating an object instance from an object name.
Mainly intended to create objects when resolving requirements.
e.g:
<Object __foo/bar>.object_from_name('__other/object') -> <Object __other/object>
"""
type_path = self.type.base_path
object_path = self.base_path
type_name, object_id = self.split_name(object_name)
return self.__class__(self.type.__class__(type_path, type_name), object_path, object_id=object_id)
# FIXME: still needed? # FIXME: still needed?
@property @property