first commit
This commit is contained in:
commit
356f26e570
|
@ -0,0 +1,5 @@
|
|||
local_settings.py
|
||||
*.pyc
|
||||
polynum.db
|
||||
polynum/static
|
||||
polynum/media
|
|
@ -0,0 +1,2 @@
|
|||
Blackboard connector for polynum
|
||||
=============================================================
|
|
@ -0,0 +1,84 @@
|
|||
import requests
|
||||
import os.path
|
||||
import xml.etree.ElementTree as etree
|
||||
import collections
|
||||
import logging
|
||||
|
||||
CourseByOwnerResponse = collections.namedtuple('CourseByOwnerResponse',
|
||||
('message', 'courses'))
|
||||
Course = collections.namedtuple('Course',
|
||||
('id', 'name', 'available'))
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class BlackboardConnector(object):
|
||||
def __init__(self, url):
|
||||
self.url = url
|
||||
|
||||
def _get_course_helper(self, r):
|
||||
r.encoding = 'utf-8'
|
||||
if r.status_code == 200:
|
||||
x = etree.XML(r.text.encode('utf-8'))
|
||||
info_message_elt = x.find('infoMessage')
|
||||
course_elts = x.findall('*/course')
|
||||
courses = []
|
||||
for course_elt in course_elts:
|
||||
id_elt = course_elt.find('ID')
|
||||
name_elt = course_elt.find('name')
|
||||
available_elt = course_elt.find('available')
|
||||
if None in (id_elt, name_elt, available_elt) or available_elt.text not in ('YES', 'NO'):
|
||||
logger.error('invalid answer to GetCourseByOwner: %r', r.text)
|
||||
return False, 'Erreur BlackBoard'
|
||||
course = Course(id_elt.text.strip(), name_elt.text.strip(),
|
||||
available_elt.text == 'YES')
|
||||
courses.append(course)
|
||||
return True, CourseByOwnerResponse(info_message_elt.text.strip(),
|
||||
courses)
|
||||
elif r.status_code == 400:
|
||||
return False, r.text
|
||||
else:
|
||||
logging.error('BlackBoard code HTTP %s', r.status_code)
|
||||
return False, 'Erreur BlackBoard'
|
||||
|
||||
def get_course_by_owner(self, user_login):
|
||||
assert user_login
|
||||
r = requests.get(os.path.join(self.url, 'GetCourseByOwner'),
|
||||
params={'user_login': user_login.encode('ascii')})
|
||||
return self._get_course_helper(r)
|
||||
|
||||
def get_course_by_ue(self, entity_code):
|
||||
assert entity_code
|
||||
r = requests.get(os.path.join(self.url, 'GetCourseByUE'),
|
||||
params={'UE_ID': entity_code.encode('ascii')})
|
||||
return self._get_course_helper(r)
|
||||
|
||||
def send_file(self, uploadfile, courses_id):
|
||||
assert hasattr(uploadfile, 'read')
|
||||
assert hasattr(courses_id, '__iter__')
|
||||
assert len(courses_id) > 0
|
||||
assert all(map(bool, courses_id))
|
||||
|
||||
r = requests.post(os.path.join(self.url, 'SendFile'),
|
||||
params={'course_ID': courses_id},
|
||||
files={'uploadfile': uploadfile})
|
||||
if r.status_code == 200:
|
||||
return True, r.text
|
||||
return False, r.text
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
import logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
connector = BlackboardConnector(sys.argv[1])
|
||||
if len(sys.argv) == 4 and sys.argv[2] == 'GetCourseByOwner':
|
||||
print connector.get_course_by_owner(sys.argv[3])
|
||||
elif len(sys.argv) == 4 and sys.argv[2] == 'GetCourseByUE':
|
||||
print connector.get_course_by_ue(sys.argv[3])
|
||||
elif len(sys.argv) == 5 and sys.argv[2] == 'SendFile':
|
||||
print connector.send_file(file(sys.argv[3]), sys.argv[4].split(','))
|
||||
else:
|
||||
print 'Syntax: python', sys.argv[0], '<url> [GetCourseByOwner <user_login>|GetCourseByUE <UE_ID>|SendFile <filename> <courseid1,courseid2,courseid3,etc.>]'
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#! /usr/bin/env python
|
||||
|
||||
''' Setup script for Blackboard connector for polynum
|
||||
'''
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
setup(name="Connecteur Blackboard pour Polynum",
|
||||
version=0.1,
|
||||
license="AGPLv3 or later",
|
||||
description="Permet l'envoi de polycopiés directement dans un cours du logiciel Blackboard",
|
||||
url="http://dev.entrouvert.org/projects/polynum-blackboard/",
|
||||
author="Entr'ouvert",
|
||||
author_email="info@entrouvert.org",
|
||||
maintainer="Benjamin Dauvergne",
|
||||
maintainer_email="bdauvergne@entrouvert.com",
|
||||
packages=find_packages(),
|
||||
package_data={},
|
||||
install_requires=[
|
||||
],
|
||||
)
|
Reference in New Issue