Première passe de relecture de l'application `planning`

This commit is contained in:
Fred Pauchet 2020-10-20 12:15:22 +02:00
parent 0419a5e731
commit 2d8cc1b764
1 changed files with 64 additions and 21 deletions

View File

@ -64,16 +64,25 @@ def event_lookup(request):
@login_required
@require_http_methods(["GET", "POST"])
def event_create_or_update(request, eventid=None):
"""
Création ou mise à jour d'un event.
"""Création ou mise à jour d'un évènement.
Remarks:
* Il faut éviter de cibler une URL précise.
Pour cela, il faut passer par la fonction `reverse`:
https://docs.djangoproject.com/fr/3.1/ref/urlresolvers/
Si jamais l'URL `/event` devait être modifiée, cela ne fonctionnerait plus.
* J'ai modifié l'ordre des conditions pour un peu plus de clarté.
Notamment, tu faisais une première requête pour récupérer le nom du lieu
Mais tu n'utilisais cette valeur que dans le cas d'un GET.
Dans ce cas-ci, une CBV serait intéressante, parce qu'elle découplerait
complètement le GET du POST.
"""
if eventid:
event = get_object_or_404(Event, pk=eventid)
data = {"place_related": event.place.name}
else:
event = None
data = {}
if request.method == "POST":
form = EventForm(request.POST, instance=event)
@ -85,6 +94,14 @@ def event_create_or_update(request, eventid=None):
else:
return HttpResponseRedirect("/event/")
else:
data = {}
if eventid:
event = get_object_or_404(Event, pk=eventid)
data["place_related"] = event.place.name
else:
event = None
form = EventForm(instance=event, initial=data)
context = {"form": form, "eventid": eventid}
@ -93,8 +110,16 @@ def event_create_or_update(request, eventid=None):
@require_http_methods(["GET"])
def link_gymnast_to_event(request, eventid, gymnastid):
"""
Crée un lien entre un gymnaste et un évènement.
"""Crée un lien entre un gymnaste et un évènement.
Returns:
Si tout se passe bien, un code 200 (Success) est retourné.
Excepts:
Si une erreur se produit lors de l'association, un code HTTP 409 (Conflict) est retourné.
Remarks:
Tu ne veux pas retourner le lien qui vient d'être créé ?
"""
try:
gymnast = get_object_or_404(Gymnast, pk=gymnastid)
@ -109,8 +134,14 @@ def link_gymnast_to_event(request, eventid, gymnastid):
@require_http_methods(["GET"])
def remove_link_between_gymnast_and_event(request, eventid, gymnastid):
"""
Supprime le lien entre un gymnaste et un évènement.
"""Supprime le lien entre un gymnaste et un évènement.
Remarks:
En fait, tes fonctions `link_gymnast_to_event`
et `remove_link_between_gymnast_and_event` sont _très_ similaires.
Il faudrait sans doute mieux passer par une CBV, voire mieux: DRF ;-)
Surtout qu'ici, on gère directement des `link_between_g_and_e`, à ajouter ou supprimer.
"""
try:
gymnast = get_object_or_404(Gymnast, pk=gymnastid)
@ -124,20 +155,30 @@ def remove_link_between_gymnast_and_event(request, eventid, gymnastid):
def __get_event_list(request):
"""Récupère une liste d'évènement.
Par défaut, la liste est triée chronologiquement - le plus ancien étant le premier élément.
Cette fonction est utilisée pour l'affichage des évènements et au niveau du calendrier.
Args:
request (HttpRequest): La requête en entrée
pattern (str?): Optionnel. Permet de spécifier un pattern à appliquer à la recherche.
"""
pattern = request.GET.get("pattern", None)
if pattern:
event_list = Event.objects.filter(name__icontains=pattern).order_by("datebegin")
event_list = Event.objects.filter(name__icontains=pattern)
else:
event_list = Event.objects.all().order_by("datebegin")
return event_list
event_list = Event.objects.all()
return event_list.order_by("datebegin")
@login_required
@require_http_methods(["GET"])
def calendar(request):
"""
Récupère la liste de tous évènements suivant un pattern si celui-ci est
définit.
"""Récupère la liste de tous évènements suivant un pattern si celui-ci est définit.
"""
event_list = __get_event_list(request)
context = {"event_list": event_list}
@ -216,7 +257,7 @@ def event_detail(request, eventid):
@require_http_methods(["GET"])
def course_detail(request, courseid, date=None):
"""
Récupère toutes les informations d'un course.
Récupère toutes les informations d'un cours.
:return: une instance de la classe `Course`, une liste de gymnaste associés
à ce cours,
@ -1238,8 +1279,10 @@ def program_date_listing(request, gymnastid=None):
@login_required
@require_http_methods(["GET", "POST"])
def planningline_update(request, planninglineid=None):
"""
Mise à jour d'une ligne de programme.
"""Mise à jour d'une ligne de programme.
Remarks:
Pourquoi ne pas juste faire un `form.save()` plutôt que de réattribuer chaque valeur ?
"""
planningline = get_object_or_404(PlanningLine, pk=planninglineid)