Marmotte/respit feature#1415
Conversation
|
Merci pour cette PR ! |
|
Très bien. |
non, pas de |
Badatos
left a comment
There was a problem hiding this comment.
Voici déjà quelques corrections à apporter aux chaines i18n
| msgstr "Ce service n'est pas accessible." | ||
|
|
||
| msgid "Link to the video :" | ||
| msgstr "Lien vers la vidéo :" |
There was a problem hiding this comment.
En fait, avant chaque double-point (ainsi que pour les point-virgule, point d'exclamation, point d'interrogation), il faut un espace insécable en français. (un espace qui ne sera jamais coupé en fin de ligne).
- Sur MacOS par exemple, pour taper un espace insécable, on fait
ALT+espace - Sur Windows, ça doit se faire avec le raccourci
Alt+255
| msgstr "Ce service n'est pas accessible." | ||
|
|
||
| msgid "Link to the video :" | ||
| msgstr "Lien vers la vidéo :" |
There was a problem hiding this comment.
L'autre solution est de trouver un espace insécable ailleurs dans le fichier, et de le copier/coller ;)
| msgstr "Ce service n'est pas accessible." | ||
|
|
||
| msgid "Link to the video :" | ||
| msgstr "Lien vers la vidéo :" |
There was a problem hiding this comment.
Visuellement, il est quasi impossible de distinguer un espace normal d'un espace insécable. Pour les distinguer plus facilement, je vous invite à activer une option dans votre éditeur de texte qui permet de mieux les visualiser.
Sur l'éditeur VS Code par exemple, cela se fait avec le plugin https://marketplace.visualstudio.com/items?itemName=possan.nbsp-vscode
=> les espaces insécables apparaissent alors sur fond rouge, ce qui permet de les distinguer rapidement.
Je ne parviens pas à lance "make pystyle" root@pod:/usr/src/app# make pystyle A quelle niveau le lancer ? Y'a t'il une procédure particulière ? J'ai lancé l'installation dans le conteneur en faisant "pip install pystyle" au préalable. Je lance la commande "flake8" seul, j'ai tout un tas d'erreur d'écriture que je peux corriger, ça suffit ? Merci ! |
En fait, il faut préalablement avoir installé la commande black : pip install blackC'est notre faute, c'est vrai qu'on aurait du le mettre dans le requiremets-dev.txt Tu peux en effet corriger à la main ce que te signale flake8, mais black en corrige une bonne partie tout seul, ce serait bête de tout se coltiner ^^. |
There was a problem hiding this comment.
Hello,
Merci beaucoup pour tout ce travail.
Voici mes quelques remarques :
- répis -> répit
- si possible, mettre les commentaires en Anglais également
- la version init devrait être la 4.3.0 maintenant
Ok je fais ça ! J'avais en effet commencer à tout faire à la main ^^ |
There was a problem hiding this comment.
un petit détail : il me semble qu'il faut un espace après # pour les commentaires
There was a problem hiding this comment.
- Commentaires avec #, mais pas en début de lignes
- Les messages doivent être en Anglais avec utilisation de la traduction _()
| path = os.path.join(mediaPackage_dir, "") | ||
| shutil.rmtree(path) | ||
|
|
||
| return "/media/video_package/"+vid.slug+".zip" No newline at end of file |
There was a problem hiding this comment.
Ne faudrait il pas utiliser settings.MEDIA_ROOT plutôt que /media en dur ?
There was a problem hiding this comment.
Je n'ai trouvé aucune déclaration dans le settings. Ne sachant pas comment cela serait déclaré par les uns et les autres j'ai préféré assuré pour avoir de manière certaine "/media/video_package/" qui est le chemin que je veux avoir dans tout les cas. De plus une déclaration de MEDIA_ROOT peut influencer tout le logiciel ou une déclaration en dur ici m'assure avec certitude le chemin sans avoir de lien avec le reste pod avec lequel cette brique n'a rien à voir.
There was a problem hiding this comment.
Dans ce cas, alors ptet ajouter un parametrage "ARCHIVE_ROOT" que chacun pourra configurer en fonction de son arborescence ?
There was a problem hiding this comment.
Pourquoi utiliser des requêtes SQL ?
Je pense qu'il est préférable d'utiliser directement les objets via Video.objects.filter()... par exemple.
J'imagine qu'il doit y avoir un problème de complexité via flake; il faudra sûrement refactoriser.
There was a problem hiding this comment.
Plus facile à écrire, infiniment moins de trucs tordus à effectuer pour utiliser SUBSTRING, et oui flake. Je reste la dessus apriori.
There was a problem hiding this comment.
@LoicBonavent Est ce que je peux VRAIMENT pas garder les requêtes SQL ? Ca me force à repenser beaucoup de chose, je peux laisser ça comme ça ? Ou partiellement comme ça ?
There was a problem hiding this comment.
Hello, le fait de passer par des requêtes SQL pose potentiellement des problèmes de sécurité (typiquement des injections SQL). Mais si c'est géré et que tu es plus à l'aise avec des requêtes SQL, pas de soucis pour ma part.
Peut-être partiellement : dans les cas simples, si c'est possible, utiliser le mapping ORM, sinon des requêtes SQL.
There was a problem hiding this comment.
Merci beaucoup !
On y a passé la journée avec Alice mais on a finalement tout enlevé pour passer par du requêtage ORM exclusivement ;)
There was a problem hiding this comment.
Attention, il y a du Français dans le code.
There was a problem hiding this comment.
Pour les imports, tu peux utiliser l'extension isort; cela te fera des lignes d'import beaucoup plus propres
There was a problem hiding this comment.
- Il y a du Français, dans le nom des actions.
- Pourquoi garder du code commenté ? Ou alors dire s'il y a une utilité dans ce cas.
- Manque peut-être des lints
- Il faudrait aussi ajouter des docstrings pour les fonctions
|
Il semble y avoir un souci avec la CI... :/ |
| msgstr "Ce service n'est pas accessible." | ||
| msgstr "Ce service n’est pas disponible." | ||
|
|
||
| msgid "Link to the video :" |
There was a problem hiding this comment.
Jamais d'espace avant les signes de ponctuation double en anglais (link to the video:)
| @@ -11453,15 +11451,15 @@ msgid "Video Archiving" | |||
| msgstr "Archivage Vidéo" | |||
|
|
|||
| msgid "Are you sure you want to archive this video ?" | |||
There was a problem hiding this comment.
pas d'espace avant les signes de ponctuation doubles en anglais
| path = os.path.join(mediaPackage_dir, "") | ||
| shutil.rmtree(path) | ||
|
|
||
| return "/media/video_package/"+vid.slug+".zip" No newline at end of file |
There was a problem hiding this comment.
Dans ce cas, alors ptet ajouter un parametrage "ARCHIVE_ROOT" que chacun pourra configurer en fonction de son arborescence ?
|
|
||
| #: pod/video/templates/videos/well_prolonged.html | ||
| msgid "The video life span was extended to" | ||
| msgstr "La vidéo est prolongé jusqu'au" |
There was a problem hiding this comment.
il faut inclure les variables dans les chaines de caractères
| <legend>{% trans "Agreement required" %}</legend> | ||
| <div class="list-group-item"> | ||
| <div class="form-group form-group-required "> | ||
| <div>{% trans "Are you sure you want to archive this video ?" %}</div> |
There was a problem hiding this comment.
pas d'espace avant les signes doubles en anglais
| </a> | ||
| </div> | ||
|
|
||
| {% endblock page_content %} No newline at end of file |
There was a problem hiding this comment.
ajouter une ligne vide en fin de fichier
There was a problem hiding this comment.
comment ça se fait que flake8 ne l'est pas vu c'est un comportement attendu ?
vu sinon
There was a problem hiding this comment.
Flake8 ne regarde pas ca spécifiquement, c'est juste recommandé de toujours laisser une ligne vide en fin de fichier pour éviter des conflits sur un ajout ultérieur
| {% trans "Return to homepage." %} | ||
| </a> | ||
| </div> | ||
| {% endblock page_content %} No newline at end of file |
Je comprend pas trop ce que je dois faire avec tout ça .. |
Pour le moment, moi non plus. Est-ce que Pod tourne bien chez vous sur cette branche, y'a aucune erreur ? |
There was a problem hiding this comment.
à priori, le bug ne vient pas de la CI, puisqu'elle fonctionne sur les autres PR.
Il doit y a voir un truc dans les fichiers modifié dans cette PR même. Aucune erreur de votre coté en lancant Pod ?
There was a problem hiding this comment.
Non aucune erreur en lançant POD dans docker avec la commande make docker-start
Tout baigne ... donc du coup je sais pas ..
|
J'ai trouvé l'erreur. |
à la place, il faudrait plutot un |
| ) | ||
|
|
||
| # from django.contrib.auth.hashers import check_password | ||
| from ..custom.settings_local import WARN_DEADLINES |
There was a problem hiding this comment.
Ici, il faudrait plutôt WARN_DEADLINES = getattr(settings, "WARN_DEADLINES", [60,30,7]) pour toujours avoir une valeur par défaut.
There was a problem hiding this comment.
waaaaaaaaa c'est ça qui bloque ???? C'est ouf !!! Merci je vais retester ça ...
There was a problem hiding this comment.
C'est passé mais Y'a juste eu une petite erreur à la fin de l'exec ... je sais pas trop ce que ça veut dire pour l'instant ..
Merci pour le debug en tout cas ça a grave aidé ;)
|
On avance... cette fois, ce sont 2 erreurs flake8 : (à priori, un coup de |
d94deac to
eac4a62
Compare
Badatos
left a comment
There was a problem hiding this comment.
quelques corrections de textes :
|
|
||
| from pod.playlist.models import Playlist | ||
|
|
||
| # https://docs.djangoproject.com/fr/6.0/howto/custom-management-commands/ python3 manage.py respit_launcher |
There was a problem hiding this comment.
la commande python est à retirer ce ce commentaire, et à placer dans le cartouche pydoc au début du fichier
There was a problem hiding this comment.
c'est retiré.
Vu
|
|
||
|
|
||
| class Command(BaseCommand): | ||
| help = "Closes the specified poll for voting" |
There was a problem hiding this comment.
à mon avis cette class n'a rien à voir avec un sondage (poll)
There was a problem hiding this comment.
Très bonne remarque je sais pas ce que j'ai foutu.
vu
| "default_value": false, | ||
| "description": { | ||
| "en": [ | ||
| "Détermines if we enable a link send to take a decision about the futur of the concerned video during the reminder campaign sent by check_obsolete_video." |
There was a problem hiding this comment.
Enables sending a link to make a decision on the future of the video during the recall campaign instantiated by
check_obsolete_video.
Badatos
left a comment
There was a problem hiding this comment.
Quelques remarques supplémentaires :
(nb: je n'ai pas encore fini la relecture, mais je préfère envoyer au fur et à mesure pour que tu ai le temps de corriger)
| """ | ||
| ########################### | ||
| # Calcul control access | ||
| ########################### |
There was a problem hiding this comment.
Je pense que ce commentaire n'est pas utile et peut être retiré.
| step_date = vid.date_delete - timedelta(days=higher_warn) | ||
| display_or_not = date.today() >= step_date | ||
| ########################### | ||
| ########################### |
| </form> | ||
| <a href="/video/archive/and/download/{{ video.slug }}/">{% trans "Export this video." %}</a> | ||
| {% else %} | ||
| <h1>{% trans "This service is not available." %}</h1> |
There was a problem hiding this comment.
Ici, je pense qu'il faudrait distinguer 2 cas :
- Quand
ENABLE_PAGE_OBSO_MAIL == True, le message est en effet "This service is not available." - Mais quand
display_or_not == False, le message devrait plutôt êtreThis video is not close to its deletion date.si je comprend bien le cas.
There was a problem hiding this comment.
Y'a le cas où on rend le service indisponible involontairement. La fois où il n'est pas dans une période de campagne de rappel OU qu'il a déjà rajouter du temps de répit par la prolongation (même critère).
Dans tout les cas, l'utilisateur n'a pas besoin et de ne doit pas savoir les conditions. C'est notre politique interne côté admin ça ne le regarde pas.
| <form action="/video/valid/form/respit/{{ video.slug }}/" method="post"> | ||
| {% csrf_token %} | ||
| {{ form }} | ||
| <input type="submit" value="Submit"> |
There was a problem hiding this comment.
Attention "Submit" doit être traduit
| {% block page_content %} | ||
| <div class="list-group"> | ||
| <fieldset> | ||
| <legend>{% trans "Archive Download" %}</legend> |
There was a problem hiding this comment.
Combien de temps cette archive sera-t-elle disponible ? Est-elle supprimée automatiquement au bout d'un temps sur le serveur ?
There was a problem hiding this comment.
Non pas de suppression c'est une bonne remarque. Je dois mettre en place un cron pour le nettoyage ?
There was a problem hiding this comment.
Je pense que tu peux juste proposer un script shell, et indiquer dans la doc qu'il est conseillé de le mettre en cron à telle fréquence.
| """ | ||
| This function will launch a archive process and say if it has worked or not on an interface. | ||
| """ | ||
| if able_or_not_respit(slug) is True and ENABLE_PAGE_OBSO_MAIL: |
There was a problem hiding this comment.
Attention, il manque un "else" ici, car une vue ne peut pas ne rien renvoyer.
Ici, il faudrait faire un return HttpResponseBadRequest() avec un message indiquant la raison
| """ | ||
| This function will extend a video about RALLONGE_RESPIT_DAYS days and display the new delete_date. | ||
| """ | ||
| if able_or_not_respit(slug) is True and ENABLE_PAGE_OBSO_MAIL: |
There was a problem hiding this comment.
Attention, il manque un "else" ici, car une vue ne peut pas ne rien renvoyer.
Ici, il faudrait faire un return HttpResponseBadRequest() avec un message indiquant la raison
|
Attention, il y a une erreur dans le code : Traceback (most recent call last):
File "/home/runner/work/Esup-Pod/Esup-Pod/pod/video/tests/test_obsolescence.py", line 198, in test_delete_obsolete_video
) = cmd.get_video_archived_deleted_treatment()
File "/home/runner/work/Esup-Pod/Esup-Pod/pod/video/management/commands/check_obsolete_videos.py", line 301, in get_video_archived_deleted_treatment
self.write_in_csv(vid, "deleted")
AttributeError: 'Command' object has no attribute 'write_in_csv' |
|
Encore des soucis de flake8. Pense au |
Je suis trop bête j'avais oublié .. C'est corrigé ça devrait passer maintenant. |
Badatos
left a comment
There was a problem hiding this comment.
Quelques changement mineurs à appliquer sur les commentaires :
|
|
||
| from datetime import date, timedelta | ||
|
|
||
| # from pod.custom.settings_local import ENABLE_PAGE_OBSO_MAIL |
There was a problem hiding this comment.
ne pas laisser ce commentaire si ce n'est plus utilisé.
| # date_deletion=vid.date_delete | ||
| # ) | ||
| # vid_delete.video.add(vid) | ||
| # vid_delete.save() |
There was a problem hiding this comment.
ne pas conserver ce code s'il n'est plus utilisé.
| data_to_add["date_delete"] = p.date_delete | ||
| data_to_add["description"] = p.description | ||
|
|
||
| # Nombre de chaines |
There was a problem hiding this comment.
mettre les commentaires en anglais.
|
|
||
| data_to_add["channel_count"] = nb_chaine | ||
|
|
||
| # Nombre de fois en favoris |
| # Connecte l'utilisateur | ||
| self.client.force_login(self.user) | ||
|
|
||
| # Simule l'envoi du formulaire avec action Archive |
There was a problem hiding this comment.
mettre les commentaires en anglais.
| response = self.client.post( | ||
| f"/video/respit/{self.video1.slug}/", {"action": "Extend"} | ||
| ) | ||
| # Vérifie que le code HTTP est 200 |
There was a problem hiding this comment.
mettre les commentaires en anglais.
|
|
||
| # Simule l'envoi du formulaire avec action Archive | ||
| response = self.client.post(f"/video/go/prolong/{self.video1.slug}/") | ||
| # Vérifie que le code HTTP est 301 |
There was a problem hiding this comment.
mettre les commentaires en anglais.
|
|
||
| # Simule l'envoi du formulaire avec action Archive | ||
| response = self.client.post(f"/video/go/archive/{self.video1.slug}/") | ||
| # Vérifie que le code HTTP est 301 |
There was a problem hiding this comment.
mettre les commentaires en anglais.
| action = request.POST["action"] | ||
| if ( | ||
| action == "Delete" | ||
| ): # Si l'utilisateur sélectionne l'action "supprimer" dans l'interface |
There was a problem hiding this comment.
mettre les commentaires en anglais.
| ) | ||
| else: | ||
| raise Exception("Vous ne pouvez pas prolonger plus votre video") | ||
| print("") |
There was a problem hiding this comment.
Exception à mettre en anglais
| msgstr "Cette interface vous permet d'indiquer vos préférences quant au futur de votre vidéo sur cette plateforme." | ||
|
|
||
| msgid "Select this option if you want to extend the publication of your video by %(rrd)s days." | ||
| msgstr "Choisissez cette option si vous souhaitez prolonger de %(rrd)s jours la publication de votre vidéo" |
There was a problem hiding this comment.
il manque un point en fin de phrase
| PROLONGATION_GRANTED = False | ||
| DELETION_GRANTED = False | ||
| # flake8: noqa | ||
| RESPIT_MODEL_PARAMETERS = [] No newline at end of file |
There was a problem hiding this comment.
ajouter ligne vide en fin de fichier
| ENABLE_PAGE_OBSO_MAIL = False | ||
| PROLONGATION_GRANTED = False | ||
| DELETION_GRANTED = False | ||
| # flake8: noqa |
There was a problem hiding this comment.
pourquoi ce noqa est-il présent ?
There was a problem hiding this comment.
Pour faire passer le flake8 du RESPIT_MODEL_PARAMETERS = [] qui n'est pas utilisé ici.
Celine m'a demandé l'ajouter ici en vu d'une utilisation futur.
There was a problem hiding this comment.
alors il faut indiquer le code exact à ignorer par flake8, pour qu'il n'ignore pas toutes les règles.
There was a problem hiding this comment.
Je pensais que c'était ce que ça faisait, quelle est la ligne pour une ligne uniquement ?
There was a problem hiding this comment.
ca dépend du code d'erreur que te fait Flake8
Par exemple, s'il te signale l'erreur "E731", tu mets ceci :
# noqa: E731
(car # flake8: noqa ignore tout le fichier 😨 )
|
@Badatos Tu peux m'éclairer sur la raison pour laquelle je me mange un "container pod-back-with-volumes is unhealthy" ? |
En général, c'est parce qu'il y a une erreur dans Pod qui l'empeche de démarrer |
|
Pas mal, on approche de la fusion :) Il y a juqtes quelques lignes nouvelles qui ne sont pas couvertes par les tests unitaires, notamment dans video/utils.py, où les fonction suivantes mériteraient des tests :
|
Dev from Grenoble University about the archive and the respit calculator system.
Author : Florent Paccalet
Mail : florent.paccalet@univ-grenoble-alpes.fr