Bug #38612
Categorie & unicité des slugs
Début:
18 décembre 2019
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Pour reproduire:
- créer une première catégorie "Formation"
- créer une seconde catégorie "formation"
- créer un formulaire liée à l'une des catégorie précédemment créée
=> erreur 500
Environment: Request Method: POST Request URL: https://wcs.dev.publik.love/backoffice/forms/new Django Version: 1.11.18 Python Version: 2.7.16 Installed Applications: ('gadjo', 'wcs.ctl', 'wcs.qommon', 'django.contrib.staticfiles') Installed Middleware: ('hobo.middleware.utils.StoreRequestMiddleware', 'hobo.middleware.xforwardedfor.XForwardedForMiddleware', 'hobo.middleware.VersionMiddleware', 'hobo.middleware.cors.CORSMiddleware', 'hobo.middleware.utils.StoreRequestMiddleware', 'hobo.middleware.xforwardedfor.XForwardedForMiddleware', 'hobo.middleware.VersionMiddleware', 'hobo.middleware.cors.CORSMiddleware', 'django.middleware.common.CommonMiddleware', 'wcs.middleware.PublisherInitialisationMiddleware', 'wcs.compat.PublishErrorMiddleware', 'wcs.middleware.AfterJobsMiddleware', 'hobo.middleware.PrometheusStatsMiddleware') Traceback: File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 41. response = get_response(request) File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response 249. response = self._get_response(request) File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request) File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 68. return self.dispatch(request, *args, **kwargs) File "/home/lguerin/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 88. return handler(request, *args, **kwargs) File "/home/lguerin/src/wcs/wcs/views.py" in post 29. return self.get(request, *args, **kwargs) File "/home/lguerin/src/wcs/wcs/compat.py" in get 58. context = {'body': get_publisher().finish_failed_request()} File "/home/lguerin/src/wcs/wcs/qommon/publisher.py" in finish_failed_request 279. tb) File "/home/lguerin/src/wcs/wcs/qommon/publisher.py" in _generate_plaintext_error 188. exc_value = force_text(str(exc_value), errors='ignore').encode('ascii') Exception Type: UnicodeEncodeError at /backoffice/forms/new Exception Value: 'ascii' codec can't encode character u'\xab' in position 21: ordinal not in range(128)
/home/lguerin/src/wcs/wcs/qommon/publisher.py in _generate_plaintext_error self.session_manager.finish_successful_request() return output def _generate_plaintext_error(self, request, original_response, exc_type, exc_value, tb, limit = None): if exc_value and six.PY2: # do not fail on exception strings using non-ascii chars exc_value = force_text(str(exc_value), errors='ignore').encode('ascii') ... if not self.USE_LONG_TRACES: if not request: # this happens when an exception is raised by an afterjob request = HTTPRequest(None, {}) if not request.form: request.form = {} ▼ Local vars Variable Value exc_type <class 'psycopg2.errors.DuplicateTable'> exc_value DuplicateTable('ERREUR: la relation \xc2\xab wcs_category_formation \xc2\xbb existe d\xc3\xa9j\xc3\xa0\n',) limit None original_response <wcs.qommon.http_response.HTTPResponse instance at 0x7f7669f00950> request <wcs.compat.CompatHTTPRequest instance at 0x7f7670f024d0> self <wcs.compat.CompatWcsPublisher object at 0x7f7669ecfd90> tb <traceback object at 0x7f7669e4a9e0>
Exception: type = '<class 'psycopg2.ProgrammingError'>', value = 'relation "wcs_category_formation" already exists ' Stack trace (most recent call first): File "/usr/lib/python2.7/dist-packages/wcs/sql.py", line 949, in do_global_views 947 name = get_name_as_sql_identifier(category.url_name)[:40] 948 cur.execute('''CREATE VIEW wcs_category_%s AS SELECT * from wcs_all_forms > 949 WHERE category_id = %s''' % (name, category.id)) 950 951
=> ajouter une contrainte d'unicité sur le slug du model Category ?
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Fichier 0001-categories-do-not-create-duplicate-slugs-38612.patch 0001-categories-do-not-create-duplicate-slugs-38612.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Frédéric Péters
- Patch proposed changé de Non à Oui
=> ajouter une contrainte d'unicité sur le slug du model Category ?
Comme on n'est pas en postgresql pour les catégories, comme le slug n'est jamais mis qu'automatiquement, je modifie juste le .store() pour créer un nom unique.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 2d96602aeb688e1d07914f90be4a5233edb4400f Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Dec 18 09:58:58 2019 +0100 categories: do not create duplicate slugs (#38612)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
categories: do not create duplicate slugs (#38612)