Bug #39858
decimal vs bytes pickle python 3
Début:
14 février 2020
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Non
Planning:
Non
Description
Exception: type = '<class 'TypeError'>', value = 'conversion from bytes to Decimal is not supported' Stack trace (most recent call first): File "/usr/lib/python3/dist-packages/wcs/sql.py", line 72, in pickle_loads 70 if hasattr(value, 'tobytes'): 71 value = value.tobytes() > 72 obj = UnpicklerClass(BytesIO(force_bytes(value)), **PICKLE_KWARGS).load() 73 if six.PY3: 74 obj = deep_bytes2str(obj) locals: value = b'\x80\x02]q\x01(cmodules.payments\nInvoiceEvolutionPart\nq\x02oq\x03}q\x04(U\x06actionq\x05U\x06createU\x06amountq\x06cdecimal\nDecimal\nq\x07U \x0575.40\x85Rq\x08U\x0btransactionq\tNU\x02idq\nU\x1920200213-r1-f121-74571-83U\x07subjectq\x0bU\x07Cantineuba.'
Historique
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Nouveau à Solution déployée
Évitement du module décimal écrit en C, /usr/lib/python3.5/decimal.py,
try: + raise ImportError from _decimal import * from _decimal import __doc__ from _decimal import __version__ from _decimal import __libmpdec_version__ except ImportError: from _pydecimal import * from _pydecimal import __doc__ from _pydecimal import __version__ from _pydecimal import __libmpdec_version__
Hack au module Python,
+ if isinstance(value, bytes): + value = value.decode('ascii')
Chargement/enregistrement des données concernées,
from wcs.formdef import FormDef for formdef in FormDef.select(): for formdata in formdef.data_class().select(): print(formdata) for evolution in formdata.evolution: for part in evolution.parts or []: if part.__class__.__name__ == 'InvoiceEvolutionPart': print(formdata) formdata.store() break else: continue break
Puis retrait des hacks.