Skip to content

Commit 866d796

Browse files
committed
Fix several path/file handling issues
1 parent 6492934 commit 866d796

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

phobos/ci/base_model.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ def __init__subclass__(self, configfile, pipeline, processed_model_exists=True):
2323
self.processed_model_exists = processed_model_exists
2424
self.pipeline = pipeline
2525

26+
self.configfile = None
2627
if type(configfile) is str:
2728
if not os.path.isfile(configfile):
2829
raise Exception('{} not found!'.format(configfile))
2930
self.cfg = load_json(open(configfile, 'r'))
31+
self.configfile = configfile
3032
else:
3133
self.cfg = configfile
3234

@@ -151,11 +153,12 @@ def _load_robot(self):
151153
# create a robot with the basic properties given
152154
self.robot = Robot(name=self.robotname if self.robotname else None)
153155
else:
154-
if os.path.exists(os.path.join(self.exportdir, "smurf", self.robotname + ".smurf")):
156+
load_file = os.path.join(self.exportdir, "smurf", getattr(self, "filename", self.robotname) + ".smurf")
157+
if os.path.exists(load_file):
155158
self.robot = Robot(name=self.robotname if self.robotname else None,
156-
inputfile=os.path.join(self.exportdir, "smurf", self.robotname + ".smurf"))
159+
inputfile=load_file)
157160
else:
158-
raise Exception('Preprocessed file {} not found!'.format(self.basefile))
161+
raise Exception('Preprocessed file {} not found!'.format(load_file))
159162

160163
def _join_to_basefile(self):
161164
# get all the models we need
@@ -735,7 +738,12 @@ def export(self):
735738
for vc in self.robot.collisions + self.robot.visuals:
736739
if isinstance(vc.geometry, representation.Mesh):
737740
self.processed_meshes = self.processed_meshes.union([os.path.realpath(f["filepath"]) for f in vc.geometry._exported.values()])
738-
self.processed_meshes.add(os.path.realpath(vc.geometry.abs_filepath))
741+
try:
742+
self.processed_meshes.add(os.path.realpath(vc.geometry.abs_filepath))
743+
except IOError:
744+
# This mesh has been edited and has no source mesh any more that could provide a file path
745+
pass
746+
739747
if "keep_files" in self.deployment:
740748
git.reset(self.targetdir, "autobuild", "master")
741749
misc.store_persisting_files(self.pipeline, self.targetdir, self.deployment["keep_files"], self.exportdir)

phobos/ci/pipeline.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Pipeline(yaml.YAMLObject):
2929
def __init__(self, configfile, model_file=None, processed_model_exists=False, subclass=False):
3030
self.processing_failed = {}
3131
self.test_results = {}
32-
self.configdir = os.path.abspath(os.path.dirname(configfile))
32+
self.configdir = os.path.dirname(os.path.abspath(configfile))
3333
self.processed_model_exists = processed_model_exists
3434
if not os.path.isfile(configfile):
3535
raise Exception('{} not found!'.format(configfile))
@@ -40,6 +40,8 @@ def __init__(self, configfile, model_file=None, processed_model_exists=False, su
4040
for (k, v) in kwargs.items():
4141
setattr(self, k, v)
4242

43+
self.root = os.path.expandvars(self.root)
44+
4345
if model_file:
4446
self.model_definitions = [model_file]
4547

@@ -50,10 +52,11 @@ def __init__(self, configfile, model_file=None, processed_model_exists=False, su
5052
if not subclass:
5153
assert hasattr(self, "model_definitions") and len(self.model_definitions) > 0
5254
assert hasattr(self, "root") and self.root is not None and len(self.root) > 0
53-
54-
self.root = os.path.abspath(os.path.join(self.configdir, self.root))
55+
56+
if not os.path.abspath(self.root):
57+
self.root = os.path.abspath(os.path.join(self.configdir, self.root))
5558
log.info(f"Working from {self.root}")
56-
self.git_rev = git.revision(os.path.abspath(self.configdir))
59+
self.git_rev = git.revision(self.configdir)
5760
self.temp_dir = os.path.join(self.root, "temp")
5861
self.faillog = os.path.join(self.temp_dir, "failures.txt")
5962
self.test_protocol = os.path.join(self.temp_dir, "test_protocol.txt")

phobos/io/representation.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,12 @@ def read_history(cls, targetpath):
646646
@property
647647
def abs_filepath(self):
648648
if len(self._exported) == 0:
649-
out = self.input_file if self.input_file is not None else self._mesh_object.get("input_file", None)
649+
out = self.input_file
650+
if out is None and self._mesh_object:
651+
try:
652+
out = self._mesh_object["input_file"]
653+
except:
654+
out = None
650655
if out is None:
651656
raise IOError(f"This mesh ({self.unique_name}) hasn't been exported nor is an input file known, which could be used.")
652657
return out
@@ -711,7 +716,7 @@ def file_exists(self):
711716
return os.path.isfile(self.abs_filepath)
712717

713718
def available(self):
714-
return self.file_exists() or self.mesh_object is not None
719+
return self.mesh_object is not None or self.file_exists()
715720

716721
def is_lfs_checked_out(self):
717722
if self.input_file is not None and os.path.isfile(self.input_file):

phobos/utils/xml.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def read_relative_filename(filename, start_file_path):
8686
start_file_path = os.path.abspath(start_file_path)
8787
if start_file_path.split(".")[-1] in IMPORT_TYPES:
8888
start_file_path = os.path.dirname(start_file_path) # /bla/blub/xyz/blib.xyz -> /bla/blub/xyz
89-
if filename.startswith("package://"): # ROS Package
89+
if filename.startswith("package:"): # ROS Package
9090
if os.path.basename(start_file_path) in IMPORT_TYPES+["xacro"]:
9191
package_dir = os.path.dirname(start_file_path) # /bla/blub/xyz -> /bla/blub
9292
else:

0 commit comments

Comments
 (0)