ws: improved connection error handling and logging of error results

This commit is contained in:
Benjamin Dauvergne 2012-12-05 00:36:56 +01:00
parent 55e9c907f9
commit f7300a212d
1 changed files with 27 additions and 10 deletions

View File

@ -1,4 +1,5 @@
import requests
from requests.exceptions import ConnectionError
import os.path
import xml.etree.ElementTree as etree
import collections
@ -28,9 +29,13 @@ class BlackboardConnector(object):
self.shared_key = shared_key
self.session = requests.session()
url = os.path.join(self.url, 'login/')
self.session.post(url,
params=dict(user_id=self.login,
password=self.password, action='login'))
try:
self.session.get(url)
self.session.post(url,
data=dict(user_id=self.login,
password=self.password, action='login', login='Connexion'))
except ConnectionError:
pass
def _get_course_helper(self, r):
r.encoding = 'utf-8'
@ -58,22 +63,30 @@ class BlackboardConnector(object):
return False, 'Erreur BlackBoard'
def get_course_by_owner(self, user_login):
r = self.send_request('GetCoursesByOwner',
user_login=user_login.encode('ascii'))
try:
r = self.send_request('GetCoursesByOwner',
user_login=user_login.encode('ascii'))
except ConnectionError:
return True, []
return self._get_course_helper(r)
def get_course_by_ue(self, entity_code):
r = self.send_request('GetCoursesByUE',
UE_ID=entity_code.encode('ascii'))
try:
r = self.send_request('GetCoursesByUE',
UE_ID=entity_code.encode('ascii'))
except ConnectionError:
return True, []
return self._get_course_helper(r)
def send_file(self, uploadfile, courses_id):
def send_file(self, uploadfile, courses_id, visible):
assert hasattr(uploadfile, 'read')
assert hasattr(courses_id, '__iter__')
assert len(courses_id) > 0
assert all(map(bool, courses_id))
visible = bool2str(visible)
r = self.send_request('SendFile', course_ID=courses_id,
files=dict(uploadfile=uploadfile), method='post')
files=dict(uploadfile=uploadfile), method='post',
visible=visible)
if r.status_code == 200:
return True, r.text
return False, r.text
@ -115,7 +128,10 @@ class BlackboardConnector(object):
return r
def get_categories(self):
r = self.send_request('GetCategories')
try:
r = self.send_request('GetCategories')
except ConnectionError:
return True, GetCategoryResponse('', [])
if r.status_code == 200 and r.content.startswith('<'):
x = etree.XML(r.content.replace('ISO-8859-1', 'UTF-8'))
info_message_elt = x.find('infoMessage')
@ -133,6 +149,7 @@ class BlackboardConnector(object):
return False, r.text
else:
logging.error('BlackBoard code HTTP %s', r.status_code)
logging.error(r.text.replace('\n', '\\n'))
return False, 'Erreur BlackBoard {0}'.format(r.status_code)
if __name__ == '__main__':