Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __getattr__(self, name):
if name == "lzout": # lazy output
return LazyField(self, "output")
return self.__getattribute__(name)
def retrieve_values(self, wf, state_index=None):
"""Parse output results."""
temp_values = {}
for field in attr_fields(self):
# retrieving values that do not have templates
if not field.metadata.get("output_file_template"):
value = getattr(self, field.name)
if isinstance(value, LazyField):
value = value.get_value(wf, state_index=state_index)
temp_values[field.name] = value
for field, value in temp_values.items():
value = path_to_string(value)
setattr(self, field, value)
def is_lazy(obj):
"""Check whether an object has any field that is a Lazy Field"""
for f in attr_fields(obj):
if isinstance(getattr(obj, f.name), LazyField):
return True
return False
def is_lazy(obj):
"""Check whether an object has any field that is a Lazy Field"""
for f in attr_fields(obj):
if isinstance(getattr(obj, f.name), LazyField):
return True
return False
ignore_hidden_files : :obj:`bool`
If `True`, ignore filenames that begin with `.`.
ignore_hidden_dirs : :obj:`bool`
If `True`, ignore files in directories that begin with `.`.
raise_notfound : :obj:`bool`
If `True` and `dirpath` does not exist, raise `FileNotFound` exception. If
`False` and `dirpath` does not exist, return `None`.
Returns
-------
hash : :obj:`str`
Hash of the directory contents.
"""
from .specs import LazyField
if dirpath is None or isinstance(dirpath, LazyField) or isinstance(dirpath, list):
return None
if not Path(dirpath).is_dir():
if raise_notfound:
raise FileNotFoundError(f"Directory {dirpath} not found.")
return None
file_hashes = []
for dpath, dirnames, filenames in os.walk(dirpath):
# Sort in-place to guarantee order.
dirnames.sort()
filenames.sort()
dpath = Path(dpath)
if ignore_hidden_dirs and dpath.name.startswith(".") and str(dpath) != dirpath:
continue
for filename in filenames:
if ignore_hidden_files and filename.startswith("."):
def __getattr__(self, name):
if name == "lzin":
return LazyField(self, "input")
if name == "lzout":
return super().__getattr__(name)
if name in self.name2obj:
return self.name2obj[name]
return self.__getattribute__(name)
def __getattr__(self, name):
if name == "lzout": # lazy output
return LazyField(self, "output")
return self.__getattribute__(name)
def _collect_outputs(self):
error = False
output_klass = make_klass(self.output_spec)
output = output_klass(**{f.name: None for f in attr.fields(output_klass)})
# collecting outputs from tasks
output_wf = {}
for name, val in self._connections:
if not isinstance(val, LazyField):
raise ValueError("all connections must be lazy")
try:
val_out = val.get_value(self)
output_wf[name] = val_out
except ValueError:
output_wf[name] = None
# checking if the tasks has predecessors that raises error
if isinstance(getattr(self, val.name)._errored, list):
raise ValueError(
f"Tasks {getattr(self, val.name)._errored} raised an error"
)
else:
raise ValueError(f"Task {val.name} raised an error")
return attr.evolve(output, **output_wf)
def hash_file(afile, chunk_len=8192, crypto=sha256, raise_notfound=True):
"""Compute hash of a file using 'crypto' module."""
from .specs import LazyField
if afile is None or isinstance(afile, LazyField) or isinstance(afile, list):
return None
if not Path(afile).is_file():
if raise_notfound:
raise RuntimeError('File "%s" not found.' % afile)
return None
crypto_obj = crypto()
with open(afile, "rb") as fp:
while True:
data = fp.read(chunk_len)
if not data:
break
crypto_obj.update(data)
return crypto_obj.hexdigest()
def __getattr__(self, name):
if name == "lzin":
return LazyField(self, "input")
if name == "lzout":
return super().__getattr__(name)
if name in self.name2obj:
return self.name2obj[name]
return self.__getattribute__(name)