def _translate_target(self, c, a, v):
# Set some things up
target = self.targets[a]
def relative_path(p):
p = str(p)
if p[0:1] != '/':
return os.path.relpath(p, c['_output_wrt'])
else:
return p
# recurse for list like things
if isinstance(v, list) or isinstance(v, SCons.Node.NodeList):
return [self._translate_target(c, a, v_) for v_ in v]
elif isinstance(v, dict):
v = copy.deepcopy(v)
elif isinstance(v, SCons.Node.FS.Entry) or isinstance(v, SCons.Node.FS.File):
# Can add more metadata here as needed
ident = uuid.uuid3(c[self.nest_levels[self.current_nest]['ident_attr']], str(v))
self.file_idents[str(v)] = ident
v = {'db:ident': ident,
'tripl.file:path': relative_path(v),
# This will be super cool...
'tripl.file:sources': [{'tripl.file:path': relative_path(p)} for p in v.sources]}
# This is where the metadata function gets called if it is callable
metadata = target['metadata'](c, v) if callable(target['metadata']) else (target['metadata'] or {})
if isinstance(v, dict):
# Here we merge in the metadata
v.update(metadata)
elif metadata:
metadata['tripl.nestly.target:value'] = v
v = metadata
# TODO namespace all keywords
return v
评论列表
文章目录