Projet

Général

Profil

Bug #38612

Categorie & unicité des slugs

Ajouté par Lauréline Guérin il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
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

Révision 2d96602a (diff)
Ajouté par Frédéric Péters il y a plus de 4 ans

categories: do not create duplicate slugs (#38612)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 4 ans

=> 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.

#2

Mis à jour par Nicolas Roche il y a plus de 4 ans

  • Statut changé de Solution proposée à Solution validée
#3

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)
#4

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

Formats disponibles : Atom PDF