import random
import requests
import asyncio
+import httpx
+
from teleforma.utils import guess_mimetypes
import django.db.models as models
self.course_type.name, self.session,
str(self.date_begin)]
return ' - '.join(list)
+
+ async def notify_async(self):
+ if self.streaming and not self.notified_live:
+ # Notify live conferences by sending a signal to websocket.
+ # This signal will be catched by the channel instance to notify students
+ if settings.DEBUG:
+ requests.post(f"{settings.CHANNEL_URL}{reverse('teleforma-live-conference-notify')}", {'id': self.id})
+ else:
+ transport = httpx.HTTPTransport(uds=settings.CHANNEL_URL)
+ async with httpx.AsyncClient(transport=transport) as client:
+ response = await client.post("http://localhost" + reverse('teleforma-live-conference-notify'),
+ data={'id': self.id}, timeout=20.0)
+ assert response.status_code == 200
- def save(self, *args, **kwargs):
- if not self.public_id:
- self.public_id = get_random_hash()
- self.course.save()
-
+ def notify_sync(self):
if self.streaming and not self.notified_live:
# Notify live conferences by sending a signal to websocket.
# This signal will be catched by the channel instance to notify students
- from teleforma.models.notification import notify
- #requests.post(f"{settings.CHANNEL_URL}{reverse('teleforma-live-conference-notify')}", {'id': self.id})
- #self.notified_live = True
-
+ if settings.DEBUG:
+ requests.post(f"{settings.CHANNEL_URL}{reverse('teleforma-live-conference-notify')}", {'id': self.id})
+ else:
+ transport = httpx.HTTPTransport(uds=settings.CHANNEL_URL)
+ with httpx.Client(transport=transport) as client:
+ response = client.post("http://localhost" + reverse('teleforma-live-conference-notify'),
+ data={'id': self.id}, timeout=120.0)
+ assert response.status_code == 200
+
+ def save(self, *args, **kwargs):
+ if not self.public_id:
+ self.public_id = get_random_hash()
+ self.course.save()
super(Conference, self).save(*args, **kwargs)
def to_dict(self):
verbose_name = _('conference')
ordering = ['-date_begin']
+def notif_conference(sender, instance, *args, **kwargs):
+ if not instance.notified_live:
+ instance.notify_sync()
+ instance.notified_live = True
+ instance.save()
+
+post_save.connect(notif_conference, sender=Conference)
class StreamingServer(models.Model):
db_table = app_label + '_' + 'streaming_server'
verbose_name = _('streaming server')
-
class LiveStream(models.Model):
element_type = 'livestream'
from html import escape
from io import BytesIO
from teleforma.utils import guess_mimetypes
+import logging
from jsonrpc import jsonrpc_method
from teleforma.forms import *
from teleforma.models.appointment import AppointmentPeriod
from teleforma.webclass.models import Webclass, WebclassSlot, WebclassRecord
+from teleforma.models.notification import Notification, notify
from teleforma.decorators import access_required
from teleforma.models.crfpa import Home
import pages
from ..webclass.models import Webclass, WebclassRecord, get_records_from_bbb
from .pages import get_page_content
+
+logger = logging.getLogger('teleforma')
# def render(request, template, data=None, mimetype=None):
# return django_render(template, data, context_instance=RequestContext(request),
# mimetype=mimetype)
conference = Conference.objects.get(pk=int(conference_id))
students = Student.objects.filter(period=conference.period, platform_only=True)
text = f"""Une conférence live "{conference.course.title}" commence"""
+
url = reverse('teleforma-conference-detail', kwargs={'period_id': conference.period.id, 'pk': conference.id})
# notify students
for course in courses:
if conference.course == course['course'] and \
conference.course_type in course['types']:
+ if conference.bbb_room_id:
+ url = conference.get_join_conference_url(student.user)
notify(student.user, text, url)
logger.info("Student notified: " + student.user.username)
except Exception as e: