Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def flatten_deps(johnnydist):
# TODO: add the check for infinite recursion in here (traverse parents)
johnnydist.log.debug("resolving dep tree")
dist_map = OrderedDefaultListDict()
spec_map = defaultdict(str)
extra_map = defaultdict(set)
required_by_map = defaultdict(list)
for dep in anytree.iterators.LevelOrderIter(johnnydist):
dist_map[dep.name].append(dep)
spec_map[dep.name] = dep.req.specifier & spec_map[dep.name]
extra_map[dep.name] |= set(dep.extras_requested)
required_by_map[dep.name] += dep.required_by
for name, dists in dist_map.items():
spec = spec_map[name]
spec.prereleases = True
extras = extra_map[name]
required_by = list(OrderedDict.fromkeys(required_by_map[name])) # order preserving de-dupe
for dist in dists:
if dist.version_latest_in_spec in spec and set(dist.extras_requested) >= extras:
dist.required_by = required_by