Project

General

Profile

Bug #60611

Donnée calculée associée à une source de données, prefill avec une liste de valeurs

Added by Lauréline Guerin 14 days ago. Updated 14 days ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
13 Jan 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

History

#2

Updated by Lauréline Guerin 14 days ago

(pas trop convaincue par ce patch)

#6

Updated by Thomas Noël 14 days 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.

#8

Updated by Lauréline Guerin 14 days 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>}})

#10

Updated by Thomas Noël 14 days 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 :/

#11

Updated by Lauréline Guerin 14 days 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_Items
en 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_Items
en mode sql

et on a un wcs.variables.LazyList dans magictokens

Also available in: Atom PDF