From 600ebd087e1b29256154ea9b9c178cba5cda17bc Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Sun, 19 Feb 2023 19:49:03 +0100 Subject: [PATCH] Add forbidden trigrams, closes #17 --- .../migrations/0003_alter_team_trigram.py | 19 ++ apps/participation/models.py | 6 +- locale/fr/LC_MESSAGES/django.po | 252 +++++++++--------- tfjm/settings.py | 27 +- 4 files changed, 174 insertions(+), 130 deletions(-) create mode 100644 apps/participation/migrations/0003_alter_team_trigram.py diff --git a/apps/participation/migrations/0003_alter_team_trigram.py b/apps/participation/migrations/0003_alter_team_trigram.py new file mode 100644 index 0000000..80e5adb --- /dev/null +++ b/apps/participation/migrations/0003_alter_team_trigram.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.18 on 2023-02-19 22:13 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('participation', '0002_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='team', + name='trigram', + field=models.CharField(help_text='The trigram must be composed of three uppercase letters.', max_length=3, unique=True, validators=[django.core.validators.RegexValidator('^[A-Z]{3}$'), django.core.validators.RegexValidator('^(?!BIT$|CNO$|CRO$|CUL$|FTG$|FCK$|FUC$|FUK$|FYS$|HIV$|IST$|MST$|KKK$|KYS$|SEX$)', message='This trigram is forbidden.')], verbose_name='trigram'), + ), + ] diff --git a/apps/participation/models.py b/apps/participation/models.py index 04b498b..5fd3239 100644 --- a/apps/participation/models.py +++ b/apps/participation/models.py @@ -39,7 +39,11 @@ class Team(models.Model): verbose_name=_("trigram"), help_text=_("The trigram must be composed of three uppercase letters."), unique=True, - validators=[RegexValidator("[A-Z]{3}")], + validators=[ + RegexValidator(r"^[A-Z]{3}$"), + RegexValidator(fr"^(?!{'|'.join(f'{t}$' for t in settings.FORBIDDEN_TRIGRAMS)})", + message=_("This trigram is forbidden.")), + ], ) access_code = models.CharField( diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index a38a624..90ab862 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: TFJM\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 20:31+0100\n" +"POT-Creation-Date: 2023-02-19 19:48+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emmy D'Anello \n" "Language-Team: LANGUAGE \n" @@ -99,88 +99,88 @@ msgstr "changelogs" msgid "Changelog of type \"{action}\" for model {model} at {timestamp}" msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}" -#: apps/participation/admin.py:19 apps/participation/models.py:314 +#: apps/participation/admin.py:19 apps/participation/models.py:318 #: apps/participation/tables.py:44 apps/registration/models.py:370 msgid "valid" msgstr "valide" -#: apps/participation/forms.py:30 +#: apps/participation/forms.py:29 msgid "This name is already used." msgstr "Ce nom est déjà utilisé." -#: apps/participation/forms.py:37 apps/participation/models.py:40 +#: apps/participation/forms.py:36 apps/participation/models.py:40 msgid "The trigram must be composed of three uppercase letters." msgstr "Le trigramme doit être composé de trois lettres majuscules." -#: apps/participation/forms.py:40 +#: apps/participation/forms.py:39 msgid "This trigram is already used." msgstr "Ce trigramme est déjà utilisé." -#: apps/participation/forms.py:55 +#: apps/participation/forms.py:54 msgid "No team was found with this access code." msgstr "Aucune équipe n'a été trouvée avec ce code d'accès." -#: apps/participation/forms.py:84 apps/participation/forms.py:284 -#: apps/registration/forms.py:117 apps/registration/forms.py:139 -#: apps/registration/forms.py:161 apps/registration/forms.py:215 +#: apps/participation/forms.py:83 apps/participation/forms.py:281 +#: apps/registration/forms.py:121 apps/registration/forms.py:143 +#: apps/registration/forms.py:165 apps/registration/forms.py:219 msgid "The uploaded file size must be under 2 Mo." msgstr "Le fichier envoyé doit peser moins de 2 Mo." -#: apps/participation/forms.py:86 apps/registration/forms.py:119 -#: apps/registration/forms.py:141 apps/registration/forms.py:163 -#: apps/registration/forms.py:217 +#: apps/participation/forms.py:85 apps/registration/forms.py:123 +#: apps/registration/forms.py:145 apps/registration/forms.py:167 +#: apps/registration/forms.py:221 msgid "The uploaded file must be a PDF, PNG of JPEG file." msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG." -#: apps/participation/forms.py:104 +#: apps/participation/forms.py:103 msgid "I engage myself to participate to the whole TFJM²." msgstr "Je m'engage à participer à l'intégralité du TFJM²." -#: apps/participation/forms.py:119 +#: apps/participation/forms.py:118 msgid "Message to address to the team:" msgstr "Message à adresser à l'équipe :" -#: apps/participation/forms.py:157 +#: apps/participation/forms.py:154 msgid "The uploaded file size must be under 5 Mo." msgstr "Le fichier envoyé doit peser moins de 5 Mo." -#: apps/participation/forms.py:159 apps/participation/forms.py:286 +#: apps/participation/forms.py:156 apps/participation/forms.py:283 msgid "The uploaded file must be a PDF file." msgstr "Le fichier envoyé doit être au format PDF." -#: apps/participation/forms.py:163 +#: apps/participation/forms.py:160 msgid "The PDF file must not have more than 30 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages." -#: apps/participation/forms.py:200 +#: apps/participation/forms.py:197 msgid "CSV file:" msgstr "Tableur au format CSV :" -#: apps/participation/forms.py:217 +#: apps/participation/forms.py:214 msgid "" "This file contains non-UTF-8 content. Please send your sheet as a CSV file." msgstr "" "Ce fichier contient des éléments non-UTF-8. Merci d'envoyer votre tableur au " "format CSV." -#: apps/participation/forms.py:242 +#: apps/participation/forms.py:239 msgid "The following note is higher of the maximum expected value:" msgstr "La note suivante est supérieure au maximum attendu :" -#: apps/participation/forms.py:250 +#: apps/participation/forms.py:247 msgid "The following user was not found:" msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :" -#: apps/participation/forms.py:267 +#: apps/participation/forms.py:264 msgid "The defender, the opponent and the reporter must be different." msgstr "" "Læ défenseur⋅se, l'opposant⋅e et læ rapporteur⋅e doivent être différent⋅es." -#: apps/participation/forms.py:271 +#: apps/participation/forms.py:268 msgid "This defender did not work on this problem." msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème." -#: apps/participation/models.py:33 apps/participation/models.py:131 +#: apps/participation/models.py:33 apps/participation/models.py:135 #: apps/participation/tables.py:17 apps/participation/tables.py:34 msgid "name" msgstr "nom" @@ -189,158 +189,162 @@ msgstr "nom" msgid "trigram" msgstr "trigramme" -#: apps/participation/models.py:47 +#: apps/participation/models.py:45 +msgid "This trigram is forbidden." +msgstr "Ce trigramme est interdit." + +#: apps/participation/models.py:51 msgid "access code" msgstr "code d'accès" -#: apps/participation/models.py:48 +#: apps/participation/models.py:52 msgid "The access code let other people to join the team." msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe." -#: apps/participation/models.py:52 +#: apps/participation/models.py:56 msgid "motivation letter" msgstr "lettre de motivation" -#: apps/participation/models.py:118 +#: apps/participation/models.py:122 #, python-brace-format msgid "Team {name} ({trigram})" msgstr "Équipe {name} ({trigram})" -#: apps/participation/models.py:121 apps/participation/models.py:299 +#: apps/participation/models.py:125 apps/participation/models.py:303 #: apps/registration/models.py:123 msgid "team" msgstr "équipe" -#: apps/participation/models.py:122 apps/participation/tables.py:85 +#: apps/participation/models.py:126 apps/participation/tables.py:85 msgid "teams" msgstr "équipes" -#: apps/participation/models.py:136 +#: apps/participation/models.py:140 msgid "start" msgstr "début" -#: apps/participation/models.py:141 +#: apps/participation/models.py:145 msgid "end" msgstr "fin" -#: apps/participation/models.py:147 +#: apps/participation/models.py:151 #: apps/participation/templates/participation/tournament_detail.html:18 msgid "place" msgstr "lieu" -#: apps/participation/models.py:151 +#: apps/participation/models.py:155 msgid "max team count" msgstr "nombre maximal d'équipes" -#: apps/participation/models.py:156 +#: apps/participation/models.py:160 #: apps/participation/templates/participation/tournament_detail.html:21 msgid "price" msgstr "prix" -#: apps/participation/models.py:161 +#: apps/participation/models.py:165 #: apps/participation/templates/participation/tournament_detail.html:24 msgid "remote" msgstr "à distance" -#: apps/participation/models.py:166 +#: apps/participation/models.py:170 msgid "limit date for registrations" msgstr "date limite d'inscription" -#: apps/participation/models.py:171 +#: apps/participation/models.py:175 msgid "limit date to upload solutions" msgstr "date limite pour envoyer les solutions" -#: apps/participation/models.py:176 +#: apps/participation/models.py:180 msgid "random draw for solutions" msgstr "tirage au sort des solutions" -#: apps/participation/models.py:181 +#: apps/participation/models.py:185 msgid "limit date to upload the syntheses for the first phase" msgstr "date limite pour envoyer les notes de synthèses pour la première phase" -#: apps/participation/models.py:186 +#: apps/participation/models.py:190 msgid "date when the solutions for the second round become available" msgstr "date à laquelle les solutions pour le second tour sont accessibles" -#: apps/participation/models.py:191 +#: apps/participation/models.py:195 msgid "limit date to upload the syntheses for the second phase" msgstr "date limite d'envoi des notes de synthèse pour la seconde phase" -#: apps/participation/models.py:196 +#: apps/participation/models.py:200 #: apps/participation/templates/participation/tournament_detail.html:48 msgid "description" msgstr "description" -#: apps/participation/models.py:202 +#: apps/participation/models.py:206 #: apps/participation/templates/participation/tournament_detail.html:12 msgid "organizers" msgstr "organisateur⋅rices" -#: apps/participation/models.py:207 +#: apps/participation/models.py:211 msgid "final" msgstr "finale" -#: apps/participation/models.py:284 apps/participation/models.py:308 -#: apps/participation/models.py:340 +#: apps/participation/models.py:288 apps/participation/models.py:312 +#: apps/participation/models.py:344 msgid "tournament" msgstr "tournoi" -#: apps/participation/models.py:285 +#: apps/participation/models.py:289 msgid "tournaments" msgstr "tournois" -#: apps/participation/models.py:315 +#: apps/participation/models.py:319 msgid "The participation got the validation of the organizers." msgstr "La participation a été validée par les organisateur⋅rices." -#: apps/participation/models.py:320 +#: apps/participation/models.py:324 msgid "selected for final" msgstr "sélectionnée pour la finale" -#: apps/participation/models.py:321 +#: apps/participation/models.py:325 msgid "The team is selected for the final tournament." msgstr "L'équipe est sélectionnée pour la finale." -#: apps/participation/models.py:328 +#: apps/participation/models.py:332 #, python-brace-format msgid "Participation of the team {name} ({trigram})" msgstr "Participation de l'équipe {name} ({trigram})" -#: apps/participation/models.py:331 apps/participation/models.py:528 -#: apps/participation/models.py:558 apps/participation/models.py:596 +#: apps/participation/models.py:335 apps/participation/models.py:532 +#: apps/participation/models.py:562 apps/participation/models.py:600 msgid "participation" msgstr "participation" -#: apps/participation/models.py:332 apps/participation/models.py:354 +#: apps/participation/models.py:336 apps/participation/models.py:358 msgid "participations" msgstr "participations" -#: apps/participation/models.py:344 +#: apps/participation/models.py:348 msgid "round" msgstr "tour" -#: apps/participation/models.py:346 apps/participation/models.py:347 +#: apps/participation/models.py:350 apps/participation/models.py:351 #, python-brace-format msgid "Round {round}" msgstr "Tour {round}" -#: apps/participation/models.py:360 +#: apps/participation/models.py:364 msgid "juries" msgstr "jurys" -#: apps/participation/models.py:367 +#: apps/participation/models.py:371 msgid "BigBlueButton URL" msgstr "Lien BigBlueButton" -#: apps/participation/models.py:368 +#: apps/participation/models.py:372 msgid "The link of the BBB visio for this pool." msgstr "Le lien du salon BBB pour cette poule." -#: apps/participation/models.py:373 +#: apps/participation/models.py:377 msgid "results available" msgstr "résultats disponibles" -#: apps/participation/models.py:374 +#: apps/participation/models.py:378 msgid "" "Check this case when results become accessible to teams. They stay " "accessible to you. Only averages are given." @@ -349,45 +353,45 @@ msgstr "" "Ils restent toujours accessibles pour vous. Seules les moyennes sont " "communiquées." -#: apps/participation/models.py:390 +#: apps/participation/models.py:394 #, python-brace-format msgid "Pool of day {round} for tournament {tournament} with teams {teams}" msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}" -#: apps/participation/models.py:396 apps/participation/models.py:404 +#: apps/participation/models.py:400 apps/participation/models.py:408 msgid "pool" msgstr "poule" -#: apps/participation/models.py:397 +#: apps/participation/models.py:401 msgid "pools" msgstr "poules" -#: apps/participation/models.py:409 +#: apps/participation/models.py:413 msgid "defended solution" msgstr "solution défendue" -#: apps/participation/models.py:411 apps/participation/models.py:565 +#: apps/participation/models.py:415 apps/participation/models.py:569 #, python-brace-format msgid "Problem #{problem}" msgstr "Problème n°{problem}" -#: apps/participation/models.py:418 apps/participation/tables.py:106 +#: apps/participation/models.py:422 apps/participation/tables.py:106 msgid "defender" msgstr "défenseur" -#: apps/participation/models.py:425 apps/participation/models.py:608 +#: apps/participation/models.py:429 apps/participation/models.py:612 msgid "opponent" msgstr "opposant" -#: apps/participation/models.py:432 apps/participation/models.py:609 +#: apps/participation/models.py:436 apps/participation/models.py:613 msgid "reporter" msgstr "rapporteur" -#: apps/participation/models.py:437 +#: apps/participation/models.py:441 msgid "penalties" msgstr "pénalités" -#: apps/participation/models.py:439 +#: apps/participation/models.py:443 msgid "" "Number of penalties for the defender. The defender will loose a 0.5 " "coefficient per penalty." @@ -395,124 +399,124 @@ msgstr "" "Nombre de pénalités pour læ défenseur⋅se. Læ défenseur⋅se perd un " "coefficient 0.5 sur sa solution écrite par pénalité." -#: apps/participation/models.py:499 apps/participation/models.py:502 -#: apps/participation/models.py:505 +#: apps/participation/models.py:503 apps/participation/models.py:506 +#: apps/participation/models.py:509 #, python-brace-format msgid "Team {trigram} is not registered in the pool." msgstr "L'équipe {trigram} n'est pas inscrite dans la poule." -#: apps/participation/models.py:510 +#: apps/participation/models.py:514 #, python-brace-format msgid "Passage of {defender} for problem {problem}" msgstr "Passage de {defender} pour le problème {problem}" -#: apps/participation/models.py:514 apps/participation/models.py:522 -#: apps/participation/models.py:603 apps/participation/models.py:645 +#: apps/participation/models.py:518 apps/participation/models.py:526 +#: apps/participation/models.py:607 apps/participation/models.py:649 msgid "passage" msgstr "passage" -#: apps/participation/models.py:515 +#: apps/participation/models.py:519 msgid "passages" msgstr "passages" -#: apps/participation/models.py:533 +#: apps/participation/models.py:537 msgid "difference" msgstr "différence" -#: apps/participation/models.py:534 +#: apps/participation/models.py:538 msgid "Score to add/remove on the final score" msgstr "Score à ajouter/retrancher au score final" -#: apps/participation/models.py:541 +#: apps/participation/models.py:545 msgid "tweak" msgstr "harmonisation" -#: apps/participation/models.py:542 +#: apps/participation/models.py:546 msgid "tweaks" msgstr "harmonisations" -#: apps/participation/models.py:563 +#: apps/participation/models.py:567 msgid "problem" msgstr "numéro de problème" -#: apps/participation/models.py:570 +#: apps/participation/models.py:574 msgid "solution for the final tournament" msgstr "solution pour la finale" -#: apps/participation/models.py:575 apps/participation/models.py:614 +#: apps/participation/models.py:579 apps/participation/models.py:618 msgid "file" msgstr "fichier" -#: apps/participation/models.py:581 +#: apps/participation/models.py:585 #, python-brace-format msgid "Solution of team {team} for problem {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}" -#: apps/participation/models.py:583 +#: apps/participation/models.py:587 msgid "for final" msgstr "pour la finale" -#: apps/participation/models.py:586 +#: apps/participation/models.py:590 msgid "solution" msgstr "solution" -#: apps/participation/models.py:587 +#: apps/participation/models.py:591 msgid "solutions" msgstr "solutions" -#: apps/participation/models.py:620 +#: apps/participation/models.py:624 #, python-brace-format msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgstr "" "Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "{problem} de {defender}" -#: apps/participation/models.py:628 +#: apps/participation/models.py:632 msgid "synthesis" msgstr "note de synthèse" -#: apps/participation/models.py:629 +#: apps/participation/models.py:633 msgid "syntheses" msgstr "notes de synthèse" -#: apps/participation/models.py:638 +#: apps/participation/models.py:642 msgid "jury" msgstr "jury" -#: apps/participation/models.py:650 +#: apps/participation/models.py:654 msgid "defender writing note" msgstr "note d'écrit de læ défenseur⋅se" -#: apps/participation/models.py:656 +#: apps/participation/models.py:660 msgid "defender oral note" msgstr "note d'oral de læ défenseur⋅se" -#: apps/participation/models.py:662 +#: apps/participation/models.py:666 msgid "opponent writing note" msgstr "note d'écrit de l'opposant⋅e" -#: apps/participation/models.py:668 +#: apps/participation/models.py:672 msgid "opponent oral note" msgstr "note d'oral de l'opposant⋅e" -#: apps/participation/models.py:674 +#: apps/participation/models.py:678 msgid "reporter writing note" msgstr "note d'écrit de læ rapporteur⋅e" -#: apps/participation/models.py:680 +#: apps/participation/models.py:684 msgid "reporter oral note" msgstr "note d'oral de læ rapporteur⋅e" -#: apps/participation/models.py:698 +#: apps/participation/models.py:702 #, python-brace-format msgid "Notes of {jury} for {passage}" msgstr "Notes de {jury} pour le {passage}" -#: apps/participation/models.py:705 +#: apps/participation/models.py:709 msgid "note" msgstr "note" -#: apps/participation/models.py:706 +#: apps/participation/models.py:710 msgid "notes" msgstr "notes" @@ -939,7 +943,7 @@ msgid "Invalidate" msgstr "Invalider" #: apps/participation/templates/participation/team_detail.html:171 -#: apps/participation/views.py:328 +#: apps/participation/views.py:332 msgid "Upload motivation letter" msgstr "Envoyer la lettre de motivation" @@ -948,7 +952,7 @@ msgid "Update team" msgstr "Modifier l'équipe" #: apps/participation/templates/participation/team_detail.html:181 -#: apps/participation/views.py:431 +#: apps/participation/views.py:435 msgid "Leave team" msgstr "Quitter l'équipe" @@ -1078,12 +1082,12 @@ msgstr "Vous êtes déjà dans une équipe." msgid "Join team" msgstr "Rejoindre une équipe" -#: apps/participation/views.py:151 apps/participation/views.py:437 -#: apps/participation/views.py:471 +#: apps/participation/views.py:151 apps/participation/views.py:441 +#: apps/participation/views.py:475 msgid "You are not in a team." msgstr "Vous n'êtes pas dans une équipe." -#: apps/participation/views.py:152 apps/participation/views.py:472 +#: apps/participation/views.py:152 apps/participation/views.py:476 msgid "You don't participate, so you don't have any team." msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe." @@ -1123,62 +1127,62 @@ msgstr "L'équipe n'a pas de validation en attente." msgid "You must specify if you validate the registration or not." msgstr "Vous devez spécifier si vous validez l'inscription ou non." -#: apps/participation/views.py:308 +#: apps/participation/views.py:310 #, python-brace-format msgid "Update team {trigram}" msgstr "Mise à jour de l'équipe {trigram}" -#: apps/participation/views.py:367 apps/participation/views.py:417 +#: apps/participation/views.py:371 apps/participation/views.py:421 #, python-brace-format msgid "Motivation letter of {team}.{ext}" msgstr "Lettre de motivation de {team}.{ext}" -#: apps/participation/views.py:398 +#: apps/participation/views.py:402 #, python-brace-format msgid "Photo authorization of {participant}.{ext}" msgstr "Autorisation de droit à l'image de {participant}.{ext}" -#: apps/participation/views.py:404 +#: apps/participation/views.py:408 #, python-brace-format msgid "Parental authorization of {participant}.{ext}" msgstr "Autorisation parentale de {participant}.{ext}" -#: apps/participation/views.py:411 +#: apps/participation/views.py:415 #, python-brace-format msgid "Health sheet of {participant}.{ext}" msgstr "Fiche sanitaire de {participant}.{ext}" -#: apps/participation/views.py:421 +#: apps/participation/views.py:425 #, python-brace-format msgid "Photo authorizations of team {trigram}.zip" msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip" -#: apps/participation/views.py:439 +#: apps/participation/views.py:443 msgid "The team is already validated or the validation is pending." msgstr "La validation de l'équipe est déjà faite ou en cours." -#: apps/participation/views.py:486 +#: apps/participation/views.py:490 msgid "The team is not validated yet." msgstr "L'équipe n'est pas encore validée." -#: apps/participation/views.py:500 +#: apps/participation/views.py:504 #, python-brace-format msgid "Participation of team {trigram}" msgstr "Participation de l'équipe {trigram}" -#: apps/participation/views.py:626 +#: apps/participation/views.py:630 msgid "You can't upload a solution after the deadline." msgstr "Vous ne pouvez pas envoyer de solution après la date limite." -#: apps/participation/views.py:729 +#: apps/participation/views.py:733 msgid "The following user is not registered as a jury:" msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :" -#: apps/participation/views.py:737 +#: apps/participation/views.py:741 msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: apps/participation/views.py:849 +#: apps/participation/views.py:853 msgid "You can't upload a synthesis after the deadline." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." @@ -1206,11 +1210,11 @@ msgstr "bénévole" msgid "admin" msgstr "admin" -#: apps/registration/forms.py:209 +#: apps/registration/forms.py:213 msgid "Pending" msgstr "En attente" -#: apps/registration/forms.py:225 +#: apps/registration/forms.py:229 msgid "You must upload your scholarship attestation." msgstr "Vous devez envoyer votre attestation de bourse." @@ -1843,11 +1847,11 @@ msgstr "Autorisation parentale de {student}.{ext}" msgid "Scholarship attestation of {user}.{ext}" msgstr "Notification de bourse de {user}.{ext}" -#: tfjm/settings.py:162 +#: tfjm/settings.py:161 msgid "English" msgstr "Anglais" -#: tfjm/settings.py:163 +#: tfjm/settings.py:162 msgid "French" msgstr "Français" diff --git a/tfjm/settings.py b/tfjm/settings.py index 9eb5a4b..b562bf7 100644 --- a/tfjm/settings.py +++ b/tfjm/settings.py @@ -224,11 +224,6 @@ else: } } -if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover - from .settings_prod import * # noqa: F401,F403 -else: - from .settings_dev import * # noqa: F401,F403 - # Custom phone number format PHONENUMBER_DB_FORMAT = 'NATIONAL' PHONENUMBER_DEFAULT_REGION = 'FR' @@ -240,3 +235,25 @@ JQUERY_URL = False # Custom parameters PROBLEM_COUNT = 8 +FORBIDDEN_TRIGRAMS = [ + "BIT", + "CNO", + "CRO", + "CUL", + "FTG", + "FCK", + "FUC", + "FUK", + "FYS", + "HIV", + "IST", + "MST", + "KKK", + "KYS", + "SEX", +] + +if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover + from .settings_prod import * # noqa: F401,F403 +else: + from .settings_dev import * # noqa: F401,F403