]> git.parisson.com Git - teleforma.git/commitdiff
add conference sync, cleanup
authoryomguy <yomguy@parisson.com>
Tue, 29 Jan 2013 15:09:06 +0000 (16:09 +0100)
committeryomguy <yomguy@parisson.com>
Tue, 29 Jan 2013 15:09:06 +0000 (16:09 +0100)
teleforma/management/commands/teleforma-import-users-pb.py
teleforma/management/commands/teleforma-import-users.py
teleforma/models/core.py
teleforma/views/core.py

index 93100089876fd40e8a00c1a8037456e4c85271dd..08968ae3714be422675906bbfd72a19193751d9a 100644 (file)
@@ -13,7 +13,7 @@ import datetime
 
 class Command(BaseCommand):
     help = "Import users from a XLS file (see an example in example/data/"
-    args = "path"
+    args = "path period_name"
     first_row = 2
     admin_email = 'webmaster@parisson.com'
 
@@ -25,13 +25,14 @@ class Command(BaseCommand):
             return None
 
     def get_training(self, code):
+        period, c = Period.objects.get_or_create(name=self.period_name)
         platform_only = False
         if 'I' in code[0:2]:
             platform_only = True
             code = code[4:]
-            training, c = Training.objects.get_or_create(code=code)
+            training, c = Training.objects.get_or_create(code=code, period=period)
         else:
-            training, c = Training.objects.get_or_create(code=code)
+            training, c = Training.objects.get_or_create(code=code, period=period)
         return platform_only, training
 
     def get_iej(self, name):
@@ -44,7 +45,8 @@ class Command(BaseCommand):
             iej, c = IEJ.objects.get_or_create(name=name)
         return iej
 
-    def import_user(self, row):
+    def import_user(self, row, period_name):
+        self.period_name = period_name
         last_name   = row[0].value
         first_name  = row[1].value
         email       = row[9].value
@@ -76,7 +78,7 @@ class Command(BaseCommand):
             student.iej = self.get_iej(row[2].value)
             student.save()
 
-            student.period = Period.objects.filter(name='Estivale')
+            student.period = Period.objects.filter(name=self.period_name)
             student.procedure = self.get_courses(row[4].value)
             student.written_speciality = self.get_courses(row[5].value)
             student.oral_speciality = self.get_courses(row[6].value)
@@ -85,7 +87,7 @@ class Command(BaseCommand):
 
             profile, created = Profile.objects.get_or_create(user=user)
             profile.address = row[10].value
-            profile.postal_code = int(row[11].value)
+            profile.postal_code = row[11].value
             profile.city = row[12].value
             profile.telephone = row[13].value
             profile.save()
@@ -94,9 +96,10 @@ class Command(BaseCommand):
 
     def handle(self, *args, **options):
         file = args[0]
+        period_name = args[1]
         self.book = xlrd.open_workbook(file)
         sheet = self.book.sheet_by_index(0)
         col = sheet.col(0)
         for i in range(self.first_row, len(col)):
-            self.import_user(sheet.row(i))
+            self.import_user(sheet.row(i), period_name)
 
index b207d8f00af32fc95c193b336e5918cfb4c5c136..cda4d21777c7a7adb7a0a27c9756da47cef76ad1 100644 (file)
@@ -13,7 +13,7 @@ import datetime
 
 class Command(BaseCommand):
     help = "Import users from a XLS file (see an example in example/data/"
-    args = "path"
+    args = "path period_name"
     first_row = 2
     admin_email = 'webmaster@parisson.com'
 
@@ -24,7 +24,7 @@ class Command(BaseCommand):
         else:
             raise BaseException('You should first create a course with this code: ' + code)
 
-    def import_user(self, row):
+    def import_user(self, row, period):
         last_name   = row[0].value
         first_name  = row[1].value
         email       = row[9].value
@@ -47,9 +47,10 @@ class Command(BaseCommand):
             student = Student.objects.filter(user=user)
             if not student:
                 student = Student(user=user)
-                student.period, c = Period.objects.get_or_create(name='Estivale')
+                student.period, c = Period.objects.get_or_create(name=period)
                 student.iej, c = IEJ.objects.get_or_create(name=row[2].value)
-                student.training, c = Training.objects.get_or_create(code=row[3].value)
+                student.training, c = Training.objects.get_or_create(code=row[3].value,
+                                                                     period=student.period)
                 student.save()
 
             student.procedure = self.get_first_course(row[4].value)
@@ -69,11 +70,12 @@ class Command(BaseCommand):
 
     def handle(self, *args, **options):
         file = args[0]
+        period = args[1]
         self.book = xlrd.open_workbook(file)
         sheet = self.book.sheet_by_index(0)
         col = sheet.col(0)
         for i in range(self.first_row, len(col)):
-            self.import_user(sheet.row(i))
+            self.import_user(sheet.row(i), period)
 
 
 
index 0bbfef158cb3cc15b7f9c3c93577acc0ae5c611d..52350c0fc992e32b3402e0af5496bee414dd0ae0 100644 (file)
@@ -78,6 +78,9 @@ STATUS_CHOICES = (
 
 WEIGHT_CHOICES = get_nint_choices(5)
 
+def get_random_hash():
+    hash = random.getrandbits(128)
+    return "%032x" % hash
 
 class MetaCore:
     app_label = app_label
@@ -245,6 +248,8 @@ class Conference(Model):
         return self.description
 
     def save(self, **kwargs):
+        if not self.public_id:
+            self.public_id = get_random_hash()
         self.course.save()
         super(Conference, self).save(**kwargs)
 
@@ -261,11 +266,16 @@ class Conference(Model):
         return dict
 
     def to_json_dict(self):
-        data = {'id': self.public_id, 'course_code': self.course.code,
-                'course_type': self.course_type.name, 'professor_id': self.professor.user.username,
-                'period': self.period,
+        data = {'id': self.public_id,
+                'course_code': self.course.code,
+                'course_type': self.course_type.name,
+                'professor_id': self.professor.user.username,
+                'period': self.period.name,
                 'session': self.session,
-                'streams':[] }
+                'streams': [],
+                'date_begin': self.date_begin.strftime('%Y %m %d %H %M %S'),
+                'date_end': self.date_end.strftime('%Y %m %d %H %M %S'),
+                 }
 
         if self.room:
             data['room'] = self.room.name
@@ -280,6 +290,26 @@ class Conference(Model):
                                         'stream_type': stream.stream_type  })
         return data
 
+    def from_json_dict(self, data):
+        self.public_id = data['id']
+        self.course, c = Course.objects.get_or_create(code=data['course_code'])
+        self.course_type, c = CourseType.objects.get_or_create(name=data['course_type'])
+        user, c = User.objects.get_or_create(username=data['professor_id'])
+        self.professor, c = Professor.objects.get_or_create(user=user)
+        self.period, c = Period.objects.get_or_create(name=data['period'])
+        self.session = data['session']
+        dl = data['date_begin'].split(' ')
+        self.date_begin = datetime.datetime(int(dl[0]), int(dl[1]), int(dl[2]),
+                                            int(dl[3]), int(dl[4]), int(dl[5]))
+        dl = data['date_end'].split(' ')
+        self.date_end = datetime.datetime(int(dl[0]), int(dl[1]), int(dl[2]),
+                                            int(dl[3]), int(dl[4]), int(dl[5]))
+        if 'room' in data.keys():
+            organization = Organization.objects.get(name=data['organization'])
+            self.room, c = Room.objects.get_or_create(name=data['room'],
+                                                   organization=organization)
+        self.save()
+
     class Meta(MetaCore):
         db_table = app_label + '_' + 'conference'
         verbose_name = _('conference')
@@ -465,7 +495,7 @@ class DocumentSimple(MediaBase):
     def save(self, **kwargs):
         super(DocumentSimple, self).save(**kwargs)
         self.set_mime_type()
-        
+
 
     class Meta(MetaCore):
         db_table = app_label + '_' + 'document_simple'
index fde572153663fd0cff989e83c8bc9140fac38ac8..36241e3d637556822fa00246b02f49c042217ceb 100644 (file)
@@ -103,11 +103,11 @@ def get_courses(user, date_order=False, num_order=False):
     if settings.TELEFORMA_E_LEARNING_TYPE == 'CRFPA':
         from teleforma.views.crfpa import get_crfpa_courses
         return get_crfpa_courses(user, date_order=False, num_order=False)
-    
+
     elif settings.TELEFORMA_E_LEARNING_TYPE == 'AE':
         from teleforma.views.ae import get_ae_courses
         return get_ae_courses(user, date_order=False, num_order=False)
-    
+
 
 def stream_from_file(__file):
     chunk_size = 0x10000
@@ -121,15 +121,19 @@ def stream_from_file(__file):
 
 
 def get_room(content_type=None, id=None, name=None):
-    rooms = jqchat.models.Room.objects.filter(content_type=content_type,
-                                                object_id=id)
-    if not rooms:
-        room = jqchat.models.Room.objects.create(content_type=content_type,
-                                          object_id=id,
-                                          name=name[:20])
+    if settings.TELEFORMA_GLOBAL_TWEETER:
+        return jqchat.models.Room.objects.create(name='site')
+
     else:
-        room = rooms[0]
-    return room
+        rooms = jqchat.models.Room.objects.filter(content_type=content_type,
+                                                    object_id=id)
+        if not rooms:
+            room = jqchat.models.Room.objects.create(content_type=content_type,
+                                              object_id=id,
+                                              name=name[:20])
+        else:
+            room = rooms[0]
+        return room
 
 
 def get_access(obj, courses):
@@ -148,11 +152,6 @@ def get_host(request):
         host = host.split(':')[0]
     return host
 
-
-def get_random_hash():
-    hash = random.getrandbits(128)
-    return "%032x" % hash
-
 def get_periods(user):
     if settings.TELEFORMA_E_LEARNING_TYPE == 'CRFPA':
         student = user.crfpa_student.all()
@@ -175,7 +174,7 @@ def get_periods(user):
         periods = Period.objects.all()
 
     return periods
-    
+
 
 class CourseView(DetailView):
 
@@ -193,10 +192,7 @@ class CourseView(DetailView):
         context['all_courses'] = all_courses
         context['notes'] = course.notes.all().filter(author=self.request.user)
         content_type = ContentType.objects.get(app_label="teleforma", model="course")
-        if settings.TELEFORMA_GLOBAL_TWEETER:
-            context['room'] = get_room(name='site')
-        else:
-            context['room'] = get_room(name=course.title, content_type=content_type,
+        context['room'] = get_room(name=course.title, content_type=content_type,
                                    id=course.id)
         context['doc_types'] = DocumentType.objects.all()
         context['periods'] = get_periods(self.request.user)
@@ -247,12 +243,10 @@ class MediaView(DetailView):
         context['item'] = media.item
         context['type'] = media.course_type
         context['notes'] = media.notes.all().filter(author=self.request.user)
-        content_type = ContentType.objects.get(app_label="teleforma", model="media")
-        if settings.TELEFORMA_GLOBAL_TWEETER:
-            context['room'] = get_room(name='site')
-        else:
-            context['room'] = get_room(name=media.item.title, content_type=content_type,
-                                   id=media.id)
+        content_type = ContentType.objects.get(app_label="teleforma", model="course")
+        context['room'] = get_room(name=media.course.title, content_type=content_type,
+                                   id=media.course.id)
+
         access = get_access(media, all_courses)
         if not access:
             context['access_error'] = access_error
@@ -311,12 +305,9 @@ class DocumentView(DetailView):
         document = self.get_object()
         context['course'] = document.course
         context['notes'] = document.notes.all().filter(author=self.request.user)
-        content_type = ContentType.objects.get(app_label="teleforma", model="document")
-        if settings.TELEFORMA_GLOBAL_TWEETER:
-            context['room'] = get_room(name='site')
-        else:
-            context['room'] = get_room(name=document.title, content_type=content_type,
-                                   id=document.id)
+        content_type = ContentType.objects.get(app_label="teleforma", model="course")
+        context['room'] = get_room(name=document.course, content_type=content_type,
+                                   id=document.course.id)
         access = get_access(document, all_courses)
         if not access:
             context['access_error'] = access_error
@@ -368,12 +359,9 @@ class ConferenceView(DetailView):
         context['course'] = conference.course
         context['type'] = conference.course_type
         context['notes'] = conference.notes.all().filter(author=self.request.user)
-        content_type = ContentType.objects.get(app_label="teleforma", model="conference")
-        if settings.TELEFORMA_GLOBAL_TWEETER:
-            context['room'] = get_room(name='site')
-        else:
-            context['room'] = get_room(name=conference.course.title, content_type=content_type,
-                                   id=conference.id)
+        content_type = ContentType.objects.get(app_label="teleforma", model="course")
+        context['room'] = get_room(name=conference.course.title, content_type=content_type,
+                                   id=conference.course.id)
         context['livestreams'] = conference.livestream.all()
         context['host'] = get_host(self.request)
         access = get_access(conference, all_courses)
@@ -407,6 +395,22 @@ class ConferenceView(DetailView):
         return super(ConferenceView, self).dispatch(*args, **kwargs)
 
 
+class ConferenceListView(ListView):
+
+    model = Conference
+
+    @jsonrpc_method('teleforma.get_conference_list')
+    def get_conference_list(request):
+        return [c.to_json_dict() for c in self.get_queryset()]
+
+    def pull(self, conference):
+        url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
+        s = ServiceProxy(url)
+        list = s.teleforma.get_conference_list()
+        for conf_dict in list:
+            conference.from_json_dict(conf_dict)
+
+
 class ConferenceRecordView(FormView):
     "Conference record form : TeleCaster module required"
 
@@ -512,7 +516,7 @@ class ConferenceRecordView(FormView):
                                         stream_type=stream_type, streaming=True)
                     stream.save()
         else:
-            raise 'Error : Bad Conference dictionnary'
+            raise 'Error : input must be a conference dictionnary'
 
     def push(self, conference):
         url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'