@@ -115,6 +115,7 @@ def __init__(self, Target=None):
115
115
key = normalize (name )
116
116
requires = []
117
117
provides = {'' :None }
118
+ provided = {'' :None }
118
119
8000
self .raw [key ] = meta
119
120
if p .requires :
120
121
for i in p .requires :
@@ -150,6 +151,7 @@ def __init__(self, Target=None):
150
151
"wanted_per" : [],
151
152
"description" : meta ["Description" ] if "Description" in meta else "" ,
152
153
"provides" : provides ,
154
+ "provided" : provided ,
153
155
}
154
156
155
157
# On a second pass, complement distro in reverse mode with 'wanted-per':
@@ -170,6 +172,9 @@ def __init__(self, Target=None):
170
172
} # req_key_extra
171
173
if "req_marker" in r :
172
174
want_add ["req_marker" ] = r ["req_marker" ] # req_key_extra
175
+ if 'extra == ' in r ["req_marker" ]:
176
+ remove_list = {ord ("'" ):None , ord ('"' ):None }
177
+ self .distro [r ["req_key" ]]["provided" ][r ["req_marker" ].split ('extra == ' )[1 ].translate (remove_list )] = None
173
178
self .distro [r ["req_key" ]]["wanted_per" ] += [want_add ]
174
179
175
180
def _downraw (self , pp , extra = "" , version_req = "" , depth = 20 , path = [], verbose = False ):
@@ -218,14 +223,16 @@ def _upraw(self, pp, extra="", version_req="", depth=20, path=[], verbose=False)
218
223
summary = f' { self .distro [p ]["summary" ]} ' if verbose else ''
219
224
if extra == "" :
220
225
ret_all = [f'{ p } =={ self .distro [p ]["version" ]} { version_req } { summary } ' ]
221
- else :
226
+ elif extra in self . distro [ p ][ "provided" ] :
222
227
ret_all = [f'{ p } [{ extra } ]=={ self .distro [p ]["version" ]} { version_req } { summary } ' ]
228
+ else :
229
+ return []
223
230
ret = []
224
231
for r in self .distro [p ]["wanted_per" ]:
225
232
if r ["req_key" ] in self .distro and r ["req_key" ] not in path :
226
- if "req_marker" not in r or Marker (r ["req_marker" ]).evaluate (
233
+ if ( "req_marker" not in r and extra == "" ) or ( extra != "" and "req_marker" in r and extra in r [ "req_marker" ] and Marker (r ["req_marker" ]).evaluate (
227
234
environment = envi
228
- ):
235
+ )) :
229
236
ret += self ._upraw (
230
237
r ["req_key" ],
231
238
"" ,
@@ -248,28 +255,54 @@ def down(self, pp="", extra="", depth=99, indent=5, version_req="", verbose=Fals
248
255
"""print the downward requirements for the package or all packages"""
249
256
if not pp == "." :
250
257
if not extra == "." :
258
+ if pp in self .distro :
259
+ extras = [s for s in extra .split (',' ) if s in sorted (self .distro [pp ]["provides" ])]
260
+ if extras == []: return ''
251
261
rawtext = json .dumps (
252
262
self ._downraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent
253
263
)
254
264
lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
255
- print ("\n " .join (lines ).replace ('"' , "" ))
265
+ return ("\n " .join (lines ).replace ('"' , "" ))
256
266
else :
257
- if self .distro [pp ]:
267
+ if pp in self .distro :
268
+ r = []
258
269
for one_extra in sorted (self .distro [pp ]["provides" ]):
259
- self .down (pp , one_extra , depth , indent , version_req , verbose = verbose )
270
+ s = self .down (pp , one_extra , depth , indent , version_req , verbose = verbose )
271
+ if s != '' : r += [s ]
272
+ #print(r)
273
+ return '\n ' .join ([i for i in r if i != '' ])
260
274
else :
275
+ r = []
261
276
for one_pp in sorted (self .distro ):
262
- self .down (one_pp , extra , depth , indent , version_req , verbose = verbose )
277
+ s = self .down (one_pp , extra , depth , indent , version_req , verbose = verbose )
278
+ if s != '' : r += [s ]
279
+ return '\n ' .join ([i for i in r if i != '' ])
263
280
264
281
def up (self , pp , extra = "" , depth = 99 , indent = 5 , version_req = "" , verbose = False ):
265
282
"""print the upward needs for the package"""
283
+ r = []
266
284
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 ('"' , "" ))
285
+ if not extra == "." :
286
+ s = self ._upraw (pp , extra , version_req , depth , verbose = verbose )
287
+ if s == []: return ''
288
+ rawtext = json .dumps (self ._upraw (pp , extra , version_req , depth , verbose = verbose ), indent = indent )
289
+ lines = [l for l in rawtext .split ("\n " ) if len (l .strip ()) > 2 ]
290
+ return ("\n " .join (i for i in lines if i != '' ).replace ('"' , "" ) )
291
+ else :
292
+ if pp in self .distro :
293
+ r = []
294
+ for one_extra in sorted (self .distro [pp ]["provided" ]):
295
+ s = self .up (pp , one_extra , depth , indent , version_req , verbose = verbose )
296
+ if s != '' : r += [s ]
297
+ return '\n ' .join ([i for i in r if i != '' ])
270
298
else :
271
299
for one_pp in sorted (self .distro ):
272
- self .up (one_pp , extra , depth , indent , version_req , verbose = verbose )
300
+ s = self .up (one_pp , extra , depth , indent , version_req , verbose = verbose )
301
+ if s != []: r += [s ]
302
+ if r != []:
303
+ return '\n ' .join ([i for i in r if i != '' ])
304
+ else :
305
+ return
273
306
274
307
def description (self , pp ):
275
308
"return description of the package"
0 commit comments