diff options
| author | Alban Gruin | 2019-02-05 19:16:20 +0100 | 
|---|---|---|
| committer | Alban Gruin | 2019-02-05 19:16:20 +0100 | 
| commit | 2cb2110470deb79c42c640816f5d31b5749abc86 (patch) | |
| tree | b5aa6c5fd1e2feab95691f767ab3abb92da62045 | |
| parent | aa29ed0143dc8b7181092bab8c46a9b073e1c96c (diff) | |
| parent | 09a5b8cb97769853ac8a3982bcb340c4c1422498 (diff) | |
Merge branch 'ag/api' into prod/pa1ch/0.14.z
| -rw-r--r-- | Documentation/usage/rest.rst | 89 | ||||
| -rw-r--r-- | api/views.py | 46 | 
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):  | 
