]> git.parisson.com Git - teleforma.git/commitdiff
Fix issue with missing WebclassSlot while retrieving bbb records https://trackers...
authorYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 18 Feb 2021 09:06:08 +0000 (10:06 +0100)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 18 Feb 2021 09:06:08 +0000 (10:06 +0100)
teleforma/webclass/forms.py
teleforma/webclass/models.py

index 2a1319e901e32332d7844bede65c70892977fc0a..d190ec6d5bbfd07bb7813d66d0ea553077cd893e 100644 (file)
@@ -7,23 +7,21 @@ from teleforma.webclass.models import get_records, WebclassSlot, WebclassRecord,
 from django.core.exceptions import ValidationError
 
 class WebclassRecordsForm(Form):
-    # period = ModelChoiceField(label='Période',
-    #                         queryset=Period.objects.filter(is_open=True))
-
-    class Meta:
-        pass
-
 
     def __init__(self, *args, **kwargs):
+        # for each course, we create a field whcih includes a list of bbb course from the same course id and same period id
         self.period_id = kwargs.pop('period_id')
         self.period = Period.objects.get(pk=self.period_id)
         super(WebclassRecordsForm, self).__init__(*args, **kwargs)
 
         courses = Course.objects.all()
         all_records = self.get_records_by_course()
+        
         for course in courses:
+            # get list of webclass
             webclasses = course.webclass.filter(period=self.period).all()
             if webclasses:
+                # build a rooms id list
                 rooms = []
                 for webclass in webclasses:
                     for slot in webclass.slots.all():
@@ -31,8 +29,11 @@ class WebclassRecordsForm(Form):
 
                 field_name = 'course_%d' % course.id
                 records = all_records.get(course.id, [])
+                print(records)
 
                 vocabulary = [('none', 'Aucun')]
+                # for each bbb record for the current course, add an option to the field
+                
                 for record in records:
                     webclass_slot = WebclassSlot.objects.get(pk=record['slot'].id)
                     label = u"%s à %s - %s" % (record['start_date'].strftime('%d/%m/%Y %H:%M'), record['end_date'].strftime('%H:%M'), webclass_slot.professor.user.last_name)
@@ -40,10 +41,13 @@ class WebclassRecordsForm(Form):
                 self.fields[field_name] = ChoiceField(label=course.title,  choices=vocabulary, required=False)
 
     def get_records_by_course(self):
+        """ 
+        Get all records, in a dict with course_id as key 
+        """
         records = get_records(period_id=self.period_id)
         by_course = {}
         for record in records:
-            if hasattr(record, 'course_id'):
+            if record.get('course_id'):
                 by_course.setdefault(record['course_id'], []).append(record)
         return by_course
 
index abd0f3ad0fa897076a415c5d290213472dc6c54a..d5587215bf16064c16fd9e5add3e92c27482ebc4 100644 (file)
@@ -65,13 +65,18 @@ def get_records_from_bbb(**kwargs):
                 'state': recording['state'].decode(),
             }
             if recording['metadata'].get('periodid'):
-                webclass_slots = WebclassSlot.objects.filter(pk=int(recording['metadata'].get('slotid').decode()))
-                if webclass_slots:
-                    data.update({
-                        'period_id': int(recording['metadata'].get('periodid').decode()),
-                        'course_id': int(recording['metadata'].get('courseid').decode()),
-                        'slot': WebclassSlot.objects.get(pk=int(recording['metadata'].get('slotid').decode()))
-                    })
+                # we try to get metadata added to bbb record during the recording
+                slot = None
+                try:
+                    slot = WebclassSlot.objects.get(pk=int(recording['metadata'].get('slotid').decode()))
+                except WebclassSlot.DoesNotExist:
+                    # this happen if the slot is deleted in django admin
+                    continue
+                data.update({
+                    'period_id': int(recording['metadata'].get('periodid').decode()),
+                    'course_id': int(recording['metadata'].get('courseid').decode()),
+                    'slot': slot
+                })
 
             data['duration'] = data['end'] - data['start']
             records.append(data)