Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Faire passer de Django 1.8 à Django 1.10 un projet de plus de 170K lignes !

MrJmad
September 23, 2017

Faire passer de Django 1.8 à Django 1.10 un projet de plus de 170K lignes !

L'un des derniers projet auquel j'ai participé consistait à faire la migration de Django 1.8 à Django 1.10 pour un vraiment gros projet Django. Cette conférence sera l'occasion de détailler notre cheminement et de revenir sur cette expérience au final assez amusante. Après tout, vous aussi vous allez peut-être vouloir migrer votre gros applicatif django 1.8 ?

MrJmad

September 23, 2017
Tweet

More Decks by MrJmad

Other Decks in Programming

Transcript

  1. Recueillir des indices Analyser la situation Trouver le coupable Un

    travail de détective Sautons à la conclusion Et dans tout les bons polars, il y a une voix Off, me voila !
  2. Travail en binôme Hugo et votre serviteur En alternance Mais

    pourquoi ? Les enquêteurs Je suis sur que toute cette conf, c’est juste pour porter ce chapeau ridicule !
  3. Rubber ducking Contrer le biais de confirmation Pouvoir se passer

    la main Pourquoi en binôme ? Et puis bon, niveau planning ce n’était pas possible autrement
  4. Sherlock et Watson Starsky et Hutch Jennifer et Jonathan Hart

    Les grands détectives sont des binômes Ouaip, et puis Maigret et … sa pipe aussi !
  5. Projet django débuté en 2011 Plus de 170K ligne de

    python Des templates, tout tout plein Un pip-freeze de 135 lignes On migre quoi ?
  6. 1.8 1.9 → Mise en production 1.9 1.10 → Il

    manque mise en production de la 1.10 dans le slide … rah la la Migration en 2 étapes
  7. Migrations des dépendances Grosse branche de travail Backportage maximum PR

    finale de migration 1.8 1.9 → 1.8 1.9 → Et voila que maintenant, il invente des mots..
  8. Migrations des dépendances Branche de travail Backportage au plus tôt

    PR finale de migration 1.9 1.10 → 1.9 1.10 →
  9. En mode au plus proche Incompatibilité des dépendances Gérer les

    changements fonctionnels -e git+ssh est votre ami Migration de dépendances
  10. Changelog des versions Code source de Django Code source des

    dépendances Les tests de votre application Une ligne directe vers l’équipe de dev La ligne directe, ce n’était pas un gros téléphone rouge … Dommage !
  11. Suppression du support de la notation pointée dans url() url(‘REGEX’,

    ‘core.bla.views’) url(‘REGEX’, core.bla.views) Seulement déprécié en 1.9 Ça n’est peut être rien pour vous, mais pour django ça veut dire beaucoup Changement url()
  12. The add() method on a reverse foreign key now has

    a bulk parameter to allow executing one query regardless of the number of objects being added rather than one query per object. RelatedManager et add()
  13. SURPRISE !!!! Nouvelle signature : add(*objs, bulk=True) Ancien comportement :add(*objs,

    bulk=False) RelatedManager et add() Vous pouvez ajouter ici la citation de James Doakes.
  14. assertRedirect n’aime plus les URL absolues. On est au slide

    26, vous avez déjà survécu à la moitié !
  15. render(), les dict et les Context Heureusement on peut faire

    context_object.flatten() Changement dans render()
  16. Select_related devient strict sur ce qu’on lui passe en paramètres

    On ne peut plus lui passer de champs non relationnels select_related() et consistance
  17. On peut avoir des valeurs par défaut pour un champ

    On peut utiliser un callable pour calculer les valeurs par défaut MAIS !! Database, default et callable 1/2 On est au slide 31, vous avez déjà .. Ha Ha
  18. On NE PEUT PLUS utiliser un callable qui utilise la

    base de données !! Contournement mis en place dans le save() du model Database, default et callable 2/2
  19. Avant 1.10: if value is None: return None return bool(value)

    En 1.10 par contre : if value is None: return None return self.to_python(value) NullBooleanField et get_prep_value
  20. is_authenticated() et is_anonymous() deviennent des property ou des attributs ModelBackend

    d’authentification qui rejettent les utilisateurs inactifs render() des widgets change de signature (plus d’args choices) Petites joies des changements
  21. Recueillir des indices Analyser la situation Trouver le coupable Un

    travail de détective Ce recyclage de slides, si ce n’est pas une honte !
  22. Tenez à jour vos standards de code Gérez vos dépendances,

    jour après jour Soignez vos tests Traquez les warnings django Pensez y, chaque matin en vous regardant dans la glace Une migration se prépare
  23. Commencez tôt, en découpant les choses Ne bloquez pas toute

    l’équipe dessus Intégrez la migration dans le process de dev Stratégie Canari à mettre en place ? C’est comme pour les slides, on ne les écrit pas dans le train qui amène à la conf ! N’attendez pas le dernier moment
  24. On ne migre pas entre deux phases de dev On

    dev entre deux phases de migrations ! Mais c’est quoi cette maxime toute pourrie ?