relative paths
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
parent
dd29e86b81
commit
be8428e592
1 changed files with 57 additions and 95 deletions
|
@ -42,113 +42,52 @@ class Object(object):
|
|||
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def base_dir():
|
||||
"""Return the absolute path to the top level directory where objects
|
||||
are defined.
|
||||
|
||||
Requires the environment variable '__cdist_out_dir' to be set.
|
||||
|
||||
"""
|
||||
try:
|
||||
base_dir = os.path.join(
|
||||
os.environ['__cdist_out_dir'],
|
||||
'object'
|
||||
)
|
||||
except KeyError as e:
|
||||
raise cdist.MissingEnvironmentVariableError(e.args[0])
|
||||
|
||||
# FIXME: should directory be created elsewhere?
|
||||
if not os.path.isdir(base_dir):
|
||||
os.mkdir(base_dir)
|
||||
return base_dir
|
||||
|
||||
@classmethod
|
||||
def remote_base_dir():
|
||||
"""Return the absolute path to the top level directory where objects
|
||||
are kept on the remote/target host.
|
||||
|
||||
Requires the environment variable '__cdist_remote_out_dir' to be set.
|
||||
|
||||
"""
|
||||
try:
|
||||
return os.path.join(
|
||||
os.environ['__cdist_remote_out_dir'],
|
||||
'object',
|
||||
)
|
||||
except KeyError as e:
|
||||
raise cdist.MissingEnvironmentVariableError(e.args[0])
|
||||
|
||||
def list_objects(cls):
|
||||
def list_objects(cls, object_base_path, type_base_path):
|
||||
"""Return a list of object instances"""
|
||||
for object_name in cls.list_object_names():
|
||||
for object_name in cls.list_object_names(object_base_path):
|
||||
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:])
|
||||
yield cls(cdist.core.Type(type_name), object_id=object_id)
|
||||
yield cls(cdist.core.Type(type_base_path, type_name), object_base_path, object_id=object_id)
|
||||
|
||||
@classmethod
|
||||
def list_type_names(cls):
|
||||
def list_type_names(cls, object_base_path):
|
||||
"""Return a list of type names"""
|
||||
return os.listdir(cls.base_dir())
|
||||
return os.listdir(object_base_path)
|
||||
|
||||
@classmethod
|
||||
def list_object_names(cls):
|
||||
def list_object_names(cls, object_base_path):
|
||||
"""Return a list of object names"""
|
||||
for path, dirs, files in os.walk(cls.base_dir()):
|
||||
for path, dirs, files in os.walk(object_base_path):
|
||||
if DOT_CDIST in dirs:
|
||||
yield os.path.relpath(path, cls.base_dir())
|
||||
yield os.path.relpath(path, object_base_path)
|
||||
|
||||
def __init__(self, type, object_id=None, parameters=None, requirements=None):
|
||||
def __init__(self, type, base_path, object_id=None)
|
||||
self.type = type # instance of Type
|
||||
self.base_path = base_path
|
||||
self.object_id = object_id
|
||||
self.name = os.path.join(self.type.name, self.object_id)
|
||||
self.parameters = parameters or {}
|
||||
self.requirements = requirements or []
|
||||
self.path = os.path.join(self.type.path, self.object_id)
|
||||
self.absolute_path = os.path.join(self.base_path, self.path)
|
||||
self.code_local_path = os.path.join(self.path, "code-local")
|
||||
self.code_remote_path = os.path.join(self.path, "code-remote")
|
||||
self.parameter_path = os.path.join(self.path, "parameter")
|
||||
|
||||
self.__parameters = None
|
||||
self.__requirements = None
|
||||
|
||||
# Whether this object was prepared/ran
|
||||
self.prepared = False
|
||||
self.ran = False
|
||||
|
||||
def __repr__(self):
|
||||
return '<Object %s>' % self.name
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
return os.path.join(
|
||||
self.base_dir(),
|
||||
self.name,
|
||||
DOT_CDIST
|
||||
)
|
||||
|
||||
@property
|
||||
def code_local(self):
|
||||
return os.path.join(self.path, "code-local")
|
||||
|
||||
@property
|
||||
def code_remote(self):
|
||||
return os.path.join(self.path, "code-remote")
|
||||
|
||||
@property
|
||||
def explorer_out_dir(self):
|
||||
path = os.path.join(self.path, "explorer")
|
||||
def explorer_path(self):
|
||||
# create absolute path
|
||||
path = os.path.join(self.absolute_path, "explorer")
|
||||
if not os.path.isdir(path):
|
||||
os.mkdir(path)
|
||||
return path
|
||||
|
||||
# FIXME: prefix directory should not leak into me
|
||||
@property
|
||||
def remote_path(self):
|
||||
return os.path.join(
|
||||
self.remote_base_dir(),
|
||||
self.name,
|
||||
DOT_CDIST
|
||||
)
|
||||
@property
|
||||
def remote_code_remote(self):
|
||||
return os.path.join(self.remote_path, "code-remote")
|
||||
# return relative path
|
||||
return os.path.join(self.path, "explorer")
|
||||
|
||||
|
||||
### requirements
|
||||
|
@ -204,20 +143,43 @@ class Object(object):
|
|||
### /changed
|
||||
|
||||
|
||||
### prepared
|
||||
@property
|
||||
def prepared(self):
|
||||
"""Check whether the object has been prepared."""
|
||||
return os.path.isfile(os.path.join(self.path, "prepared"))
|
||||
|
||||
# FIXME: Object
|
||||
def object_parameter_dir(self, cdist_object):
|
||||
"""Returns the dir to the object parameter"""
|
||||
return os.path.join(self.object_dir(cdist_object), "parameter")
|
||||
@prepared.setter
|
||||
def prepared(self, value):
|
||||
"""Change the objects prepared status."""
|
||||
path = os.path.join(self.path, "prepared")
|
||||
if value:
|
||||
open(path, "w").close()
|
||||
else:
|
||||
try:
|
||||
os.remove(path)
|
||||
except EnvironmentError:
|
||||
# ignore
|
||||
pass
|
||||
### /prepared
|
||||
|
||||
# FIXME: object
|
||||
def remote_object_parameter_dir(self, cdist_object):
|
||||
"""Returns the remote dir to the object parameter"""
|
||||
return os.path.join(self.remote_object_dir(cdist_object), "parameter")
|
||||
|
||||
# FIXME: object
|
||||
def object_code_paths(self, cdist_object):
|
||||
"""Return paths to code scripts of object"""
|
||||
return [os.path.join(self.object_dir(cdist_object), "code-local"),
|
||||
os.path.join(self.object_dir(cdist_object), "code-remote")]
|
||||
### ran
|
||||
@property
|
||||
def ran(self):
|
||||
"""Check whether the object has been ran."""
|
||||
return os.path.isfile(os.path.join(self.path, "ran"))
|
||||
|
||||
@ran.setter
|
||||
def ran(self, value):
|
||||
"""Change the objects ran status."""
|
||||
path = os.path.join(self.path, "ran")
|
||||
if value:
|
||||
open(path, "w").close()
|
||||
else:
|
||||
try:
|
||||
os.remove(path)
|
||||
except EnvironmentError:
|
||||
# ignore
|
||||
pass
|
||||
### /ran
|
||||
|
|
Loading…
Reference in a new issue