Skip to content

Commit df6ba01

Browse files
committed
better filter on upward constraints, like in wppm -r pandas![.]
1 parent 3898353 commit df6ba01

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

wppm/piptree.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def _populate_reverse_dependencies(self) -> None:
157157
self.distro[target_key]["provided"][req["req_marker"].split('extra == ')[1].translate(remove_list)] = None
158158
self.distro[target_key]["reverse_dependencies"].append(rev_dep)
159159

160-
def _get_dependency_tree(self, package_name: str, extra: str = "", version_req: str = "", depth: int = 20, path: Optional[List[str]] = None, verbose: bool = False, upward: bool = False) -> List[List[str]]:
160+
def _get_dependency_tree(self, package_name: str, extra: str = "", version_req: str = "", depth: int = 20, path: Optional[List[str]] = None, verbose: bool = False, upward: bool = False, ppend: str="") -> List[List[str]]:
161161
"""Recursive function to build dependency tree."""
162162
path = path or []
163163
extras = extra.split(",")
@@ -199,17 +199,18 @@ def _get_dependency_tree(self, package_name: str, extra: str = "", version_req:
199199
# IA risk error: # dask[array] go upwards as dask[dataframe], so {"extra": up_req} , not {"extra": extra}
200200
#tag downward limiting dependancies
201201
wall = " " if dependency["req_version"][:1] == "~" or dependency["req_version"].startswith("==") or "<" in dependency["req_version"] else ""
202-
ret += self._get_dependency_tree(
203-
dependency["req_key"],
204-
up_req,
205-
f"[requires{wall}: {package_name}"
206-
+ (f"[{dependency['req_extra']}]" if dependency["req_extra"] != "" else "")
207-
+ f'{dependency["req_version"]}]',
208-
depth,
209-
next_path,
210-
verbose=verbose,
211-
upward=upward,
212-
)
202+
if ppend=="" or wall==" ":
203+
ret += self._get_dependency_tree(
204+
dependency["req_key"],
205+
up_req,
206+
f"[requires: {package_name}"
207+
+ (f"[{dependency['req_extra']}]" if dependency["req_extra"] != "" else "")
208+
+ f'{dependency["req_version"]}]',
209+
depth,
210+
next_path,
211+
verbose=verbose,
212+
upward=upward,
213+
)
213214
elif not dependency.get("req_marker") or Marker(dependency["req_marker"]).evaluate(environment=environment):
214215
ret += self._get_dependency_tree(
215216
dependency["req_key"],
@@ -252,15 +253,15 @@ def up(self, ppw: str, extra: str = "", depth: int = 20, indent: int = 5, versio
252253
if extra == ".":
253254
extras = set(self.distro[p]["provided"]).union(set(self.distro[p]["provides"]))
254255
for e in sorted(extras):
255-
a = self._get_dependency_tree(p, e, version_req, depth, verbose=verbose, upward=True)
256+
a = self._get_dependency_tree(p, e, version_req, depth, verbose=verbose, upward=True, ppend=ppend)
256257
results += a if (len(a[0])>1 or ppend=="") else []
257258
else:
258-
a = self._get_dependency_tree(p, extra, version_req, depth, verbose=verbose, upward=True)
259+
a = self._get_dependency_tree(p, extra, version_req, depth, verbose=verbose, upward=True, ppend=ppend)
259260
results += a if (len(a[0])>1 or extra=="") else []
260261

261262
rawtext = json.dumps(results, indent=indent)
262-
lines = [l[2*indent:] for l in rawtext.split("\n") if len(l.strip()) > 2 and ( ppend=="" or not "[requires:" in l)]
263-
return "\n".join(filter(None, lines)).replace('"', "").replace('[requires :', '[requires:')
263+
lines = [l[2*indent:] for l in rawtext.split("\n") if len(l.strip()) > 2]
264+
return "\n".join(filter(None, lines)).replace('"', "")
264265

265266
def description(self, pp: str) -> None:
266267
"""Return package description or None if not found."""

0 commit comments

Comments
 (0)