aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/usage/rest.rst89
-rw-r--r--api/views.py46
2 files changed, 104 insertions, 31 deletions
diff --git a/Documentation/usage/rest.rst b/Documentation/usage/rest.rst
index bcaada9..4908d8a 100644
--- a/Documentation/usage/rest.rst
+++ b/Documentation/usage/rest.rst
@@ -64,8 +64,8 @@ Exemple :
"slug": "l3"
}
-``api/years/<id>/timetables``
------------------------------
+``api/years/<id>/timetables/``
+------------------------------
Liste les emplois du temps associés à une année par ordre alphabétique
de nom. :ref:`Le résultat peut être paginé <ref-pagination>`.
@@ -98,8 +98,8 @@ Exemple :
Emplois du temps
================
-``api/timetables``
-------------------
+``api/timetables/``
+-------------------
Liste les emplois du temps par ordre d’année (ID associé) puis de nom.
:ref:`Le résultat peut être paginé <ref-pagination>`.
@@ -398,6 +398,41 @@ Exemple :
]
}
+``api/groups/<id>/courses/days/current/``
+-----------------------------------------
+Retourne la liste des cours du groupe et de ses parents d’un groupe
+pendant le jour courant, par ordre de début. :ref:`Le résultat peut
+être paginé <ref-pagination>`. Le format du résultat est identique à
+celui de :ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
+
+.. _ref-groups-courses-day-arg:
+
+``api/groups/<id>/courses/days/<year>/<month>/<day>/``
+------------------------------------------------------
+Retourne la liste des cours du groupe et de ses parents pendant le
+jour spécifié, par ordre de début. Si l’année, le mois ou le jour ne
+sont pas des nombres, un code 404 est renvoyé. Si la date est
+invalide, une erreur 400 est renvoyée, et les erreurs rencontrées sont
+renvoyées. :ref:`Le résultat peut être paginé <ref-pagination>`. Le
+format du résultat est identique à celui de
+:ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
+
+Exemple d’erreur (``api/groups/<id>/courses/days/2018/111/22``) :
+`````````````````````````````````````````````````````````````````
+.. code:: json
+
+ {
+ "month": "Rentrez un mois valide"
+ }
+
+Exemple d’erreur (``api/groups/<id>/courses/days/2018/11/33``) :
+````````````````````````````````````````````````````````````````
+.. code:: json
+
+ {
+ "day": "Numéro de jour invalide pour le mois"
+ }
+
``api/groups/<id>/courses/weeks/``
----------------------------------
Retourne la liste des semaines de cours d’un groupe.
@@ -423,7 +458,7 @@ Le format du résultat est identique à celui de
``api/groups/<id>/courses/weeks/<year>/<week>/``
------------------------------------------------
Retourne la liste des cours du groupe et de ses parents pendant la
-semaine spécifiée, par ordre de début. Si l’année et la semaine ne
+semaine spécifiée, par ordre de début. Si l’année ou la semaine ne
sont pas des nombres, un code 404 est renvoyé. Si la semaine n’est
pas comprise entre 1 et 53, une erreur 400 est renvoyée, et les
erreurs rencontrées sont renvoyées. :ref:`Le résultat peut être
@@ -473,8 +508,8 @@ Exemple :
]
}
-``api/rooms/<id>``
-------------------
+``api/rooms/<id>/``
+-------------------
Renvoie une seule salle.
Exemple :
@@ -494,6 +529,24 @@ début. :ref:`Le résultat peut être paginé <ref-pagination>`. Le
format du résultat est identique à celui de
:ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
+``api/rooms/<id>/courses/days/current/``
+----------------------------------------
+Retourne la liste des cours se déroulant dans une salle pendant le
+jour courant, par ordre de début. :ref:`Le résultat peut être paginé
+<ref-pagination>`. Le format du résultat est identique à celui de
+:ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
+
+``api/rooms/<id>/courses/days/<year>/<month>/<day>/``
+-----------------------------------------------------
+Retourne la liste des cours se déroulant dans une salle pendant le
+jour spécifié, par ordre de début. Si l’année, le mois ou le jour ne
+sont pas des nombres, un code 404 est renvoyé. Si la date est
+invalide, une erreur 400 est renvoyée, et les erreurs rencontrées sont
+renvoyées. :ref:`Le résultat peut être paginé <ref-pagination>`. Le
+format du résultat est identique à celui de
+:ref:`api/groups/\<id>/courses/days/\<year>/\<month>/\<day>/
+<ref-groups-courses-day-arg>`.
+
``api/rooms/<id>/courses/weeks/current/``
-----------------------------------------
Renvoie la liste des cours se déroulant dans une salle pendant la
@@ -505,12 +558,12 @@ format du résultat est identique à celui de
``api/rooms/<id>/courses/weeks/<year>/<week>/``
-----------------------------------------------
Renvoie la liste des cours se déroulant dans une salle pendant la
-semaine spécifiée. Si l’année et la semaine ne sont pas des nombres,
+semaine spécifiée. Si l’année ou la semaine ne sont pas des nombres,
un code 404 est renvoyé. Si la semaine n’est pas comprise entre 1 et
53, une erreur 400 est renvoyée, et les erreurs rencontrées sont
renvoyées. :ref:`Le résultat peut être paginé <ref-pagination>`. Le
format du résultat est identique à celui de
-:ref:`api/groups/\<id>/courses/weeks/\<year>/\<week>
+:ref:`api/groups/\<id>/courses/weeks/\<year>/\<week>/
<ref-groups-courses-week-arg>`.
``api/rooms/qsjps/<day>/<begin>/<end>/``
@@ -629,8 +682,8 @@ Exemple :
]
}
-``api/courses/<id>``
---------------------
+``api/courses/<id>/``
+---------------------
Renvoie un seul cours.
Exemple :
@@ -688,10 +741,10 @@ paginés se trouvent dans ce genre de structure :
]
}
- - ``count`` représente le nombre d’éléments au total (et non pas sur
- la page).
- - ``next`` est le lien de la page de résultats suivants, si il y en a
- une.
- - ``previous`` est le lien de la page de résultats précédents, si il
- y en a une.
- - ``results`` est la liste des résultats, si il y en a.
+- ``count`` représente le nombre d’éléments au total (et non pas sur
+ la page).
+- ``next`` est le lien de la page de résultats suivants, si il y en a
+ une.
+- ``previous`` est le lien de la page de résultats précédents, si il
+ y en a une.
+- ``results`` est la liste des résultats, si il y en a.
diff --git a/api/views.py b/api/views.py
index f6aa620..b7b69e3 100644
--- a/api/views.py
+++ b/api/views.py
@@ -83,11 +83,7 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
many=True)
return self.get_paginated_response(courses_json.data)
- @detail_route(methods=["get"], url_path="courses/weeks/current")
- def current_week(self, request, pk):
- obj = self.get_object()
- start, end = get_week(*get_current_or_next_week())
-
+ def __get_courses(self, obj, start, end):
courses = Course.objects.get_courses(obj,
begin__gte=start, end__lt=end) \
.prefetch_related("groups")
@@ -95,6 +91,37 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
many=True)
return self.get_paginated_response(courses_json.data)
+ @detail_route(methods=["get"], url_path="courses/days/current")
+ def current_day(self, request, pk):
+ obj = self.get_object()
+ start = datetime.date.today()
+ end = start + datetime.timedelta(days=1)
+ return self.__get_courses(obj, start, end)
+
+ @detail_route(methods=["get"], url_path="courses/days/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)")
+ def other_day(self, request, pk, year, month, day):
+ obj = self.get_object()
+
+ try:
+ start = datetime.date(int(year), int(month), int(day))
+ except ValueError as v:
+ errors = {}
+ message = v.args[0]
+ if message.split(" ")[0] == "month":
+ errors["month"] = "Rentrez un mois invalide"
+ else:
+ errors["day"] = "Numéro de jour invalide pour le mois"
+ return Response(errors, status=400)
+
+ end = start + datetime.timedelta(days=1)
+ return self.__get_courses(obj, start, end)
+
+ @detail_route(methods=["get"], url_path="courses/weeks/current")
+ def current_week(self, request, pk):
+ obj = self.get_object()
+ start, end = get_week(*get_current_or_next_week())
+ return self.__get_courses(obj, start, end)
+
@detail_route(methods=["get"],
url_path="courses/weeks/(?P<year>\d+)/(?P<week>\d+)")
def other_week(self, request, pk, year, week):
@@ -108,14 +135,7 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
if errors:
return Response(errors, status=400)
- start, end = get_week(int(year), int(week))
-
- courses = Course.objects.get_courses(obj,
- begin__gte=start, end__lt=end) \
- .prefetch_related("groups")
- courses_json = CourseSerializer(self.paginate_queryset(courses),
- many=True)
- return self.get_paginated_response(courses_json.data)
+ return self.__get_courses(obj, *get_week(int(year), int(week)))
class GroupViewSet(CourseListGroupSet):