Skip to content

Commit

Permalink
Merge c0c71aa into 2dd091c
Browse files Browse the repository at this point in the history
  • Loading branch information
rjchallis committed Mar 23, 2021
2 parents 2dd091c + c0c71aa commit 5af85a3
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions src/genomehubs/lib/fill.py
Expand Up @@ -234,6 +234,7 @@ def set_values_from_descendants(
parent,
taxon_rank,
parents,
descendant_ranks=None,
attr_dict=None,
limits=None
):
Expand All @@ -249,14 +250,17 @@ def set_values_from_descendants(
and meta[key]["traverse_direction"] == "down"
):
traverseable = False
if not traverseable:
continue
if taxon_id in limits[key]:
if not traverseable or taxon_id in limits[key]:
continue
traverse_limit = meta[key].get("traverse_limit", None)
# TODO: #53 catch traverse limits when limit rank is missing
if traverse_limit and taxon_rank == traverse_limit:
limits[key].add(parent)
if traverse_limit:
if (
descendant_ranks is not None
and traverse_limit in descendant_ranks[taxon_id]
):
continue
if taxon_rank == traverse_limit:
limits[key].add(parent)
try:
attribute = next(entry for entry in attributes if entry["key"] == key)
except StopIteration:
Expand Down Expand Up @@ -344,6 +348,12 @@ def track_missing_attribute_values(
)


def track_descendant_ranks(node, descendant_ranks):
"""Keep track of descendant ranks."""
if "parent" in node["_source"]:
descendant_ranks[node["_source"]["parent"]].add(node["_source"]["taxon_rank"])


def traverse_from_tips(es, opts, *, template, root=None, max_depth=None):
"""Traverse a tree, filling in values."""
if root is None:
Expand All @@ -356,6 +366,11 @@ def traverse_from_tips(es, opts, *, template, root=None, max_depth=None):
)
root_depth = max_depth
meta = template["types"]["attributes"]
# for key, value in meta.items():
# if "traverse_limit" in value:
# if not isinstance(value["traverse_limit"], list):
# value["traverse_limit"] = [value["traverse_limit"]]
# value["traverse_limit"] = set(value["traverse_limit"])
attrs = set(meta.keys())
parents = defaultdict(
lambda: defaultdict(
Expand All @@ -366,6 +381,7 @@ def traverse_from_tips(es, opts, *, template, root=None, max_depth=None):
if "traverse-infer-both" in opts and opts["traverse-infer-both"]:
desc_attrs, desc_attr_limits = set_attributes_to_descend(meta)
missing_attributes = defaultdict(dict)
descendant_ranks = defaultdict(set)
else:
desc_attrs = {}
while root_depth >= 0:
Expand All @@ -379,6 +395,7 @@ def traverse_from_tips(es, opts, *, template, root=None, max_depth=None):
ctr = 0
for node in nodes:
# TODO: break into sub functions
track_descendant_ranks(node, descendant_ranks)
ctr += 1
changed = False
attr_dict = {}
Expand All @@ -400,6 +417,7 @@ def traverse_from_tips(es, opts, *, template, root=None, max_depth=None):
taxon_id=node["_source"]["taxon_id"],
parent=node["_source"].get("parent", None),
parents=parents,
descendant_ranks=descendant_ranks,
taxon_rank=node["_source"]["taxon_rank"],
attr_dict=attr_dict,
limits=limits,
Expand Down

0 comments on commit 5af85a3

Please sign in to comment.