@@ -192,41 +192,41 @@ def value_list(placeholder, values, placeholders):
192192 return ["" ]
193193 return values or [None ]
194194
195+ from collections import defaultdict
195196
196- # def expand_fof(zipped, fof_type=None):
197- # """
198- # """
199- # fof_list = to_list(fof_type)
197+ def expand_fof (zipped , fof_type = None ):
198+ """
199+ Espande una lista di tuple (zip) sostituendo il placeholder {fof_type}
200+ con i valori forniti. Altri placeholder (es. {member_id}, {member_type})
201+ vengono lasciati invariati.
202+ """
200203
201- # if isinstance(zipped, zip):
202- # zipped = list(zipped)
203- # elif isinstance(zipped, (list, tuple)):
204- # zipped = [(z,) if not isinstance(z, tuple) else z for z in zipped]
205- # else:
206- # zipped = [(zipped,)]
204+ fof_list = to_list (fof_type )
207205
208- # expanded = []
206+ if isinstance (zipped , zip ):
207+ zipped = list (zipped )
208+ elif isinstance (zipped , (list , tuple )):
209+ zipped = [(z ,) if not isinstance (z , tuple ) else z for z in zipped ]
210+ else :
211+ zipped = [(zipped ,)]
209212
210- # for items in zipped:
211- # placeholders = {
212- # key: any(f"{{{key}}}" in str(item) for item in items)
213- # for key in ("fof_type",)
214- # }
213+ expanded = []
214+
215+ for items in zipped :
216+ fof_values = value_list ("fof_type" , fof_list , {"fof_type" : True })
215217
216- # fof_values = value_list("fof_type", fof_list, placeholders)
218+ for fof_val in fof_values :
219+ safe_dict = defaultdict (lambda : "{%s}" % _placeholder , {"fof_type" : fof_val })
217220
218- # for fof_val in fof_values:
219- # formatted = [
220- # item.format(
221- # fof_type=fof_val or "{fof_type}",
222- # )
223- # for item in items
224- # ]
225- # expanded.append(
226- # formatted[0] if len(formatted) == 1 else tuple(formatted)
227- # )
221+ formatted = []
222+ for item in items :
223+ for _placeholder in ("member_id" , "member_type" ):
224+ safe_dict [_placeholder ] = "{%s}" % _placeholder
225+ formatted .append (item .format_map (safe_dict ))
228226
229- # return expanded
227+ expanded .append (formatted [0 ] if len (formatted ) == 1 else tuple (formatted ))
228+
229+ return expanded
230230
231231
232232# def expand_members(zipped, member_ids=None, member_type=None):
@@ -316,12 +316,24 @@ def expand_zip(zipped, fof_type=None, member_ids=None, member_type=None):
316316 fof_values = value_list ("fof_type" , fof_list , placeholders )
317317 member_values = value_list ("member_id" , member_list , placeholders )
318318
319+ if file_type is FileType .FOF :
320+ if member_type_list :
321+ member_type_list = [f"_member_id_{ mtype } _" for mtype in member_type_list ]
322+ else :
323+ if not (member_list and all (m == "ref" for m in member_list )):
324+ member_type_list = ["_member_id_" ]
325+ else :
326+ member_type_list = []
327+
319328 member_values_expanded = []
320329
321330 if file_type is FileType .STATS and member_type_list :
322- for m_id in member_values :
323- for m_type in member_type_list :
324- member_values_expanded .append (f"{ m_type } _{ m_id } " )
331+ if member_values :
332+ for m_id in member_values :
333+ for m_type in member_type_list :
334+ member_values_expanded .append (f"{ m_type } _{ m_id } " )
335+ else :
336+ member_values_expanded = member_type_list .copy ()
325337 else :
326338 member_values_expanded = member_values .copy ()
327339
@@ -331,6 +343,7 @@ def expand_zip(zipped, fof_type=None, member_ids=None, member_type=None):
331343 item .format (
332344 fof_type = fof_val or "{fof_type}" ,
333345 member_id = member_val or "{member_id}" ,
346+ member_type = member_type_list [0 ] if member_type_list else "{member_type}" ,
334347 )
335348 for item in items
336349 ]
0 commit comments