@@ -107,27 +107,33 @@ def _downraw(self, pp, extra="", version_req="", depth=20, path=[]):
107107 """build a nested list of needed packages with given extra and depth"""
108108 envi = {"extra" : extra , ** self .environment }
109109 p = normalize (pp )
110+
111+ # several extras request management: example dask[array,diagnostics]
112+ extras = extra .split ("," )
113+
110114 ret_all = []
111- if p in path :
115+ if p + "[" + extra + "]" in path : # for dask[complete]->dask[array,test,..]
112116 print ("cycle!" , "->" .join (path + [p ]))
113117 elif p in self .distro and len (path ) <= depth :
114- if extra == "" :
115- ret = [f'{ p } =={ self .distro [p ]["version" ]} { version_req } ' ]
116- else :
117- ret = [f'{ p } [{ extra } ]=={ self .distro [p ]["version" ]} { version_req } ' ]
118- for r in self .distro [p ]["requires_dist" ]:
119- if r ["req_key" ] in self .distro :
120- if "req_marker" not in r or Marker (r ["req_marker" ]).evaluate (
121- environment = envi
122- ):
123- ret += self ._downraw (
124- r ["req_key" ],
125- r ["req_extra" ],
126- r ["req_version" ],
127- depth ,
128- path + [p ],
129- )
130- ret_all += [ret ]
118+ for extra in extras : # several extras request management
119+ envi = {"extra" : extra , ** self .environment }
120+ if extra == "" :
121+ ret = [f'{ p } =={ self .distro [p ]["version" ]} { version_req } ' ]
122+ else :
123+ ret = [f'{ p } [{ extra } ]=={ self .distro [p ]["version" ]} { version_req } ' ]
124+ for r in self .distro [p ]["requires_dist" ]:
125+ if r ["req_key" ] in self .distro :
126+ if "req_marker" not in r or Marker (r ["req_marker" ]).evaluate (
127+ environment = envi
128+ ):
129+ ret += self ._downraw (
130+ r ["req_key" ],
131+ r ["req_extra" ],
132+ r ["req_version" ],
133+ depth ,
134+ path + [p + "[" + extra + "]" ],
135+ )
136+ ret_all += [ret ]
131137 return ret_all
132138
133139 def _upraw (self , pp , extra = "" , version_req = "" , depth = 20 , path = []):
0 commit comments