Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def splitter_validation(self):
""" validating if the splitter is correct (after all states are connected)"""
for spl in self.splitter_rpn_compact:
if not (
spl in [".", "*"]
or spl.startswith("_")
or spl.split(".")[0] == self.name
):
raise hlpst.PydraStateError(
"can't include {} in the splitter, consider using _{}".format(
spl, spl.split(".")[0]
)
TODO
"""
self.state.prepare_states(self.inputs)
self.state.prepare_inputs()
if state_index is not None:
inputs_copy = deepcopy(self.inputs)
for key, ind in self.state.inputs_ind[state_index].items():
setattr(
inputs_copy,
key.split(".")[1],
getattr(inputs_copy, key.split(".")[1])[ind],
)
input_hash = inputs_copy.hash
if is_workflow(self):
con_hash = hash_function(self._connections)
hash_list = [input_hash, con_hash]
checksum_ind = create_checksum(
self.__class__.__name__, self._checksum_wf(input_hash)
)
else:
checksum_ind = create_checksum(self.__class__.__name__, input_hash)
return checksum_ind
else:
checksum_list = []
for ind in range(len(self.state.inputs_ind)):
checksum_list.append(self.checksum_states(state_index=ind))
return checksum_list
def split(self, splitter, overwrite=False, **kwargs):
"""
Run this task parametrically over lists of splitted inputs.
Parameters
----------
splitter :
TODO
overwrite : :obj:`bool`
TODO
"""
splitter = hlpst.add_name_splitter(splitter, self.name)
# if user want to update the splitter, overwrite has to be True
if self.state and not overwrite and self.state.splitter != splitter:
raise Exception(
"splitter has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if kwargs:
self.inputs = attr.evolve(self.inputs, **kwargs)
self.state_inputs = kwargs
if not self.state or splitter != self.state.splitter:
self.set_state(splitter)
return self
def combine(self, combiner, overwrite=False):
"""
Combine inputs parameterized by one or more previous tasks.
Parameters
----------
combiner :
TODO
overwrite : :obj:`bool`
TODO
"""
if not isinstance(combiner, (str, list)):
raise Exception("combiner has to be a string or a list")
combiner = hlpst.add_name_combiner(ensure_list(combiner), self.name)
if (
self.state
and self.state.combiner
and combiner != self.state.combiner
and not overwrite
):
raise Exception(
"combiner has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if not self.state:
self.split(splitter=None)
# a task can have a combiner without a splitter
# if is connected to one with a splitter;
# self.fut_combiner will be used later as a combiner
self.fut_combiner = combiner
def split(self, splitter, overwrite=False, **kwargs):
"""
Run this task parametrically over lists of splitted inputs.
Parameters
----------
splitter :
TODO
overwrite : :obj:`bool`
TODO
"""
splitter = hlpst.add_name_splitter(splitter, self.name)
# if user want to update the splitter, overwrite has to be True
if self.state and not overwrite and self.state.splitter != splitter:
raise Exception(
"splitter has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if kwargs:
self.inputs = attr.evolve(self.inputs, **kwargs)
self.state_inputs = kwargs
if not self.state or splitter != self.state.splitter:
self.set_state(splitter)
return self
def git_versions_from_keywords(keywords, tag_prefix, verbose):
"""Get version information from git keywords."""
if not keywords:
raise NotThisMethod("no keywords at all, weird")
date = keywords.get("date")
if date is not None:
# git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
# datestamp. However we prefer "%ci" (which expands to an "ISO-8601
# -like" string, which we must then edit to make compliant), because
# it's been around since git-1.5.3, and it's too difficult to
# discover which version we're using, or to work around using an
# older one.
date = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
refnames = keywords["refnames"].strip()
if refnames.startswith("$Format"):
if verbose:
print("keywords are unexpanded, not using")
raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
refs = set([r.strip() for r in refnames.strip("()").split(",")])
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
# this to find the root from __file__.
for i in cfg.versionfile_source.split("/"):
root = os.path.dirname(root)
except NameError:
return {
"version": "0+unknown",
"full-revisionid": None,
"dirty": None,
"error": "unable to find root of source tree",
"date": None,
}
try:
pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)
return render(pieces, cfg.style)
except NotThisMethod:
pass
try:
if cfg.parentdir_prefix:
return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)
except NotThisMethod:
pass
return {
"version": "0+unknown",
"full-revisionid": None,
"dirty": None,
"error": "unable to compute version",
"date": None,
}
if not keywords:
raise NotThisMethod("no keywords at all, weird")
date = keywords.get("date")
if date is not None:
# git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
# datestamp. However we prefer "%ci" (which expands to an "ISO-8601
# -like" string, which we must then edit to make compliant), because
# it's been around since git-1.5.3, and it's too difficult to
# discover which version we're using, or to work around using an
# older one.
date = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
refnames = keywords["refnames"].strip()
if refnames.startswith("$Format"):
if verbose:
print("keywords are unexpanded, not using")
raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
refs = set([r.strip() for r in refnames.strip("()").split(",")])
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
# just "foo-1.0". If we see a "tag: " prefix, prefer those.
TAG = "tag: "
tags = set([r[len(TAG) :] for r in refs if r.startswith(TAG)])
if not tags:
# Either we're using git < 1.8.3, or there really are no tags. We use
# a heuristic: assume all version tags have a digit. The old git %d
# expansion behaves like git log --decorate=short and strips out the
# refs/heads/ and refs/tags/ prefixes that would let us distinguish
# between branches and tags. By ignoring refnames without digits, we
# filter out many common branch names like "release" and
# "stabilization", as well as "HEAD" and "master".
tags = set([r for r in refs if re.search(r"\d", r)])
if verbose:
print("discarding '%s', no digits" % ",".join(refs - tags))
"""
self.state.prepare_states(self.inputs)
self.state.prepare_inputs()
if state_index is not None:
inputs_copy = deepcopy(self.inputs)
for key, ind in self.state.inputs_ind[state_index].items():
setattr(
inputs_copy,
key.split(".")[1],
getattr(inputs_copy, key.split(".")[1])[ind],
)
input_hash = inputs_copy.hash
if is_workflow(self):
con_hash = hash_function(self._connections)
hash_list = [input_hash, con_hash]
checksum_ind = create_checksum(
self.__class__.__name__, self._checksum_wf(input_hash)
)
else:
checksum_ind = create_checksum(self.__class__.__name__, input_hash)
return checksum_ind
else:
checksum_list = []
for ind in range(len(self.state.inputs_ind)):
checksum_list.append(self.checksum_states(state_index=ind))
return checksum_list
inputs_copy = deepcopy(self.inputs)
for key, ind in self.state.inputs_ind[state_index].items():
setattr(
inputs_copy,
key.split(".")[1],
getattr(inputs_copy, key.split(".")[1])[ind],
)
input_hash = inputs_copy.hash
if is_workflow(self):
con_hash = hash_function(self._connections)
hash_list = [input_hash, con_hash]
checksum_ind = create_checksum(
self.__class__.__name__, self._checksum_wf(input_hash)
)
else:
checksum_ind = create_checksum(self.__class__.__name__, input_hash)
return checksum_ind
else:
checksum_list = []
for ind in range(len(self.state.inputs_ind)):
checksum_list.append(self.checksum_states(state_index=ind))
return checksum_list