From 19b5633e5cff97cf9ed3607aee2d1562ed3b25c6 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:33 +0000 Subject: [PATCH 01/11] Revert "fix: change settings config to empty list not dict" This reverts commit b65550c79629b572bd2fab783f05f517c02f8f1b. --- lms/envs/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lms/envs/common.py b/lms/envs/common.py index 280aaf37bf97..364ef903fd72 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -5003,7 +5003,7 @@ def _make_locale_paths(settings): # pylint: disable=missing-function-docstring 'COMPLETE', ] -EXTRA_SERVICES_TO_RETIRE_FROM = [] +EXTRA_SERVICES_TO_RETIRE_FROM = {} USERNAME_REPLACEMENT_WORKER = "REPLACE WITH VALID USERNAME" From c8c692c73e419146027e9a371c073add2ea3cba8 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:36 +0000 Subject: [PATCH 02/11] Revert "fix: dependencies again" This reverts commit c06416bed78c8607a83fbe35ea26cc020db70231. --- .../docs/implementation_overview.rst | 9 +++---- .../user_retirement/docs/service_setup.rst | 26 ++++++++----------- scripts/user_retirement/requirements/base.txt | 2 +- .../user_retirement/requirements/testing.txt | 2 +- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/scripts/user_retirement/docs/implementation_overview.rst b/scripts/user_retirement/docs/implementation_overview.rst index 902732a44190..b6cf1a51305d 100644 --- a/scripts/user_retirement/docs/implementation_overview.rst +++ b/scripts/user_retirement/docs/implementation_overview.rst @@ -53,18 +53,15 @@ the platform to handle the retirement of PII in custom or internal services that part of the standard Open edX installation but are crucial for specific deployments. Here is an example of how the ``EXTRA_SERVICES_TO_RETIRE_FROM`` setting can be configured: - .. code-block:: python - - EXTRA_SERVICES_TO_RETIRE_FROM = [ + EXTRA_SERVICES_TO_RETIRE_FROM = [ { 'name': 'MOCK_SERVICE', 'service_base_url': 'http://fake_service_base_url', 'retirement_url_path': 'fake_retirement_url_path' } - ] - -This setting defines a list of services, each with a ``name``, ``service_base_url``, and ``retirement_url_path``, + ] +This setting defines a list of services, each with a name, service_base_url, and retirement_url_path, allowing the user retirement process to include these additional services. This example state diagram outlines the pathways users follow throughout the diff --git a/scripts/user_retirement/docs/service_setup.rst b/scripts/user_retirement/docs/service_setup.rst index 58a0f41001b8..366541a33a79 100644 --- a/scripts/user_retirement/docs/service_setup.rst +++ b/scripts/user_retirement/docs/service_setup.rst @@ -63,24 +63,20 @@ defining *derived* settings specific to Open edX. Read more about it in * - EXTRA_SERVICES_TO_RETIRE_FROM - None - A list of additional services from which user data should be retired. Each entry in the list should be a dictionary with the following keys: - - ``name``: The name of the service. - ``service_base_url``: The base URL of the service's API. - ``retirement_url_path``: The API path for the user retirement endpoint. - - This setting allows the retirement process to interact with external services not covered by default. For example: - - .. code-block:: python - - EXTRA_SERVICES_TO_RETIRE_FROM = [ - { - 'name': 'MOCK_SERVICE', - 'service_base_url': 'http://fake_service_base_url', - 'retirement_url_path': 'fake_retirement_url_path' - } - ] - - By default, this setting is empty, meaning no additional services are included. This can be overridden in `common.py `_. + This setting allows the retirement process to interact with external services not covered by default. For example: + .. code-block:: python + EXTRA_SERVICES_TO_RETIRE_FROM = [ + { + 'name': 'MOCK_SERVICE', + 'service_base_url': 'http://fake_service_base_url', + 'retirement_url_path': 'fake_retirement_url_path' + }, + # Add more services as needed + ] + By default, this setting is empty, meaning no additional services are included. This can be overridden in `https://github.com/openedx/edx-platform/blob/master/lms/envs/common.py. ================= diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index f57f1dad43ca..b0a649c6754c 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -534,7 +534,7 @@ edx-drf-extensions==10.3.0 # edx-when # edxval # openedx-learning -edx-enterprise==4.23.8 +edx-enterprise==4.23.4 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index 6231b3bb3672..3fb96783ca9d 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -526,7 +526,7 @@ edx-drf-extensions==10.3.0 # edx-when # edxval # openedx-learning -edx-enterprise==4.23.8 +edx-enterprise==4.23.4 # via -r scripts/user_retirement/requirements/base.txt edx-event-bus-kafka==5.8.1 # via -r scripts/user_retirement/requirements/base.txt From 7c3fbc15e859370bbf239ad85b639fc4cedb9397 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:37 +0000 Subject: [PATCH 03/11] Revert "feat: updated user retirement docs" This reverts commit c9641b35d4a4260383c0da04929fbbdf3b8b13b7. --- .../docs/implementation_overview.rst | 22 ++----------- .../user_retirement/docs/service_setup.rst | 33 +++++-------------- 2 files changed, 10 insertions(+), 45 deletions(-) diff --git a/scripts/user_retirement/docs/implementation_overview.rst b/scripts/user_retirement/docs/implementation_overview.rst index b6cf1a51305d..37a814c1d583 100644 --- a/scripts/user_retirement/docs/implementation_overview.rst +++ b/scripts/user_retirement/docs/implementation_overview.rst @@ -11,8 +11,8 @@ these services. As a consequence, to remove a user's PII, you must be able to request each service containing PII to remove, delete, or unlink the data for that user in that service. -In the user retirement feature, a centralized process (the *driver* scripts) -orchestrates all of these requests. For information about how to configure the +In the user retirement feature, a centralized process (the *driver* scripts) +orchestrates all of these requests. For information about how to configure the driver scripts, see :ref:`driver-setup`. **************************** @@ -46,24 +46,6 @@ table of the states themselves (the ``RetirementState`` model), rather than hard-coding the states. This was done because we cannot predict all the possible states required by all members of the Open edX community. -The workflow also allows the inclusion of additional services that may need to be -retired alongside the core services. These extra services can now be configured within -the Django settings under the ``EXTRA_SERVICES_TO_RETIRE_FROM`` setting. This setting allows -the platform to handle the retirement of PII in custom or internal services that are not -part of the standard Open edX installation but are crucial for specific deployments. - -Here is an example of how the ``EXTRA_SERVICES_TO_RETIRE_FROM`` setting can be configured: -.. code-block:: python - EXTRA_SERVICES_TO_RETIRE_FROM = [ - { - 'name': 'MOCK_SERVICE', - 'service_base_url': 'http://fake_service_base_url', - 'retirement_url_path': 'fake_retirement_url_path' - } - ] -This setting defines a list of services, each with a name, service_base_url, and retirement_url_path, -allowing the user retirement process to include these additional services. - This example state diagram outlines the pathways users follow throughout the workflow: diff --git a/scripts/user_retirement/docs/service_setup.rst b/scripts/user_retirement/docs/service_setup.rst index 366541a33a79..4fd59fcfd3ad 100644 --- a/scripts/user_retirement/docs/service_setup.rst +++ b/scripts/user_retirement/docs/service_setup.rst @@ -36,13 +36,13 @@ defining *derived* settings specific to Open edX. Read more about it in - ``'retired.invalid'`` - The domain part of hashed emails. Used in ``RETIRED_EMAIL_FMT``. * - RETIRED_USERNAME_FMT - - ``lambda settings: + - ``lambda settings: settings.RETIRED_USERNAME_PREFIX + '{}'`` - The username field for a retired user gets transformed into this format, where ``{}`` is replaced with the hash of their username. * - RETIRED_EMAIL_FMT - - ``lambda settings: - settings.RETIRED_EMAIL_PREFIX + '{}@' + + - ``lambda settings: + settings.RETIRED_EMAIL_PREFIX + '{}@' + settings.RETIRED_EMAIL_DOMAIN`` - The email field for a retired user gets transformed into this format, where ``{}`` is replaced with the hash of their email. @@ -60,23 +60,6 @@ defining *derived* settings specific to Open edX. Read more about it in * - FEATURES['ENABLE_ACCOUNT_DELETION'] - True - Whether to display the "Delete My Account" section the account settings page. - * - EXTRA_SERVICES_TO_RETIRE_FROM - - None - - A list of additional services from which user data should be retired. Each entry in the list should be a dictionary with the following keys: - - ``name``: The name of the service. - - ``service_base_url``: The base URL of the service's API. - - ``retirement_url_path``: The API path for the user retirement endpoint. - This setting allows the retirement process to interact with external services not covered by default. For example: - .. code-block:: python - EXTRA_SERVICES_TO_RETIRE_FROM = [ - { - 'name': 'MOCK_SERVICE', - 'service_base_url': 'http://fake_service_base_url', - 'retirement_url_path': 'fake_retirement_url_path' - }, - # Add more services as needed - ] - By default, this setting is empty, meaning no additional services are included. This can be overridden in `https://github.com/openedx/edx-platform/blob/master/lms/envs/common.py. ================= @@ -96,10 +79,10 @@ state at the beginning, and ``COMPLETED``, ``ERRORED``, and ``ABORTED`` states at the end of the list. Also, for every ``RETIRING_foo`` state, there must be a corresponding ``foo_COMPLETE`` state. -Override these states if you need to add any states. Typically, these +Override these states if you need to add any states. Typically, these settings are set in ``lms.yml``. -After you have defined any custom states, populate the states table with the +After you have defined any custom states, populate the states table with the following management command: .. code-block:: bash @@ -137,7 +120,7 @@ Retirement Service User The user retirement driver scripts authenticate with the LMS and IDAs as the retirement service user with oauth client credentials. Therefore, to use the -driver scripts, you must create a retirement service user, and generate a DOT +driver scripts, you must create a retirement service user, and generate a DOT application and client credentials, as in the following command. .. code-block:: bash @@ -179,7 +162,7 @@ that relate to user retirement. - ``/admin/user_api/retirementstate/`` - Represents the table of states defined in ``RETIREMENT_STATES`` and populated with ``populate_retirement_states``. - * - User Retirement Requests + * - User Retirement Requests - ``/admin/user_api/userretirementrequest/`` - Represents the table that tracks the user IDs of every learner who has ever requested account deletion. This table is primarily used for @@ -190,7 +173,7 @@ that relate to user retirement. In special cases where you may need to manually intervene with the pipeline, you can use the User Retirement Statuses management page to change the -state for an individual user. For more information about how to handle these +state for an individual user. For more information about how to handle these cases, see :ref:`handling-special-cases`. .. include:: ../../../../links/links.rst From 422ee541f7e2e7c31bc3a68b0d8a94654808e10d Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:37 +0000 Subject: [PATCH 04/11] Revert "fix: install dependencies" This reverts commit a5442b2409b0e896fd0bb0d2765a5cdcf593d161. --- .../units-test-scripts-user-retirement.yml | 1 - scripts/user_retirement/requirements/base.in | 1 - scripts/user_retirement/requirements/base.txt | 1461 +---------------- .../user_retirement/requirements/testing.txt | 1278 +------------- 4 files changed, 52 insertions(+), 2689 deletions(-) diff --git a/.github/workflows/units-test-scripts-user-retirement.yml b/.github/workflows/units-test-scripts-user-retirement.yml index e9b7c84c8ae4..2e866506750b 100644 --- a/.github/workflows/units-test-scripts-user-retirement.yml +++ b/.github/workflows/units-test-scripts-user-retirement.yml @@ -26,7 +26,6 @@ jobs: - name: Install dependencies run: | - sudo apt-get update && sudo apt-get install libxmlsec1-dev python -m pip install --upgrade pip pip install -r scripts/user_retirement/requirements/testing.txt diff --git a/scripts/user_retirement/requirements/base.in b/scripts/user_retirement/requirements/base.in index ee037a58b528..d0bdab9082a5 100644 --- a/scripts/user_retirement/requirements/base.in +++ b/scripts/user_retirement/requirements/base.in @@ -1,5 +1,4 @@ -c ../../../requirements/constraints.txt --r ../../../requirements/edx/base.txt boto3 click diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index b0a649c6754c..47e6e79c2240 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -4,1545 +4,168 @@ # # make upgrade # --e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -acid-xblock==0.3.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -aiohappyeyeballs==2.3.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp -aiohttp==3.10.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # geoip2 - # openai -aiosignal==1.3.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp -algoliasearch==3.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -amqp==5.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # kombu -analytics-python==1.4.post1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -aniso8601==9.0.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-tincan-py35 -annotated-types==0.7.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pydantic -appdirs==1.4.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # fs asgiref==3.8.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django - # django-cors-headers - # django-countries -asn1crypto==1.5.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # snowflake-connector-python + # via django attrs==24.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp - # edx-ace - # jsonschema - # lti-consumer-xblock - # openedx-events - # openedx-learning - # referencing - # zeep -babel==2.15.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # enmerkar - # enmerkar-underscore -backoff==1.10.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # analytics-python -bcrypt==4.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # paramiko -beautifulsoup4==4.12.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pynliner -billiard==4.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery -bleach[css]==6.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # lti-consumer-xblock - # openedx-django-wiki - # ora2 - # xblock-drag-and-drop-v2 - # xblock-poll -boto==2.49.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via zeep +backoff==2.2.1 + # via -r scripts/user_retirement/requirements/base.in boto3==1.34.154 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # django-ses - # fs-s3fs - # ora2 + # via -r scripts/user_retirement/requirements/base.in botocore==1.34.154 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # boto3 # s3transfer -bridgekeeper==0.9 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -cachecontrol==0.14.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # firebase-admin cachetools==5.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-auth -camel-converter[pydantic]==3.1.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # meilisearch -celery==5.4.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-celery-results - # django-user-tasks - # edx-celeryutils - # edx-enterprise - # event-tracking - # openedx-learning + # via google-auth certifi==2024.7.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # elasticsearch - # py2neo - # requests - # snowflake-connector-python + # via requests cffi==1.17.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # cryptography # pynacl - # snowflake-connector-python -chardet==5.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pysrt charset-normalizer==2.0.12 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # requests - # snowflake-connector-python -chem==1.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt click==8.1.6 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # -r scripts/user_retirement/requirements/base.in - # celery - # click-didyoumean - # click-plugins - # click-repl - # code-annotations # edx-django-utils - # nltk - # user-util -click-didyoumean==0.3.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery -click-plugins==1.1.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery -click-repl==0.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery -code-annotations==1.8.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-toggles -codejail-includes==1.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -crowdsourcehinter-xblock==0.7 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -cryptography==42.0.8 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-fernet-fields-v2 - # edx-enterprise - # jwcrypto - # optimizely-sdk - # paramiko - # pgpy - # pyjwt - # pyopenssl - # snowflake-connector-python - # social-auth-core -cssutils==2.11.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pynliner -defusedxml==0.7.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # djangorestframework-xml - # ora2 - # python3-openid - # social-auth-core +cryptography==43.0.0 + # via pyjwt django==4.2.15 # via # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-appconf - # django-celery-results - # django-classy-tags - # django-config-models - # django-cors-headers # django-crum - # django-fernet-fields-v2 - # django-filter - # django-js-asset - # django-method-override - # django-model-utils - # django-multi-email-field - # django-mysql - # django-oauth-toolkit - # django-push-notifications - # django-sekizai - # django-ses - # django-statici18n - # django-storages - # django-user-tasks # django-waffle - # djangorestframework - # done-xblock - # drf-jwt - # drf-spectacular - # drf-yasg - # edx-ace - # edx-api-doc-tools - # edx-auth-backends - # edx-bulk-grades - # edx-celeryutils - # edx-completion - # edx-django-release-util - # edx-django-sites-extensions # edx-django-utils - # edx-drf-extensions - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-i18n-tools - # edx-milestones - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-search - # edx-submissions - # edx-toggles - # edx-token-utils - # edx-when - # edxval - # enmerkar - # enmerkar-underscore - # event-tracking - # help-tokens - # jsonfield - # lti-consumer-xblock - # openedx-django-pyfs - # openedx-django-wiki - # openedx-events - # openedx-filters - # openedx-learning - # ora2 - # social-auth-app-django - # super-csv - # xblock-google-drive - # xss-utils -django-appconf==1.0.6 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-statici18n -django-cache-memoize==0.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -django-celery-results==2.5.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-classy-tags==4.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-sekizai -django-config-models==2.7.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-name-affirmation - # lti-consumer-xblock -django-cors-headers==4.4.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-countries==7.6.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise django-crum==0.7.9 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-django-utils - # edx-enterprise - # edx-proctoring - # edx-rbac - # edx-toggles - # super-csv -django-fernet-fields-v2==0.9 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -django-filter==24.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # lti-consumer-xblock -django-ipware==7.0.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-proctoring -django-js-asset==2.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-mptt -django-method-override==1.0.4 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-model-utils==4.5.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-user-tasks - # edx-bulk-grades - # edx-celeryutils - # edx-completion - # edx-enterprise - # edx-milestones - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-submissions - # edx-when - # edxval - # ora2 - # super-csv -django-mptt==0.16.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-django-wiki -django-multi-email-field==0.7.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -django-mysql==4.14.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-oauth-toolkit==1.7.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -django-object-actions==4.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -django-pipeline==3.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-push-notifications==3.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-ace -django-ratelimit==4.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-sekizai==4.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-django-wiki -django-ses==4.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -django-simple-history==3.4.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # ora2 -django-statici18n==2.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # lti-consumer-xblock - # xblock-drag-and-drop-v2 - # xblock-poll -django-storages==1.14.3 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edxval -django-user-tasks==3.2.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via edx-django-utils django-waffle==4.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-django-utils - # edx-drf-extensions - # edx-enterprise - # edx-proctoring - # edx-toggles -django-webpack-loader==0.7.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-proctoring -djangorestframework==3.14.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-config-models - # django-user-tasks - # drf-jwt - # drf-spectacular - # drf-yasg - # edx-api-doc-tools - # edx-completion - # edx-drf-extensions - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-submissions - # openedx-learning - # ora2 - # super-csv -djangorestframework-xml==2.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -dnspython==2.6.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pymongo -done-xblock==2.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -drf-jwt==1.19.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-drf-extensions -drf-spectacular==0.27.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -drf-yasg==1.21.7 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-user-tasks - # edx-api-doc-tools -edx-ace==1.11.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-api-doc-tools==1.8.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-name-affirmation -edx-auth-backends==4.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-braze-client==0.2.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -edx-bulk-grades==1.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # staff-graded-xblock -edx-ccx-keys==1.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # lti-consumer-xblock - # openedx-events -edx-celeryutils==1.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-name-affirmation - # super-csv -edx-codejail==3.4.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-completion==4.6.7 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-django-release-util==1.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-submissions - # edxval -edx-django-sites-extensions==4.2.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via edx-django-utils edx-django-utils==5.15.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-config-models - # edx-ace - # edx-drf-extensions - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-name-affirmation - # edx-rest-api-client - # edx-toggles - # edx-when - # event-tracking - # openedx-events - # ora2 - # super-csv -edx-drf-extensions==10.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-completion - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-when - # edxval - # openedx-learning -edx-enterprise==4.23.4 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-event-bus-kafka==5.8.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-event-bus-redis==0.5.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-i18n-tools==1.5.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 -edx-milestones==0.6.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-name-affirmation==2.3.7 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-opaque-keys[django]==2.10.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-bulk-grades - # edx-ccx-keys - # edx-completion - # edx-drf-extensions - # edx-enterprise - # edx-milestones - # edx-organizations - # edx-proctoring - # edx-when - # lti-consumer-xblock - # openedx-events - # ora2 -edx-organizations==6.13.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-proctoring==4.18.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-proctoring-proctortrack -edx-rbac==1.9.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise + # via edx-rest-api-client edx-rest-api-client==5.7.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # edx-enterprise - # edx-proctoring -edx-search==4.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-sga==0.25.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-submissions==3.7.6 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 -edx-tincan-py35==1.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -edx-toggles==5.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-completion - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-name-affirmation - # edx-search - # edxval - # event-tracking - # ora2 -edx-token-utils==0.2.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -edx-when==2.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-proctoring -edxval==2.5.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -elasticsearch==7.13.4 - # via - # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-search -enmerkar==0.7.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # enmerkar-underscore -enmerkar-underscore==2.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -event-tracking==3.0.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-completion - # edx-proctoring - # edx-search -fastavro==1.9.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-events -filelock==3.15.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # snowflake-connector-python -firebase-admin==6.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-ace -frozenlist==1.4.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp - # aiosignal -fs==2.0.27 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # fs-s3fs - # openedx-django-pyfs - # xblock -fs-s3fs==0.1.8 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-django-pyfs -future==1.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pyjwkest -geoip2==4.8.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -glob2==0.7 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -google-api-core[grpc]==2.19.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # firebase-admin - # google-api-python-client - # google-cloud-core - # google-cloud-firestore - # google-cloud-storage + # via -r scripts/user_retirement/requirements/base.in +google-api-core==2.19.1 + # via google-api-python-client google-api-python-client==2.139.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # firebase-admin + # via -r scripts/user_retirement/requirements/base.in google-auth==2.32.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # google-api-core # google-api-python-client # google-auth-httplib2 - # google-cloud-core - # google-cloud-firestore - # google-cloud-storage google-auth-httplib2==0.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-api-python-client -google-cloud-core==2.4.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-cloud-firestore - # google-cloud-storage -google-cloud-firestore==2.17.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # firebase-admin -google-cloud-storage==2.18.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # firebase-admin -google-crc32c==1.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.7.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-cloud-storage + # via google-api-python-client googleapis-common-protos==1.63.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-api-core - # grpcio-status -grpcio==1.65.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-api-core - # grpcio-status -grpcio-status==1.62.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-api-core -gunicorn==22.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -help-tokens==2.4.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -html5lib==1.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 + # via google-api-core httplib2==0.22.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # google-api-python-client # google-auth-httplib2 -icalendar==5.0.13 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt idna==3.7 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # optimizely-sdk - # requests - # snowflake-connector-python - # yarl -importlib-metadata==6.11.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -inflection==0.5.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # drf-spectacular - # drf-yasg -interchange==2021.0.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # py2neo -ipaddress==1.0.23 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via requests isodate==0.6.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # python3-saml - # zeep + # via zeep jenkinsapi==0.3.13 # via -r scripts/user_retirement/requirements/base.in -jinja2==3.1.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # code-annotations jmespath==1.0.1 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # boto3 # botocore -joblib==1.4.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # nltk -jsondiff==2.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -jsonfield==3.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-celeryutils - # edx-enterprise - # edx-proctoring - # edx-submissions - # lti-consumer-xblock - # ora2 -jsonschema==4.23.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # drf-spectacular - # optimizely-sdk -jsonschema-specifications==2023.12.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # jsonschema -jwcrypto==1.5.6 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-oauth-toolkit - # pylti1p3 -kombu==5.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery -laboratory==1.0.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -lazy==1.6 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # acid-xblock - # lti-consumer-xblock - # ora2 - # xblock -libsass==0.10.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -loremipsum==1.0.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 -lti-consumer-xblock==9.11.3 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt lxml==4.9.4 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-i18n-tools - # edxval - # lti-consumer-xblock - # olxcleaner - # openedx-calc - # ora2 - # python3-saml - # xblock - # xmlsec # zeep -mailsnake==1.6.4 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -mako==1.3.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # acid-xblock - # lti-consumer-xblock - # xblock - # xblock-utils -markdown==3.3.7 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-django-wiki - # staff-graded-xblock - # xblock-poll -markupsafe==2.1.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # chem - # jinja2 - # mako - # openedx-calc - # xblock -maxminddb==2.6.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # geoip2 -meilisearch==0.31.4 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -mock==5.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -mongoengine==0.28.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -monotonic==1.6 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # analytics-python - # py2neo more-itertools==10.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # cssutils - # simple-salesforce -mpmath==1.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # sympy -msgpack==1.0.8 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # cachecontrol -multidict==6.0.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp - # yarl -mysqlclient==2.2.4 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via simple-salesforce newrelic==9.12.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-django-utils -nh3==0.2.18 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -nltk==3.8.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # chem -nodeenv==1.9.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -numpy==1.26.4 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # chem - # openedx-calc - # scipy - # shapely -oauthlib==3.2.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-oauth-toolkit - # lti-consumer-xblock - # requests-oauthlib - # social-auth-core -olxcleaner==0.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openai==0.28.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -openedx-atlas==0.6.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openedx-calc==3.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openedx-django-pyfs==3.6.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # lti-consumer-xblock - # xblock -openedx-django-require==2.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openedx-django-wiki==2.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openedx-events==9.11.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-event-bus-kafka - # edx-event-bus-redis - # event-tracking - # ora2 -openedx-filters==1.9.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # lti-consumer-xblock - # ora2 -openedx-learning==0.10.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -openedx-mongodbproxy==0.2.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -optimizely-sdk==4.1.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -ora2==6.11.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -packaging==24.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # drf-yasg - # gunicorn - # py2neo - # snowflake-connector-python -pansi==2020.7.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # py2neo -paramiko==3.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -path==16.11.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-i18n-tools - # path-py -path-py==12.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # ora2 - # staff-graded-xblock -paver==1.3.4 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via edx-django-utils pbr==6.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # stevedore -pgpy==0.6.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -piexif==1.1.3 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -pillow==10.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-organizations - # edxval + # via stevedore platformdirs==4.2.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # snowflake-connector-python - # zeep -polib==1.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-i18n-tools -prompt-toolkit==3.0.47 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # click-repl + # via zeep proto-plus==1.24.0 + # via google-api-core +protobuf==5.27.3 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-api-core - # google-cloud-firestore -protobuf==4.25.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # google-api-core - # google-cloud-firestore # googleapis-common-protos - # grpcio-status # proto-plus psutil==6.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-django-utils -py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via edx-django-utils pyasn1==0.6.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pgpy # pyasn1-modules # rsa pyasn1-modules==0.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-auth -pycountry==24.6.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via google-auth pycparser==2.22 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # cffi -pycryptodomex==3.20.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-proctoring - # lti-consumer-xblock - # pyjwkest -pydantic==2.8.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # camel-converter -pydantic-core==2.20.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # pydantic -pygments==2.18.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # py2neo -pyjwkest==1.4.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-token-utils - # lti-consumer-xblock + # via cffi pyjwt[crypto]==2.9.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # drf-jwt - # edx-auth-backends - # edx-drf-extensions - # edx-proctoring # edx-rest-api-client - # firebase-admin - # pylti1p3 # simple-salesforce - # snowflake-connector-python - # social-auth-core -pylatexenc==2.10 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # olxcleaner -pylti1p3==2.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -pymemcache==4.0.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -pymongo==4.4.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-opaque-keys - # event-tracking - # mongoengine - # openedx-mongodbproxy pynacl==1.5.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-django-utils - # paramiko -pynliner==0.8.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -pyopenssl==24.2.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # optimizely-sdk - # snowflake-connector-python + # via edx-django-utils pyparsing==3.1.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # chem - # httplib2 - # openedx-calc -pyrsistent==0.20.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # optimizely-sdk -pysrt==1.1.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edxval + # via httplib2 python-dateutil==2.9.0.post0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # analytics-python - # botocore - # celery - # edx-ace - # edx-enterprise - # edx-proctoring - # icalendar - # olxcleaner - # ora2 - # xblock -python-ipware==3.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-ipware -python-memcached==1.62 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -python-slugify==8.0.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # code-annotations -python-swiftclient==4.6.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 -python3-openid==3.2.0 ; python_version >= "3" - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # social-auth-core -python3-saml==1.16.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via botocore pytz==2024.1 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-ses - # djangorestframework - # drf-yasg - # edx-completion - # edx-enterprise - # edx-proctoring - # edx-submissions - # edx-tincan-py35 - # event-tracking - # fs - # icalendar - # interchange # jenkinsapi - # olxcleaner - # ora2 - # snowflake-connector-python - # xblock # zeep -pyuca==1.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt pyyaml==6.0.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # code-annotations - # drf-spectacular - # drf-yasg - # edx-django-release-util - # edx-i18n-tools - # jsondiff - # xblock -random2==1.0.2 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -recommender-xblock==2.2.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -redis==5.0.8 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # walrus -referencing==0.35.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # jsonschema - # jsonschema-specifications -regex==2024.7.24 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # nltk + # via -r scripts/user_retirement/requirements/base.in requests==2.32.3 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # -r scripts/user_retirement/requirements/base.in - # algoliasearch - # analytics-python - # cachecontrol - # django-oauth-toolkit - # edx-bulk-grades - # edx-drf-extensions - # edx-enterprise # edx-rest-api-client - # geoip2 # google-api-core - # google-cloud-storage # jenkinsapi - # mailsnake - # meilisearch - # openai - # optimizely-sdk - # pyjwkest - # pylti1p3 - # python-swiftclient # requests-file - # requests-oauthlib # requests-toolbelt - # sailthru-client # simple-salesforce # slumber - # snowflake-connector-python - # social-auth-core - # xblock-google-drive # zeep requests-file==2.1.0 # via zeep -requests-oauthlib==2.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # social-auth-core requests-toolbelt==1.0.0 # via zeep -rpds-py==0.20.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # jsonschema - # referencing rsa==4.9 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # google-auth -rules==3.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise - # edx-proctoring - # openedx-learning + # via google-auth s3transfer==0.10.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # boto3 -sailthru-client==2.2.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-ace -scipy==1.14.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # chem - # openedx-calc -semantic-version==2.10.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-drf-extensions -shapely==2.0.5 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via boto3 simple-salesforce==1.12.6 # via -r scripts/user_retirement/requirements/base.in simplejson==3.19.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # sailthru-client - # super-csv - # xblock - # xblock-utils + # via -r scripts/user_retirement/requirements/base.in six==1.16.0 # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # analytics-python - # bleach - # codejail-includes - # crowdsourcehinter-xblock - # edx-ace - # edx-auth-backends - # edx-ccx-keys - # edx-codejail - # edx-django-release-util - # edx-milestones - # edx-rbac - # event-tracking - # fs - # fs-s3fs - # html5lib - # interchange # isodate # jenkinsapi - # libsass - # optimizely-sdk - # pansi - # paver - # py2neo - # pyjwkest # python-dateutil slumber==0.7.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-bulk-grades - # edx-enterprise - # edx-rest-api-client -snowflake-connector-python==3.12.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -social-auth-app-django==5.4.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-auth-backends -social-auth-core==4.5.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-auth-backends - # social-auth-app-django -sorl-thumbnail==12.10.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-django-wiki -sortedcontainers==2.4.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # snowflake-connector-python -soupsieve==2.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # beautifulsoup4 + # via edx-rest-api-client sqlparse==0.5.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django -staff-graded-xblock==2.3.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt + # via django stevedore==5.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # code-annotations - # edx-ace - # edx-django-utils - # edx-enterprise - # edx-opaque-keys -super-csv==3.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-bulk-grades -sympy==1.13.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # openedx-calc -testfixtures==8.3.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-enterprise -text-unidecode==1.3 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # python-slugify -tinycss2==1.2.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # bleach -tomlkit==0.13.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # snowflake-connector-python -tqdm==4.66.5 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # nltk - # openai + # via edx-django-utils typing-extensions==4.12.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # django-countries - # edx-opaque-keys - # jwcrypto - # pydantic - # pydantic-core - # pylti1p3 - # simple-salesforce - # snowflake-connector-python -tzdata==2024.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # celery + # via simple-salesforce unicodecsv==0.14.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # -r scripts/user_retirement/requirements/base.in - # edx-enterprise + # via -r scripts/user_retirement/requirements/base.in uritemplate==4.1.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # drf-spectacular - # drf-yasg - # google-api-python-client + # via google-api-python-client urllib3==1.26.19 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt # botocore - # elasticsearch - # py2neo # requests -user-util==1.1.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -vine==5.1.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # amqp - # celery - # kombu -voluptuous==0.15.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # ora2 -walrus==0.9.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-event-bus-redis -watchdog==4.0.1 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -wcwidth==0.2.13 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # prompt-toolkit -web-fragments==2.2.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # crowdsourcehinter-xblock - # edx-sga - # staff-graded-xblock - # xblock - # xblock-utils -webencodings==0.5.1 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # bleach - # html5lib - # tinycss2 -webob==1.8.7 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # xblock -wrapt==1.16.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -xblock[django]==4.0.1 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # acid-xblock - # crowdsourcehinter-xblock - # done-xblock - # edx-completion - # edx-sga - # edx-when - # lti-consumer-xblock - # ora2 - # staff-graded-xblock - # xblock-drag-and-drop-v2 - # xblock-google-drive - # xblock-utils -xblock-drag-and-drop-v2==4.0.3 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -xblock-google-drive==0.7.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -xblock-poll==1.14.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -xblock-utils==4.0.0 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # edx-sga - # xblock-poll -xmlsec==1.3.13 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # python3-saml -xss-utils==0.6.0 - # via -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt -yarl==1.9.4 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # aiohttp zeep==4.2.1 # via simple-salesforce -zipp==3.19.2 - # via - # -r scripts/user_retirement/requirements/../../../requirements/edx/base.txt - # importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index 3fb96783ca9d..006eabeef436 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -4,1256 +4,219 @@ # # make upgrade # --e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack - # via -r scripts/user_retirement/requirements/base.txt -acid-xblock==0.3.1 - # via -r scripts/user_retirement/requirements/base.txt -aiohappyeyeballs==2.3.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # aiohttp -aiohttp==3.10.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # geoip2 - # openai -aiosignal==1.3.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # aiohttp -algoliasearch==3.0.0 - # via -r scripts/user_retirement/requirements/base.txt -amqp==5.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # kombu -analytics-python==1.4.post1 - # via -r scripts/user_retirement/requirements/base.txt -aniso8601==9.0.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-tincan-py35 -annotated-types==0.7.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # pydantic -appdirs==1.4.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # fs asgiref==3.8.1 # via # -r scripts/user_retirement/requirements/base.txt # django - # django-cors-headers - # django-countries -asn1crypto==1.5.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # snowflake-connector-python attrs==24.2.0 # via # -r scripts/user_retirement/requirements/base.txt - # aiohttp - # edx-ace - # jsonschema - # lti-consumer-xblock - # openedx-events - # openedx-learning - # referencing # zeep -babel==2.15.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # enmerkar - # enmerkar-underscore -backoff==1.10.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # analytics-python -bcrypt==4.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # paramiko -beautifulsoup4==4.12.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # pynliner -billiard==4.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery -bleach[css]==6.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # lti-consumer-xblock - # openedx-django-wiki - # ora2 - # xblock-drag-and-drop-v2 - # xblock-poll -boto==2.49.0 +backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.txt boto3==1.34.154 # via # -r scripts/user_retirement/requirements/base.txt - # django-ses - # fs-s3fs # moto - # ora2 botocore==1.34.154 # via # -r scripts/user_retirement/requirements/base.txt # boto3 # moto # s3transfer -bridgekeeper==0.9 - # via -r scripts/user_retirement/requirements/base.txt -cachecontrol==0.14.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # firebase-admin cachetools==5.4.0 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -camel-converter[pydantic]==3.1.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # meilisearch -celery==5.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-celery-results - # django-user-tasks - # edx-celeryutils - # edx-enterprise - # event-tracking - # openedx-learning certifi==2024.7.4 # via # -r scripts/user_retirement/requirements/base.txt - # elasticsearch - # py2neo # requests - # snowflake-connector-python cffi==1.17.0 # via # -r scripts/user_retirement/requirements/base.txt # cryptography # pynacl - # snowflake-connector-python -chardet==5.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # pysrt charset-normalizer==2.0.12 # via # -r scripts/user_retirement/requirements/base.txt # requests - # snowflake-connector-python -chem==1.3.0 - # via -r scripts/user_retirement/requirements/base.txt click==8.1.6 # via # -r scripts/user_retirement/requirements/base.txt - # celery - # click-didyoumean - # click-plugins - # click-repl - # code-annotations # edx-django-utils - # nltk - # user-util -click-didyoumean==0.3.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery -click-plugins==1.1.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery -click-repl==0.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery -code-annotations==1.8.0 +cryptography==43.0.0 # via # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-toggles -codejail-includes==1.0.0 - # via -r scripts/user_retirement/requirements/base.txt -crowdsourcehinter-xblock==0.7 - # via -r scripts/user_retirement/requirements/base.txt -cryptography==42.0.8 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-fernet-fields-v2 - # edx-enterprise - # jwcrypto # moto - # optimizely-sdk - # paramiko - # pgpy # pyjwt - # pyopenssl - # snowflake-connector-python - # social-auth-core -cssutils==2.11.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # pynliner ddt==1.7.2 # via -r scripts/user_retirement/requirements/testing.in -defusedxml==0.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # djangorestframework-xml - # ora2 - # python3-openid - # social-auth-core django==4.2.15 # via # -r scripts/user_retirement/requirements/base.txt - # django-appconf - # django-celery-results - # django-classy-tags - # django-config-models - # django-cors-headers # django-crum - # django-fernet-fields-v2 - # django-filter - # django-js-asset - # django-method-override - # django-model-utils - # django-multi-email-field - # django-mysql - # django-oauth-toolkit - # django-push-notifications - # django-sekizai - # django-ses - # django-statici18n - # django-storages - # django-user-tasks # django-waffle - # djangorestframework - # done-xblock - # drf-jwt - # drf-spectacular - # drf-yasg - # edx-ace - # edx-api-doc-tools - # edx-auth-backends - # edx-bulk-grades - # edx-celeryutils - # edx-completion - # edx-django-release-util - # edx-django-sites-extensions # edx-django-utils - # edx-drf-extensions - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-i18n-tools - # edx-milestones - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-search - # edx-submissions - # edx-toggles - # edx-token-utils - # edx-when - # edxval - # enmerkar - # enmerkar-underscore - # event-tracking - # help-tokens - # jsonfield - # lti-consumer-xblock - # openedx-django-pyfs - # openedx-django-wiki - # openedx-events - # openedx-filters - # openedx-learning - # ora2 - # social-auth-app-django - # super-csv - # xblock-google-drive - # xss-utils -django-appconf==1.0.6 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-statici18n -django-cache-memoize==0.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -django-celery-results==2.5.1 - # via -r scripts/user_retirement/requirements/base.txt -django-classy-tags==4.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-sekizai -django-config-models==2.7.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-name-affirmation - # lti-consumer-xblock -django-cors-headers==4.4.0 - # via -r scripts/user_retirement/requirements/base.txt -django-countries==7.6.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise django-crum==0.7.9 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils - # edx-enterprise - # edx-proctoring - # edx-rbac - # edx-toggles - # super-csv -django-fernet-fields-v2==0.9 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -django-filter==24.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # lti-consumer-xblock -django-ipware==7.0.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-proctoring -django-js-asset==2.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-mptt -django-method-override==1.0.4 - # via -r scripts/user_retirement/requirements/base.txt -django-model-utils==4.5.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-user-tasks - # edx-bulk-grades - # edx-celeryutils - # edx-completion - # edx-enterprise - # edx-milestones - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-submissions - # edx-when - # edxval - # ora2 - # super-csv -django-mptt==0.16.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-django-wiki -django-multi-email-field==0.7.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -django-mysql==4.14.0 - # via -r scripts/user_retirement/requirements/base.txt -django-oauth-toolkit==1.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -django-object-actions==4.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -django-pipeline==3.1.0 - # via -r scripts/user_retirement/requirements/base.txt -django-push-notifications==3.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-ace -django-ratelimit==4.1.0 - # via -r scripts/user_retirement/requirements/base.txt -django-sekizai==4.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-django-wiki -django-ses==4.1.0 - # via -r scripts/user_retirement/requirements/base.txt -django-simple-history==3.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # ora2 -django-statici18n==2.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # lti-consumer-xblock - # xblock-drag-and-drop-v2 - # xblock-poll -django-storages==1.14.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # edxval -django-user-tasks==3.2.0 - # via -r scripts/user_retirement/requirements/base.txt django-waffle==4.1.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils - # edx-drf-extensions - # edx-enterprise - # edx-proctoring - # edx-toggles -django-webpack-loader==0.7.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-proctoring -djangorestframework==3.14.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-config-models - # django-user-tasks - # drf-jwt - # drf-spectacular - # drf-yasg - # edx-api-doc-tools - # edx-completion - # edx-drf-extensions - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-submissions - # openedx-learning - # ora2 - # super-csv -djangorestframework-xml==2.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -dnspython==2.6.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # pymongo -done-xblock==2.3.0 - # via -r scripts/user_retirement/requirements/base.txt -drf-jwt==1.19.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-drf-extensions -drf-spectacular==0.27.2 - # via -r scripts/user_retirement/requirements/base.txt -drf-yasg==1.21.7 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-user-tasks - # edx-api-doc-tools -edx-ace==1.11.1 - # via -r scripts/user_retirement/requirements/base.txt -edx-api-doc-tools==1.8.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-name-affirmation -edx-auth-backends==4.3.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-braze-client==0.2.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -edx-bulk-grades==1.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # staff-graded-xblock -edx-ccx-keys==1.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # lti-consumer-xblock - # openedx-events -edx-celeryutils==1.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-name-affirmation - # super-csv -edx-codejail==3.4.1 - # via -r scripts/user_retirement/requirements/base.txt -edx-completion==4.6.7 - # via -r scripts/user_retirement/requirements/base.txt -edx-django-release-util==1.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-submissions - # edxval -edx-django-sites-extensions==4.2.0 - # via -r scripts/user_retirement/requirements/base.txt edx-django-utils==5.15.0 # via # -r scripts/user_retirement/requirements/base.txt - # django-config-models - # edx-ace - # edx-drf-extensions - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-name-affirmation # edx-rest-api-client - # edx-toggles - # edx-when - # event-tracking - # openedx-events - # ora2 - # super-csv -edx-drf-extensions==10.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-completion - # edx-enterprise - # edx-name-affirmation - # edx-organizations - # edx-proctoring - # edx-rbac - # edx-when - # edxval - # openedx-learning -edx-enterprise==4.23.4 - # via -r scripts/user_retirement/requirements/base.txt -edx-event-bus-kafka==5.8.1 - # via -r scripts/user_retirement/requirements/base.txt -edx-event-bus-redis==0.5.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-i18n-tools==1.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 -edx-milestones==0.6.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-name-affirmation==2.3.7 - # via -r scripts/user_retirement/requirements/base.txt -edx-opaque-keys[django]==2.10.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-bulk-grades - # edx-ccx-keys - # edx-completion - # edx-drf-extensions - # edx-enterprise - # edx-milestones - # edx-organizations - # edx-proctoring - # edx-when - # lti-consumer-xblock - # openedx-events - # ora2 -edx-organizations==6.13.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-proctoring==4.18.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-proctoring-proctortrack -edx-rbac==1.9.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise edx-rest-api-client==5.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-proctoring -edx-search==4.0.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-sga==0.25.0 - # via -r scripts/user_retirement/requirements/base.txt -edx-submissions==3.7.6 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 -edx-tincan-py35==1.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -edx-toggles==5.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-completion - # edx-enterprise - # edx-event-bus-kafka - # edx-event-bus-redis - # edx-name-affirmation - # edx-search - # edxval - # event-tracking - # ora2 -edx-token-utils==0.2.1 - # via -r scripts/user_retirement/requirements/base.txt -edx-when==2.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-proctoring -edxval==2.5.0 # via -r scripts/user_retirement/requirements/base.txt -elasticsearch==7.13.4 +google-api-core==2.19.1 # via # -r scripts/user_retirement/requirements/base.txt - # edx-search -enmerkar==0.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # enmerkar-underscore -enmerkar-underscore==2.3.0 - # via -r scripts/user_retirement/requirements/base.txt -event-tracking==3.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-completion - # edx-proctoring - # edx-search -fastavro==1.9.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-events -filelock==3.15.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # snowflake-connector-python -firebase-admin==6.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-ace -frozenlist==1.4.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # aiohttp - # aiosignal -fs==2.0.27 - # via - # -r scripts/user_retirement/requirements/base.txt - # fs-s3fs - # openedx-django-pyfs - # xblock -fs-s3fs==0.1.8 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-django-pyfs -future==1.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # pyjwkest -geoip2==4.8.0 - # via -r scripts/user_retirement/requirements/base.txt -glob2==0.7 - # via -r scripts/user_retirement/requirements/base.txt -google-api-core[grpc]==2.19.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # firebase-admin # google-api-python-client - # google-cloud-core - # google-cloud-firestore - # google-cloud-storage google-api-python-client==2.139.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # firebase-admin + # via -r scripts/user_retirement/requirements/base.txt google-auth==2.32.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core # google-api-python-client # google-auth-httplib2 - # google-cloud-core - # google-cloud-firestore - # google-cloud-storage google-auth-httplib2==0.2.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-python-client -google-cloud-core==2.4.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-cloud-firestore - # google-cloud-storage -google-cloud-firestore==2.17.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # firebase-admin -google-cloud-storage==2.18.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # firebase-admin -google-crc32c==1.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-cloud-storage - # google-resumable-media -google-resumable-media==2.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-cloud-storage googleapis-common-protos==1.63.2 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core - # grpcio-status -grpcio==1.65.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-core - # grpcio-status -grpcio-status==1.62.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-core -gunicorn==22.0.0 - # via -r scripts/user_retirement/requirements/base.txt -help-tokens==2.4.0 - # via -r scripts/user_retirement/requirements/base.txt -html5lib==1.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 httplib2==0.22.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-python-client # google-auth-httplib2 -icalendar==5.0.13 - # via -r scripts/user_retirement/requirements/base.txt idna==3.7 # via # -r scripts/user_retirement/requirements/base.txt - # optimizely-sdk # requests - # snowflake-connector-python - # yarl -importlib-metadata==6.11.0 - # via -r scripts/user_retirement/requirements/base.txt -inflection==0.5.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # drf-spectacular - # drf-yasg iniconfig==2.0.0 # via pytest -interchange==2021.0.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # py2neo -ipaddress==1.0.23 - # via -r scripts/user_retirement/requirements/base.txt isodate==0.6.1 # via # -r scripts/user_retirement/requirements/base.txt - # python3-saml # zeep jenkinsapi==0.3.13 # via -r scripts/user_retirement/requirements/base.txt jinja2==3.1.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # code-annotations - # moto + # via moto jmespath==1.0.1 # via # -r scripts/user_retirement/requirements/base.txt # boto3 # botocore -joblib==1.4.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # nltk -jsondiff==2.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -jsonfield==3.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-celeryutils - # edx-enterprise - # edx-proctoring - # edx-submissions - # lti-consumer-xblock - # ora2 -jsonschema==4.23.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # drf-spectacular - # optimizely-sdk -jsonschema-specifications==2023.12.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # jsonschema -jwcrypto==1.5.6 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-oauth-toolkit - # pylti1p3 -kombu==5.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery -laboratory==1.0.2 - # via -r scripts/user_retirement/requirements/base.txt -lazy==1.6 - # via - # -r scripts/user_retirement/requirements/base.txt - # acid-xblock - # lti-consumer-xblock - # ora2 - # xblock -libsass==0.10.0 - # via -r scripts/user_retirement/requirements/base.txt -loremipsum==1.0.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 -lti-consumer-xblock==9.11.3 - # via -r scripts/user_retirement/requirements/base.txt lxml==4.9.4 # via # -r scripts/user_retirement/requirements/base.txt - # edx-i18n-tools - # edxval - # lti-consumer-xblock - # olxcleaner - # openedx-calc - # ora2 - # python3-saml - # xblock - # xmlsec # zeep -mailsnake==1.6.4 - # via -r scripts/user_retirement/requirements/base.txt -mako==1.3.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # acid-xblock - # lti-consumer-xblock - # xblock - # xblock-utils -markdown==3.3.7 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-django-wiki - # staff-graded-xblock - # xblock-poll markupsafe==2.1.5 # via - # -r scripts/user_retirement/requirements/base.txt - # chem # jinja2 - # mako - # openedx-calc # werkzeug - # xblock -maxminddb==2.6.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # geoip2 -meilisearch==0.31.4 - # via -r scripts/user_retirement/requirements/base.txt mock==5.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # -r scripts/user_retirement/requirements/testing.in -mongoengine==0.28.2 - # via -r scripts/user_retirement/requirements/base.txt -monotonic==1.6 - # via - # -r scripts/user_retirement/requirements/base.txt - # analytics-python - # py2neo + # via -r scripts/user_retirement/requirements/testing.in more-itertools==10.3.0 # via # -r scripts/user_retirement/requirements/base.txt - # cssutils # simple-salesforce moto==4.2.14 # via -r scripts/user_retirement/requirements/testing.in -mpmath==1.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # sympy -msgpack==1.0.8 - # via - # -r scripts/user_retirement/requirements/base.txt - # cachecontrol -multidict==6.0.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # aiohttp - # yarl -mysqlclient==2.2.4 - # via -r scripts/user_retirement/requirements/base.txt newrelic==9.12.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -nh3==0.2.18 - # via -r scripts/user_retirement/requirements/base.txt -nltk==3.8.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # chem -nodeenv==1.9.1 - # via -r scripts/user_retirement/requirements/base.txt -numpy==1.26.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # chem - # openedx-calc - # scipy - # shapely -oauthlib==3.2.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-oauth-toolkit - # lti-consumer-xblock - # requests-oauthlib - # social-auth-core -olxcleaner==0.3.0 - # via -r scripts/user_retirement/requirements/base.txt -openai==0.28.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -openedx-atlas==0.6.1 - # via -r scripts/user_retirement/requirements/base.txt -openedx-calc==3.1.0 - # via -r scripts/user_retirement/requirements/base.txt -openedx-django-pyfs==3.6.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # lti-consumer-xblock - # xblock -openedx-django-require==2.1.0 - # via -r scripts/user_retirement/requirements/base.txt -openedx-django-wiki==2.1.0 - # via -r scripts/user_retirement/requirements/base.txt -openedx-events==9.11.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-event-bus-kafka - # edx-event-bus-redis - # event-tracking - # ora2 -openedx-filters==1.9.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # lti-consumer-xblock - # ora2 -openedx-learning==0.10.1 - # via -r scripts/user_retirement/requirements/base.txt -openedx-mongodbproxy==0.2.1 - # via -r scripts/user_retirement/requirements/base.txt -optimizely-sdk==4.1.1 - # via -r scripts/user_retirement/requirements/base.txt -ora2==6.11.2 - # via -r scripts/user_retirement/requirements/base.txt packaging==24.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # drf-yasg - # gunicorn - # py2neo - # pytest - # snowflake-connector-python -pansi==2020.7.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # py2neo -paramiko==3.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -path==16.11.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-i18n-tools - # path-py -path-py==12.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # ora2 - # staff-graded-xblock -paver==1.3.4 - # via -r scripts/user_retirement/requirements/base.txt + # via pytest pbr==6.0.0 # via # -r scripts/user_retirement/requirements/base.txt # stevedore -pgpy==0.6.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -piexif==1.1.3 - # via -r scripts/user_retirement/requirements/base.txt -pillow==10.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-organizations - # edxval platformdirs==4.2.2 # via # -r scripts/user_retirement/requirements/base.txt - # snowflake-connector-python # zeep pluggy==1.5.0 # via pytest -polib==1.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-i18n-tools -prompt-toolkit==3.0.47 - # via - # -r scripts/user_retirement/requirements/base.txt - # click-repl proto-plus==1.24.0 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core - # google-cloud-firestore -protobuf==4.25.4 +protobuf==5.27.3 # via # -r scripts/user_retirement/requirements/base.txt # google-api-core - # google-cloud-firestore # googleapis-common-protos - # grpcio-status # proto-plus psutil==6.0.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz - # via -r scripts/user_retirement/requirements/base.txt pyasn1==0.6.0 # via # -r scripts/user_retirement/requirements/base.txt - # pgpy # pyasn1-modules # rsa pyasn1-modules==0.4.0 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -pycountry==24.6.1 - # via -r scripts/user_retirement/requirements/base.txt pycparser==2.22 # via # -r scripts/user_retirement/requirements/base.txt # cffi -pycryptodomex==3.20.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-proctoring - # lti-consumer-xblock - # pyjwkest -pydantic==2.8.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # camel-converter -pydantic-core==2.20.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # pydantic -pygments==2.18.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # py2neo -pyjwkest==1.4.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-token-utils - # lti-consumer-xblock pyjwt[crypto]==2.9.0 # via # -r scripts/user_retirement/requirements/base.txt - # drf-jwt - # edx-auth-backends - # edx-drf-extensions - # edx-proctoring # edx-rest-api-client - # firebase-admin - # pylti1p3 # simple-salesforce - # snowflake-connector-python - # social-auth-core -pylatexenc==2.10 - # via - # -r scripts/user_retirement/requirements/base.txt - # olxcleaner -pylti1p3==2.0.0 - # via -r scripts/user_retirement/requirements/base.txt -pymemcache==4.0.0 - # via -r scripts/user_retirement/requirements/base.txt -pymongo==4.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-opaque-keys - # event-tracking - # mongoengine - # openedx-mongodbproxy pynacl==1.5.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils - # paramiko -pynliner==0.8.0 - # via -r scripts/user_retirement/requirements/base.txt -pyopenssl==24.2.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # optimizely-sdk - # snowflake-connector-python pyparsing==3.1.2 # via # -r scripts/user_retirement/requirements/base.txt - # chem # httplib2 - # openedx-calc -pyrsistent==0.20.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # optimizely-sdk -pysrt==1.1.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # edxval pytest==8.3.2 # via -r scripts/user_retirement/requirements/testing.in python-dateutil==2.9.0.post0 # via # -r scripts/user_retirement/requirements/base.txt - # analytics-python # botocore - # celery - # edx-ace - # edx-enterprise - # edx-proctoring - # icalendar # moto - # olxcleaner - # ora2 - # xblock -python-ipware==3.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # django-ipware -python-memcached==1.62 - # via -r scripts/user_retirement/requirements/base.txt -python-slugify==8.0.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # code-annotations -python-swiftclient==4.6.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 -python3-openid==3.2.0 ; python_version >= "3" - # via - # -r scripts/user_retirement/requirements/base.txt - # social-auth-core -python3-saml==1.16.0 - # via -r scripts/user_retirement/requirements/base.txt pytz==2024.1 # via # -r scripts/user_retirement/requirements/base.txt - # django-ses - # djangorestframework - # drf-yasg - # edx-completion - # edx-enterprise - # edx-proctoring - # edx-submissions - # edx-tincan-py35 - # event-tracking - # fs - # icalendar - # interchange # jenkinsapi - # olxcleaner - # ora2 - # snowflake-connector-python - # xblock # zeep -pyuca==1.2 - # via -r scripts/user_retirement/requirements/base.txt pyyaml==6.0.1 # via # -r scripts/user_retirement/requirements/base.txt - # code-annotations - # drf-spectacular - # drf-yasg - # edx-django-release-util - # edx-i18n-tools - # jsondiff # responses - # xblock -random2==1.0.2 - # via -r scripts/user_retirement/requirements/base.txt -recommender-xblock==2.2.0 - # via -r scripts/user_retirement/requirements/base.txt -redis==5.0.8 - # via - # -r scripts/user_retirement/requirements/base.txt - # walrus -referencing==0.35.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # jsonschema - # jsonschema-specifications -regex==2024.7.24 - # via - # -r scripts/user_retirement/requirements/base.txt - # nltk requests==2.32.3 # via # -r scripts/user_retirement/requirements/base.txt - # algoliasearch - # analytics-python - # cachecontrol - # django-oauth-toolkit - # edx-bulk-grades - # edx-drf-extensions - # edx-enterprise # edx-rest-api-client - # geoip2 # google-api-core - # google-cloud-storage # jenkinsapi - # mailsnake - # meilisearch # moto - # openai - # optimizely-sdk - # pyjwkest - # pylti1p3 - # python-swiftclient # requests-file # requests-mock - # requests-oauthlib # requests-toolbelt # responses - # sailthru-client # simple-salesforce # slumber - # snowflake-connector-python - # social-auth-core - # xblock-google-drive # zeep requests-file==2.1.0 # via @@ -1261,10 +224,6 @@ requests-file==2.1.0 # zeep requests-mock==1.12.1 # via -r scripts/user_retirement/requirements/testing.in -requests-oauthlib==2.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # social-auth-core requests-toolbelt==1.0.0 # via # -r scripts/user_retirement/requirements/base.txt @@ -1273,274 +232,57 @@ responses==0.25.3 # via # -r scripts/user_retirement/requirements/testing.in # moto -rpds-py==0.20.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # jsonschema - # referencing rsa==4.9 # via # -r scripts/user_retirement/requirements/base.txt # google-auth -rules==3.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise - # edx-proctoring - # openedx-learning s3transfer==0.10.2 # via # -r scripts/user_retirement/requirements/base.txt # boto3 -sailthru-client==2.2.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-ace -scipy==1.14.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # chem - # openedx-calc -semantic-version==2.10.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-drf-extensions -shapely==2.0.5 - # via -r scripts/user_retirement/requirements/base.txt simple-salesforce==1.12.6 # via -r scripts/user_retirement/requirements/base.txt simplejson==3.19.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # sailthru-client - # super-csv - # xblock - # xblock-utils + # via -r scripts/user_retirement/requirements/base.txt six==1.16.0 # via # -r scripts/user_retirement/requirements/base.txt - # analytics-python - # bleach - # codejail-includes - # crowdsourcehinter-xblock - # edx-ace - # edx-auth-backends - # edx-ccx-keys - # edx-codejail - # edx-django-release-util - # edx-milestones - # edx-rbac - # event-tracking - # fs - # fs-s3fs - # html5lib - # interchange # isodate # jenkinsapi - # libsass - # optimizely-sdk - # pansi - # paver - # py2neo - # pyjwkest # python-dateutil slumber==0.7.1 # via # -r scripts/user_retirement/requirements/base.txt - # edx-bulk-grades - # edx-enterprise # edx-rest-api-client -snowflake-connector-python==3.12.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -social-auth-app-django==5.4.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-auth-backends -social-auth-core==4.5.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-auth-backends - # social-auth-app-django -sorl-thumbnail==12.10.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-django-wiki -sortedcontainers==2.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # snowflake-connector-python -soupsieve==2.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # beautifulsoup4 sqlparse==0.5.1 # via # -r scripts/user_retirement/requirements/base.txt # django -staff-graded-xblock==2.3.0 - # via -r scripts/user_retirement/requirements/base.txt stevedore==5.2.0 # via # -r scripts/user_retirement/requirements/base.txt - # code-annotations - # edx-ace # edx-django-utils - # edx-enterprise - # edx-opaque-keys -super-csv==3.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-bulk-grades -sympy==1.13.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # openedx-calc -testfixtures==8.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise -text-unidecode==1.3 - # via - # -r scripts/user_retirement/requirements/base.txt - # python-slugify -tinycss2==1.2.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # bleach -tomlkit==0.13.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # snowflake-connector-python -tqdm==4.66.5 - # via - # -r scripts/user_retirement/requirements/base.txt - # nltk - # openai typing-extensions==4.12.2 # via # -r scripts/user_retirement/requirements/base.txt - # django-countries - # edx-opaque-keys - # jwcrypto - # pydantic - # pydantic-core - # pylti1p3 # simple-salesforce - # snowflake-connector-python -tzdata==2024.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # celery unicodecsv==0.14.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-enterprise + # via -r scripts/user_retirement/requirements/base.txt uritemplate==4.1.1 # via # -r scripts/user_retirement/requirements/base.txt - # drf-spectacular - # drf-yasg # google-api-python-client urllib3==1.26.19 # via # -r scripts/user_retirement/requirements/base.txt # botocore - # elasticsearch - # py2neo # requests # responses -user-util==1.1.0 - # via -r scripts/user_retirement/requirements/base.txt -vine==5.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # amqp - # celery - # kombu -voluptuous==0.15.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # ora2 -walrus==0.9.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-event-bus-redis -watchdog==4.0.1 - # via -r scripts/user_retirement/requirements/base.txt -wcwidth==0.2.13 - # via - # -r scripts/user_retirement/requirements/base.txt - # prompt-toolkit -web-fragments==2.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # crowdsourcehinter-xblock - # edx-sga - # staff-graded-xblock - # xblock - # xblock-utils -webencodings==0.5.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # bleach - # html5lib - # tinycss2 -webob==1.8.7 - # via - # -r scripts/user_retirement/requirements/base.txt - # xblock werkzeug==3.0.3 # via moto -wrapt==1.16.0 - # via -r scripts/user_retirement/requirements/base.txt -xblock[django]==4.0.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # acid-xblock - # crowdsourcehinter-xblock - # done-xblock - # edx-completion - # edx-sga - # edx-when - # lti-consumer-xblock - # ora2 - # staff-graded-xblock - # xblock-drag-and-drop-v2 - # xblock-google-drive - # xblock-utils -xblock-drag-and-drop-v2==4.0.3 - # via -r scripts/user_retirement/requirements/base.txt -xblock-google-drive==0.7.0 - # via -r scripts/user_retirement/requirements/base.txt -xblock-poll==1.14.0 - # via -r scripts/user_retirement/requirements/base.txt -xblock-utils==4.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-sga - # xblock-poll -xmlsec==1.3.13 - # via - # -r scripts/user_retirement/requirements/base.txt - # python3-saml xmltodict==0.13.0 # via moto -xss-utils==0.6.0 - # via -r scripts/user_retirement/requirements/base.txt -yarl==1.9.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # aiohttp zeep==4.2.1 # via # -r scripts/user_retirement/requirements/base.txt # simple-salesforce -zipp==3.19.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# setuptools From c00a28c5f2476fee3d265d37db87560e822a6804 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:38 +0000 Subject: [PATCH 05/11] Revert "Revert "fix: dependencies"" This reverts commit 4cde950007b022718123f54a2685d74e956f527d. --- scripts/user_retirement/requirements/base.in | 3 + scripts/user_retirement/requirements/base.txt | 41 ++- .../user_retirement/requirements/testing.txt | 252 ++++++------------ 3 files changed, 128 insertions(+), 168 deletions(-) diff --git a/scripts/user_retirement/requirements/base.in b/scripts/user_retirement/requirements/base.in index d0bdab9082a5..a6bba5e983ac 100644 --- a/scripts/user_retirement/requirements/base.in +++ b/scripts/user_retirement/requirements/base.in @@ -1,12 +1,15 @@ -c ../../../requirements/constraints.txt boto3 +celery # required because we're using the LMS's settings file for config options click +defusedxml # required because we're using the LMS's settings file for config options pyyaml backoff requests edx-rest-api-client jenkinsapi +kombu # required because we're using the LMS's settings file for config options unicodecsv simplejson simple-salesforce diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index 47e6e79c2240..6213c57b2ba2 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -2,14 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# make upgrade +# pip-compile --output-file=scripts/user_retirement/requirements/base.txt scripts/user_retirement/requirements/base.in # +amqp==5.2.0 + # via kombu asgiref==3.8.1 # via django attrs==24.2.0 # via zeep backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.in +billiard==4.2.0 + # via celery boto3==1.34.154 # via -r scripts/user_retirement/requirements/base.in botocore==1.34.154 @@ -18,6 +22,10 @@ botocore==1.34.154 # s3transfer cachetools==5.4.0 # via google-auth +celery==5.4.0 + # via + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.in certifi==2024.7.4 # via requests cffi==1.17.0 @@ -32,9 +40,21 @@ click==8.1.6 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # -r scripts/user_retirement/requirements/base.in + # celery + # click-didyoumean + # click-plugins + # click-repl # edx-django-utils +click-didyoumean==0.3.1 + # via celery +click-plugins==1.1.1 + # via celery +click-repl==0.3.0 + # via celery cryptography==43.0.0 # via pyjwt +defusedxml==0.7.1 + # via -r scripts/user_retirement/requirements/base.in django==4.2.15 # via # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt @@ -77,6 +97,10 @@ jmespath==1.0.1 # via # boto3 # botocore +kombu==5.4.0 + # via + # -r scripts/user_retirement/requirements/base.in + # celery lxml==4.9.4 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt @@ -89,6 +113,8 @@ pbr==6.0.0 # via stevedore platformdirs==4.2.2 # via zeep +prompt-toolkit==3.0.47 + # via click-repl proto-plus==1.24.0 # via google-api-core protobuf==5.27.3 @@ -115,7 +141,9 @@ pynacl==1.5.0 pyparsing==3.1.2 # via httplib2 python-dateutil==2.9.0.post0 - # via botocore + # via + # botocore + # celery pytz==2024.1 # via # jenkinsapi @@ -158,6 +186,8 @@ stevedore==5.2.0 # via edx-django-utils typing-extensions==4.12.2 # via simple-salesforce +tzdata==2024.1 + # via celery unicodecsv==0.14.1 # via -r scripts/user_retirement/requirements/base.in uritemplate==4.1.1 @@ -167,5 +197,12 @@ urllib3==1.26.19 # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # botocore # requests +vine==5.1.0 + # via + # amqp + # celery + # kombu +wcwidth==0.2.13 + # via prompt-toolkit zeep==4.2.1 # via simple-salesforce diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index 006eabeef436..ee55090496c1 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -2,287 +2,207 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# make upgrade +# pip-compile --output-file=scripts/user_retirement/requirements/testing.txt scripts/user_retirement/requirements/base.in # +amqp==5.2.0 + # via kombu asgiref==3.8.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # django + # via django attrs==24.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # zeep + # via zeep backoff==2.2.1 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in +billiard==4.2.0 + # via celery boto3==1.34.154 - # via - # -r scripts/user_retirement/requirements/base.txt - # moto + # via -r scripts/user_retirement/requirements/base.in botocore==1.34.154 # via - # -r scripts/user_retirement/requirements/base.txt # boto3 - # moto # s3transfer cachetools==5.4.0 + # via google-auth +celery==5.4.0 # via - # -r scripts/user_retirement/requirements/base.txt - # google-auth + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.in certifi==2024.7.4 - # via - # -r scripts/user_retirement/requirements/base.txt - # requests + # via requests cffi==1.17.0 # via - # -r scripts/user_retirement/requirements/base.txt # cryptography # pynacl charset-normalizer==2.0.12 # via - # -r scripts/user_retirement/requirements/base.txt + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # requests click==8.1.6 # via - # -r scripts/user_retirement/requirements/base.txt + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.in + # celery + # click-didyoumean + # click-plugins + # click-repl # edx-django-utils +click-didyoumean==0.3.1 + # via celery +click-plugins==1.1.1 + # via celery +click-repl==0.3.0 + # via celery cryptography==43.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # moto - # pyjwt -ddt==1.7.2 - # via -r scripts/user_retirement/requirements/testing.in + # via pyjwt +defusedxml==0.7.1 + # via -r scripts/user_retirement/requirements/base.in django==4.2.15 # via - # -r scripts/user_retirement/requirements/base.txt + # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # django-crum # django-waffle # edx-django-utils django-crum==0.7.9 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils + # via edx-django-utils django-waffle==4.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils + # via edx-django-utils edx-django-utils==5.15.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-rest-api-client + # via edx-rest-api-client edx-rest-api-client==5.7.1 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in google-api-core==2.19.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-python-client + # via google-api-python-client google-api-python-client==2.139.0 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in google-auth==2.32.0 # via - # -r scripts/user_retirement/requirements/base.txt # google-api-core # google-api-python-client # google-auth-httplib2 google-auth-httplib2==0.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-python-client + # via google-api-python-client googleapis-common-protos==1.63.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-core + # via google-api-core httplib2==0.22.0 # via - # -r scripts/user_retirement/requirements/base.txt # google-api-python-client # google-auth-httplib2 idna==3.7 - # via - # -r scripts/user_retirement/requirements/base.txt - # requests -iniconfig==2.0.0 - # via pytest + # via requests isodate==0.6.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # zeep + # via zeep jenkinsapi==0.3.13 - # via -r scripts/user_retirement/requirements/base.txt -jinja2==3.1.4 - # via moto + # via -r scripts/user_retirement/requirements/base.in jmespath==1.0.1 # via - # -r scripts/user_retirement/requirements/base.txt # boto3 # botocore +kombu==5.4.0 + # via + # -r scripts/user_retirement/requirements/base.in + # celery lxml==4.9.4 # via - # -r scripts/user_retirement/requirements/base.txt + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # zeep -markupsafe==2.1.5 - # via - # jinja2 - # werkzeug -mock==5.1.0 - # via -r scripts/user_retirement/requirements/testing.in more-itertools==10.3.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # simple-salesforce -moto==4.2.14 - # via -r scripts/user_retirement/requirements/testing.in + # via simple-salesforce newrelic==9.12.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils -packaging==24.1 - # via pytest + # via edx-django-utils pbr==6.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # stevedore + # via stevedore platformdirs==4.2.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # zeep -pluggy==1.5.0 - # via pytest + # via zeep +prompt-toolkit==3.0.47 + # via click-repl proto-plus==1.24.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-core + # via google-api-core protobuf==5.27.3 # via - # -r scripts/user_retirement/requirements/base.txt # google-api-core # googleapis-common-protos # proto-plus psutil==6.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils + # via edx-django-utils pyasn1==0.6.0 # via - # -r scripts/user_retirement/requirements/base.txt # pyasn1-modules # rsa pyasn1-modules==0.4.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-auth + # via google-auth pycparser==2.22 - # via - # -r scripts/user_retirement/requirements/base.txt - # cffi + # via cffi pyjwt[crypto]==2.9.0 # via - # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client # simple-salesforce pynacl==1.5.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils + # via edx-django-utils pyparsing==3.1.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # httplib2 -pytest==8.3.2 - # via -r scripts/user_retirement/requirements/testing.in + # via httplib2 python-dateutil==2.9.0.post0 # via - # -r scripts/user_retirement/requirements/base.txt # botocore - # moto + # celery pytz==2024.1 # via - # -r scripts/user_retirement/requirements/base.txt # jenkinsapi # zeep pyyaml==6.0.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # responses + # via -r scripts/user_retirement/requirements/base.in requests==2.32.3 # via - # -r scripts/user_retirement/requirements/base.txt + # -r scripts/user_retirement/requirements/base.in # edx-rest-api-client # google-api-core # jenkinsapi - # moto # requests-file - # requests-mock # requests-toolbelt - # responses # simple-salesforce # slumber # zeep requests-file==2.1.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # zeep -requests-mock==1.12.1 - # via -r scripts/user_retirement/requirements/testing.in + # via zeep requests-toolbelt==1.0.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # zeep -responses==0.25.3 - # via - # -r scripts/user_retirement/requirements/testing.in - # moto + # via zeep rsa==4.9 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-auth + # via google-auth s3transfer==0.10.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # boto3 + # via boto3 simple-salesforce==1.12.6 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in simplejson==3.19.2 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in six==1.16.0 # via - # -r scripts/user_retirement/requirements/base.txt # isodate # jenkinsapi # python-dateutil slumber==0.7.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-rest-api-client + # via edx-rest-api-client sqlparse==0.5.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # django + # via django stevedore==5.2.0 - # via - # -r scripts/user_retirement/requirements/base.txt - # edx-django-utils + # via edx-django-utils typing-extensions==4.12.2 - # via - # -r scripts/user_retirement/requirements/base.txt - # simple-salesforce + # via simple-salesforce +tzdata==2024.1 + # via celery unicodecsv==0.14.1 - # via -r scripts/user_retirement/requirements/base.txt + # via -r scripts/user_retirement/requirements/base.in uritemplate==4.1.1 - # via - # -r scripts/user_retirement/requirements/base.txt - # google-api-python-client + # via google-api-python-client urllib3==1.26.19 # via - # -r scripts/user_retirement/requirements/base.txt + # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # botocore # requests - # responses -werkzeug==3.0.3 - # via moto -xmltodict==0.13.0 - # via moto -zeep==4.2.1 +vine==5.1.0 # via - # -r scripts/user_retirement/requirements/base.txt - # simple-salesforce + # amqp + # celery + # kombu +wcwidth==0.2.13 + # via prompt-toolkit +zeep==4.2.1 + # via simple-salesforce From d618aa4050d995f091c0ca5cdd61779bcc320424 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:38 +0000 Subject: [PATCH 06/11] Revert "fix: dependencies" This reverts commit 8a1c30ebc517457ce274167d32bdde34440e210f. --- scripts/user_retirement/requirements/base.in | 3 - scripts/user_retirement/requirements/base.txt | 41 +-- .../user_retirement/requirements/testing.txt | 252 ++++++++++++------ 3 files changed, 168 insertions(+), 128 deletions(-) diff --git a/scripts/user_retirement/requirements/base.in b/scripts/user_retirement/requirements/base.in index a6bba5e983ac..d0bdab9082a5 100644 --- a/scripts/user_retirement/requirements/base.in +++ b/scripts/user_retirement/requirements/base.in @@ -1,15 +1,12 @@ -c ../../../requirements/constraints.txt boto3 -celery # required because we're using the LMS's settings file for config options click -defusedxml # required because we're using the LMS's settings file for config options pyyaml backoff requests edx-rest-api-client jenkinsapi -kombu # required because we're using the LMS's settings file for config options unicodecsv simplejson simple-salesforce diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index 6213c57b2ba2..47e6e79c2240 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -2,18 +2,14 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --output-file=scripts/user_retirement/requirements/base.txt scripts/user_retirement/requirements/base.in +# make upgrade # -amqp==5.2.0 - # via kombu asgiref==3.8.1 # via django attrs==24.2.0 # via zeep backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.in -billiard==4.2.0 - # via celery boto3==1.34.154 # via -r scripts/user_retirement/requirements/base.in botocore==1.34.154 @@ -22,10 +18,6 @@ botocore==1.34.154 # s3transfer cachetools==5.4.0 # via google-auth -celery==5.4.0 - # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/base.in certifi==2024.7.4 # via requests cffi==1.17.0 @@ -40,21 +32,9 @@ click==8.1.6 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # -r scripts/user_retirement/requirements/base.in - # celery - # click-didyoumean - # click-plugins - # click-repl # edx-django-utils -click-didyoumean==0.3.1 - # via celery -click-plugins==1.1.1 - # via celery -click-repl==0.3.0 - # via celery cryptography==43.0.0 # via pyjwt -defusedxml==0.7.1 - # via -r scripts/user_retirement/requirements/base.in django==4.2.15 # via # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt @@ -97,10 +77,6 @@ jmespath==1.0.1 # via # boto3 # botocore -kombu==5.4.0 - # via - # -r scripts/user_retirement/requirements/base.in - # celery lxml==4.9.4 # via # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt @@ -113,8 +89,6 @@ pbr==6.0.0 # via stevedore platformdirs==4.2.2 # via zeep -prompt-toolkit==3.0.47 - # via click-repl proto-plus==1.24.0 # via google-api-core protobuf==5.27.3 @@ -141,9 +115,7 @@ pynacl==1.5.0 pyparsing==3.1.2 # via httplib2 python-dateutil==2.9.0.post0 - # via - # botocore - # celery + # via botocore pytz==2024.1 # via # jenkinsapi @@ -186,8 +158,6 @@ stevedore==5.2.0 # via edx-django-utils typing-extensions==4.12.2 # via simple-salesforce -tzdata==2024.1 - # via celery unicodecsv==0.14.1 # via -r scripts/user_retirement/requirements/base.in uritemplate==4.1.1 @@ -197,12 +167,5 @@ urllib3==1.26.19 # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt # botocore # requests -vine==5.1.0 - # via - # amqp - # celery - # kombu -wcwidth==0.2.13 - # via prompt-toolkit zeep==4.2.1 # via simple-salesforce diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index ee55090496c1..006eabeef436 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -2,207 +2,287 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --output-file=scripts/user_retirement/requirements/testing.txt scripts/user_retirement/requirements/base.in +# make upgrade # -amqp==5.2.0 - # via kombu asgiref==3.8.1 - # via django + # via + # -r scripts/user_retirement/requirements/base.txt + # django attrs==24.2.0 - # via zeep + # via + # -r scripts/user_retirement/requirements/base.txt + # zeep backoff==2.2.1 - # via -r scripts/user_retirement/requirements/base.in -billiard==4.2.0 - # via celery + # via -r scripts/user_retirement/requirements/base.txt boto3==1.34.154 - # via -r scripts/user_retirement/requirements/base.in + # via + # -r scripts/user_retirement/requirements/base.txt + # moto botocore==1.34.154 # via + # -r scripts/user_retirement/requirements/base.txt # boto3 + # moto # s3transfer cachetools==5.4.0 - # via google-auth -celery==5.4.0 # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/base.in + # -r scripts/user_retirement/requirements/base.txt + # google-auth certifi==2024.7.4 - # via requests + # via + # -r scripts/user_retirement/requirements/base.txt + # requests cffi==1.17.0 # via + # -r scripts/user_retirement/requirements/base.txt # cryptography # pynacl charset-normalizer==2.0.12 # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.txt # requests click==8.1.6 # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt - # -r scripts/user_retirement/requirements/base.in - # celery - # click-didyoumean - # click-plugins - # click-repl + # -r scripts/user_retirement/requirements/base.txt # edx-django-utils -click-didyoumean==0.3.1 - # via celery -click-plugins==1.1.1 - # via celery -click-repl==0.3.0 - # via celery cryptography==43.0.0 - # via pyjwt -defusedxml==0.7.1 - # via -r scripts/user_retirement/requirements/base.in + # via + # -r scripts/user_retirement/requirements/base.txt + # moto + # pyjwt +ddt==1.7.2 + # via -r scripts/user_retirement/requirements/testing.in django==4.2.15 # via - # -c scripts/user_retirement/requirements/../../../requirements/common_constraints.txt - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.txt # django-crum # django-waffle # edx-django-utils django-crum==0.7.9 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils django-waffle==4.1.0 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils edx-django-utils==5.15.0 - # via edx-rest-api-client + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-rest-api-client edx-rest-api-client==5.7.1 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt google-api-core==2.19.1 - # via google-api-python-client + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-python-client google-api-python-client==2.139.0 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt google-auth==2.32.0 # via + # -r scripts/user_retirement/requirements/base.txt # google-api-core # google-api-python-client # google-auth-httplib2 google-auth-httplib2==0.2.0 - # via google-api-python-client + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-python-client googleapis-common-protos==1.63.2 - # via google-api-core + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-core httplib2==0.22.0 # via + # -r scripts/user_retirement/requirements/base.txt # google-api-python-client # google-auth-httplib2 idna==3.7 - # via requests + # via + # -r scripts/user_retirement/requirements/base.txt + # requests +iniconfig==2.0.0 + # via pytest isodate==0.6.1 - # via zeep + # via + # -r scripts/user_retirement/requirements/base.txt + # zeep jenkinsapi==0.3.13 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt +jinja2==3.1.4 + # via moto jmespath==1.0.1 # via + # -r scripts/user_retirement/requirements/base.txt # boto3 # botocore -kombu==5.4.0 - # via - # -r scripts/user_retirement/requirements/base.in - # celery lxml==4.9.4 # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.txt # zeep +markupsafe==2.1.5 + # via + # jinja2 + # werkzeug +mock==5.1.0 + # via -r scripts/user_retirement/requirements/testing.in more-itertools==10.3.0 - # via simple-salesforce + # via + # -r scripts/user_retirement/requirements/base.txt + # simple-salesforce +moto==4.2.14 + # via -r scripts/user_retirement/requirements/testing.in newrelic==9.12.0 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils +packaging==24.1 + # via pytest pbr==6.0.0 - # via stevedore + # via + # -r scripts/user_retirement/requirements/base.txt + # stevedore platformdirs==4.2.2 - # via zeep -prompt-toolkit==3.0.47 - # via click-repl + # via + # -r scripts/user_retirement/requirements/base.txt + # zeep +pluggy==1.5.0 + # via pytest proto-plus==1.24.0 - # via google-api-core + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-core protobuf==5.27.3 # via + # -r scripts/user_retirement/requirements/base.txt # google-api-core # googleapis-common-protos # proto-plus psutil==6.0.0 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils pyasn1==0.6.0 # via + # -r scripts/user_retirement/requirements/base.txt # pyasn1-modules # rsa pyasn1-modules==0.4.0 - # via google-auth + # via + # -r scripts/user_retirement/requirements/base.txt + # google-auth pycparser==2.22 - # via cffi + # via + # -r scripts/user_retirement/requirements/base.txt + # cffi pyjwt[crypto]==2.9.0 # via + # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client # simple-salesforce pynacl==1.5.0 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils pyparsing==3.1.2 - # via httplib2 + # via + # -r scripts/user_retirement/requirements/base.txt + # httplib2 +pytest==8.3.2 + # via -r scripts/user_retirement/requirements/testing.in python-dateutil==2.9.0.post0 # via + # -r scripts/user_retirement/requirements/base.txt # botocore - # celery + # moto pytz==2024.1 # via + # -r scripts/user_retirement/requirements/base.txt # jenkinsapi # zeep pyyaml==6.0.1 - # via -r scripts/user_retirement/requirements/base.in + # via + # -r scripts/user_retirement/requirements/base.txt + # responses requests==2.32.3 # via - # -r scripts/user_retirement/requirements/base.in + # -r scripts/user_retirement/requirements/base.txt # edx-rest-api-client # google-api-core # jenkinsapi + # moto # requests-file + # requests-mock # requests-toolbelt + # responses # simple-salesforce # slumber # zeep requests-file==2.1.0 - # via zeep + # via + # -r scripts/user_retirement/requirements/base.txt + # zeep +requests-mock==1.12.1 + # via -r scripts/user_retirement/requirements/testing.in requests-toolbelt==1.0.0 - # via zeep + # via + # -r scripts/user_retirement/requirements/base.txt + # zeep +responses==0.25.3 + # via + # -r scripts/user_retirement/requirements/testing.in + # moto rsa==4.9 - # via google-auth + # via + # -r scripts/user_retirement/requirements/base.txt + # google-auth s3transfer==0.10.2 - # via boto3 + # via + # -r scripts/user_retirement/requirements/base.txt + # boto3 simple-salesforce==1.12.6 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt simplejson==3.19.2 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt six==1.16.0 # via + # -r scripts/user_retirement/requirements/base.txt # isodate # jenkinsapi # python-dateutil slumber==0.7.1 - # via edx-rest-api-client + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-rest-api-client sqlparse==0.5.1 - # via django + # via + # -r scripts/user_retirement/requirements/base.txt + # django stevedore==5.2.0 - # via edx-django-utils + # via + # -r scripts/user_retirement/requirements/base.txt + # edx-django-utils typing-extensions==4.12.2 - # via simple-salesforce -tzdata==2024.1 - # via celery + # via + # -r scripts/user_retirement/requirements/base.txt + # simple-salesforce unicodecsv==0.14.1 - # via -r scripts/user_retirement/requirements/base.in + # via -r scripts/user_retirement/requirements/base.txt uritemplate==4.1.1 - # via google-api-python-client + # via + # -r scripts/user_retirement/requirements/base.txt + # google-api-python-client urllib3==1.26.19 # via - # -c scripts/user_retirement/requirements/../../../requirements/constraints.txt + # -r scripts/user_retirement/requirements/base.txt # botocore # requests -vine==5.1.0 - # via - # amqp - # celery - # kombu -wcwidth==0.2.13 - # via prompt-toolkit + # responses +werkzeug==3.0.3 + # via moto +xmltodict==0.13.0 + # via moto zeep==4.2.1 - # via simple-salesforce + # via + # -r scripts/user_retirement/requirements/base.txt + # simple-salesforce From 75067491f56187128c8476cbe83b965357a76de0 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:39 +0000 Subject: [PATCH 07/11] Revert "fix: Add CI update for tests" This reverts commit 64098b6dabb04f2788840b1e388299bb2a62c943. --- .github/workflows/units-test-scripts-user-retirement.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/units-test-scripts-user-retirement.yml b/.github/workflows/units-test-scripts-user-retirement.yml index 2e866506750b..f1b2b2c539f6 100644 --- a/.github/workflows/units-test-scripts-user-retirement.yml +++ b/.github/workflows/units-test-scripts-user-retirement.yml @@ -31,5 +31,4 @@ jobs: - name: Run pytest run: | - export DJANGO_SETTINGS_MODULE=lms.envs.test pytest scripts/user_retirement From 90d5efbef7f0700abc8eb68d78c785e501eca4a9 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:39 +0000 Subject: [PATCH 08/11] Revert "fix: tests" This reverts commit 5e636dea169cbb6aeafd6a3f4a9f9f976810f320. --- lms/envs/test.py | 8 +------ scripts/user_retirement/pytest.ini | 3 --- .../tests/test_retire_one_learner.py | 23 ++++++++++++------- scripts/user_retirement/utils/helpers.py | 2 +- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/lms/envs/test.py b/lms/envs/test.py index 9d94175980a2..13799a3c40a6 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -662,13 +662,7 @@ CSRF_TRUSTED_ORIGINS = ['.example.com'] CSRF_TRUSTED_ORIGINS_WITH_SCHEME = ['https://*.example.com'] -EXTRA_SERVICES_TO_RETIRE_FROM = [ - { - 'name': 'MOCK_SERVICE', - 'service_base_url': 'http://fake_service_base_url', - 'retirement_url_path': 'fake_retirement_url_path' - } -] +EXTRA_SERVICES_TO_RETIRE_FROM = {} # values are already updated above with default CSRF_TRUSTED_ORIGINS values but in # case of new django version these values will override. diff --git a/scripts/user_retirement/pytest.ini b/scripts/user_retirement/pytest.ini index 7a127196d061..e69de29bb2d1 100644 --- a/scripts/user_retirement/pytest.ini +++ b/scripts/user_retirement/pytest.ini @@ -1,3 +0,0 @@ -[pytest] - -DJANGO_SETTINGS_MODULE = lms.envs.test diff --git a/scripts/user_retirement/tests/test_retire_one_learner.py b/scripts/user_retirement/tests/test_retire_one_learner.py index a30186cf6e4d..e620d850ee83 100644 --- a/scripts/user_retirement/tests/test_retire_one_learner.py +++ b/scripts/user_retirement/tests/test_retire_one_learner.py @@ -21,6 +21,13 @@ from scripts.user_retirement.utils.exception import HttpDoesNotExistException +@override_settings(EXTRA_SERVICES_TO_RETIRE_FROM=[ + { + 'name': 'MOCK_SERVICE', + 'service_base_url': 'http://fake_service_base_url', + 'retirement_url_path': 'fake_retirement_url_path' + } +]) def _call_script(username, fetch_ecom_segment_id=False): """ Call the retired learner script with the given username and a generic, temporary config file. @@ -63,8 +70,8 @@ def test_successful_retirement(*args, **kwargs): result = _call_script(username, fetch_ecom_segment_id=True) - # Called once per API we instantiate (LMS, ECommerce, Credentials, Additional Services) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + # Called once per API we instantiate (LMS, ECommerce, Credentials) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) assert mock_update_learner_state.call_count == 9 @@ -99,7 +106,7 @@ def test_user_does_not_exist(*args, **kwargs): result = _call_script(username) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) mock_update_learner_state.assert_not_called() @@ -134,7 +141,7 @@ def test_bad_learner(*args, **kwargs): mock_get_retirement_state.side_effect = HttpDoesNotExistException result = _call_script(username) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) mock_update_learner_state.assert_not_called() @@ -162,7 +169,7 @@ def test_user_in_working_state(*args, **kwargs): result = _call_script(username) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) mock_update_learner_state.assert_not_called() @@ -190,7 +197,7 @@ def test_user_in_bad_state(*args, **kwargs): ) result = _call_script(username) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) mock_update_learner_state.assert_not_called() @@ -225,7 +232,7 @@ def test_user_in_end_state(*args, **kwargs): result = _call_script(username) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) mock_update_learner_state.assert_not_called() @@ -267,7 +274,7 @@ def test_skipping_states(*args, **kwargs): result = _call_script(username) # Called once per API we instantiate (LMS, ECommerce, Credentials) - assert mock_get_access_token.call_count == 3 + len(settings.EXTRA_SERVICES_TO_RETIRE_FROM) + assert mock_get_access_token.call_count == 3 mock_get_retirement_state.assert_called_once_with(username) assert mock_update_learner_state.call_count == 5 diff --git a/scripts/user_retirement/utils/helpers.py b/scripts/user_retirement/utils/helpers.py index 7704a25621d9..0c3af6006a83 100644 --- a/scripts/user_retirement/utils/helpers.py +++ b/scripts/user_retirement/utils/helpers.py @@ -242,7 +242,7 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): segment_workspace_slug ) - for service_config in settings.EXTRA_SERVICES_TO_RETIRE_FROM: + for service_config in extra_services: service_name = service_config['name'] config[service_name] = GenericRetirementApi( lms_base_url, From ec6b1ccc8aff32aa9d57aa26060f1fb7d64dfe05 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:39 +0000 Subject: [PATCH 09/11] Revert "fix: generalize internal services" This reverts commit e8f9db428d6bd41bd17b3ae4bc4ff18fa2fff152. --- lms/envs/common.py | 2 -- lms/envs/test.py | 2 -- .../tests/test_retire_one_learner.py | 9 ----- .../tests/utils/test_edx_api.py | 22 ++++++------- scripts/user_retirement/utils/edx_api.py | 13 +++----- scripts/user_retirement/utils/helpers.py | 33 ++++++++----------- 6 files changed, 29 insertions(+), 52 deletions(-) diff --git a/lms/envs/common.py b/lms/envs/common.py index 364ef903fd72..18d07afd7161 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -5003,8 +5003,6 @@ def _make_locale_paths(settings): # pylint: disable=missing-function-docstring 'COMPLETE', ] -EXTRA_SERVICES_TO_RETIRE_FROM = {} - USERNAME_REPLACEMENT_WORKER = "REPLACE WITH VALID USERNAME" ############## Settings for Microfrontends ######################### diff --git a/lms/envs/test.py b/lms/envs/test.py index 13799a3c40a6..3c4bb9564927 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -662,8 +662,6 @@ CSRF_TRUSTED_ORIGINS = ['.example.com'] CSRF_TRUSTED_ORIGINS_WITH_SCHEME = ['https://*.example.com'] -EXTRA_SERVICES_TO_RETIRE_FROM = {} - # values are already updated above with default CSRF_TRUSTED_ORIGINS values but in # case of new django version these values will override. if django.VERSION[0] >= 4: # for greater than django 3.2 use with schemes. diff --git a/scripts/user_retirement/tests/test_retire_one_learner.py b/scripts/user_retirement/tests/test_retire_one_learner.py index e620d850ee83..844325ea3ed0 100644 --- a/scripts/user_retirement/tests/test_retire_one_learner.py +++ b/scripts/user_retirement/tests/test_retire_one_learner.py @@ -4,8 +4,6 @@ from unittest.mock import DEFAULT, patch from click.testing import CliRunner -from django.conf import settings -from django.test.utils import override_settings from scripts.user_retirement.retire_one_learner import ( END_STATES, @@ -21,13 +19,6 @@ from scripts.user_retirement.utils.exception import HttpDoesNotExistException -@override_settings(EXTRA_SERVICES_TO_RETIRE_FROM=[ - { - 'name': 'MOCK_SERVICE', - 'service_base_url': 'http://fake_service_base_url', - 'retirement_url_path': 'fake_retirement_url_path' - } -]) def _call_script(username, fetch_ecom_segment_id=False): """ Call the retired learner script with the given username and a generic, temporary config file. diff --git a/scripts/user_retirement/tests/utils/test_edx_api.py b/scripts/user_retirement/tests/utils/test_edx_api.py index 2c86c2cb97a2..037ea686288b 100644 --- a/scripts/user_retirement/tests/utils/test_edx_api.py +++ b/scripts/user_retirement/tests/utils/test_edx_api.py @@ -544,9 +544,9 @@ def test_retire_learner(self, mock_method): ) -class TestGenericApi(OAuth2Mixin, unittest.TestCase): +class TestCommerceCoordinatorApi(OAuth2Mixin, unittest.TestCase): """ - Test the Generic API client. + Test the edX Commerce-Coordinator API client. """ @responses.activate(registry=OrderedRegistry) @@ -554,17 +554,15 @@ def setUp(self): super().setUp() self.mock_access_token_response() self.lms_base_url = 'http://localhost:18000/' - self.service_api_base_url = 'http://mock_service_url/' - self.retirement_url = 'mock/retirement_url' - self.generic_api = edx_api.GenericRetirementApi( + self.commerce_coordinator_base_url = 'http://localhost:8140/' + self.commerce_coordinator_api = edx_api.CommerceCoordinatorApi( self.lms_base_url, - self.service_api_base_url, + self.commerce_coordinator_base_url, 'the_client_id', - 'the_client_secret', - self.retirement_url + 'the_client_secret' ) - @patch.object(edx_api.GenericRetirementApi, '_request') + @patch.object(edx_api.CommerceCoordinatorApi, '_request') def test_retire_learner(self, mock_request): learner_data = get_fake_user_retirement() json_data = { @@ -572,14 +570,14 @@ def test_retire_learner(self, mock_request): } responses.add( POST, - urljoin(self.service_api_base_url, 'mock/retirement_url'), + urljoin(self.commerce_coordinator_base_url, 'lms/user_retirement'), match=[matchers.json_params_matcher(json_data)] ) - self.generic_api.retire_learner(learner=learner_data) + self.commerce_coordinator_api.retire_learner(learner=learner_data) mock_request.assert_called_once_with( 'POST', - urljoin(self.service_api_base_url, 'mock/retirement_url/'), + urljoin(self.commerce_coordinator_base_url, 'lms/user_retirement/'), json=json_data ) diff --git a/scripts/user_retirement/utils/edx_api.py b/scripts/user_retirement/utils/edx_api.py index b0c5ffae468b..d259e9d2eb4a 100644 --- a/scripts/user_retirement/utils/edx_api.py +++ b/scripts/user_retirement/utils/edx_api.py @@ -492,19 +492,16 @@ def retire_learner(self, learner): return True -class GenericRetirementApi(BaseApiClient): +class CommerceCoordinatorApi(BaseApiClient): """ - Generic API client. + Commerce-Coordinator API client. """ - def __init__(self, lms_base_url, api_base_url, client_id, client_secret, retirement_url_path): - super().__init__(lms_base_url, api_base_url, client_id, client_secret) - self.retirement_url_path = retirement_url_path - @_retry_lms_api() def retire_learner(self, learner): """ - Performs the learner retirement step for additonal services. + Performs the learner retirement step for Commerce-Coordinator. + Passes the learner's LMS User Id instead of username. """ data = {'edx_lms_user_id': learner['user']['id']} - api_url = self.get_api_url(self.retirement_url_path) + api_url = self.get_api_url('lms/user_retirement') return self._request('POST', api_url, json=data) diff --git a/scripts/user_retirement/utils/helpers.py b/scripts/user_retirement/utils/helpers.py index 0c3af6006a83..42723b09991d 100644 --- a/scripts/user_retirement/utils/helpers.py +++ b/scripts/user_retirement/utils/helpers.py @@ -16,10 +16,9 @@ import yaml from six import text_type -from django.conf import settings from scripts.user_retirement.utils.edx_api import LmsApi # pylint: disable=wrong-import-position -from scripts.user_retirement.utils.edx_api import CredentialsApi, EcommerceApi, GenericRetirementApi, \ +from scripts.user_retirement.utils.edx_api import CommerceCoordinatorApi, CredentialsApi, EcommerceApi, \ LicenseManagerApi from scripts.user_retirement.utils.thirdparty_apis.amplitude_api import \ AmplitudeApi # pylint: disable=wrong-import-position @@ -156,6 +155,7 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): credentials_base_url = config['base_urls'].get('credentials', None) segment_base_url = config['base_urls'].get('segment', None) license_manager_base_url = config['base_urls'].get('license_manager', None) + commerce_coordinator_base_url = config['base_urls'].get('commerce_coordinator', None) client_id = config['client_id'] client_secret = config['client_secret'] braze_api_key = config.get('braze_api_key', None) @@ -174,19 +174,16 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): hubspot_from_address = config.get('hubspot_from_address', None) hubspot_alert_email = config.get('hubspot_alert_email', None) - required_services = [ - ('BRAZE', braze_api_key), - ('AMPLITUDE', amplitude_api_key), - ('ECOMMERCE', ecommerce_base_url), - ('CREDENTIALS', credentials_base_url), - ('SEGMENT', segment_base_url), - ('HUBSPOT', hubspot_api_key), - ] - extra_services = [(service['name'], service['service_base_url']) for service in settings.EXTRA_SERVICES_TO_RETIRE_FROM] - all_services = required_services + extra_services - for state in config['retirement_pipeline']: - for service, service_url in (all_services): + for service, service_url in ( + ('BRAZE', braze_api_key), + ('AMPLITUDE', amplitude_api_key), + ('ECOMMERCE', ecommerce_base_url), + ('CREDENTIALS', credentials_base_url), + ('SEGMENT', segment_base_url), + ('HUBSPOT', hubspot_api_key), + ('COMMERCE_COORDINATOR', commerce_coordinator_base_url), + ): if state[2] == service and service_url is None: fail_func(fail_code, 'Service URL is not configured, but required for state {}'.format(state)) @@ -242,14 +239,12 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): segment_workspace_slug ) - for service_config in extra_services: - service_name = service_config['name'] - config[service_name] = GenericRetirementApi( + if commerce_coordinator_base_url: + config['COMMERCE_COORDINATOR'] = CommerceCoordinatorApi( lms_base_url, - service_config['service_base_url'], + commerce_coordinator_base_url, client_id, client_secret, - service_config['retirement_url_path'] ) except Exception as exc: # pylint: disable=broad-except fail_func(fail_code, 'Unexpected error occurred!', exc) From 0be8550c955e86e07ff879e647e81dab03a73149 Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:40 +0000 Subject: [PATCH 10/11] Revert "fix: quality" This reverts commit 77ca0f754af322b918434960f74948665d0847e1. --- scripts/user_retirement/utils/edx_api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/user_retirement/utils/edx_api.py b/scripts/user_retirement/utils/edx_api.py index d259e9d2eb4a..f77675fcbcd3 100644 --- a/scripts/user_retirement/utils/edx_api.py +++ b/scripts/user_retirement/utils/edx_api.py @@ -491,7 +491,6 @@ def retire_learner(self, learner): LOG.info("No license manager data found for user") return True - class CommerceCoordinatorApi(BaseApiClient): """ Commerce-Coordinator API client. From 6de5c4ea1799a3fee25cbf765e9ac7246ec1edca Mon Sep 17 00:00:00 2001 From: Justin Hynes Date: Thu, 15 Aug 2024 16:00:40 +0000 Subject: [PATCH 11/11] Revert "feat: Commerce Coordinator step in retirement pipeline" This reverts commit c24c87499f75893fbb6b35b2573f361c84a142ab. --- .../tests/utils/test_edx_api.py | 39 ------------------- scripts/user_retirement/utils/edx_api.py | 14 ------- scripts/user_retirement/utils/helpers.py | 13 +------ 3 files changed, 1 insertion(+), 65 deletions(-) diff --git a/scripts/user_retirement/tests/utils/test_edx_api.py b/scripts/user_retirement/tests/utils/test_edx_api.py index 037ea686288b..eb826cd1a4fd 100644 --- a/scripts/user_retirement/tests/utils/test_edx_api.py +++ b/scripts/user_retirement/tests/utils/test_edx_api.py @@ -542,42 +542,3 @@ def test_retire_learner(self, mock_method): original_username=FAKE_ORIGINAL_USERNAME ) ) - - -class TestCommerceCoordinatorApi(OAuth2Mixin, unittest.TestCase): - """ - Test the edX Commerce-Coordinator API client. - """ - - @responses.activate(registry=OrderedRegistry) - def setUp(self): - super().setUp() - self.mock_access_token_response() - self.lms_base_url = 'http://localhost:18000/' - self.commerce_coordinator_base_url = 'http://localhost:8140/' - self.commerce_coordinator_api = edx_api.CommerceCoordinatorApi( - self.lms_base_url, - self.commerce_coordinator_base_url, - 'the_client_id', - 'the_client_secret' - ) - - @patch.object(edx_api.CommerceCoordinatorApi, '_request') - def test_retire_learner(self, mock_request): - learner_data = get_fake_user_retirement() - json_data = { - 'edx_lms_user_id': learner_data['user']['id'] - } - responses.add( - POST, - urljoin(self.commerce_coordinator_base_url, 'lms/user_retirement'), - match=[matchers.json_params_matcher(json_data)] - ) - - self.commerce_coordinator_api.retire_learner(learner=learner_data) - - mock_request.assert_called_once_with( - 'POST', - urljoin(self.commerce_coordinator_base_url, 'lms/user_retirement/'), - json=json_data - ) diff --git a/scripts/user_retirement/utils/edx_api.py b/scripts/user_retirement/utils/edx_api.py index f77675fcbcd3..e891f04019a9 100644 --- a/scripts/user_retirement/utils/edx_api.py +++ b/scripts/user_retirement/utils/edx_api.py @@ -490,17 +490,3 @@ def retire_learner(self, learner): except HttpDoesNotExistException: LOG.info("No license manager data found for user") return True - -class CommerceCoordinatorApi(BaseApiClient): - """ - Commerce-Coordinator API client. - """ - @_retry_lms_api() - def retire_learner(self, learner): - """ - Performs the learner retirement step for Commerce-Coordinator. - Passes the learner's LMS User Id instead of username. - """ - data = {'edx_lms_user_id': learner['user']['id']} - api_url = self.get_api_url('lms/user_retirement') - return self._request('POST', api_url, json=data) diff --git a/scripts/user_retirement/utils/helpers.py b/scripts/user_retirement/utils/helpers.py index 42723b09991d..1bcbadb4b3c4 100644 --- a/scripts/user_retirement/utils/helpers.py +++ b/scripts/user_retirement/utils/helpers.py @@ -18,8 +18,7 @@ from six import text_type from scripts.user_retirement.utils.edx_api import LmsApi # pylint: disable=wrong-import-position -from scripts.user_retirement.utils.edx_api import CommerceCoordinatorApi, CredentialsApi, EcommerceApi, \ - LicenseManagerApi +from scripts.user_retirement.utils.edx_api import CredentialsApi, EcommerceApi, LicenseManagerApi from scripts.user_retirement.utils.thirdparty_apis.amplitude_api import \ AmplitudeApi # pylint: disable=wrong-import-position from scripts.user_retirement.utils.thirdparty_apis.braze_api import BrazeApi # pylint: disable=wrong-import-position @@ -155,7 +154,6 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): credentials_base_url = config['base_urls'].get('credentials', None) segment_base_url = config['base_urls'].get('segment', None) license_manager_base_url = config['base_urls'].get('license_manager', None) - commerce_coordinator_base_url = config['base_urls'].get('commerce_coordinator', None) client_id = config['client_id'] client_secret = config['client_secret'] braze_api_key = config.get('braze_api_key', None) @@ -182,7 +180,6 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): ('CREDENTIALS', credentials_base_url), ('SEGMENT', segment_base_url), ('HUBSPOT', hubspot_api_key), - ('COMMERCE_COORDINATOR', commerce_coordinator_base_url), ): if state[2] == service and service_url is None: fail_func(fail_code, 'Service URL is not configured, but required for state {}'.format(state)) @@ -238,13 +235,5 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): segment_auth_token, segment_workspace_slug ) - - if commerce_coordinator_base_url: - config['COMMERCE_COORDINATOR'] = CommerceCoordinatorApi( - lms_base_url, - commerce_coordinator_base_url, - client_id, - client_secret, - ) except Exception as exc: # pylint: disable=broad-except fail_func(fail_code, 'Unexpected error occurred!', exc)