From c271b338decfe56e9b214b3ad1c406b279d96e09 Mon Sep 17 00:00:00 2001 From: Michael Roytman Date: Fri, 7 Dec 2018 14:45:53 -0500 Subject: [PATCH] remove rules as parameter for create and update of exam review policy --- edx_proctoring/__init__.py | 2 +- edx_proctoring/api.py | 20 ++---- ..._proctoredexamreviewpolicy_remove_rules.py | 23 +++++++ edx_proctoring/models.py | 8 --- edx_proctoring/serializers.py | 3 +- edx_proctoring/tests/test_api.py | 68 +------------------ edx_proctoring/tests/test_models.py | 9 --- package.json | 3 +- requirements/base.txt | 14 ++-- requirements/dev.txt | 18 +++-- requirements/doc.txt | 17 ++--- requirements/quality.txt | 16 +++-- requirements/test.txt | 17 +++-- 13 files changed, 81 insertions(+), 137 deletions(-) create mode 100644 edx_proctoring/migrations/0009_proctoredexamreviewpolicy_remove_rules.py diff --git a/edx_proctoring/__init__.py b/edx_proctoring/__init__.py index b2d90d2d540..da288ef47d1 100644 --- a/edx_proctoring/__init__.py +++ b/edx_proctoring/__init__.py @@ -5,6 +5,6 @@ from __future__ import absolute_import # Be sure to update the version number in edx_proctoring/package.json -__version__ = '1.5.0rc1' +__version__ = '1.5.0rc2' default_app_config = 'edx_proctoring.apps.EdxProctoringConfig' # pylint: disable=invalid-name diff --git a/edx_proctoring/api.py b/edx_proctoring/api.py index d0aa51e9f39..dd8228c91a6 100644 --- a/edx_proctoring/api.py +++ b/edx_proctoring/api.py @@ -114,7 +114,7 @@ def create_exam(course_id, content_id, exam_name, time_limit_mins, due_date=None return proctored_exam.id -def create_exam_review_policy(exam_id, set_by_user_id, review_policy, rules): +def create_exam_review_policy(exam_id, set_by_user_id, review_policy): """ Creates a new exam_review_policy entity, if the review_policy for exam_id does not already exist. If it exists, then raise exception. @@ -123,7 +123,6 @@ def create_exam_review_policy(exam_id, set_by_user_id, review_policy, rules): exam_id: the ID of the exam with which the review policy is to be associated set_by_user_id: the ID of the user setting this review policy review_policy: the review policy for the exam - rules: the dictionary of rules for the exam Returns: id (PK) """ @@ -135,16 +134,14 @@ def create_exam_review_policy(exam_id, set_by_user_id, review_policy, rules): proctored_exam_id=exam_id, set_by_user_id=set_by_user_id, review_policy=review_policy, - rules=rules, ) log_msg = ( u'Created ProctoredExamReviewPolicy ({review_policy}) with parameters: exam_id={exam_id}, ' - u'set_by_user_id={set_by_user_id}, rules={rules}'.format( + u'set_by_user_id={set_by_user_id}'.format( exam_id=exam_id, review_policy=review_policy, set_by_user_id=set_by_user_id, - rules=rules, ) ) log.info(log_msg) @@ -152,7 +149,7 @@ def create_exam_review_policy(exam_id, set_by_user_id, review_policy, rules): return exam_review_policy.id -def update_review_policy(exam_id, set_by_user_id, review_policy, rules): +def update_review_policy(exam_id, set_by_user_id, review_policy): """ Given a exam id, update/remove the existing record, otherwise raise exception if not found. @@ -160,17 +157,14 @@ def update_review_policy(exam_id, set_by_user_id, review_policy, rules): exam_id: the ID of the exam whose review policy is being updated set_by_user_id: the ID of the user updating this review policy review_policy: the review policy for the exam - rules: the dictionary of rules for the exam Returns: review_policy_id """ log_msg = ( u'Updating exam review policy with exam_id {exam_id} ' u'set_by_user_id={set_by_user_id}, review_policy={review_policy} ' - u'rules={rules}' .format( - exam_id=exam_id, set_by_user_id=set_by_user_id, review_policy=review_policy, - rules=rules + exam_id=exam_id, set_by_user_id=set_by_user_id, review_policy=review_policy ) ) log.info(log_msg) @@ -178,10 +172,9 @@ def update_review_policy(exam_id, set_by_user_id, review_policy, rules): if exam_review_policy is None: raise ProctoredExamReviewPolicyNotFoundException - if review_policy or rules: + if review_policy: exam_review_policy.set_by_user_id = set_by_user_id exam_review_policy.review_policy = review_policy - exam_review_policy.rules = rules exam_review_policy.save() msg = 'Updated exam review policy with {exam_id}'.format(exam_id=exam_id) log.info(msg) @@ -225,9 +218,6 @@ def _save_exam_on_backend(sender, instance, **kwargs): # pylint: disable=unused exam = ProctoredExamSerializer(exam_obj).data if review_policy: exam['rule_summary'] = review_policy.review_policy - # When the rules are defined as boolean options, - # save them here - exam['rules'] = review_policy.rules backend = get_backend_provider(exam) external_id = backend.on_exam_saved(exam) if external_id and external_id != exam_obj.external_id: diff --git a/edx_proctoring/migrations/0009_proctoredexamreviewpolicy_remove_rules.py b/edx_proctoring/migrations/0009_proctoredexamreviewpolicy_remove_rules.py new file mode 100644 index 00000000000..158ad39157e --- /dev/null +++ b/edx_proctoring/migrations/0009_proctoredexamreviewpolicy_remove_rules.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.16 on 2018-12-10 16:47 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('edx_proctoring', '0008_auto_20181116_1551'), + ] + + operations = [ + migrations.RemoveField( + model_name='proctoredexamreviewpolicy', + name='rules', + ), + migrations.RemoveField( + model_name='proctoredexamreviewpolicyhistory', + name='rules', + ), + ] diff --git a/edx_proctoring/models.py b/edx_proctoring/models.py index e1dab7c3725..08869e49e9e 100644 --- a/edx_proctoring/models.py +++ b/edx_proctoring/models.py @@ -16,7 +16,6 @@ from django.dispatch import receiver from django.utils.translation import ugettext_noop -from jsonfield import JSONField from model_utils.models import TimeStampedModel from edx_proctoring.exceptions import ( @@ -133,9 +132,6 @@ class ProctoredExamReviewPolicy(TimeStampedModel): # policy that will be passed to reviewers review_policy = models.TextField(default='') - # JSON rules that will be passed to reviewers - rules = JSONField(null=True) - def __str__(self): # pragma: no cover return u"ProctoredExamReviewPolicy: {set_by_user} ({proctored_exam})".format( @@ -179,9 +175,6 @@ class ProctoredExamReviewPolicyHistory(TimeStampedModel): # policy that will be passed to reviewers review_policy = models.TextField() - # JSON rules that will be passed to reviewers - rules = JSONField(null=True) - class Meta: """ Meta class for this Django model """ db_table = 'proctoring_proctoredexamreviewpolicyhistory' @@ -228,7 +221,6 @@ def _make_review_policy_archive_copy(instance): set_by_user_id=instance.set_by_user_id, proctored_exam=instance.proctored_exam, review_policy=instance.review_policy, - rules=instance.rules, ) archive_object.save() diff --git a/edx_proctoring/serializers.py b/edx_proctoring/serializers.py index 90aa5bcd4c7..6bb6e59602f 100644 --- a/edx_proctoring/serializers.py +++ b/edx_proctoring/serializers.py @@ -116,7 +116,6 @@ class ProctoredExamReviewPolicySerializer(serializers.ModelSerializer): """ proctored_exam = ProctoredExamSerializer() set_by_user = UserSerializer() - rules = serializers.JSONField() class Meta: """ @@ -124,5 +123,5 @@ class Meta: """ model = ProctoredExamReviewPolicy fields = ( - "id", "created", "modified", "set_by_user", "proctored_exam", "review_policy", "rules" + "id", "created", "modified", "set_by_user", "proctored_exam", "review_policy", ) diff --git a/edx_proctoring/tests/test_api.py b/edx_proctoring/tests/test_api.py index 525f78e345d..d5667d9ad65 100644 --- a/edx_proctoring/tests/test_api.py +++ b/edx_proctoring/tests/test_api.py @@ -206,16 +206,11 @@ def test_create_exam_review_policy(self): proctored exam and tests that it stores in the db correctly """ - rules = { - 'allow_grok': True - } - proctored_exam = get_exam_by_id(self.proctored_exam_id) create_exam_review_policy( exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules=rules ) # now get the exam review policy for the proctored exam @@ -224,7 +219,6 @@ def test_create_exam_review_policy(self): self.assertEqual(exam_review_policy['proctored_exam']['id'], proctored_exam['id']) self.assertEqual(exam_review_policy['set_by_user']['id'], self.user_id) self.assertEqual(exam_review_policy['review_policy'], u'allow use of paper') - self.assertEqual(exam_review_policy['rules'], rules) # this tests that the backend received the callback when the review policy changed backend = get_backend_provider(proctored_exam) @@ -240,7 +234,6 @@ def test_get_exam_review_policy(self): exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules={'allow_grok': True} ) # now get the exam review policy for the proctored exam @@ -254,16 +247,11 @@ def test_update_exam_review_policy_updates_review_policy(self): policy for proctored exam and tests that it stores in the db correctly. """ - rules = { - 'allow_grok': True - } - proctored_exam = get_exam_by_id(self.proctored_exam_id) create_exam_review_policy( exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules=rules ) # now update the exam review policy's review policy for the proctored exam @@ -271,51 +259,6 @@ def test_update_exam_review_policy_updates_review_policy(self): exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of calculator', - rules=rules - ) - - # now get the updated exam review policy for the proctored exam - exam_review_policy = get_review_policy_by_exam_id(proctored_exam['id']) - - self.assertEqual(exam_review_policy['proctored_exam']['id'], proctored_exam['id']) - self.assertEqual(exam_review_policy['set_by_user']['id'], self.user_id) - self.assertEqual(exam_review_policy['review_policy'], u'allow use of calculator') - self.assertEqual(exam_review_policy['rules'], rules) - - def test_update_exam_review_policy_updates_rules(self): - """ - Test to update existing exam review policy's rules for - proctored exam and tests that it stores in the - db correctly. - """ - rules = { - 'allow_grok': True - } - - proctored_exam = get_exam_by_id(self.proctored_exam_id) - create_exam_review_policy( - exam_id=proctored_exam['id'], - set_by_user_id=self.user_id, - review_policy=u'allow use of paper', - rules=rules - ) - - # this tests that the backend received the callback when the review policy changed - backend = get_backend_provider(proctored_exam) - self.assertEqual(backend.last_exam['rule_summary'], u'allow use of paper') - self.assertEqual(backend.last_exam['rules'], rules) - - updated_rules = { - 'allow_foo': False - } - - # now update the exam review policy's rules for the proctored exam - # now update the exam review policy for the proctored exam - update_review_policy( - exam_id=proctored_exam['id'], - set_by_user_id=self.user_id, - review_policy=u'allow use of calculator', - rules=updated_rules ) # now get the updated exam review policy for the proctored exam @@ -324,11 +267,8 @@ def test_update_exam_review_policy_updates_rules(self): self.assertEqual(exam_review_policy['proctored_exam']['id'], proctored_exam['id']) self.assertEqual(exam_review_policy['set_by_user']['id'], self.user_id) self.assertEqual(exam_review_policy['review_policy'], u'allow use of calculator') - self.assertEqual(exam_review_policy['rules'], updated_rules) - self.assertEqual(backend.last_exam['rule_summary'], u'allow use of calculator') - self.assertEqual(backend.last_exam['rules'], updated_rules) - def test_update_review_policy_with_empty_review_policy_and_rules_removes_review_policy(self): + def test_update_review_policy_with_empty_review_policy_removes_review_policy(self): """ Test that updating an proctored exam's exam review policy with an empty review policy removes the exam review policy. @@ -338,7 +278,6 @@ def test_update_review_policy_with_empty_review_policy_and_rules_removes_review_ exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules={'allow_grok': True} ) # now update the exam review policy for the proctored exam # with review_policy value to "" and rules value to "". @@ -348,7 +287,6 @@ def test_update_review_policy_with_empty_review_policy_and_rules_removes_review_ exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'', - rules=u'' ) with self.assertRaises(ProctoredExamReviewPolicyNotFoundException): get_review_policy_by_exam_id(proctored_exam['id']) @@ -363,7 +301,6 @@ def test_remove_existing_exam_review_policy(self): exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules={'allow_grok': True} ) # now remove the exam review policy for the proctored exam @@ -403,7 +340,6 @@ def test_update_non_existing_exam_review_policy(self): exam_id=self.practice_exam_id, set_by_user_id=10, review_policy=u'allow use of calculator', - rules={'allow_grok': True} ) def test_create_exam_review_policy_with_same_exam_id(self): @@ -415,7 +351,6 @@ def test_create_exam_review_policy_with_same_exam_id(self): exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules={'allow_grok': True} ) # create the same review policy again will raise exception @@ -424,7 +359,6 @@ def test_create_exam_review_policy_with_same_exam_id(self): exam_id=proctored_exam['id'], set_by_user_id=self.user_id, review_policy=u'allow use of paper', - rules={'allow_grok': True} ) def test_get_non_existing_review_policy_raises_exception(self): diff --git a/edx_proctoring/tests/test_models.py b/edx_proctoring/tests/test_models.py index 84d697dcf17..1eb6201662e 100644 --- a/edx_proctoring/tests/test_models.py +++ b/edx_proctoring/tests/test_models.py @@ -305,13 +305,10 @@ def test_exam_review_policy(self): time_limit_mins=90 ) - rules = {'allow_grok': True} - policy = ProctoredExamReviewPolicy.objects.create( set_by_user_id=self.user.id, proctored_exam=proctored_exam, review_policy='Foo Policy', - rules=rules ) attempt = ProctoredExamStudentAttempt.create_exam_attempt( @@ -330,10 +327,7 @@ def test_exam_review_policy(self): self.assertEqual(len(history), 0) # now update it - updated_rules = {'allow_foo': False} - policy.review_policy = 'Updated Foo Policy' - policy.rules = updated_rules policy.save() # look in history @@ -344,7 +338,6 @@ def test_exam_review_policy(self): self.assertEqual(previous.proctored_exam_id, proctored_exam.id) self.assertEqual(previous.original_id, policy.id) self.assertEqual(previous.review_policy, 'Foo Policy') - self.assertEqual(previous.rules, rules) # now delete updated one deleted_id = policy.id @@ -358,14 +351,12 @@ def test_exam_review_policy(self): self.assertEqual(previous.proctored_exam_id, proctored_exam.id) self.assertEqual(previous.original_id, deleted_id) self.assertEqual(previous.review_policy, 'Foo Policy') - self.assertEqual(previous.rules, rules) previous = history[1] self.assertEqual(previous.set_by_user_id, self.user.id) self.assertEqual(previous.proctored_exam_id, proctored_exam.id) self.assertEqual(previous.original_id, deleted_id) self.assertEqual(previous.review_policy, 'Updated Foo Policy') - self.assertEqual(previous.rules, updated_rules) # assert that we cannot delete history! with self.assertRaises(NotImplementedError): diff --git a/package.json b/package.json index c5f4686762a..122850b2e29 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { "name": "@edx/edx-proctoring", "//": "Be sure to update the version number in edx_proctoring/__init__.py", - "version": "1.5.0-rc.1", + "//": "Note that the version format is slightly different than that of the Python version when using prereleases.", + "version": "1.5.0-rc.2", "main": "edx_proctoring/static/index.js", "repository": { "type": "git", diff --git a/requirements/base.txt b/requirements/base.txt index 884a9b2151b..918e89f7ebf 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -4,13 +4,13 @@ # # pip-compile --output-file requirements/base.txt requirements/base.in # -certifi==2018.10.15 # via requests +certifi==2018.11.29 # via requests chardet==3.0.4 # via requests django-ipware==2.1.0 django-model-utils==3.1.2 django-waffle==0.15.0 # via edx-django-utils, edx-drf-extensions django-webpack-loader==0.6.0 -django==1.11.16 +django==1.11.17 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.6.4 edx-django-utils==1.0.1 # via edx-drf-extensions @@ -19,21 +19,21 @@ edx-opaque-keys==0.4.4 edx-rest-api-client==1.9.2 event-tracking==0.2.7 future==0.17.1 # via pyjwkest -idna==2.7 # via requests +idna==2.8 # via requests jsonfield==2.0.2 -newrelic==4.6.0.106 # via edx-django-utils +newrelic==4.8.0.110 # via edx-django-utils pbr==5.1.1 # via stevedore psutil==1.2.1 # via edx-django-utils, edx-drf-extensions pycryptodomex==3.7.2 pyjwkest==1.3.2 # via edx-drf-extensions -pyjwt==1.6.4 # via djangorestframework-jwt, edx-rest-api-client +pyjwt==1.7.1 # via djangorestframework-jwt, edx-rest-api-client pymongo==3.7.2 # via edx-opaque-keys, event-tracking python-dateutil==2.7.5 pytz==2018.7 -requests==2.20.1 # via edx-drf-extensions, edx-rest-api-client, pyjwkest, slumber +requests==2.21.0 # via edx-drf-extensions, edx-rest-api-client, pyjwkest, slumber rest-condition==1.0.3 # via edx-drf-extensions semantic-version==2.6.0 # via edx-drf-extensions -six==1.11.0 # via edx-drf-extensions, edx-opaque-keys, pyjwkest, python-dateutil, stevedore +six==1.12.0 # via edx-drf-extensions, edx-opaque-keys, pyjwkest, python-dateutil, stevedore slumber==0.7.1 # via edx-rest-api-client stevedore==1.30.0 # via edx-opaque-keys urllib3==1.24.1 # via requests diff --git a/requirements/dev.txt b/requirements/dev.txt index 4ae76a2a71c..1e5e6f548aa 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -9,20 +9,23 @@ astroid==1.5.2 # via edx-lint, pylint, pylint-celery backports.functools-lru-cache==1.5 # via astroid, caniusepython3, pylint bleach==3.0.2 # via readme-renderer caniusepython3==7.0.0 -certifi==2018.10.15 # via requests +certifi==2018.11.29 # via requests chardet==3.0.4 # via requests click-log==0.1.8 # via edx-lint click==7.0 # via click-log, edx-lint, pip-tools +configparser==3.5.0 # via pydocstyle, pylint +contextlib2==0.5.5 # via importlib-metadata diff-cover==1.0.5 distlib==0.2.8 # via caniusepython3 -django==1.11.16 +django==1.11.17 docutils==0.14 # via readme-renderer edx-i18n-tools==0.4.8 edx_lint==0.5.5 +enum34==1.1.6 # via astroid filelock==3.0.10 # via tox futures==3.2.0 # via caniusepython3, isort -idna==2.7 # via requests -importlib-metadata==0.6 # via path.py +idna==2.8 # via requests +importlib-metadata==0.7 # via path.py inflect==2.1.0 # via jinja2-pluralize isort==4.3.4 jinja2-pluralize==0.3.0 # via diff-cover @@ -32,6 +35,7 @@ markupsafe==1.1.0 # via jinja2 mccabe==0.6.1 # via pylint packaging==18.0 # via caniusepython3 path.py==11.5.0 # via edx-i18n-tools +pathlib2==2.3.3 # via importlib-metadata pip-tools==3.1.0 pkginfo==1.4.2 # via twine pluggy==0.8.0 # via tox @@ -49,8 +53,10 @@ pytz==2018.7 # via django pyyaml==3.13 # via edx-i18n-tools readme-renderer==24.0 # via twine requests-toolbelt==0.8.0 # via twine -requests==2.20.1 # via caniusepython3, requests-toolbelt, twine -six==1.11.0 # via astroid, bleach, diff-cover, edx-i18n-tools, edx-lint, packaging, pip-tools, pydocstyle, pylint, readme-renderer, tox +requests==2.21.0 # via caniusepython3, requests-toolbelt, twine +scandir==1.9.0 # via pathlib2 +singledispatch==3.4.0.3 # via astroid, pylint +six==1.12.0 # via astroid, bleach, diff-cover, edx-i18n-tools, edx-lint, packaging, pathlib2, pip-tools, pydocstyle, pylint, readme-renderer, singledispatch, tox snowballstemmer==1.2.1 # via pydocstyle toml==0.10.0 # via tox tox-battery==0.5.1 diff --git a/requirements/doc.txt b/requirements/doc.txt index 5bf96609422..76a228bfba7 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -7,13 +7,13 @@ alabaster==0.7.12 # via sphinx babel==2.6.0 # via sphinx bleach==3.0.2 # via readme-renderer -certifi==2018.10.15 # via requests +certifi==2018.11.29 # via requests chardet==3.0.4 # via doc8, requests django-ipware==2.1.0 django-model-utils==3.1.2 django-waffle==0.15.0 # via edx-django-utils, edx-drf-extensions django-webpack-loader==0.6.0 -django==1.11.16 +django==1.11.17 djangorestframework-jwt==1.11.0 # via edx-drf-extensions djangorestframework==3.6.4 doc8==0.8.0 @@ -22,15 +22,15 @@ edx-django-utils==1.0.1 # via edx-drf-extensions edx-drf-extensions==2.0.1 edx-opaque-keys==0.4.4 edx-rest-api-client==1.9.2 -edx-sphinx-theme==1.3.0 +edx-sphinx-theme==1.4.0 event-tracking==0.2.7 future==0.17.1 # via pyjwkest -idna==2.7 # via requests +idna==2.8 # via requests imagesize==1.1.0 # via sphinx jinja2==2.10 # via sphinx jsonfield==2.0.2 markupsafe==1.1.0 # via jinja2 -newrelic==4.6.0.106 # via edx-django-utils +newrelic==4.8.0.110 # via edx-django-utils packaging==18.0 # via sphinx pbr==5.1.1 # via stevedore pockets==0.7.2 # via sphinxcontrib-napoleon @@ -38,22 +38,23 @@ psutil==1.2.1 # via edx-django-utils, edx-drf-extensions pycryptodomex==3.7.2 pygments==2.3.0 # via readme-renderer, sphinx pyjwkest==1.3.2 # via edx-drf-extensions -pyjwt==1.6.4 # via djangorestframework-jwt, edx-rest-api-client +pyjwt==1.7.1 # via djangorestframework-jwt, edx-rest-api-client pymongo==3.7.2 # via edx-opaque-keys, event-tracking pyparsing==2.3.0 # via packaging python-dateutil==2.7.5 pytz==2018.7 readme-renderer==24.0 -requests==2.20.1 # via edx-drf-extensions, edx-rest-api-client, pyjwkest, slumber, sphinx +requests==2.21.0 # via edx-drf-extensions, edx-rest-api-client, pyjwkest, slumber, sphinx rest-condition==1.0.3 # via edx-drf-extensions restructuredtext-lint==1.2.1 # via doc8 semantic-version==2.6.0 # via edx-drf-extensions -six==1.11.0 # via bleach, doc8, edx-drf-extensions, edx-opaque-keys, edx-sphinx-theme, packaging, pockets, pyjwkest, python-dateutil, readme-renderer, sphinx, sphinxcontrib-napoleon, stevedore +six==1.12.0 # via bleach, doc8, edx-drf-extensions, edx-opaque-keys, edx-sphinx-theme, packaging, pockets, pyjwkest, python-dateutil, readme-renderer, sphinx, sphinxcontrib-napoleon, stevedore slumber==0.7.1 # via edx-rest-api-client snowballstemmer==1.2.1 # via sphinx sphinx==1.8.2 sphinxcontrib-napoleon==0.7 sphinxcontrib-websupport==1.1.0 # via sphinx stevedore==1.30.0 # via doc8, edx-opaque-keys +typing==3.6.6 # via sphinx urllib3==1.24.1 # via requests webencodings==0.5.1 # via bleach diff --git a/requirements/quality.txt b/requirements/quality.txt index 080895a9aa9..ad06c84e375 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -6,16 +6,19 @@ # argparse==1.4.0 # via caniusepython3 astroid==1.5.2 # via edx-lint, pylint, pylint-celery -backports.functools-lru-cache==1.5 # via caniusepython3 +backports.functools-lru-cache==1.5 # via astroid, caniusepython3, pylint caniusepython3==7.0.0 -certifi==2018.10.15 # via requests +certifi==2018.11.29 # via requests chardet==3.0.4 # via requests click-log==0.1.8 # via edx-lint click==7.0 # via click-log, edx-lint +configparser==3.5.0 # via pydocstyle, pylint distlib==0.2.8 # via caniusepython3 -django==1.11.16 +django==1.11.17 edx_lint==0.5.5 -idna==2.7 # via requests +enum34==1.1.6 # via astroid +futures==3.2.0 # via caniusepython3, isort +idna==2.8 # via requests isort==4.3.4 lazy-object-proxy==1.3.1 # via astroid mccabe==0.6.1 # via pylint @@ -28,8 +31,9 @@ pylint-plugin-utils==0.4 # via pylint-celery, pylint-django pylint==1.7.1 # via edx-lint, pylint-celery, pylint-django, pylint-plugin-utils pyparsing==2.3.0 # via packaging pytz==2018.7 # via django -requests==2.20.1 # via caniusepython3 -six==1.11.0 # via astroid, edx-lint, packaging, pydocstyle, pylint +requests==2.21.0 # via caniusepython3 +singledispatch==3.4.0.3 # via astroid, pylint +six==1.12.0 # via astroid, edx-lint, packaging, pydocstyle, pylint, singledispatch snowballstemmer==1.2.1 # via pydocstyle urllib3==1.24.1 # via requests wrapt==1.10.11 # via astroid diff --git a/requirements/test.txt b/requirements/test.txt index ab2f4b817c9..0f7d375817e 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -8,8 +8,9 @@ apipkg==1.5 # via execnet atomicwrites==1.2.1 # via pytest attrs==18.2.0 # via pytest bok-choy==0.9.0 -certifi==2018.10.15 # via requests +certifi==2018.11.29 # via requests chardet==3.0.4 # via requests +cookies==2.2.1 # via responses coverage==4.5.2 # via pytest-cov ddt==1.2.0 django-ipware==2.1.0 @@ -25,24 +26,25 @@ edx-rest-api-client==1.9.2 event-tracking==0.2.7 execnet==1.5.0 # via pytest-xdist freezegun==0.3.11 +funcsigs==1.0.2 # via mock, pytest future==0.17.1 # via pyjwkest httmock==1.2.6 httpretty==0.9.6 -idna==2.7 # via requests +idna==2.8 # via requests jsonfield==2.0.2 lazy==1.3 # via bok-choy logilab-common==1.4.2 mock==2.0.0 more-itertools==4.3.0 # via pytest -newrelic==4.6.0.106 # via edx-django-utils -pathlib2==2.3.2 # via pytest +newrelic==4.8.0.110 # via edx-django-utils +pathlib2==2.3.3 # via pytest, pytest-django pbr==5.1.1 # via mock, stevedore pluggy==0.8.0 # via pytest psutil==1.2.1 # via edx-django-utils, edx-drf-extensions py==1.7.0 # via pytest pycryptodomex==3.7.2 pyjwkest==1.3.2 # via edx-drf-extensions -pyjwt==1.6.4 # via djangorestframework-jwt, edx-rest-api-client +pyjwt==1.7.1 # via djangorestframework-jwt, edx-rest-api-client pymongo==3.7.2 # via edx-opaque-keys, event-tracking pytest-cov==2.6.0 pytest-django==3.4.4 @@ -51,12 +53,13 @@ pytest-xdist==1.24.1 pytest==4.0.1 # via pytest-cov, pytest-django, pytest-forked, pytest-xdist python-dateutil==2.7.5 pytz==2018.7 -requests==2.20.1 # via edx-drf-extensions, edx-rest-api-client, httmock, pyjwkest, responses, slumber +requests==2.21.0 # via edx-drf-extensions, edx-rest-api-client, httmock, pyjwkest, responses, slumber responses==0.10.4 rest-condition==1.0.3 # via edx-drf-extensions +scandir==1.9.0 # via pathlib2 selenium==3.141.0 semantic-version==2.6.0 # via edx-drf-extensions -six==1.11.0 # via bok-choy, edx-drf-extensions, edx-opaque-keys, freezegun, httpretty, logilab-common, mock, more-itertools, pathlib2, pyjwkest, pytest, pytest-xdist, python-dateutil, responses, stevedore +six==1.12.0 # via bok-choy, edx-drf-extensions, edx-opaque-keys, freezegun, httpretty, logilab-common, mock, more-itertools, pathlib2, pyjwkest, pytest, pytest-xdist, python-dateutil, responses, stevedore slumber==0.7.1 # via edx-rest-api-client stevedore==1.30.0 # via edx-opaque-keys sure==1.2.7