You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Il y a un problème avec l'héritage des clés de type liste dans le parser pl.
L'héritage est traité de la façon suivante dans le parser pl. Si le fichier A.pl hérite des fichiers B.pl et C.pl, le parser produit le dictionnaire des clés de A.pl, puis il produit le dictionnaire des clés de B.pl et étend le dictionnaire des clés de A.pl, puis il produit le dictionnaire des clés de C.pl et étend à nouveau le dictionnaire des clés de A.pl (et tout ça est récursif).
La procédure d'extension d'un dictionnaire A par un dictionnaire B est la suivante.
toutes les clés de B qui n'existent pas dans A sont ajoutées
pour les clés de B qui existent aussi dans A, ça dépend du type de la valeur associée à la clé:
si c'est une liste, on concatène les deux valeurs
si c'est un dictionnaire, on fait une extension (récursivement)
defextends_dict(target, source):
""" Will copy every key and value of source in target if key is not present in target """forkey, valueinsource.items():
ifkeynotintarget:
target[key] =valueeliftype(target[key]) isdict:
extends_dict(target[key], value)
eliftype(target[key]) islist:
target[key] +=valuereturntarget
Il faut absolument supprimer cette concaténation des listes. Elle n'est pas du tout naturelle. En tant que créateur d'exercices, on pense écraser une liste par une nouvelle valeur et on se retrouve avec une concaténation.
En plus ça crée un bug dans la parsing lui-même puisque les noms des fichiers dont on hérite sont stockés dans une liste dans le dictionnaire (dic['__extends']). Cette liste subit donc des concaténations indésirables au moment des extensions, alors qu'on itère dessus !
defprocess_extends(dic):
""" Extends dic with file in dic['__extends']. Return newly extended dic. Raise from loader.exceptions: - DirectoryNotFound if trying to load from a nonexistent directory - FileNotFound if the file do not exists."""warnings= []
foritemindic['__extends']:
try:
directory=Directory.objects.get(name=item['directory_name'])
ext_dic, warnings_ext=parse_file(directory, item['path'], extending=True)
warnings+=warnings_extdic=extends_dict(dic, ext_dic)
@nimdanor
Il y a un problème avec l'héritage des clés de type liste dans le parser pl.
L'héritage est traité de la façon suivante dans le parser pl. Si le fichier
A.pl
hérite des fichiersB.pl
etC.pl
, le parser produit le dictionnaire des clés deA.pl
, puis il produit le dictionnaire des clés deB.pl
et étend le dictionnaire des clés deA.pl
, puis il produit le dictionnaire des clés deC.pl
et étend à nouveau le dictionnaire des clés deA.pl
(et tout ça est récursif).La procédure d'extension d'un dictionnaire A par un dictionnaire B est la suivante.
Voilà la fonction qui fait cette extension (apps/loader/utils.py)
Il faut absolument supprimer cette concaténation des listes. Elle n'est pas du tout naturelle. En tant que créateur d'exercices, on pense écraser une liste par une nouvelle valeur et on se retrouve avec une concaténation.
En plus ça crée un bug dans la parsing lui-même puisque les noms des fichiers dont on hérite sont stockés dans une liste dans le dictionnaire (
dic['__extends']
). Cette liste subit donc des concaténations indésirables au moment des extensions, alors qu'on itère dessus !apps/loader/parser.py
The text was updated successfully, but these errors were encountered: