Skip to content

Commit

Permalink
v16.1-scorpion
Browse files Browse the repository at this point in the history
  • Loading branch information
SpaceFox committed Feb 24, 2016
2 parents c866c3b + c7e586e commit f75f539
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
10 changes: 10 additions & 0 deletions doc/source/back-end/contents.rst
Expand Up @@ -177,6 +177,16 @@ une contrainte sur la taille maximum d'un nom de fichier sur les différents sys
*slug*, pour des raisons de stockage (voir plus bas). Il ne faut pas
oublier la contrainte d'unicité à l'intérieur d'un conteneur.

.. attention::

Suite à un changement majeur dans la librairie ``python-slugify``, une différence peu apparaitre dans le *slug*
généré à partir de titres contenant des espaces. Dès lors, pour des raisons de rétro-compatibilités, c'est la version
1.1.4 de cette librairie qui est utilisée par ZdS. Par ailleurs, la commande ``python manage.py adjust_slugs`` a été
créée pour réparer les éventuels dommages, en détectant les titres posant potentielement des problèmes et en tentant
de les faire correspondre à nouveau à leur contrepartie dans le système de fichier.

`Plus d'information ici <https://github.com/zestedesavoir/zds-site/issues/3383#issuecomment-187282828>`_.

Cycle de vie des contenus
=========================

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Expand Up @@ -34,4 +34,5 @@ dry-rest-permissions==0.1.6

# Zep 12 dependency
django-uuslug==1.0.3
python-slugify==1.1.4 # next versions of this library break previous behavior for slug generation from string with single quotes
watchdog==0.8.3 # use last non-bc-breaking version
8 changes: 8 additions & 0 deletions update.md
Expand Up @@ -432,3 +432,11 @@ systemctl start zds-watchdog.service

Il est possible de configurer le logging de ce module en surchargeant les logger `logging.getLogger("zds.pandoc-publicator")`, `logging.getLogger("zds.watchdog-publicator")`.

Repasser à l'ancienne version de `python-slugify` et sauver les contenus (#3383)
--------------------------------------------------------------------------------

1. Passer en maintenance ;
2. Mettre à jour les dépendances de zds afin de *downgrader* `python-slugify` : `pip install --upgrade -r requirements.txt` ;
3. Exécuter la commande suivante : `python manage.py adjust_slugs`. Noter les éventuels contenus pour lesquels cela ne fonctionnerai pas ;
4. Si pour certains contenus la commande échoue, il faut retrouver le dossier correspondant dans `/contents-private/` et donner à ce contenu le même slug ;
5. Quitter la maintenance.
53 changes: 53 additions & 0 deletions zds/tutorialv2/management/commands/adjust_slugs.py
@@ -0,0 +1,53 @@
# coding: utf-8
import os
from uuslug import slugify

from django.core.management.base import BaseCommand
from zds.settings import ZDS_APP
from zds.tutorialv2.models.models_database import PublishableContent


class Command(BaseCommand):
"""
`python manage.py adjust_slugs`; fix content's slugs for which the title contains single quote(s).
"""

def handle(self, *args, **options):

for c in PublishableContent.objects.all():
if '\'' in c.title:
good_slug = slugify(c.title)
if c.slug != good_slug:
if os.path.isdir(os.path.join(ZDS_APP['content']['repo_private_path'], good_slug)):
# this content was created before v16 and is probably broken
self.stdout.write(u'Fixing pre-v16 content #{} (« {} ») ... '.format(c.pk, c.title), ending='')
c.save()
if os.path.isdir(c.get_repo_path()):
self.stdout.write(u'[OK]')
else:
self.stdout.write(u'[KO]')
elif os.path.isdir(os.path.join(ZDS_APP['content']['repo_private_path'], c.slug)):
# this content was created during v16 and will be broken if nothing is done
self.stdout.write(u'Fixing in-v16 content #{} (« {} ») ... '.format(c.pk, c.title), ending='')
try:
versioned = c.load_version()
except IOError:
self.stdout.write(u'[KO]')
else:
c.sha_draft = versioned.repo_update_top_container(
c.title,
good_slug,
versioned.get_introduction(),
versioned.get_conclusion(),
commit_message='[hotfix] Corrige le slug')

c.save()

if os.path.isdir(c.get_repo_path()):
self.stdout.write(u'[OK]')
else:
self.stdout.write(u'[KO]')
else:
self.stderr.write(
u'Content #{} (« {} ») is an orphan: there is no directory named "{}" or "{}".\n'.
format(c.pk, c.title, good_slug, c.slug))

0 comments on commit f75f539

Please sign in to comment.