5 Commits

Author SHA1 Message Date
  Alban Gruin f2e0903ba8 Version 0.14.4-2 3 months ago
  Alban Gruin 2cb2110470 Merge branch 'ag/api' into prod/pa1ch/0.14.z 3 months ago
  Alban Gruin 09a5b8cb97 Documentation: ajout des nouvelles routes dans la doc et corrections 3 months ago
  Alban Gruin 7b280f8e2a api/views: ajout de routes pour lister les cours d’une seule journée 3 months ago
  Alban Gruin 61eb694cd4 Documentation: correction de la doc de l’API 3 months ago
4 changed files with 106 additions and 33 deletions
  1. 1
    1
      Documentation/conf.py
  2. 71
    18
      Documentation/usage/rest.rst
  3. 1
    1
      __init__.py
  4. 33
    13
      api/views.py

+ 1
- 1
Documentation/conf.py View File

@@ -15,7 +15,7 @@ copyright = u'%d, Alban Gruin' % year
15 15
 author = u'Alban Gruin'
16 16
 
17 17
 version = u'0.14'
18
-release = u'0.14.4-1'
18
+release = u'0.14.4-2'
19 19
 
20 20
 language = 'fr'
21 21
 

+ 71
- 18
Documentation/usage/rest.rst View File

@@ -64,8 +64,8 @@ Exemple :
64 64
       "slug": "l3"
65 65
   }
66 66
 
67
-``api/years/<id>/timetables``
68
------------------------------
67
+``api/years/<id>/timetables/``
68
+------------------------------
69 69
 Liste les emplois du temps associés à une année par ordre alphabétique
70 70
 de nom.  :ref:`Le résultat peut être paginé <ref-pagination>`.
71 71
 
@@ -98,8 +98,8 @@ Exemple :
98 98
 Emplois du temps
99 99
 ================
100 100
 
101
-``api/timetables``
102
-------------------
101
+``api/timetables/``
102
+-------------------
103 103
 Liste les emplois du temps par ordre d’année (ID associé) puis de nom.
104 104
 :ref:`Le résultat peut être paginé <ref-pagination>`.
105 105
 
@@ -398,6 +398,41 @@ Exemple :
398 398
       ]
399 399
   }
400 400
 
401
+``api/groups/<id>/courses/days/current/``
402
+-----------------------------------------
403
+Retourne la liste des cours du groupe et de ses parents d’un groupe
404
+pendant le jour courant, par ordre de début.  :ref:`Le résultat peut
405
+être paginé <ref-pagination>`.  Le format du résultat est identique à
406
+celui de :ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
407
+
408
+.. _ref-groups-courses-day-arg:
409
+
410
+``api/groups/<id>/courses/days/<year>/<month>/<day>/``
411
+------------------------------------------------------
412
+Retourne la liste des cours du groupe et de ses parents pendant le
413
+jour spécifié, par ordre de début.  Si l’année, le mois ou le jour ne
414
+sont pas des nombres, un code 404 est renvoyé.  Si la date est
415
+invalide, une erreur 400 est renvoyée, et les erreurs rencontrées sont
416
+renvoyées.  :ref:`Le résultat peut être paginé <ref-pagination>`.  Le
417
+format du résultat est identique à celui de
418
+:ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
419
+
420
+Exemple d’erreur (``api/groups/<id>/courses/days/2018/111/22``) :
421
+`````````````````````````````````````````````````````````````````
422
+.. code:: json
423
+
424
+  {
425
+      "month": "Rentrez un mois valide"
426
+  }
427
+
428
+Exemple d’erreur (``api/groups/<id>/courses/days/2018/11/33``) :
429
+````````````````````````````````````````````````````````````````
430
+.. code:: json
431
+
432
+  {
433
+      "day": "Numéro de jour invalide pour le mois"
434
+  }
435
+
401 436
 ``api/groups/<id>/courses/weeks/``
402 437
 ----------------------------------
403 438
 Retourne la liste des semaines de cours d’un groupe.
@@ -423,7 +458,7 @@ Le format du résultat est identique à celui de
423 458
 ``api/groups/<id>/courses/weeks/<year>/<week>/``
424 459
 ------------------------------------------------
425 460
 Retourne la liste des cours du groupe et de ses parents pendant la
426
-semaine spécifiée, par ordre de début.  Si l’année et la semaine ne
461
+semaine spécifiée, par ordre de début.  Si l’année ou la semaine ne
427 462
 sont pas des nombres, un code 404 est renvoyé.  Si la semaine n’est
428 463
 pas comprise entre 1 et 53, une erreur 400 est renvoyée, et les
429 464
 erreurs rencontrées sont renvoyées.  :ref:`Le résultat peut être
@@ -473,8 +508,8 @@ Exemple :
473 508
       ]
474 509
   }
475 510
 
476
-``api/rooms/<id>``
477
-------------------
511
+``api/rooms/<id>/``
512
+-------------------
478 513
 Renvoie une seule salle.
479 514
 
480 515
 Exemple :
@@ -494,6 +529,24 @@ début.  :ref:`Le résultat peut être paginé <ref-pagination>`.  Le
494 529
 format du résultat est identique à celui de
495 530
 :ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
496 531
 
532
+``api/rooms/<id>/courses/days/current/``
533
+----------------------------------------
534
+Retourne la liste des cours se déroulant dans une salle pendant le
535
+jour courant, par ordre de début.  :ref:`Le résultat peut être paginé
536
+<ref-pagination>`.  Le format du résultat est identique à celui de
537
+:ref:`api/groups/\<id>/courses/ <ref-groups-courses>`.
538
+
539
+``api/rooms/<id>/courses/days/<year>/<month>/<day>/``
540
+-----------------------------------------------------
541
+Retourne la liste des cours se déroulant dans une salle pendant le
542
+jour spécifié, par ordre de début.  Si l’année, le mois ou le jour ne
543
+sont pas des nombres, un code 404 est renvoyé.  Si la date est
544
+invalide, une erreur 400 est renvoyée, et les erreurs rencontrées sont
545
+renvoyées.  :ref:`Le résultat peut être paginé <ref-pagination>`.  Le
546
+format du résultat est identique à celui de
547
+:ref:`api/groups/\<id>/courses/days/\<year>/\<month>/\<day>/
548
+<ref-groups-courses-day-arg>`.
549
+
497 550
 ``api/rooms/<id>/courses/weeks/current/``
498 551
 -----------------------------------------
499 552
 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
505 558
 ``api/rooms/<id>/courses/weeks/<year>/<week>/``
506 559
 -----------------------------------------------
507 560
 Renvoie la liste des cours se déroulant dans une salle pendant la
508
-semaine spécifiée.  Si l’année et la semaine ne sont pas des nombres,
561
+semaine spécifiée.  Si l’année ou la semaine ne sont pas des nombres,
509 562
 un code 404 est renvoyé.  Si la semaine n’est pas comprise entre 1 et
510 563
 53, une erreur 400 est renvoyée, et les erreurs rencontrées sont
511 564
 renvoyées.  :ref:`Le résultat peut être paginé <ref-pagination>`.  Le
512 565
 format du résultat est identique à celui de
513
-:ref:`api/groups/\<id>/courses/weeks/\<year>/\<week>
566
+:ref:`api/groups/\<id>/courses/weeks/\<year>/\<week>/
514 567
 <ref-groups-courses-week-arg>`.
515 568
 
516 569
 ``api/rooms/qsjps/<day>/<begin>/<end>/``
@@ -629,8 +682,8 @@ Exemple :
629 682
       ]
630 683
     }
631 684
 
632
-``api/courses/<id>``
633
---------------------
685
+``api/courses/<id>/``
686
+---------------------
634 687
 Renvoie un seul cours.
635 688
 
636 689
 Exemple :
@@ -688,10 +741,10 @@ paginés se trouvent dans ce genre de structure :
688 741
       ]
689 742
   }
690 743
 
691
- - ``count`` représente le nombre d’éléments au total (et non pas sur
692
-   la page).
693
- - ``next`` est le lien de la page de résultats suivants, si il y en a
694
-   une.
695
- - ``previous`` est le lien de la page de résultats précédents, si il
696
-   y en a une.
697
- - ``results`` est la liste des résultats, si il y en a.
744
+- ``count`` représente le nombre d’éléments au total (et non pas sur
745
+  la page).
746
+- ``next`` est le lien de la page de résultats suivants, si il y en a
747
+  une.
748
+- ``previous`` est le lien de la page de résultats précédents, si il
749
+  y en a une.
750
+- ``results`` est la liste des résultats, si il y en a.

+ 1
- 1
__init__.py View File

@@ -13,7 +13,7 @@
13 13
 #    You should have received a copy of the GNU Affero General Public License
14 14
 #    along with celcatsanitizer.  If not, see <http://www.gnu.org/licenses/>.
15 15
 
16
-VERSION = "0.14.4-1"
16
+VERSION = "0.14.4-2"
17 17
 __version__ = VERSION
18 18
 
19 19
 default_app_config = "edt.apps.EdtConfig"

+ 33
- 13
api/views.py View File

@@ -83,11 +83,7 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
83 83
                                         many=True)
84 84
         return self.get_paginated_response(courses_json.data)
85 85
 
86
-    @detail_route(methods=["get"], url_path="courses/weeks/current")
87
-    def current_week(self, request, pk):
88
-        obj = self.get_object()
89
-        start, end = get_week(*get_current_or_next_week())
90
-
86
+    def __get_courses(self, obj, start, end):
91 87
         courses = Course.objects.get_courses(obj,
92 88
                                              begin__gte=start, end__lt=end) \
93 89
                                 .prefetch_related("groups")
@@ -95,6 +91,37 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
95 91
                                         many=True)
96 92
         return self.get_paginated_response(courses_json.data)
97 93
 
94
+    @detail_route(methods=["get"], url_path="courses/days/current")
95
+    def current_day(self, request, pk):
96
+        obj = self.get_object()
97
+        start = datetime.date.today()
98
+        end = start + datetime.timedelta(days=1)
99
+        return self.__get_courses(obj, start, end)
100
+
101
+    @detail_route(methods=["get"], url_path="courses/days/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)")
102
+    def other_day(self, request, pk, year, month, day):
103
+        obj = self.get_object()
104
+
105
+        try:
106
+            start = datetime.date(int(year), int(month), int(day))
107
+        except ValueError as v:
108
+            errors = {}
109
+            message = v.args[0]
110
+            if message.split(" ")[0] == "month":
111
+                errors["month"] = "Rentrez un mois invalide"
112
+            else:
113
+                errors["day"] = "Numéro de jour invalide pour le mois"
114
+            return Response(errors, status=400)
115
+
116
+        end = start + datetime.timedelta(days=1)
117
+        return self.__get_courses(obj, start, end)
118
+
119
+    @detail_route(methods=["get"], url_path="courses/weeks/current")
120
+    def current_week(self, request, pk):
121
+        obj = self.get_object()
122
+        start, end = get_week(*get_current_or_next_week())
123
+        return self.__get_courses(obj, start, end)
124
+
98 125
     @detail_route(methods=["get"],
99 126
                   url_path="courses/weeks/(?P<year>\d+)/(?P<week>\d+)")
100 127
     def other_week(self, request, pk, year, week):
@@ -108,14 +135,7 @@ class CourseListGroupSet(viewsets.ReadOnlyModelViewSet):
108 135
         if errors:
109 136
             return Response(errors, status=400)
110 137
 
111
-        start, end = get_week(int(year), int(week))
112
-
113
-        courses = Course.objects.get_courses(obj,
114
-                                             begin__gte=start, end__lt=end) \
115
-                                .prefetch_related("groups")
116
-        courses_json = CourseSerializer(self.paginate_queryset(courses),
117
-                                        many=True)
118
-        return self.get_paginated_response(courses_json.data)
138
+        return self.__get_courses(obj, *get_week(int(year), int(week)))
119 139
 
120 140
 
121 141
 class GroupViewSet(CourseListGroupSet):