@@ -166,6 +166,7 @@ def _get_dependency_tree(self, package_name: str, extra: str = "", version_req:
166166 extras = extra .split ("," )
167167 pkg_key = self .normalize (package_name )
168168 ret_all = []
169+ wall_hit = ""
169170
170171 full_name = f"{ package_name } [{ extra } ]" if extra else package_name
171172 if full_name in path :
@@ -200,8 +201,9 @@ def _get_dependency_tree(self, package_name: str, extra: str = "", version_req:
200201 extra + ',' in dependency ["req_extra" ] + ',' and \
201202 Marker (dependency ["req_marker" ]).evaluate (environment = environment | {"extra" : up_req })):
202203 # IA risk error: # dask[array] go upwards as dask[dataframe], so {"extra": up_req} , not {"extra": extra}
203- #tag downward limiting dependancies
204+ #tag upward limiting dependancies
204205 wall = " " if dependency ["req_version" ][:1 ] == "~" or dependency ["req_version" ].startswith ("==" ) or "<" in dependency ["req_version" ] else ""
206+ wall_hit += wall
205207 if ppend == "" or wall == " " :
206208 ret += self ._get_dependency_tree (
207209 dependency ["req_key" ],
@@ -215,31 +217,44 @@ def _get_dependency_tree(self, package_name: str, extra: str = "", version_req:
215217 upward = upward ,
216218 )
217219 elif not dependency .get ("req_marker" ) or Marker (dependency ["req_marker" ]).evaluate (environment = environment ):
218- ret += self ._get_dependency_tree (
219- dependency ["req_key" ],
220- dependency ["req_extra" ],
221- dependency ["req_version" ],
222- depth ,
223- next_path ,
224- verbose = verbose ,
225- upward = upward ,
226- )
220+ #tag downward missing dependancies
221+ wall = ""
222+ if ppend == "" or wall == " " :
223+ ret += self ._get_dependency_tree (
224+ dependency ["req_key" ],
225+ dependency ["req_extra" ],
226+ dependency ["req_version" ],
227+ depth ,
228+ next_path ,
229+ verbose = verbose ,
230+ upward = upward ,
231+ )
232+ elif not upward and (not dependency .get ("req_marker" ) or Marker (dependency ["req_marker" ]).evaluate (environment = environment )):
233+ # not there but was required
234+ wall_hit += " "
235+ ret += [[f'{ dependency ["req_key" ]} ==? { dependency ["req_version" ]} ' ]]
227236
228237 ret_all .append (ret )
229- return ret_all
238+ if ppend == "" or wall_hit != "" :
239+ return ret_all
240+ else :
241+ return ["" ]
230242
231- def down (self , pp : str = "" , extra : str = "" , depth : int = 20 , indent : int = 4 , version_req : str = "" , verbose : bool = False ) -> str :
243+ def down (self , ppw : str = "" , extra : str = "" , depth : int = 20 , indent : int = 4 , version_req : str = "" , verbose : bool = False ) -> str :
232244 """Generate downward dependency tree as formatted string."""
245+ pp = ppw [:- 1 ] if ppw .endswith ('!' ) else ppw
246+ ppend = "!" if ppw .endswith ('!' ) else "" #show only downward missing dependancies
233247 ppp = [pp ] if pp in self .distro else ()
234248 if pp == "." :
235249 ppp = [p for p in self .distro ]
236250 results = []
237251 for p in sorted (ppp ):
238252 if extra == "." :
239253 for one_extra in sorted (self .distro [p ]["provides" ]):
240- results + = self ._get_dependency_tree (p , one_extra , version_req , depth , verbose = verbose )
254+ a = self ._get_dependency_tree (p , one_extra , version_req , depth , verbose = verbose , ppend = ppend )
241255 else :
242- results += self ._get_dependency_tree (p , extra , version_req , depth , verbose = verbose )
256+ a = self ._get_dependency_tree (p , extra , version_req , depth , verbose = verbose , ppend = ppend )
257+ results += a if (len (a [0 ])> 1 or ppend == "" ) else []
243258 rawtext = json .dumps (results , indent = indent )
244259 lines = [l [2 * indent :] for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
245260 return "\n " .join (lines ).replace ('"' , "" )
0 commit comments