This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
polynum-blackboard/polynum_blackboard/management/commands/send-to-mycourse.py

63 lines
2.5 KiB
Python

# vim:spell:spelllang=fr
# -*- encoding: utf-8 -*-
import logging
import os
from optparse import make_option
from django.core.management.base import BaseCommand
from django.db import transaction
from ... import models, django_ws
class Command(BaseCommand):
'''
Envoyer les demandes blackboard
'''
can_import_django_settings = True
requires_model_validation = True
args = ''
help = 'Envoyer les demandes blackboard'
option_list = BaseCommand.option_list + (
make_option("--send", action="store_true"),
make_option("--list", action="store_true"),
make_option("--delete", action="store", type="string"))
@transaction.commit_on_success
def handle(self, *args, **options):
logger = logging.getLogger(__name__)
bb_pushs = models.BlackBoardPush.objects.filter(sent=False)
if options['delete']:
qs = models.BlackBoardPush.objects.filter(id__in=options['delete'].split(','))
for push in qs:
print ' - deleted push request %s for document %s' % (push.id, push.request.id)
qs.delete()
if options['list']:
for push in bb_pushs:
print ' -', push.id, 'document', os.path.basename(push.request.uploadfile.name), '(%s)' % \
push.request.id, 'de', push.request.user.display_name(), 'dans le cours', push.course_name,
if push.visible_to_students:
print '(visible aux étudiants)',
print
if options['send']:
conn = django_ws.get_bb_conn()
for push in bb_pushs:
logger.info('sending request %s to mycourse', push.request.pk)
logger.info('from user %s', push.request.user.display_name().encode('utf-8'))
logger.info('into course %s', push.course_name.encode('utf-8'))
if push.visible_to_students:
logger.info('visible to students')
try:
ok, result = conn.send_file(push.request.uploadfile, [push.course_name], push.visible_to_students)
push.sent = True
if not ok:
logger.info('sending succeeded')
push.failure = result
logger.error('sending failed: %r', result.encode('utf-8'))
except Exception, e:
logger.exception('sending failed')
push.failure = unicode(e)
push.sent = True
push.save()