Conflicts: cms/djangoapps/contentstore/course_info_model.py cms/djangoapps/contentstore/module_info_model.py cms/djangoapps/contentstore/tests/factories.py cms/djangoapps/contentstore/tests/test_course_settings.py cms/djangoapps/contentstore/views.py cms/djangoapps/models/settings/course_details.py cms/djangoapps/models/settings/course_grading.py cms/templates/edit_subsection.html common/djangoapps/mitxmako/shortcuts.py common/djangoapps/static_replace.py common/djangoapps/util/converters.py common/djangoapps/xmodule_modifiers.py common/lib/xmodule/setup.py common/lib/xmodule/xmodule/abtest_module.py common/lib/xmodule/xmodule/capa_module.py common/lib/xmodule/xmodule/course_module.py common/lib/xmodule/xmodule/discussion_module.py common/lib/xmodule/xmodule/error_module.py common/lib/xmodule/xmodule/html_module.py common/lib/xmodule/xmodule/js/src/video/display.coffee common/lib/xmodule/xmodule/mako_module.py common/lib/xmodule/xmodule/modulestore/mongo.py common/lib/xmodule/xmodule/modulestore/store_utilities.py common/lib/xmodule/xmodule/modulestore/xml.py common/lib/xmodule/xmodule/modulestore/xml_importer.py common/lib/xmodule/xmodule/raw_module.py common/lib/xmodule/xmodule/self_assessment_module.py common/lib/xmodule/xmodule/seq_module.py common/lib/xmodule/xmodule/template_module.py common/lib/xmodule/xmodule/tests/__init__.py common/lib/xmodule/xmodule/tests/test_export.py common/lib/xmodule/xmodule/tests/test_import.py common/lib/xmodule/xmodule/video_module.py common/lib/xmodule/xmodule/x_module.py common/lib/xmodule/xmodule/xml_module.py lms/djangoapps/courseware/access.py lms/djangoapps/courseware/courses.py lms/djangoapps/courseware/grades.py lms/djangoapps/courseware/models.py lms/djangoapps/courseware/module_render.py lms/djangoapps/courseware/tests/tests.py lms/djangoapps/courseware/views.py lms/djangoapps/django_comment_client/utils.py lms/templates/staff_problem_info.html lms/templates/video.html rakefile
66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
import json
|
|
import logging
|
|
import requests
|
|
import settings
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def strip_none(dic):
|
|
return dict([(k, v) for k, v in dic.iteritems() if v is not None])
|
|
|
|
|
|
def strip_blank(dic):
|
|
def _is_blank(v):
|
|
return isinstance(v, str) and len(v.strip()) == 0
|
|
return dict([(k, v) for k, v in dic.iteritems() if not _is_blank(v)])
|
|
|
|
|
|
def extract(dic, keys):
|
|
if isinstance(keys, str):
|
|
return strip_none({keys: dic.get(keys)})
|
|
else:
|
|
return strip_none({k: dic.get(k) for k in keys})
|
|
|
|
|
|
def merge_dict(dic1, dic2):
|
|
return dict(dic1.items() + dic2.items())
|
|
|
|
|
|
def perform_request(method, url, data_or_params=None, *args, **kwargs):
|
|
if data_or_params is None:
|
|
data_or_params = {}
|
|
data_or_params['api_key'] = settings.API_KEY
|
|
try:
|
|
if method in ['post', 'put', 'patch']:
|
|
response = requests.request(method, url, data=data_or_params, timeout=5)
|
|
else:
|
|
response = requests.request(method, url, params=data_or_params, timeout=5)
|
|
except Exception as err:
|
|
log.exception("Trying to call {method} on {url} with params {params}".format(
|
|
method=method, url=url, params=data_or_params))
|
|
# Reraise with a single exception type
|
|
raise CommentClientError(str(err))
|
|
|
|
if 200 < response.status_code < 500:
|
|
raise CommentClientError(response.text)
|
|
elif response.status_code == 500:
|
|
raise CommentClientUnknownError(response.text)
|
|
else:
|
|
if kwargs.get("raw", False):
|
|
return response.text
|
|
else:
|
|
return json.loads(response.text)
|
|
|
|
|
|
class CommentClientError(Exception):
|
|
def __init__(self, msg):
|
|
self.message = msg
|
|
|
|
def __str__(self):
|
|
return repr(self.message)
|
|
|
|
|
|
class CommentClientUnknownError(CommentClientError):
|
|
pass
|