diff --git a/.github/workflows/units-test-scripts-user-retirement.yml b/.github/workflows/units-test-scripts-user-retirement.yml index e9b7c84c8a..f1b2b2c539 100644 --- a/.github/workflows/units-test-scripts-user-retirement.yml +++ b/.github/workflows/units-test-scripts-user-retirement.yml @@ -26,11 +26,9 @@ 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 - name: Run pytest run: | - export DJANGO_SETTINGS_MODULE=lms.envs.test pytest scripts/user_retirement diff --git a/lms/envs/common.py b/lms/envs/common.py index 280aaf37bf..18d07afd71 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -5003,8 +5003,6 @@ RETIREMENT_STATES = [ '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 9d94175980..3c4bb95649 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -662,14 +662,6 @@ SUBSCRIPTIONS_TRIAL_LENGTH = 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' - } -] - # 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/docs/implementation_overview.rst b/scripts/user_retirement/docs/implementation_overview.rst index 902732a441..37a814c1d5 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,27 +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 58a0f41001..4fd59fcfd3 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,27 +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' - } - ] - - By default, this setting is empty, meaning no additional services are included. This can be overridden in `common.py `_. ================= @@ -100,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 @@ -141,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 @@ -183,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 @@ -194,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 diff --git a/scripts/user_retirement/pytest.ini b/scripts/user_retirement/pytest.ini index 7a127196d0..e69de29bb2 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/requirements/base.in b/scripts/user_retirement/requirements/base.in index ee037a58b5..d0bdab9082 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 f57f1dad43..47e6e79c22 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.8 - # 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 6231b3bb36..006eabeef4 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 +cryptography==43.0.0 # 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 - # 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.8 - # 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 +google-api-core==2.19.1 # 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 - # 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 diff --git a/scripts/user_retirement/tests/test_retire_one_learner.py b/scripts/user_retirement/tests/test_retire_one_learner.py index a30186cf6e..844325ea3e 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 @@ Test the retire_one_learner.py script 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, @@ -63,8 +61,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 +97,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 +132,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 +160,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 +188,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 +223,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 +265,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/tests/utils/test_edx_api.py b/scripts/user_retirement/tests/utils/test_edx_api.py index 2c86c2cb97..eb826cd1a4 100644 --- a/scripts/user_retirement/tests/utils/test_edx_api.py +++ b/scripts/user_retirement/tests/utils/test_edx_api.py @@ -542,44 +542,3 @@ class TestLicenseManagerApi(OAuth2Mixin, unittest.TestCase): original_username=FAKE_ORIGINAL_USERNAME ) ) - - -class TestGenericApi(OAuth2Mixin, unittest.TestCase): - """ - Test the Generic API client. - """ - - @responses.activate(registry=OrderedRegistry) - 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.lms_base_url, - self.service_api_base_url, - 'the_client_id', - 'the_client_secret', - self.retirement_url - ) - - @patch.object(edx_api.GenericRetirementApi, '_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.service_api_base_url, 'mock/retirement_url'), - match=[matchers.json_params_matcher(json_data)] - ) - - self.generic_api.retire_learner(learner=learner_data) - - mock_request.assert_called_once_with( - 'POST', - urljoin(self.service_api_base_url, 'mock/retirement_url/'), - json=json_data - ) diff --git a/scripts/user_retirement/utils/edx_api.py b/scripts/user_retirement/utils/edx_api.py index b0c5ffae46..e891f04019 100644 --- a/scripts/user_retirement/utils/edx_api.py +++ b/scripts/user_retirement/utils/edx_api.py @@ -490,21 +490,3 @@ class LicenseManagerApi(BaseApiClient): except HttpDoesNotExistException: LOG.info("No license manager data found for user") return True - - -class GenericRetirementApi(BaseApiClient): - """ - Generic 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. - """ - data = {'edx_lms_user_id': learner['user']['id']} - api_url = self.get_api_url(self.retirement_url_path) - 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 7704a25621..1bcbadb4b3 100644 --- a/scripts/user_retirement/utils/helpers.py +++ b/scripts/user_retirement/utils/helpers.py @@ -16,11 +16,9 @@ import unicodedata 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, \ - 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 @@ -174,19 +172,15 @@ 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), + ): if state[2] == service and service_url is None: fail_func(fail_code, 'Service URL is not configured, but required for state {}'.format(state)) @@ -241,15 +235,5 @@ def _setup_all_apis_or_exit(fail_func, fail_code, config): segment_auth_token, segment_workspace_slug ) - - for service_config in settings.EXTRA_SERVICES_TO_RETIRE_FROM: - service_name = service_config['name'] - config[service_name] = GenericRetirementApi( - lms_base_url, - service_config['service_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)