[2020-04-24 16:52:25] ERROR - django.request : Internal Server Error: /billing/generate_pdf/17
Traceback (most recent call last):
File "/home/user/.virtualenvs/creme_2_1/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/user/.virtualenvs/creme_2_1/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/user/.virtualenvs/creme_2_1/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/.virtualenvs/creme_2_1/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/user/.virtualenvs/creme_2_1/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/srv/creme_crm-2.1/creme/billing/views/export.py", line 88, in export_as_pdf
f.write(smart_str(template.render(context)))
UnicodeEncodeError: 'ascii' codec can't encode character '\\xe9' in position 854: ordinal not in range(128
Dans d'autre circonstance, sur une erreur un peu similaire (mais sur une lecture alors là que vous avez une écriture), j'ai pu régler le problème en forçant l'encoding du open.
Alors clairement c'est plus une tentative désespérée qu'une vraie solution, mais cela peut marcher.
Si vous voulez tester je vous propose donc de remplacer la ligne 88 à savoir :
Code :
with open(latex_file_path, 'w') as f:
par :
Code :
with open(latex_file_path, 'w', encoding="utf-8") as f:
Je testerai lundi de mon coté, mais ça devrait partir dans un correctif de la version 2.1.4 sans souci ; même si cela semble étrange qu'un environnement nécessite de préciser l'encodage (alors que Creme dans ses settings déclare utiliser 'utf8'), on a déjà rencontré des soucis similaires pour des lectures de fichier sous Windows par exemple. je préfère un correctif au final assez anodin (si c'était 300 lignes de code ça serait un autre problème) qui fait que ça marche chez le plus de gens possibles, qu'un code "pur" mais qui ne marche pas en pratique. Après le principal problème (vu qu'on n'arrive pas à reproduite le bug) est que ce genre de souci pourrait arriver dans d'autres partie du code. J'ai regardé un peu les quelques parties qui pourraient être problématiques, mais elles me semblent OK.