Développement #60611
Donnée calculée associée à une source de données, prefill avec une liste de valeurs
0%
Description
par exemple: {{ cards|objects:"%s"|getlist:"id"|join:"," }}
Exception: type = '<class '_pickle.PicklingError'>', value = 'Can't pickle <class 'wcs.carddef._wcs_Items'>: it's not the same object as wcs.carddef._wcs_Items' Stack trace (most recent call first): File "/home/lguerin/src/wcs/wcs/sql.py", line 2769, in store 2767 sql_dict = { 2768 'id': self.id, > 2769 'session_data': bytearray(pickle.dumps(self.__dict__, protocol=2)), 2770 # the other fields are stored to run optimized SELECT() against the 2771 # table, they are ignored when loading the data.
Files
Related issues
History
Updated by Lauréline Guérin about 3 years ago
- File 0001-fields-fix-computed-value-with-lazylist-60600.patch 0001-fields-fix-computed-value-with-lazylist-60600.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
(pas trop convaincue par ce patch)
Updated by Thomas Noël about 3 years ago
Lauréline Guerin a écrit :
(pas trop convaincue par ce patch)
Non plus, mais dans un premier temps, pourquoi pas.
Ceci dit je ne comprends pas le test, il fait un "join" mais on recevrait quand même un wcs.variables.LazyList ? J'ai des doutes.
Updated by Lauréline Guérin about 3 years ago
Ceci dit je ne comprends pas le test, il fait un "join" mais on recevrait quand même un wcs.variables.LazyList ? J'ai des doutes.
Moi non plus je ne comprends pas bien pourquoi on a un LazyList à la fin, malgré le |join
(note: quand je regarde ce qu'on a dans session pour ce test, qui foire sur le store, je trouve ça: 'magictokens': {'p5eEO01egig-computed': {'1': <wcs.variables.LazyList object at 0x7efd9c50d8e0>}}
)
Updated by Thomas Noël about 3 years ago
Lauréline Guerin a écrit :
Ceci dit je ne comprends pas le test, il fait un "join" mais on recevrait quand même un wcs.variables.LazyList ? J'ai des doutes.
Moi non plus je ne comprends pas bien pourquoi on a un LazyList à la fin, malgré le |join
(note: quand je regarde ce qu'on a dans session pour ce test, qui foire sur le store, je trouve ça:'magictokens': {'p5eEO01egig-computed': {'1': <wcs.variables.LazyList object at 0x7efd9c50d8e0>}}
)
Ok je pense qu'il y a un problème plus grave quelque part. Et j'ai l'impression que ce str(value) risque de le cacher :/
Updated by Lauréline Guérin about 3 years ago
pour info:formdef.fields[0].value_template = '{{ cards|objects:"%s"|getlist:"id" }}' % carddef.url_name
dans le test et sans le patch value = str(value)
, on a bien une LoggedError comme attendu
avec formdef.fields[0].value_template = '{{ cards|objects:"%s"|getlist:"id"|join:"," }}' % carddef.url_name
dans le test et sans le patch value = str(value)
:
Traceback (most recent call last): File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/django/utils/deprecation.py", line 96, in __call__ response = self.process_response(request, response) File "/home/lguerin/src/wcs/wcs/middleware.py", line 99, in process_response pub.session_manager.finish_successful_request() File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/quixote/session.py", line 392, in finish_successful_request self.maintain_session(session) File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/quixote/session.py", line 299, in maintain_session self[session.id] = session File "/home/lguerin/src/wcs/wcs/qommon/sessions.py", line 398, in __setitem__ session.store() File "/home/lguerin/src/wcs/wcs/qommon/sessions.py", line 159, in store return super().store(*args, **kwargs) File "/home/lguerin/src/wcs/wcs/qommon/storage.py", line 735, in store s = self.storage_dumps(self) File "/home/lguerin/src/wcs/wcs/qommon/storage.py", line 703, in storage_dumps return pickle.dumps(object, protocol=2) _pickle.PicklingError: Can't pickle <class 'wcs.carddef._wcs_Items'>: it's not the same object as wcs.carddef._wcs_Itemsen mode pickle et
Traceback (most recent call last): File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/django/utils/deprecation.py", line 96, in __call__ response = self.process_response(request, response) File "/home/lguerin/src/wcs/wcs/middleware.py", line 99, in process_response pub.session_manager.finish_successful_request() File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/quixote/session.py", line 392, in finish_successful_request self.maintain_session(session) File "/home/lguerin/envs/publik-env-py3/lib/python3.9/site-packages/quixote/session.py", line 299, in maintain_session self[session.id] = session File "/home/lguerin/src/wcs/wcs/qommon/sessions.py", line 398, in __setitem__ session.store() File "/home/lguerin/src/wcs/wcs/sql.py", line 509, in f return func(*args, **kwargs) File "/home/lguerin/src/wcs/wcs/sql.py", line 2768, in store 'session_data': bytearray(pickle.dumps(self.__dict__, protocol=2)), _pickle.PicklingError: Can't pickle <class 'wcs.carddef._wcs_Items'>: it's not the same object as wcs.carddef._wcs_Itemsen mode sql
et on a un wcs.variables.LazyList dans magictokens
Updated by Lauréline Guérin over 2 years ago
- Related to Bug #66923: erreur pickle à la sauvegarde d'une session : Can't pickle <class 'wcs.carddef._wcs_Djs-Famille-Team13'>: it's not the same object as wcs.carddef._wcs_Djs-Famille-Team13 added