Removed course-run exam rule configuration
This commit is contained in:
committed by
Dave St.Germain
parent
72a2e191fd
commit
23fcb7e7bb
@@ -79,7 +79,7 @@ def register_special_exams(course_key):
|
||||
'is_practice_exam': timed_exam.is_practice_exam,
|
||||
'is_active': True,
|
||||
'hide_after_due': timed_exam.hide_after_due,
|
||||
'backend': course.proctoring_configuration.get('backend', None),
|
||||
'backend': course.proctoring_provider,
|
||||
}
|
||||
|
||||
try:
|
||||
@@ -103,7 +103,6 @@ def register_special_exams(course_key):
|
||||
'exam_id': exam_id,
|
||||
'set_by_user_id': timed_exam.edited_by,
|
||||
'review_policy': timed_exam.exam_review_rules,
|
||||
'rules': course.proctoring_configuration.get('rules', None)
|
||||
}
|
||||
|
||||
# only create/update exam policy for the proctored exams
|
||||
@@ -111,9 +110,7 @@ def register_special_exams(course_key):
|
||||
try:
|
||||
update_review_policy(**exam_review_policy_metadata)
|
||||
except ProctoredExamReviewPolicyNotFoundException:
|
||||
review_policy_has_rules = exam_review_policy_metadata.get('rules', None)
|
||||
|
||||
if timed_exam.exam_review_rules or review_policy_has_rules: # won't save an empty rule.
|
||||
if timed_exam.exam_review_rules: # won't save an empty rule.
|
||||
create_exam_review_policy(**exam_review_policy_metadata)
|
||||
msg = 'Created new exam review policy with exam_id {exam_id}'.format(exam_id=exam_id)
|
||||
log.info(msg)
|
||||
|
||||
@@ -28,17 +28,12 @@ class TestProctoredExams(ModuleStoreTestCase):
|
||||
"""
|
||||
super(TestProctoredExams, self).setUp()
|
||||
|
||||
default_proctoring_provider = settings.PROCTORING_BACKENDS['DEFAULT']
|
||||
|
||||
self.course = CourseFactory.create(
|
||||
org='edX',
|
||||
course='900',
|
||||
run='test_run',
|
||||
enable_proctored_exams=True,
|
||||
proctoring_configuration={
|
||||
'backend': default_proctoring_provider,
|
||||
'rules': settings.PROCTORING_BACKENDS[default_proctoring_provider]['default_rules'],
|
||||
}
|
||||
proctoring_provider=settings.PROCTORING_BACKENDS['DEFAULT'],
|
||||
)
|
||||
|
||||
def _verify_exam_data(self, sequence, expected_active):
|
||||
@@ -56,7 +51,6 @@ class TestProctoredExams(ModuleStoreTestCase):
|
||||
# get the review policy object
|
||||
exam_review_policy = get_review_policy_by_exam_id(exam['id'])
|
||||
self.assertEqual(exam_review_policy['review_policy'], sequence.exam_review_rules)
|
||||
self.assertEqual(exam_review_policy['rules'], self.course.proctoring_configuration['rules'])
|
||||
|
||||
if not exam['is_proctored'] and not exam['is_practice_exam']:
|
||||
# the hide after due value only applies to timed exams
|
||||
@@ -69,7 +63,7 @@ class TestProctoredExams(ModuleStoreTestCase):
|
||||
self.assertEqual(exam['is_proctored'], sequence.is_proctored_exam)
|
||||
self.assertEqual(exam['is_practice_exam'], sequence.is_practice_exam)
|
||||
self.assertEqual(exam['is_active'], expected_active)
|
||||
self.assertEqual(exam['backend'], self.course.proctoring_configuration['backend'])
|
||||
self.assertEqual(exam['backend'], self.course.proctoring_provider)
|
||||
|
||||
@ddt.data(
|
||||
(True, False, True, False, False),
|
||||
|
||||
@@ -16,7 +16,7 @@ from openedx.core.djangoapps.video_pipeline.models import VideoUploadsEnabledByD
|
||||
from openedx.core.lib.license import LicenseMixin
|
||||
from path import Path as path
|
||||
from pytz import utc
|
||||
from six import text_type, iteritems
|
||||
from six import text_type
|
||||
from xblock.fields import Scope, List, String, Dict, Boolean, Integer, Float
|
||||
|
||||
from xmodule import course_metadata_utils
|
||||
@@ -183,151 +183,89 @@ class TextbookList(List):
|
||||
return json_data
|
||||
|
||||
|
||||
class ProctoringConfiguration(Dict):
|
||||
class ProctoringProvider(String):
|
||||
"""
|
||||
ProctoringProvider field, which includes validation of the provider
|
||||
and default that pulls from edx platform settings.
|
||||
"""
|
||||
def from_json(self, value):
|
||||
"""
|
||||
Return ProctoringConfiguration as full featured Python type. Perform validation on the backend
|
||||
and the rules and include any inherited values from the platform default.
|
||||
Return ProctoringProvider as full featured Python type. Perform validation on the provider
|
||||
and include any inherited values from the platform default.
|
||||
"""
|
||||
errors = []
|
||||
value = super(ProctoringConfiguration, self).from_json(value)
|
||||
proctoring_backend_settings = getattr(
|
||||
settings,
|
||||
'PROCTORING_BACKENDS',
|
||||
None
|
||||
)
|
||||
value = super(ProctoringProvider, self).from_json(value)
|
||||
|
||||
backend_errors = self._validate_proctoring_backend(value, proctoring_backend_settings)
|
||||
rules_errors = self._validate_proctoring_rules(value, proctoring_backend_settings)
|
||||
|
||||
errors.extend(backend_errors)
|
||||
errors.extend(rules_errors)
|
||||
provider_errors = self._validate_proctoring_provider(value)
|
||||
errors.extend(provider_errors)
|
||||
|
||||
if errors:
|
||||
raise ValueError(errors)
|
||||
|
||||
value = self._get_proctoring_value(value, proctoring_backend_settings)
|
||||
value = self._get_proctoring_value(value)
|
||||
|
||||
return value
|
||||
|
||||
def _get_proctoring_value(self, value, proctoring_backend_settings):
|
||||
def _get_proctoring_value(self, value):
|
||||
"""
|
||||
Return a proctoring value that includes any inherited attributes from the platform defaults
|
||||
for the backend or rules.
|
||||
for the provider.
|
||||
"""
|
||||
proctoring_provider = value.get('backend', None)
|
||||
proctoring_provider_rules = value.get('rules', None)
|
||||
|
||||
# if both are missing from the value, return the default
|
||||
if proctoring_provider is None and proctoring_provider_rules is None:
|
||||
# if provider is missing from the value, return the default
|
||||
if value is None:
|
||||
return self.default
|
||||
|
||||
# if provider is missing, but rules are not, use the default provider
|
||||
if proctoring_provider is None and proctoring_provider_rules is not None:
|
||||
value['backend'] = proctoring_backend_settings.get('DEFAULT', None)
|
||||
|
||||
# if rules are missing, but provider is not, use the default rules for the provider
|
||||
if proctoring_provider is not None and proctoring_provider_rules is None:
|
||||
value['rules'] = proctoring_backend_settings.get(value['backend'], {}).get('default_rules', {})
|
||||
|
||||
proctoring_provider_rules_set = (
|
||||
proctoring_backend_settings
|
||||
.get(proctoring_provider, {})
|
||||
.get('default_rules', {})
|
||||
)
|
||||
proctoring_provider_rules = value.get('rules', None)
|
||||
|
||||
# add back in any missing rules for the provider
|
||||
for default_rule, is_enabled in iteritems(proctoring_provider_rules_set):
|
||||
if default_rule not in proctoring_provider_rules:
|
||||
proctoring_provider_rules[default_rule] = is_enabled
|
||||
return value
|
||||
|
||||
def _validate_proctoring_backend(self, value, proctoring_backend_settings):
|
||||
def _validate_proctoring_provider(self, value):
|
||||
"""
|
||||
Validate the value for the proctoring backend. If the proctoring backend value is
|
||||
specified, and it is not one of the backends configured at the platform level, return
|
||||
Validate the value for the proctoring provider. If the proctoring provider value is
|
||||
specified, and it is not one of the providers configured at the platform level, return
|
||||
a list of error messages to the caller.
|
||||
"""
|
||||
errors = []
|
||||
|
||||
proctoring_provider_whitelist = [provider for provider in proctoring_backend_settings if provider != 'DEFAULT']
|
||||
proctoring_provider_whitelist.sort()
|
||||
proctoring_provider = value.get('backend', None)
|
||||
available_providers = get_available_providers()
|
||||
|
||||
if proctoring_provider and proctoring_provider not in proctoring_provider_whitelist:
|
||||
if value and value not in available_providers:
|
||||
errors.append(
|
||||
_('The selected proctoring backend, {proctoring_backend}, is not a valid backend. '
|
||||
'Please select from one of {available_backends}.')
|
||||
_('The selected proctoring provider, {proctoring_provider}, is not a valid provider. '
|
||||
'Please select from one of {available_providers}.')
|
||||
.format(
|
||||
proctoring_backend=proctoring_provider,
|
||||
available_backends=proctoring_provider_whitelist
|
||||
proctoring_provider=value,
|
||||
available_providers=available_providers
|
||||
)
|
||||
)
|
||||
|
||||
return errors
|
||||
|
||||
def _validate_proctoring_rules(self, value, proctoring_backend_settings):
|
||||
"""
|
||||
Validate the value for the proctoring rules. If the proctoring rules value is
|
||||
specified, and it is not one of the rules configured for the corresponding backend
|
||||
at the platform level, or if the value for the rule is not a boolean,
|
||||
return a list of error messages to the caller.
|
||||
"""
|
||||
errors = []
|
||||
|
||||
proctoring_provider = value.get('backend', None)
|
||||
proctoring_provider_rules = value.get('rules', None)
|
||||
proctoring_provider_rules_set = (
|
||||
proctoring_backend_settings
|
||||
.get(proctoring_provider, {})
|
||||
.get('default_rules', None)
|
||||
)
|
||||
|
||||
if proctoring_provider_rules:
|
||||
for rule, is_enabled in iteritems(proctoring_provider_rules):
|
||||
if not isinstance(is_enabled, bool):
|
||||
errors.append(
|
||||
_('The value for proctoring configuration rule {rule} '
|
||||
'should be either true or false.')
|
||||
.format(rule=rule)
|
||||
)
|
||||
if not proctoring_provider_rules_set or rule not in proctoring_provider_rules_set:
|
||||
errors.append(
|
||||
_('The proctoring configuration rule {rule} '
|
||||
'is not a valid rule for provider {provider}.')
|
||||
.format(
|
||||
rule=rule,
|
||||
provider=proctoring_provider
|
||||
)
|
||||
)
|
||||
|
||||
return errors
|
||||
|
||||
@property
|
||||
def default(self):
|
||||
"""
|
||||
Return default value for ProctoringConfiguration.
|
||||
Return default value for ProctoringProvider.
|
||||
"""
|
||||
default = super(ProctoringConfiguration, self).default
|
||||
default = super(ProctoringProvider, self).default
|
||||
|
||||
proctoring_backend_settings = getattr(settings, 'PROCTORING_BACKENDS', None)
|
||||
|
||||
if proctoring_backend_settings:
|
||||
default_proctoring_provider = proctoring_backend_settings.get('DEFAULT', None)
|
||||
return proctoring_backend_settings.get('DEFAULT', None)
|
||||
|
||||
try:
|
||||
default_proctoring_rules = proctoring_backend_settings[default_proctoring_provider]['default_rules']
|
||||
except KeyError:
|
||||
default_proctoring_rules = {}
|
||||
|
||||
return {
|
||||
'backend': default_proctoring_provider,
|
||||
'rules': default_proctoring_rules,
|
||||
}
|
||||
return default
|
||||
|
||||
|
||||
def get_available_providers():
|
||||
proctoring_backend_settings = getattr(
|
||||
settings,
|
||||
'PROCTORING_BACKENDS',
|
||||
{}
|
||||
)
|
||||
|
||||
available_providers = [provider for provider in proctoring_backend_settings if provider != 'DEFAULT']
|
||||
available_providers.sort()
|
||||
return available_providers
|
||||
|
||||
|
||||
class CourseFields(object):
|
||||
lti_passports = List(
|
||||
display_name=_("LTI Passports"),
|
||||
@@ -883,9 +821,18 @@ class CourseFields(object):
|
||||
scope=Scope.settings
|
||||
)
|
||||
|
||||
proctoring_configuration = ProctoringConfiguration(
|
||||
display_name=_("Proctoring Configuration"),
|
||||
help=_("Enter a proctoring configuration."),
|
||||
proctoring_provider = ProctoringProvider(
|
||||
display_name=_("Proctoring Provider"),
|
||||
help=_(
|
||||
"Enter the proctoring provider you want to use for this course run. "
|
||||
"Choose from the following options: {available_providers}."),
|
||||
help_format_args=dict(
|
||||
# Put the available providers into a format variable so that translators
|
||||
# don't translate them.
|
||||
available_providers=(
|
||||
', '.join(get_available_providers())
|
||||
),
|
||||
),
|
||||
scope=Scope.settings,
|
||||
)
|
||||
|
||||
@@ -1200,7 +1147,7 @@ class CourseDescriptor(CourseFields, SequenceDescriptor, LicenseMixin):
|
||||
def definition_to_xml(self, resource_fs):
|
||||
xml_object = super(CourseDescriptor, self).definition_to_xml(resource_fs)
|
||||
|
||||
if len(self.textbooks) > 0:
|
||||
if self.textbooks:
|
||||
textbook_xml_object = etree.Element('textbook')
|
||||
for textbook in self.textbooks:
|
||||
textbook_xml_object.set('title', textbook.title)
|
||||
@@ -1254,7 +1201,8 @@ class CourseDescriptor(CourseFields, SequenceDescriptor, LicenseMixin):
|
||||
|
||||
@raw_grader.setter
|
||||
def raw_grader(self, value):
|
||||
# NOTE WELL: this change will not update the processed graders. If we need that, this needs to call grader_from_conf
|
||||
# NOTE WELL: this change will not update the processed graders.
|
||||
# If we need that, this needs to call grader_from_conf.
|
||||
self._grading_policy['RAW_GRADER'] = value
|
||||
self.grading_policy['GRADER'] = value
|
||||
|
||||
|
||||
@@ -423,9 +423,9 @@ class CourseDescriptorTestCase(unittest.TestCase):
|
||||
self.assertEqual(expected_certificate_available_date, self.course.certificate_available_date)
|
||||
|
||||
|
||||
class ProctoringConfigurationTestCase(unittest.TestCase):
|
||||
class ProctoringProviderTestCase(unittest.TestCase):
|
||||
"""
|
||||
Tests for ProctoringConfiguration, including the default value, validation, and inheritance behavior.
|
||||
Tests for ProctoringProvider, including the default value, validation, and inheritance behavior.
|
||||
"""
|
||||
shard = 1
|
||||
|
||||
@@ -433,64 +433,19 @@ class ProctoringConfigurationTestCase(unittest.TestCase):
|
||||
"""
|
||||
Initialize dummy testing course.
|
||||
"""
|
||||
super(ProctoringConfigurationTestCase, self).setUp()
|
||||
self.proctoring_configuration = xmodule.course_module.ProctoringConfiguration()
|
||||
super(ProctoringProviderTestCase, self).setUp()
|
||||
self.proctoring_provider = xmodule.course_module.ProctoringProvider()
|
||||
|
||||
def test_from_json_with_platform_default(self):
|
||||
"""
|
||||
Test that a proctoring configuration value equivalent to the platform
|
||||
Test that a proctoring provider value equivalent to the platform
|
||||
default will pass validation.
|
||||
"""
|
||||
default_provider = settings.PROCTORING_BACKENDS.get('DEFAULT')
|
||||
|
||||
value = {
|
||||
'backend': default_provider,
|
||||
'rules': settings.PROCTORING_BACKENDS[default_provider]['default_rules'],
|
||||
}
|
||||
|
||||
# we expect the validated value to be equivalent to the value passed in,
|
||||
# since there are no validation errors or missing data
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), value)
|
||||
|
||||
@override_settings(
|
||||
PROCTORING_BACKENDS={
|
||||
'DEFAULT': 'mock_proctoring_without_rules',
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False
|
||||
}
|
||||
},
|
||||
'mock_proctoring_without_rules': {}
|
||||
}
|
||||
)
|
||||
def test_from_json_with_provider_with_rules(self):
|
||||
"""
|
||||
Test that a proctoring provider with rules other than the platform default
|
||||
passes validation.
|
||||
"""
|
||||
provider = 'mock'
|
||||
value = {
|
||||
'backend': provider,
|
||||
'rules': settings.PROCTORING_BACKENDS[provider]['default_rules'],
|
||||
}
|
||||
|
||||
# we expect the validated value to be equivalent to the value passed in,
|
||||
# since there are no validation errors or missing data
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), value)
|
||||
|
||||
def test_from_json_with_provider_without_rules(self):
|
||||
"""
|
||||
Test that a proctoring provider without rules passes validation.
|
||||
"""
|
||||
value = {
|
||||
'backend': 'mock_proctoring_without_rules',
|
||||
'rules': {},
|
||||
}
|
||||
|
||||
# we expect the validated value to be equivalent to the value passed in,
|
||||
# since there are no validation errors or missing data
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), value)
|
||||
self.assertEqual(self.proctoring_provider.from_json(default_provider), default_provider)
|
||||
|
||||
def test_from_json_with_invalid_provider(self):
|
||||
"""
|
||||
@@ -500,145 +455,26 @@ class ProctoringConfigurationTestCase(unittest.TestCase):
|
||||
provider = 'invalid-provider'
|
||||
proctoring_provider_whitelist = [u'mock', u'mock_proctoring_without_rules']
|
||||
|
||||
value = {
|
||||
'backend': provider,
|
||||
'rules': {},
|
||||
}
|
||||
|
||||
with self.assertRaises(ValueError) as context_manager:
|
||||
self.proctoring_configuration.from_json(value)
|
||||
self.proctoring_provider.from_json(provider)
|
||||
self.assertEqual(
|
||||
context_manager.exception.args[0],
|
||||
['The selected proctoring backend, {}, is not a valid backend. Please select from one of {}.'
|
||||
['The selected proctoring provider, {}, is not a valid provider. Please select from one of {}.'
|
||||
.format(provider, proctoring_provider_whitelist)]
|
||||
)
|
||||
|
||||
def test_from_json_with_invalid_rules(self):
|
||||
"""
|
||||
Test that an invalid rule (i.e. not one configured at the platform level) for a
|
||||
valid provider throws a ValueError with the correct error message.
|
||||
"""
|
||||
provider = 'mock'
|
||||
rules = settings.PROCTORING_BACKENDS[provider]['default_rules'].copy()
|
||||
rules['allow_foo'] = True
|
||||
|
||||
value = {
|
||||
'backend': provider,
|
||||
'rules': rules,
|
||||
}
|
||||
|
||||
with self.assertRaises(ValueError) as context_manager:
|
||||
self.proctoring_configuration.from_json(value)
|
||||
self.assertEqual(
|
||||
context_manager.exception.args[0],
|
||||
['The proctoring configuration rule {} is not a valid rule for provider {}.'.
|
||||
format('allow_foo', provider)]
|
||||
)
|
||||
|
||||
def test_from_json_with_invalid_rule_value(self):
|
||||
"""
|
||||
Test that an invalid rule value (i.e. not a boolean) for a valid rule for a
|
||||
valid provider throws a ValueError with the correct error message.
|
||||
"""
|
||||
provider = 'mock'
|
||||
rules = settings.PROCTORING_BACKENDS[provider]['default_rules'].copy()
|
||||
rules['allow_grok'] = 'yes'
|
||||
|
||||
value = {
|
||||
'backend': provider,
|
||||
'rules': rules,
|
||||
}
|
||||
|
||||
with self.assertRaises(ValueError) as context_manager:
|
||||
self.proctoring_configuration.from_json(value)
|
||||
self.assertEqual(
|
||||
context_manager.exception.args[0],
|
||||
['The value for proctoring configuration rule {} should be either true or false.'.
|
||||
format('allow_grok')]
|
||||
)
|
||||
|
||||
def test_from_json_adds_platform_default_for_missing_provider(self):
|
||||
"""
|
||||
Test that a value with no provider will inherit the default provider
|
||||
from the platform defaults.
|
||||
"""
|
||||
provider = 'mock'
|
||||
default_provider = 'mock'
|
||||
|
||||
value = {
|
||||
'rules': {}
|
||||
}
|
||||
|
||||
expected_value = value.copy()
|
||||
expected_value['backend'] = provider
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), expected_value)
|
||||
|
||||
def test_from_json_adds_platform_defaults_for_missing_rules(self):
|
||||
"""
|
||||
Test that a value with no rules will inherit the default rules for
|
||||
that provider from the platform defaults.
|
||||
"""
|
||||
provider = 'mock'
|
||||
|
||||
value = {
|
||||
'backend': provider
|
||||
}
|
||||
|
||||
expected_value = value.copy()
|
||||
expected_value['rules'] = settings.PROCTORING_BACKENDS[provider]['default_rules']
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), expected_value)
|
||||
|
||||
def test_from_json_adds_platform_defaults_for_missing_rules_no_rules_as_empty_dict(self):
|
||||
"""
|
||||
Test that a value with no rules will inherit an empty dict for
|
||||
a provider without rules in the platform defaults.
|
||||
"""
|
||||
provider = 'mock_proctoring_without_rules'
|
||||
|
||||
value = {
|
||||
'backend': provider
|
||||
}
|
||||
|
||||
expected_value = value.copy()
|
||||
expected_value['rules'] = {}
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), expected_value)
|
||||
|
||||
def test_from_json_adds_platform_defaults_for_missing_provider_and_rules(self):
|
||||
"""
|
||||
Test that a value with no rules and no provider will inherit the platform
|
||||
defaults.
|
||||
"""
|
||||
self.assertEqual(self.proctoring_configuration.from_json({}), self.proctoring_configuration.default)
|
||||
|
||||
def test_from_json_adds_missing_rules_from_platform_default(self):
|
||||
"""
|
||||
Test that a value that is missing rules present in the default will
|
||||
inherit these rules from the platform default.
|
||||
"""
|
||||
provider = 'mock'
|
||||
rules = settings.PROCTORING_BACKENDS[provider]['default_rules'].copy()
|
||||
del rules['allow_snarfing']
|
||||
|
||||
value = {
|
||||
'backend': provider,
|
||||
'rules': rules,
|
||||
}
|
||||
|
||||
expected_value = value.copy()
|
||||
expected_value['rules'] = settings.PROCTORING_BACKENDS[provider]['default_rules']
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.from_json(value), expected_value)
|
||||
self.assertEqual(self.proctoring_provider.from_json(None), default_provider)
|
||||
|
||||
@override_settings(
|
||||
PROCTORING_BACKENDS={
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False
|
||||
}
|
||||
},
|
||||
'mock': {},
|
||||
'mock_proctoring_without_rules': {}
|
||||
}
|
||||
)
|
||||
@@ -646,57 +482,12 @@ class ProctoringConfigurationTestCase(unittest.TestCase):
|
||||
"""
|
||||
Test that, when the platform defaults are not set, the default is correct.
|
||||
"""
|
||||
expected_default = {
|
||||
'backend': None,
|
||||
'rules': {}
|
||||
}
|
||||
|
||||
self. assertEqual(self.proctoring_configuration.default, expected_default)
|
||||
|
||||
def test_default_with_platform_default_with_rules(self):
|
||||
"""
|
||||
Test that, when the platform default provider with rules is specified, the default is correct.
|
||||
"""
|
||||
default_provider = settings.PROCTORING_BACKENDS.get('DEFAULT')
|
||||
default_rules = settings.PROCTORING_BACKENDS[default_provider]['default_rules']
|
||||
|
||||
expected_default = {
|
||||
'backend': default_provider,
|
||||
'rules': default_rules
|
||||
}
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.default, expected_default)
|
||||
|
||||
@override_settings(
|
||||
PROCTORING_BACKENDS={
|
||||
'DEFAULT': 'mock_proctoring_without_rules',
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False
|
||||
}
|
||||
},
|
||||
'mock_proctoring_without_rules': {}
|
||||
}
|
||||
)
|
||||
def test_default_with_platform_default_without_rules(self):
|
||||
"""
|
||||
Test that, when the platform default provider without rules is specified, the default is correct.
|
||||
"""
|
||||
default_provider = 'mock_proctoring_without_rules'
|
||||
default_rules = {}
|
||||
|
||||
expected_default = {
|
||||
'backend': default_provider,
|
||||
'rules': default_rules
|
||||
}
|
||||
|
||||
self.assertEqual(self.proctoring_configuration.default, expected_default)
|
||||
self. assertEqual(self.proctoring_provider.default, None)
|
||||
|
||||
@override_settings(PROCTORING_BACKENDS=None)
|
||||
def test_default_default_with_no_platform_default(self):
|
||||
def test_default_with_no_platform_configuration(self):
|
||||
"""
|
||||
Test that, when the platform default is not specified, the default is correct.
|
||||
"""
|
||||
default = self.proctoring_configuration.default
|
||||
self.assertEqual(default, {})
|
||||
default = self.proctoring_provider.default
|
||||
self.assertEqual(default, None)
|
||||
|
||||
@@ -269,4 +269,5 @@ class AdvancedSettingsPage(CoursePage):
|
||||
'create_zendesk_tickets',
|
||||
'ccx_connector',
|
||||
'enable_ccx',
|
||||
'proctoring_provider',
|
||||
]
|
||||
|
||||
@@ -126,13 +126,8 @@ MOCK_PEER_GRADING = True
|
||||
|
||||
PROCTORING_BACKENDS = {
|
||||
'DEFAULT': 'mock',
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False
|
||||
}
|
||||
},
|
||||
'mock_proctoring_without_rules': {}
|
||||
'mock': {},
|
||||
'mock_proctoring_without_rules': {},
|
||||
}
|
||||
|
||||
############################ STATIC FILES #############################
|
||||
|
||||
@@ -37,12 +37,7 @@ XQUEUE_INTERFACE = {
|
||||
|
||||
PROCTORING_BACKENDS = {
|
||||
'DEFAULT': 'mock',
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False,
|
||||
}
|
||||
},
|
||||
'mock': {},
|
||||
'mock_proctoring_without_rules': {},
|
||||
}
|
||||
|
||||
|
||||
@@ -53,12 +53,7 @@ DATABASES = {
|
||||
|
||||
PROCTORING_BACKENDS = {
|
||||
'DEFAULT': 'mock',
|
||||
'mock': {
|
||||
'default_rules': {
|
||||
'allow_snarfing': True,
|
||||
'allow_grok': False,
|
||||
}
|
||||
},
|
||||
'mock': {},
|
||||
'mock_proctoring_without_rules': {},
|
||||
}
|
||||
|
||||
|
||||
144
package-lock.json
generated
144
package-lock.json
generated
@@ -86,17 +86,13 @@
|
||||
}
|
||||
},
|
||||
"@edx/edx-proctoring": {
|
||||
"version": "1.5.0-rc.1",
|
||||
"resolved": "https://registry.npmjs.org/@edx/edx-proctoring/-/edx-proctoring-1.5.0-rc.1.tgz",
|
||||
"integrity": "sha512-ONkLR0jW1REC+Z40FPLP0lhT/TEF1UR2sElrpfmO2gTxYbk/Dw5ah9eYPOhBuQNp4giYDzZeCNfz5pgILDeo9w=="
|
||||
"version": "git+https://git@github.com/edx/edx-proctoring.git#15a02d817ed755af4614407283a04046489fba1d"
|
||||
},
|
||||
"@edx/mockprock": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@edx/mockprock/-/mockprock-1.0.1.tgz",
|
||||
"integrity": "sha512-XUVRpmeBUvNKaKG3lZz9D8HY4Mykw5duW6qAmSQUOWFy2ILaMFjcT5hMApog/xC9rIp2P2EEzha0tOwuiP7P2g==",
|
||||
"version": "git+https://git@github.com/edx/mockprock.git#c9e4814ace9afad7a778e2af372b3125b3e56588",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@edx/edx-proctoring": "1.5.0-rc.1"
|
||||
"@edx/edx-proctoring": "git+https://git@github.com/edx/edx-proctoring.git#15a02d817ed755af4614407283a04046489fba1d"
|
||||
}
|
||||
},
|
||||
"@edx/paragon": {
|
||||
@@ -261,7 +257,7 @@
|
||||
"abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
"integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
|
||||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
|
||||
},
|
||||
"accepts": {
|
||||
"version": "1.3.3",
|
||||
@@ -523,7 +519,7 @@
|
||||
"arr-flatten": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
|
||||
"integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
|
||||
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
|
||||
},
|
||||
"arr-union": {
|
||||
"version": "3.1.0",
|
||||
@@ -1537,7 +1533,7 @@
|
||||
"babylon": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
|
||||
"integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM="
|
||||
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
|
||||
},
|
||||
"backbone": {
|
||||
"version": "1.3.3",
|
||||
@@ -1742,7 +1738,7 @@
|
||||
"bn.js": {
|
||||
"version": "4.11.8",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
|
||||
"integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8="
|
||||
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
|
||||
},
|
||||
"body-parser": {
|
||||
"version": "1.18.2",
|
||||
@@ -1905,7 +1901,7 @@
|
||||
"browserify-zlib": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
|
||||
"integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
|
||||
"integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
|
||||
"requires": {
|
||||
"pako": "1.0.6"
|
||||
}
|
||||
@@ -2196,7 +2192,7 @@
|
||||
"cipher-base": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
|
||||
"integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
|
||||
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
|
||||
"requires": {
|
||||
"inherits": "2.0.3",
|
||||
"safe-buffer": "5.1.1"
|
||||
@@ -2217,7 +2213,7 @@
|
||||
"clap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
|
||||
"integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
|
||||
"integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
|
||||
"requires": {
|
||||
"chalk": "1.1.3"
|
||||
},
|
||||
@@ -2415,7 +2411,7 @@
|
||||
"color-convert": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
|
||||
"integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
|
||||
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
|
||||
"requires": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
@@ -2582,7 +2578,7 @@
|
||||
"content-type": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
|
||||
"integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
|
||||
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
|
||||
"dev": true
|
||||
},
|
||||
"convert-source-map": {
|
||||
@@ -2622,7 +2618,7 @@
|
||||
"cosmiconfig": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz",
|
||||
"integrity": "sha1-ZAqUv5hH8yGABAPNJzr2BmXHM5c=",
|
||||
"integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-directory": "0.3.1",
|
||||
@@ -2634,7 +2630,7 @@
|
||||
"esprima": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
|
||||
"integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=",
|
||||
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
|
||||
"dev": true
|
||||
},
|
||||
"js-yaml": {
|
||||
@@ -2721,7 +2717,7 @@
|
||||
"crypto-browserify": {
|
||||
"version": "3.12.0",
|
||||
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
|
||||
"integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
|
||||
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
|
||||
"requires": {
|
||||
"browserify-cipher": "1.0.0",
|
||||
"browserify-sign": "4.0.4",
|
||||
@@ -2997,7 +2993,7 @@
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
@@ -3380,7 +3376,7 @@
|
||||
"edx-proctoring-proctortrack": {
|
||||
"version": "git+https://git@github.com/joshivj/edx-proctoring-proctortrack.git#66650ed6cd39bf489a86723d5ad3593c2ec8992f",
|
||||
"requires": {
|
||||
"@edx/edx-proctoring": "1.5.0-rc.1"
|
||||
"@edx/edx-proctoring": "git+https://git@github.com/edx/edx-proctoring.git#15a02d817ed755af4614407283a04046489fba1d"
|
||||
}
|
||||
},
|
||||
"edx-ui-toolkit": {
|
||||
@@ -3476,7 +3472,7 @@
|
||||
"emoji-regex": {
|
||||
"version": "6.5.1",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
|
||||
"integrity": "sha1-m66pKbFVVlwR6kHGYm6qZc75ksI=",
|
||||
"integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"emojis-list": {
|
||||
@@ -4004,7 +4000,7 @@
|
||||
"string-width": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||
"integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
|
||||
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-fullwidth-code-point": "2.0.0",
|
||||
@@ -4062,7 +4058,7 @@
|
||||
"eslint-config-airbnb-base": {
|
||||
"version": "11.3.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
|
||||
"integrity": "sha1-hwOxGr48iKx+wrdFt/31LgCuaAo=",
|
||||
"integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-restricted-globals": "0.1.1"
|
||||
@@ -4360,7 +4356,7 @@
|
||||
"evp_bytestokey": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
|
||||
"integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
|
||||
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
|
||||
"requires": {
|
||||
"md5.js": "1.3.4",
|
||||
"safe-buffer": "5.1.1"
|
||||
@@ -4567,7 +4563,7 @@
|
||||
"async": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
|
||||
"integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=",
|
||||
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
|
||||
"requires": {
|
||||
"lodash": "4.17.5"
|
||||
}
|
||||
@@ -4944,7 +4940,7 @@
|
||||
"function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||
},
|
||||
"function.prototype.name": {
|
||||
"version": "1.1.0",
|
||||
@@ -5032,7 +5028,7 @@
|
||||
"glob": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||
"integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
|
||||
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||
"requires": {
|
||||
"fs.realpath": "1.0.0",
|
||||
"inflight": "1.0.6",
|
||||
@@ -5062,7 +5058,7 @@
|
||||
"globals": {
|
||||
"version": "9.18.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
|
||||
"integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo="
|
||||
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
|
||||
},
|
||||
"globby": {
|
||||
"version": "7.1.1",
|
||||
@@ -5615,7 +5611,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -5627,7 +5623,7 @@
|
||||
"ignore": {
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
|
||||
"integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=",
|
||||
"integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
|
||||
"dev": true
|
||||
},
|
||||
"import-local": {
|
||||
@@ -5896,7 +5892,7 @@
|
||||
"is-buffer": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||
"integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
|
||||
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
||||
},
|
||||
"is-builtin-module": {
|
||||
"version": "1.0.0",
|
||||
@@ -6093,7 +6089,7 @@
|
||||
"is-plain-object": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
||||
"integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
|
||||
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
|
||||
"requires": {
|
||||
"isobject": "3.0.1"
|
||||
}
|
||||
@@ -8276,7 +8272,7 @@
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
@@ -8421,7 +8417,7 @@
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"requires": {
|
||||
"brace-expansion": "1.1.11"
|
||||
}
|
||||
@@ -8607,7 +8603,7 @@
|
||||
"node-fetch": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
|
||||
"integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=",
|
||||
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
|
||||
"requires": {
|
||||
"encoding": "0.1.12",
|
||||
"is-stream": "1.1.0"
|
||||
@@ -8649,7 +8645,7 @@
|
||||
"node-libs-browser": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
|
||||
"integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=",
|
||||
"integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
|
||||
"requires": {
|
||||
"assert": "1.4.1",
|
||||
"browserify-zlib": "0.2.0",
|
||||
@@ -8820,7 +8816,7 @@
|
||||
"normalize-package-data": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
|
||||
"integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
|
||||
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
|
||||
"requires": {
|
||||
"hosted-git-info": "2.5.0",
|
||||
"is-builtin-module": "1.0.0",
|
||||
@@ -9248,7 +9244,7 @@
|
||||
"pako": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
|
||||
"integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg="
|
||||
"integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
|
||||
},
|
||||
"parse-asn1": {
|
||||
"version": "5.1.0",
|
||||
@@ -9401,7 +9397,7 @@
|
||||
"pbkdf2": {
|
||||
"version": "3.0.14",
|
||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
|
||||
"integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=",
|
||||
"integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
|
||||
"requires": {
|
||||
"create-hash": "1.1.3",
|
||||
"create-hmac": "1.1.6",
|
||||
@@ -9835,7 +9831,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -9923,7 +9919,7 @@
|
||||
"postcss-reporter": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz",
|
||||
"integrity": "sha1-oUF3/RNCgp0pFlPyeG79ZxEDMsM=",
|
||||
"integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "2.3.1",
|
||||
@@ -9946,7 +9942,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -10009,7 +10005,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -10125,7 +10121,7 @@
|
||||
"private": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
|
||||
"integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8="
|
||||
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
|
||||
},
|
||||
"process": {
|
||||
"version": "0.11.10",
|
||||
@@ -10146,7 +10142,7 @@
|
||||
"promise": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
|
||||
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
|
||||
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
|
||||
"requires": {
|
||||
"asap": "2.0.6"
|
||||
}
|
||||
@@ -10281,7 +10277,7 @@
|
||||
"randomatic": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
|
||||
"integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=",
|
||||
"integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
|
||||
"requires": {
|
||||
"is-number": "3.0.0",
|
||||
"kind-of": "4.0.0"
|
||||
@@ -10635,7 +10631,7 @@
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
@@ -10715,7 +10711,7 @@
|
||||
"redux": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
|
||||
"integrity": "sha1-BrcxIyFZAdJdBlvjQusCa8HIU3s=",
|
||||
"integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
|
||||
"requires": {
|
||||
"lodash": "4.17.5",
|
||||
"lodash-es": "4.17.6",
|
||||
@@ -10751,7 +10747,7 @@
|
||||
"regenerator-transform": {
|
||||
"version": "0.10.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
|
||||
"integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=",
|
||||
"integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
|
||||
"requires": {
|
||||
"babel-runtime": "6.26.0",
|
||||
"babel-types": "6.26.0",
|
||||
@@ -11095,7 +11091,7 @@
|
||||
"rtlcss": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz",
|
||||
"integrity": "sha1-+FN+QVUggWawXhiYAhMZNvzv0p4=",
|
||||
"integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==",
|
||||
"requires": {
|
||||
"chalk": "2.3.1",
|
||||
"findup": "0.1.5",
|
||||
@@ -11117,7 +11113,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11139,7 +11135,7 @@
|
||||
"safe-buffer": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||
"integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
|
||||
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
||||
},
|
||||
"safe-regex": {
|
||||
"version": "1.1.0",
|
||||
@@ -11533,7 +11529,7 @@
|
||||
"sass-loader": {
|
||||
"version": "6.0.6",
|
||||
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz",
|
||||
"integrity": "sha1-6dXmwfFV+qMqSybXqbcQfCJeQPk=",
|
||||
"integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==",
|
||||
"requires": {
|
||||
"async": "2.6.0",
|
||||
"clone-deep": "0.3.0",
|
||||
@@ -11545,7 +11541,7 @@
|
||||
"async": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
|
||||
"integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=",
|
||||
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
|
||||
"requires": {
|
||||
"lodash": "4.17.5"
|
||||
}
|
||||
@@ -11815,7 +11811,7 @@
|
||||
"slice-ansi": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
|
||||
"integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=",
|
||||
"integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-fullwidth-code-point": "2.0.0"
|
||||
@@ -12091,7 +12087,7 @@
|
||||
"source-list-map": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
|
||||
"integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU="
|
||||
"integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.5.7",
|
||||
@@ -12161,7 +12157,7 @@
|
||||
"specificity": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz",
|
||||
"integrity": "sha1-meZRHs7vD42bV5JJN6rCyxPRPEI=",
|
||||
"integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==",
|
||||
"dev": true
|
||||
},
|
||||
"split-string": {
|
||||
@@ -12328,7 +12324,7 @@
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
@@ -12551,7 +12547,7 @@
|
||||
"style-loader": {
|
||||
"version": "0.18.2",
|
||||
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz",
|
||||
"integrity": "sha1-zDFFmvvNbYC3Ig7lSykan9Zv9es=",
|
||||
"integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==",
|
||||
"requires": {
|
||||
"loader-utils": "1.1.0",
|
||||
"schema-utils": "0.3.0"
|
||||
@@ -12662,7 +12658,7 @@
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
@@ -12817,13 +12813,13 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
},
|
||||
"string-width": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||
"integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
|
||||
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-fullwidth-code-point": "2.0.0",
|
||||
@@ -12868,7 +12864,7 @@
|
||||
"stylelint-config-recommended-scss": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-2.0.0.tgz",
|
||||
"integrity": "sha1-P0SzOK+zv1tr2e663UaO7ydxOSI=",
|
||||
"integrity": "sha512-DUIW3daRl5EAyU4ZR6xfPa+bqV5wDccS7X1je6Enes9edpbmWUBR/5XLfDPnjMJgqOe2QwqwaE/qnG4lXID9rg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"stylelint-config-recommended": "1.0.0"
|
||||
@@ -12877,7 +12873,7 @@
|
||||
"stylelint-config-standard": {
|
||||
"version": "17.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-17.0.0.tgz",
|
||||
"integrity": "sha1-QhA6CQBU7io93p7K7VXl1NnQWfw=",
|
||||
"integrity": "sha512-G8jMZ0KsaVH7leur9XLZVhwOBHZ2vdbuJV8Bgy0ta7/PpBhEHo6fjVDaNchyCGXB5sRcWVq6O9rEU/MvY9cQDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"stylelint-config-recommended": "1.0.0"
|
||||
@@ -12886,7 +12882,7 @@
|
||||
"stylelint-formatter-pretty": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/stylelint-formatter-pretty/-/stylelint-formatter-pretty-1.0.3.tgz",
|
||||
"integrity": "sha1-prQ8PzoTIGvft3fQ2ozvxsdsNsM=",
|
||||
"integrity": "sha512-Jg39kL6kkjUrdKIiHwwz/fbElcF5dOS48ZhvGrEJeWijUbmY1yudclfXv9H61eBqKKu0E33nfez2r0G4EvPtFA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-escapes": "2.0.0",
|
||||
@@ -12945,7 +12941,7 @@
|
||||
"string-width": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||
"integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
|
||||
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-fullwidth-code-point": "2.0.0",
|
||||
@@ -13000,7 +12996,7 @@
|
||||
"sugarss": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.1.tgz",
|
||||
"integrity": "sha1-voJtkAPg8kdzX5I2XcP9fxuunkQ=",
|
||||
"integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"postcss": "6.0.19"
|
||||
@@ -13020,7 +13016,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -13491,7 +13487,7 @@
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
@@ -13514,7 +13510,7 @@
|
||||
"tmp": {
|
||||
"version": "0.0.33",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||
"integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
|
||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"os-tmpdir": "1.0.2"
|
||||
@@ -14448,7 +14444,7 @@
|
||||
"webpack-merge": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz",
|
||||
"integrity": "sha1-8Rl6Cpc+acb77rbWWCGaqMDBNVU=",
|
||||
"integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==",
|
||||
"requires": {
|
||||
"lodash": "4.17.5"
|
||||
}
|
||||
@@ -14465,7 +14461,7 @@
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -14616,7 +14612,7 @@
|
||||
"xml2js": {
|
||||
"version": "0.4.19",
|
||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
|
||||
"integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=",
|
||||
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"sax": "1.2.4",
|
||||
|
||||
@@ -13,10 +13,14 @@ cffi==1.11.5 # via cryptography
|
||||
cryptography==2.4.2
|
||||
enum34==1.1.6 # via cryptography
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
idna==2.8 # via cryptography
|
||||
=======
|
||||
idna==2.7
|
||||
>>>>>>> make upgrade
|
||||
=======
|
||||
idna==2.8 # via cryptography
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
ipaddress==1.0.22 # via cryptography
|
||||
lxml==3.8.0
|
||||
markupsafe==1.1.0
|
||||
|
||||
@@ -80,7 +80,7 @@ edx-enterprise
|
||||
edx-milestones
|
||||
edx-oauth2-provider
|
||||
edx-organizations
|
||||
edx-proctoring>=1.5.0b3
|
||||
edx-proctoring==1.5.0rc2
|
||||
edx-rest-api-client
|
||||
edx-search
|
||||
edx-submissions
|
||||
|
||||
@@ -119,14 +119,23 @@ edx-django-sites-extensions==2.3.1
|
||||
edx-django-utils==1.0.3
|
||||
edx-drf-extensions==2.0.1
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.2.0
|
||||
=======
|
||||
=======
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.1.2
|
||||
=======
|
||||
edx-enterprise==1.1.0
|
||||
>>>>>>> make upgrade
|
||||
<<<<<<< HEAD
|
||||
>>>>>>> make upgrade
|
||||
=======
|
||||
=======
|
||||
edx-enterprise==1.1.2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-i18n-tools==0.4.6
|
||||
edx-milestones==0.1.13
|
||||
edx-oauth2-provider==1.2.2
|
||||
@@ -135,6 +144,7 @@ edx-organizations==1.0.0
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-proctoring==1.4.0
|
||||
=======
|
||||
edx-proctoring==1.5.0b1
|
||||
@@ -145,6 +155,9 @@ edx-proctoring==1.5.0b3
|
||||
=======
|
||||
edx-proctoring==1.5.0rc1
|
||||
>>>>>>> Set NPM dependencies more stably
|
||||
=======
|
||||
edx-proctoring==1.5.0rc2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-rest-api-client==1.9.2
|
||||
edx-search==1.2.1
|
||||
edx-submissions==2.0.12
|
||||
@@ -166,10 +179,14 @@ help-tokens==1.0.3
|
||||
html5lib==1.0.1
|
||||
httplib2==0.12.0 # via oauth2, zendesk
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
idna==2.8
|
||||
=======
|
||||
idna==2.7
|
||||
>>>>>>> Enable course run level overrides for proctoring configuration.
|
||||
=======
|
||||
idna==2.8
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
ipaddr==2.1.11
|
||||
ipaddress==1.0.22
|
||||
isodate==0.6.0 # via python-saml
|
||||
@@ -251,8 +268,12 @@ reportlab==3.5.11
|
||||
reportlab==3.5.12
|
||||
>>>>>>> Updated edx-proctoring pre-release
|
||||
requests-oauthlib==1.0.0
|
||||
<<<<<<< HEAD
|
||||
requests==2.20.1
|
||||
>>>>>>> Enable course run level overrides for proctoring configuration.
|
||||
=======
|
||||
requests==2.21.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
rest-condition==1.0.3
|
||||
rfc6266-parser==0.0.5.post2
|
||||
rules==2.0.1
|
||||
|
||||
@@ -14,3 +14,4 @@
|
||||
|
||||
coverage==4.4 # Code coverage testing for Python
|
||||
diff-cover==0.9.8 # Automatically find diff lines that need test coverage
|
||||
six==1.11.0 # Pinned because diff-cover needs it, but later transifex-client says ==1.11.0
|
||||
|
||||
@@ -10,5 +10,10 @@ inflect==2.1.0 # via jinja2-pluralize
|
||||
jinja2-pluralize==0.3.0 # via diff-cover
|
||||
jinja2==2.10 # via diff-cover, jinja2-pluralize
|
||||
markupsafe==1.1.0 # via jinja2
|
||||
<<<<<<< HEAD
|
||||
pygments==2.3.1 # via diff-cover
|
||||
six==1.11.0 # via diff-cover
|
||||
=======
|
||||
pygments==2.3.0 # via diff-cover
|
||||
six==1.11.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
|
||||
@@ -138,14 +138,23 @@ edx-django-sites-extensions==2.3.1
|
||||
edx-django-utils==1.0.3
|
||||
edx-drf-extensions==2.0.1
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.2.0
|
||||
=======
|
||||
=======
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.1.2
|
||||
=======
|
||||
edx-enterprise==1.1.0
|
||||
>>>>>>> make upgrade
|
||||
<<<<<<< HEAD
|
||||
>>>>>>> make upgrade
|
||||
=======
|
||||
=======
|
||||
edx-enterprise==1.1.2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-i18n-tools==0.4.6
|
||||
edx-lint==1.0.0
|
||||
edx-milestones==0.1.13
|
||||
@@ -155,6 +164,7 @@ edx-organizations==1.0.0
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-proctoring==1.4.0
|
||||
=======
|
||||
edx-proctoring==1.5.0b1
|
||||
@@ -165,6 +175,9 @@ edx-proctoring==1.5.0b3
|
||||
=======
|
||||
edx-proctoring==1.5.0rc1
|
||||
>>>>>>> Set NPM dependencies more stably
|
||||
=======
|
||||
edx-proctoring==1.5.0rc2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-rest-api-client==1.9.2
|
||||
edx-search==1.2.1
|
||||
edx-sphinx-theme==1.4.0
|
||||
@@ -326,8 +339,12 @@ reportlab==3.5.11
|
||||
reportlab==3.5.12
|
||||
>>>>>>> Updated edx-proctoring pre-release
|
||||
requests-oauthlib==1.0.0
|
||||
<<<<<<< HEAD
|
||||
requests==2.20.1
|
||||
>>>>>>> Enable course run level overrides for proctoring configuration.
|
||||
=======
|
||||
requests==2.21.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
rest-condition==1.0.3
|
||||
rfc6266-parser==0.0.5.post2
|
||||
rules==2.0.1
|
||||
|
||||
@@ -24,3 +24,5 @@ requests # Simple interface for making HTTP requests
|
||||
stevedore==1.10.0 # via edx-opaque-keys
|
||||
watchdog # Used in paver watch_assets
|
||||
wrapt==1.10.5 # Decorator utilities used in the @timed paver task decorator
|
||||
|
||||
six==1.11.0 # Pinned because a few things here need it, but later transifex-client says ==1.11.0
|
||||
|
||||
@@ -23,11 +23,16 @@ pymongo==2.9.1
|
||||
python-memcached==1.48
|
||||
pyyaml==3.13 # via watchdog
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
requests==2.21.0
|
||||
=======
|
||||
requests==2.20.1
|
||||
>>>>>>> Enable course run level overrides for proctoring configuration.
|
||||
six==1.11.0 # via edx-opaque-keys, libsass, paver, stevedore
|
||||
=======
|
||||
requests==2.21.0
|
||||
six==1.11.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
stevedore==1.10.0
|
||||
urllib3==1.23 # via requests
|
||||
watchdog==0.9.0
|
||||
|
||||
@@ -10,3 +10,4 @@
|
||||
-c ../constraints.txt
|
||||
|
||||
pip-tools # Contains pip-compile, used to generate pip requirements files
|
||||
six==1.11.0 # Pinned because pip-tools needs it, but later transifex-client says ==1.11.0
|
||||
|
||||
@@ -5,5 +5,10 @@
|
||||
# make upgrade
|
||||
#
|
||||
click==7.0 # via pip-tools
|
||||
<<<<<<< HEAD
|
||||
pip-tools==3.2.0
|
||||
six==1.11.0 # via pip-tools
|
||||
=======
|
||||
pip-tools==3.1.0
|
||||
six==1.11.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
|
||||
@@ -133,14 +133,23 @@ edx-django-sites-extensions==2.3.1
|
||||
edx-django-utils==1.0.3
|
||||
edx-drf-extensions==2.0.1
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.2.0
|
||||
=======
|
||||
=======
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
<<<<<<< HEAD
|
||||
edx-enterprise==1.1.2
|
||||
=======
|
||||
edx-enterprise==1.1.0
|
||||
>>>>>>> make upgrade
|
||||
<<<<<<< HEAD
|
||||
>>>>>>> make upgrade
|
||||
=======
|
||||
=======
|
||||
edx-enterprise==1.1.2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-i18n-tools==0.4.6
|
||||
edx-lint==1.0.0
|
||||
edx-milestones==0.1.13
|
||||
@@ -150,6 +159,7 @@ edx-organizations==1.0.0
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
edx-proctoring==1.4.0
|
||||
=======
|
||||
edx-proctoring==1.5.0b1
|
||||
@@ -160,6 +170,9 @@ edx-proctoring==1.5.0b3
|
||||
=======
|
||||
edx-proctoring==1.5.0rc1
|
||||
>>>>>>> Set NPM dependencies more stably
|
||||
=======
|
||||
edx-proctoring==1.5.0rc2
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
edx-rest-api-client==1.9.2
|
||||
edx-search==1.2.1
|
||||
edx-submissions==2.0.12
|
||||
@@ -315,8 +328,12 @@ reportlab==3.5.11
|
||||
reportlab==3.5.12
|
||||
>>>>>>> Updated edx-proctoring pre-release
|
||||
requests-oauthlib==1.0.0
|
||||
<<<<<<< HEAD
|
||||
requests==2.20.1
|
||||
>>>>>>> Enable course run level overrides for proctoring configuration.
|
||||
=======
|
||||
requests==2.21.0
|
||||
>>>>>>> Removed course-run exam rule configuration
|
||||
rest-condition==1.0.3
|
||||
rfc6266-parser==0.0.5.post2
|
||||
rules==2.0.1
|
||||
|
||||
Reference in New Issue
Block a user