diff --git a/openedx/features/enterprise_support/tests/test_utils.py b/openedx/features/enterprise_support/tests/test_utils.py index d0d5f67cce09da3334b248989fae8f9eff66c81d..f73a3f9a72c77dc164148cb5a6b1a0f0de2b1de6 100644 --- a/openedx/features/enterprise_support/tests/test_utils.py +++ b/openedx/features/enterprise_support/tests/test_utils.py @@ -6,11 +6,9 @@ import json import mock import ddt -from django.conf import settings from django.test import TestCase from django.test.utils import override_settings -from lms.djangoapps.branding.api import get_logo_url from openedx.core.djangolib.testing.utils import skip_unless_lms from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag from openedx.features.enterprise_support.utils import ENTERPRISE_HEADER_LINKS, get_enterprise_learner_portal @@ -78,7 +76,7 @@ class TestEnterpriseUtils(TestCase): self.assertDictEqual(portal, { 'name': enterprise_customer_user.enterprise_customer.name, 'slug': enterprise_customer_user.enterprise_customer.slug, - 'logo': enterprise_customer_user.enterprise_customer.branding_configuration.logo, + 'logo': enterprise_customer_user.enterprise_customer.branding_configuration.logo.url, }) @override_waffle_flag(ENTERPRISE_HEADER_LINKS, True) @@ -100,7 +98,7 @@ class TestEnterpriseUtils(TestCase): self.assertDictEqual(portal, { 'name': enterprise_customer_user.enterprise_customer.name, 'slug': enterprise_customer_user.enterprise_customer.slug, - 'logo': settings.LMS_ROOT_URL + get_logo_url(), + 'logo': None, }) @override_waffle_flag(ENTERPRISE_HEADER_LINKS, True) @@ -134,7 +132,7 @@ class TestEnterpriseUtils(TestCase): self.assertDictEqual(portal, { 'name': enterprise_customer_user.enterprise_customer.name, 'slug': enterprise_customer_user.enterprise_customer.slug, - 'logo': enterprise_customer_user.enterprise_customer.branding_configuration.logo, + 'logo': enterprise_customer_user.enterprise_customer.branding_configuration.logo.url, }) @override_waffle_flag(ENTERPRISE_HEADER_LINKS, True) diff --git a/openedx/features/enterprise_support/utils.py b/openedx/features/enterprise_support/utils.py index 048f0cf42567468c0e5857df40cd01916a17bd1a..5884d58906ba4227a7e1ff4538818e8e3ede421c 100644 --- a/openedx/features/enterprise_support/utils.py +++ b/openedx/features/enterprise_support/utils.py @@ -10,6 +10,7 @@ from django.conf import settings from django.urls import NoReverseMatch, reverse from django.utils.translation import ugettext as _ from edx_django_utils.cache import TieredCache, get_cache_key +from enterprise.api.v1.serializers import EnterpriseCustomerBrandingConfigurationSerializer from enterprise.models import EnterpriseCustomerUser, EnterpriseCustomer from social_django.models import UserSocialAuth @@ -323,7 +324,7 @@ def get_enterprise_learner_portal(request): queryset = EnterpriseCustomerUser.objects.filter(**kwargs).prefetch_related( 'enterprise_customer', - 'enterprise_customer___branding_configuration', + 'enterprise_customer__branding_configuration', ) if not enterprise_customer_uuid: @@ -341,7 +342,7 @@ def get_enterprise_learner_portal(request): learner_portal_data = { 'name': enterprise_customer.name, 'slug': enterprise_customer.slug, - 'logo': enterprise_customer.branding_configuration.logo, + 'logo': enterprise_branding_configuration(enterprise_customer).get('logo'), } # Cache the result in the user's request session @@ -350,6 +351,20 @@ def get_enterprise_learner_portal(request): return None +def enterprise_branding_configuration(enterprise_customer_obj): + """ + Given an instance of ``EnterpriseCustomer``, returns a related + branding_configuration serialized dictionary if it exists, otherwise an empty dictionary. + """ + # We can use hasattr() on one-to-one relationships to avoid exception-catching: + # https://docs.djangoproject.com/en/2.2/topics/db/examples/one_to_one/ + if not hasattr(enterprise_customer_obj, 'branding_configuration'): + return {} + + branding_config = enterprise_customer_obj.branding_configuration + return EnterpriseCustomerBrandingConfigurationSerializer(branding_config).data + + def get_enterprise_learner_generic_name(request): """ Get a generic name concatenating the Enterprise Customer name and 'Learner'. diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 159d0f2343bc77a7844bf514284143fdced9e279..4a6a320a315fc98881b628dedf1ff42c67b61109 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -35,7 +35,7 @@ drf-yasg<1.17.1 # The team that owns this package will manually bump this package rather than having it pulled in automatically. # This is to allow them to better control its deployment and to do it in a process that works better # for them. -edx-enterprise==3.8.35 +edx-enterprise==3.8.33 # Upgrading to 2.12.0 breaks several test classes due to API changes, need to update our code accordingly factory-boy==2.8.1 diff --git a/requirements/edx-sandbox/py35.txt b/requirements/edx-sandbox/py35.txt index f22b9428a5192e6fb291619c9702817e3989e918..34a11f9c2829f23430b0411afe60d27a2387b6d7 100644 --- a/requirements/edx-sandbox/py35.txt +++ b/requirements/edx-sandbox/py35.txt @@ -20,7 +20,7 @@ matplotlib==2.2.4 # via -c requirements/edx-sandbox/../constraints.txt, mpmath==1.1.0 # via sympy networkx==2.2 # via -r requirements/edx-sandbox/py35.in nltk==3.5 # via -r requirements/edx-sandbox/shared.txt, chem -numpy==1.16.5 # via -c requirements/edx-sandbox/../constraints.txt, -r requirements/edx-sandbox/py35.in, chem, matplotlib, openedx-calc +numpy==1.16.5 # via -c requirements/edx-sandbox/../constraints.txt, -r requirements/edx-sandbox/py35.in, chem, matplotlib, openedx-calc, scipy openedx-calc==1.0.9 # via -r requirements/edx-sandbox/py35.in pycparser==2.20 # via -r requirements/edx-sandbox/shared.txt, cffi pyparsing==2.2.0 # via -r requirements/edx-sandbox/py35.in, chem, matplotlib, openedx-calc diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 23983e87591f232e856bd65d067198b2065650d5..58999772874f4c74852a3356ad67d4e5a458eb4d 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -98,7 +98,7 @@ edx-django-release-util==0.4.4 # via -r requirements/edx/base.in edx-django-sites-extensions==2.5.1 # via -r requirements/edx/base.in edx-django-utils==3.8.0 # via -r requirements/edx/base.in, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-when edx-drf-extensions==6.2.0 # via -r requirements/edx/base.in, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.8.35 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.in +edx-enterprise==3.8.33 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.in edx-i18n-tools==0.5.3 # via ora2 edx-milestones==0.3.0 # via -r requirements/edx/base.in edx-opaque-keys[django]==2.1.1 # via -r requirements/edx/paver.txt, edx-bulk-grades, edx-ccx-keys, edx-completion, edx-drf-extensions, edx-enterprise, edx-milestones, edx-organizations, edx-proctoring, edx-user-state-client, edx-when, lti-consumer-xblock, xmodule @@ -128,6 +128,7 @@ help-tokens==1.1.2 # via -r requirements/edx/base.in html5lib==1.1 # via -r requirements/edx/base.in, ora2 icalendar==4.0.7 # via -r requirements/edx/base.in idna==2.10 # via -r requirements/edx/paver.txt, requests +importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.txt, kombu, path inflection==0.5.1 # via drf-yasg ipaddress==1.0.23 # via -r requirements/edx/base.in isodate==0.6.0 # via python3-saml @@ -153,6 +154,7 @@ maxminddb==1.5.4 # via -c requirements/edx/../constraints.txt, geoip2 mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.txt, xblock-drag-and-drop-v2, xblock-poll git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/github.in mongoengine==0.20.0 # via -r requirements/edx/base.in +more-itertools==8.5.0 # via -r requirements/edx/paver.txt, zipp mpmath==1.1.0 # via sympy mysqlclient==2.0.1 # via -r requirements/edx/base.in newrelic==5.20.1.150 # via -r requirements/edx/base.in, edx-django-utils @@ -244,6 +246,7 @@ xblock-utils==2.1.1 # via -r requirements/edx/base.in, edx-sga, lti-consum xblock==1.4.0 # via -r requirements/edx/base.in, acid-xblock, crowdsourcehinter-xblock, done-xblock, edx-completion, edx-sga, edx-user-state-client, edx-when, lti-consumer-xblock, ora2, rate-xblock, staff-graded-xblock, xblock-discussion, xblock-drag-and-drop-v2, xblock-google-drive, xblock-poll, xblock-utils xmlsec==1.3.8 # via python3-saml xss-utils==0.1.3 # via -r requirements/edx/base.in +zipp==1.0.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.txt, importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/edx/coverage.txt b/requirements/edx/coverage.txt index c001e72690f8fed6bcedcdf06520cbe9ef11f792..da1c7f97494aa7f98281961478c6e3c00ae4eaf1 100644 --- a/requirements/edx/coverage.txt +++ b/requirements/edx/coverage.txt @@ -6,7 +6,7 @@ # coverage==5.3 # via -r requirements/edx/coverage.in diff-cover==4.0.1 # via -r requirements/edx/coverage.in -importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, inflect +importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, inflect, pluggy inflect==3.0.2 # via -c requirements/edx/../constraints.txt, jinja2-pluralize jinja2-pluralize==0.3.0 # via diff-cover jinja2==2.11.2 # via diff-cover, jinja2-pluralize diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 5a84753a6b69aeb41a76ca8f1dc4bbd2f588e31e..3307f3dd24ff8a47059dfe75e0a296cfcd5d5a2a 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -109,7 +109,7 @@ edx-django-release-util==0.4.4 # via -r requirements/edx/testing.txt edx-django-sites-extensions==2.5.1 # via -r requirements/edx/testing.txt edx-django-utils==3.8.0 # via -r requirements/edx/testing.txt, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-when edx-drf-extensions==6.2.0 # via -r requirements/edx/testing.txt, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.8.35 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt +edx-enterprise==3.8.33 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt edx-i18n-tools==0.5.3 # via -r requirements/edx/testing.txt, ora2 edx-lint==1.5.2 # via -r requirements/edx/testing.txt edx-milestones==0.3.0 # via -r requirements/edx/testing.txt @@ -150,7 +150,8 @@ httpretty==0.9.7 # via -c requirements/edx/../constraints.txt, -r requi icalendar==4.0.7 # via -r requirements/edx/testing.txt idna==2.10 # via -r requirements/edx/testing.txt, requests imagesize==1.2.0 # via sphinx -importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, inflect +importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, inflect, jsonschema, kombu, path, pluggy, pytest, pytest-randomly, tox, virtualenv +importlib-resources==3.0.0 # via -r requirements/edx/testing.txt, virtualenv inflect==3.0.2 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, jinja2-pluralize inflection==0.5.1 # via -r requirements/edx/testing.txt, drf-yasg iniconfig==1.0.1 # via -r requirements/edx/testing.txt, pytest @@ -198,6 +199,7 @@ ora2==2.9.18 # via -r requirements/edx/testing.txt packaging==20.4 # via -r requirements/edx/testing.txt, bleach, drf-yasg, pytest, sphinx, tox path.py==12.5.0 # via -r requirements/edx/testing.txt, edx-enterprise, edx-i18n-tools, ora2, staff-graded-xblock, xmodule path==13.1.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, path.py +pathlib2==2.3.5 # via -r requirements/edx/testing.txt, pytest pathtools==0.1.2 # via -r requirements/edx/testing.txt, watchdog paver==1.3.4 # via -r requirements/edx/testing.txt pbr==5.5.0 # via -r requirements/edx/testing.txt, stevedore @@ -266,7 +268,7 @@ semantic-version==2.8.5 # via -r requirements/edx/testing.txt, edx-drf-extensi shapely==1.7.1 # via -r requirements/edx/testing.txt simplejson==3.17.2 # via -r requirements/edx/testing.txt, sailthru-client, super-csv, xblock-utils singledispatch==3.4.0.3 # via -r requirements/edx/testing.txt -six==1.15.0 # via -r requirements/edx/pip-tools.txt, -r requirements/edx/testing.txt, analytics-python, astroid, bleach, bok-choy, chem, crowdsourcehinter-xblock, cryptography, django-countries, django-simple-history, django-statici18n, django-wiki, drf-yasg, edx-ace, edx-bulk-grades, edx-ccx-keys, edx-django-release-util, edx-drf-extensions, edx-enterprise, edx-i18n-tools, edx-lint, edx-milestones, edx-opaque-keys, edx-rbac, edx-search, edx-sphinx-theme, event-tracking, freezegun, fs, fs-s3fs, help-tokens, html5lib, httpretty, isodate, jsonschema, libsass, mock, openedx-calc, packaging, paver, pip-tools, pycontracts, pyjwkest, python-dateutil, python-memcached, python-swiftclient, singledispatch, social-auth-app-django, social-auth-core, sphinxcontrib-httpdomain, stevedore, tox, transifex-client, virtualenv, xblock +six==1.15.0 # via -r requirements/edx/pip-tools.txt, -r requirements/edx/testing.txt, analytics-python, astroid, bleach, bok-choy, chem, crowdsourcehinter-xblock, cryptography, django-countries, django-simple-history, django-statici18n, django-wiki, drf-yasg, edx-ace, edx-bulk-grades, edx-ccx-keys, edx-django-release-util, edx-drf-extensions, edx-enterprise, edx-i18n-tools, edx-lint, edx-milestones, edx-opaque-keys, edx-rbac, edx-search, edx-sphinx-theme, event-tracking, freezegun, fs, fs-s3fs, help-tokens, html5lib, httpretty, isodate, jsonschema, libsass, mock, openedx-calc, packaging, pathlib2, paver, pip-tools, pycontracts, pyjwkest, python-dateutil, python-memcached, python-swiftclient, singledispatch, social-auth-app-django, social-auth-core, sphinxcontrib-httpdomain, stevedore, tox, transifex-client, virtualenv, xblock slumber==0.7.1 # via -r requirements/edx/testing.txt, edx-bulk-grades, edx-enterprise, edx-rest-api-client smmap==3.0.4 # via -r requirements/edx/testing.txt, gitdb snowballstemmer==2.0.0 # via sphinx @@ -296,6 +298,7 @@ tox-battery==0.6.1 # via -r requirements/edx/testing.txt tox==3.20.1 # via -r requirements/edx/testing.txt, tox-battery tqdm==4.50.2 # via -r requirements/edx/testing.txt, nltk transifex-client==0.13.12 # via -r requirements/edx/testing.txt +typed-ast==1.4.1 # via -r requirements/edx/testing.txt, astroid ua-parser==0.10.0 # via -r requirements/edx/testing.txt, django-cookies-samesite unicodecsv==0.14.1 # via -r requirements/edx/testing.txt, edx-enterprise unidiff==0.6.0 # via -r requirements/edx/testing.txt, coverage-pytest-plugin @@ -317,7 +320,7 @@ xblock-utils==2.1.1 # via -r requirements/edx/testing.txt, edx-sga, lti-co xblock==1.4.0 # via -r requirements/edx/testing.txt, acid-xblock, crowdsourcehinter-xblock, done-xblock, edx-completion, edx-sga, edx-user-state-client, edx-when, lti-consumer-xblock, ora2, rate-xblock, staff-graded-xblock, xblock-discussion, xblock-drag-and-drop-v2, xblock-google-drive, xblock-poll, xblock-utils xmlsec==1.3.8 # via -r requirements/edx/testing.txt, python3-saml xss-utils==0.1.3 # via -r requirements/edx/testing.txt -zipp==1.0.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, importlib-metadata +zipp==1.0.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt, importlib-metadata, importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/edx/paver.txt b/requirements/edx/paver.txt index 5caaf98cdf9f0cd026fe346991e24cc9a0a73d95..7e35d16ab865b35d91e7576092bdd4949409e8f9 100644 --- a/requirements/edx/paver.txt +++ b/requirements/edx/paver.txt @@ -8,10 +8,12 @@ certifi==2020.6.20 # via requests chardet==3.0.4 # via requests edx-opaque-keys==2.1.1 # via -r requirements/edx/paver.in idna==2.10 # via requests +importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, path lazy==1.4 # via -r requirements/edx/paver.in libsass==0.10.0 # via -r requirements/edx/paver.in markupsafe==1.1.1 # via -r requirements/edx/paver.in mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.in +more-itertools==8.5.0 # via zipp path==13.1.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.in pathtools==0.1.2 # via watchdog paver==1.3.4 # via -r requirements/edx/paver.in @@ -25,3 +27,4 @@ stevedore==1.32.0 # via -c requirements/edx/../constraints.txt, -r requi urllib3==1.25.10 # via requests watchdog==0.10.3 # via -r requirements/edx/paver.in wrapt==1.11.2 # via -c requirements/edx/../constraints.txt, -r requirements/edx/paver.in +zipp==1.0.0 # via -c requirements/edx/../constraints.txt, importlib-metadata diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index cb41f56a811f065e147568923d5fb848ebbe65be..6720592ef619eba041e70b5ffe0cb414210bfc76 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -106,7 +106,7 @@ edx-django-release-util==0.4.4 # via -r requirements/edx/base.txt edx-django-sites-extensions==2.5.1 # via -r requirements/edx/base.txt edx-django-utils==3.8.0 # via -r requirements/edx/base.txt, django-config-models, edx-drf-extensions, edx-enterprise, edx-rest-api-client, edx-when edx-drf-extensions==6.2.0 # via -r requirements/edx/base.txt, edx-completion, edx-enterprise, edx-organizations, edx-proctoring, edx-rbac, edx-when, edxval -edx-enterprise==3.8.35 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt +edx-enterprise==3.8.33 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt edx-i18n-tools==0.5.3 # via -r requirements/edx/base.txt, -r requirements/edx/testing.in, ora2 edx-lint==1.5.2 # via -r requirements/edx/testing.in edx-milestones==0.3.0 # via -r requirements/edx/base.txt @@ -145,7 +145,8 @@ html5lib==1.1 # via -r requirements/edx/base.txt, ora2 httpretty==0.9.7 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.in icalendar==4.0.7 # via -r requirements/edx/base.txt idna==2.10 # via -r requirements/edx/base.txt, requests -importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/coverage.txt, inflect +importlib-metadata==1.7.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, -r requirements/edx/coverage.txt, inflect, kombu, path, pluggy, pytest, pytest-randomly, tox, virtualenv +importlib-resources==3.0.0 # via virtualenv inflect==3.0.2 # via -c requirements/edx/../constraints.txt, -r requirements/edx/coverage.txt, jinja2-pluralize inflection==0.5.1 # via -r requirements/edx/base.txt, drf-yasg iniconfig==1.0.1 # via pytest @@ -177,7 +178,7 @@ mccabe==0.6.1 # via pylint mock==3.0.5 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, xblock-drag-and-drop-v2, xblock-poll git+https://github.com/edx/MongoDBProxy.git@d92bafe9888d2940f647a7b2b2383b29c752f35a#egg=MongoDBProxy==0.1.0+edx.2 # via -r requirements/edx/base.txt mongoengine==0.20.0 # via -r requirements/edx/base.txt -more-itertools==8.5.0 # via -r requirements/edx/coverage.txt, zipp +more-itertools==8.5.0 # via -r requirements/edx/base.txt, -r requirements/edx/coverage.txt, zipp mpmath==1.1.0 # via -r requirements/edx/base.txt, sympy mysqlclient==2.0.1 # via -r requirements/edx/base.txt newrelic==5.20.1.150 # via -r requirements/edx/base.txt, edx-django-utils @@ -190,6 +191,7 @@ ora2==2.9.18 # via -r requirements/edx/base.txt packaging==20.4 # via -r requirements/edx/base.txt, bleach, drf-yasg, pytest, tox path.py==12.5.0 # via -r requirements/edx/base.txt, edx-enterprise, edx-i18n-tools, ora2, staff-graded-xblock, xmodule path==13.1.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, path.py +pathlib2==2.3.5 # via pytest pathtools==0.1.2 # via -r requirements/edx/base.txt, watchdog paver==1.3.4 # via -r requirements/edx/base.txt pbr==5.5.0 # via -r requirements/edx/base.txt, stevedore @@ -255,7 +257,7 @@ semantic-version==2.8.5 # via -r requirements/edx/base.txt, edx-drf-extensions shapely==1.7.1 # via -r requirements/edx/base.txt simplejson==3.17.2 # via -r requirements/edx/base.txt, sailthru-client, super-csv, xblock-utils singledispatch==3.4.0.3 # via -r requirements/edx/testing.in -six==1.15.0 # via -r requirements/edx/base.txt, analytics-python, astroid, bleach, bok-choy, chem, crowdsourcehinter-xblock, cryptography, django-countries, django-simple-history, django-statici18n, django-wiki, drf-yasg, edx-ace, edx-bulk-grades, edx-ccx-keys, edx-django-release-util, edx-drf-extensions, edx-enterprise, edx-i18n-tools, edx-lint, edx-milestones, edx-opaque-keys, edx-rbac, edx-search, event-tracking, freezegun, fs, fs-s3fs, help-tokens, html5lib, httpretty, isodate, libsass, mock, openedx-calc, packaging, paver, pycontracts, pyjwkest, python-dateutil, python-memcached, python-swiftclient, singledispatch, social-auth-app-django, social-auth-core, stevedore, tox, transifex-client, virtualenv, xblock +six==1.15.0 # via -r requirements/edx/base.txt, analytics-python, astroid, bleach, bok-choy, chem, crowdsourcehinter-xblock, cryptography, django-countries, django-simple-history, django-statici18n, django-wiki, drf-yasg, edx-ace, edx-bulk-grades, edx-ccx-keys, edx-django-release-util, edx-drf-extensions, edx-enterprise, edx-i18n-tools, edx-lint, edx-milestones, edx-opaque-keys, edx-rbac, edx-search, event-tracking, freezegun, fs, fs-s3fs, help-tokens, html5lib, httpretty, isodate, libsass, mock, openedx-calc, packaging, pathlib2, paver, pycontracts, pyjwkest, python-dateutil, python-memcached, python-swiftclient, singledispatch, social-auth-app-django, social-auth-core, stevedore, tox, transifex-client, virtualenv, xblock slumber==0.7.1 # via -r requirements/edx/base.txt, edx-bulk-grades, edx-enterprise, edx-rest-api-client smmap==3.0.4 # via gitdb social-auth-app-django==4.0.0 # via -r requirements/edx/base.txt @@ -275,6 +277,7 @@ tox-battery==0.6.1 # via -r requirements/edx/testing.in tox==3.20.1 # via -r requirements/edx/testing.in, tox-battery tqdm==4.50.2 # via -r requirements/edx/base.txt, nltk transifex-client==0.13.12 # via -r requirements/edx/testing.in +typed-ast==1.4.1 # via astroid ua-parser==0.10.0 # via -r requirements/edx/base.txt, django-cookies-samesite unicodecsv==0.14.1 # via -r requirements/edx/base.txt, edx-enterprise unidiff==0.6.0 # via -r requirements/edx/testing.in, coverage-pytest-plugin @@ -295,7 +298,7 @@ xblock-utils==2.1.1 # via -r requirements/edx/base.txt, edx-sga, lti-consu xblock==1.4.0 # via -r requirements/edx/base.txt, acid-xblock, crowdsourcehinter-xblock, done-xblock, edx-completion, edx-sga, edx-user-state-client, edx-when, lti-consumer-xblock, ora2, rate-xblock, staff-graded-xblock, xblock-discussion, xblock-drag-and-drop-v2, xblock-google-drive, xblock-poll, xblock-utils xmlsec==1.3.8 # via -r requirements/edx/base.txt, python3-saml xss-utils==0.1.3 # via -r requirements/edx/base.txt -zipp==1.0.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/coverage.txt, importlib-metadata +zipp==1.0.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/base.txt, -r requirements/edx/coverage.txt, importlib-metadata, importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools