@@ -114,6 +114,7 @@ def __init__(self, Target=None):
114
114
version = p .version
115
115
key = normalize (name )
116
116
requires = []
117
+ provides = {'' :None }
117
118
self .raw [key ] = meta
118
119
if p .requires :
119
120
for i in p .requires :
@@ -129,7 +130,9 @@ def __init__(self, Target=None):
129
130
req_key_extra = req_nameextra [len (req_key ) + 1 :].split ("]" )[0 ]
130
131
req_version = det [0 ][len (req_nameextra ) :].translate (replacements )
131
132
req_marker = det [1 ]
132
-
133
+ if 'extra == ' in req_marker :
134
+ remove_list = {ord ("'" ):None , ord ('"' ):None }
135
+ provides [req_marker .split ('extra == ' )[1 ].translate (remove_list )] = None
133
136
req_add = {
134
137
"req_key" : req_key ,
135
138
"req_version" : req_version ,
@@ -146,6 +149,7 @@ def __init__(self, Target=None):
146
149
"requires_dist" : requires ,
147
150
"wanted_per" : [],
148
151
"description" : meta ["Description" ] if "Description" in meta else "" ,
152
+ "provides" : provides ,
149
153
}
150
154
151
155
# On a second pass, complement distro in reverse mode with 'wanted-per':
@@ -242,21 +246,30 @@ def _upraw(self, pp, extra="", version_req="", depth=20, path=[], verbose=False)
242
246
243
247
def down (self , pp = "" , extra = "" , depth = 99 , indent = 5 , version_req = "" , verbose = False ):
244
248
"""print the downward requirements for the package or all packages"""
245
- if not pp == "" :
246
- rawtext = json .dumps (
247
- self ._downraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent
248
- )
249
- lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
250
- print ("\n " .join (lines ).replace ('"' , "" ))
249
+ if not pp == "." :
250
+ if not extra == "." :
251
+ rawtext = json .dumps (
252
+ self ._downraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent
253
+ )
254
+ lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
255
+ print ("\n " .join (lines ).replace ('"' , "" ))
256
+ else :
257
+ if self .distro [pp ]:
258
+ for one_extra in sorted (self .distro [pp ]["provides" ]):
259
+ self .down (pp , one_extra , depth , indent , version_req , verbose = verbose )
251
260
else :
252
261
for one_pp in sorted (self .distro ):
253
262
self .down (one_pp , extra , depth , indent , version_req , verbose = verbose )
254
263
255
264
def up (self , pp , extra = "" , depth = 99 , indent = 5 , version_req = "" , verbose = False ):
256
265
"""print the upward needs for the package"""
257
- rawtext = json .dumps (self ._upraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent )
258
- lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
259
- print ("\n " .join (lines ).replace ('"' , "" ))
266
+ if not pp == "." :
267
+ rawtext = json .dumps (self ._upraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent )
268
+ lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
269
+ print ("\n " .join (lines ).replace ('"' , "" ))
270
+ else :
271
+ for one_pp in sorted (self .distro ):
272
+ self .up (one_pp , extra , depth , indent , version_req , verbose = verbose )
260
273
261
274
def description (self , pp ):
262
275
"return description of the package"
0 commit comments