cisstech / platon

Platform for Learning and Teaching Online
Other
13 stars 3 forks source link

Sandbox Python issue #7

Closed Ofghanirre closed 1 year ago

Ofghanirre commented 1 year ago

Hello ! Il semblerait que le code sandbox Python ait un problème:

Exemple: Fichier de test d'intégration du composant sortList, réalisé parfaitement en TS, tentative de le refaire en python, en utilisant la sandbox fournie:

author = "Antonin JEAN"

sandbox = "python"

input = :wc-sort-list
input.items =  [{id: "", content: "2", css: ""}, {id: "", content:"1", css: ""}, {id: "",content: "3", css: ""}]
inputSolution = :wc-sort-list
inputSolution.items =  [{id: "", content: "2", css: ""}, {id: "", content:"1", css: ""}, {id: "",content: "3", css: ""}]

builder==

==

grader==
grade = 0
feedback = {}
feedback['type'] = "error"
feedback['content'] = "Mauvaise réponse "
==

title==
SortList Implementation
==

statement ==
Trier la liste dans l'ordre alphanumérique
==

form==
{{input}}
==

settings.score = True
settings.feedback = True

Affichage : 🐛 Erreur


[Nest] 15198  - 06/05/2023, 3:36:16 PM   ERROR Error: Execution of the evaluating script failed due to an an unknown error. Please contact your teacher :

Traceback (most recent call last):
  File "runner.py", line 49, in <module>
    print(jsonpickle.encode(jsonify(variables), unpicklable=False))
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 101, in encode
    return backend.encode(context.flatten(value, reset=reset))
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 223, in flatten
    return self._flatten(obj)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 245, in _flatten
    return self._pop(self._flatten_obj(obj))
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 274, in _flatten_obj
    raise e
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 268, in _flatten_obj
    return flatten_func(obj)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 339, in _ref_obj_instance
    return self._flatten_obj_instance(obj)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 489, in _flatten_obj_instance
    self._flatten_dict_obj(obj, data)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 537, in _flatten_dict_obj
    flatten(k, v, data)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 613, in _flatten_key_value_pair
    data[k] = self._flatten(v)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 245, in _flatten
    return self._pop(self._flatten_obj(obj))
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 274, in _flatten_obj
    raise e
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 268, in _flatten_obj
    return flatten_func(obj)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 339, in _ref_obj_instance
    return self._flatten_obj_instance(obj)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 489, in _flatten_obj_instance
    self._flatten_dict_obj(obj, data)
  File "/usr/local/lib/python3.7/dist-packages/jsonpickle/pickler.py", line 536, in _flatten_dict_obj
    for k, v in sorted(obj.items(), key=util.itemgetter):
TypeError: 'list' object is not callable
    at Function.unknownError (/home/ofghanirre/work/internships/platon/platon/dist/apps/api/webpack:/libs/feature/player/server/src/lib/sandboxes/sandbox.ts:31:12)
    at PythonSandbox.<anonymous> (/home/ofghanirre/work/internships/platon/platon/dist/apps/api/webpack:/libs/feature/player/server/src/lib/sandboxes/python.ts:135:28)
    at Generator.next (<anonymous>)
    at fulfilled (/home/ofghanirre/work/internships/platon/platon/node_modules/tslib/tslib.js:164:62)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)```

J'ai essayé de ne garder que l'essentiel pour t'éviter d'avoir à chercher trop loin, mais de ce que je vois, le comportement est relativement différent de ce qu'on avait sur PL, et je n'ai pour l'instant repérer que cette erreur, mais il est possible qu'il y en est d'autres. Je vais continuer à essayer de traduire les composants de TS à Python pour t'apporter plus de détails 👍

Je te souhaite une bonne journée !

clementga commented 1 year ago

Corrigé sur le fork en retirant l'utilisation de easydict

Le problème avec easydict est que si des clés portant le même nom que des méthodes de dictionnaires sont utilisées, ça cause des problèmes (on ne peut plus appeler la méthode)

mciissee commented 1 year ago

J'ai pas accès aux forks, il y a un fix sur ce repo tout en gardant la lib easydict qui est une des features essentiels de la nouvelle syntaxe afin de simplifier la manipulation des objects.