From 0c30a05bea2418e09c816b9cdffb10082b721ea5 Mon Sep 17 00:00:00 2001 From: Muhammad Umar Khan Date: Fri, 19 Apr 2024 16:00:36 +0500 Subject: [PATCH] feat: add python 3.12 support --- .github/workflows/ci.yml | 12 +- .github/workflows/mysql-migrations-check.yml | 2 +- Dockerfile | 10 + Makefile | 7 +- .../apps/api_client/tests/test_discovery.py | 2 +- requirements/base.txt | 5 +- requirements/common_constraints.txt | 2 +- requirements/constraints.txt | 3 + requirements/dev.txt | 11 +- requirements/dev312.txt | 842 ++++++++++++++++++ requirements/doc.txt | 9 +- requirements/production.txt | 6 +- requirements/quality.txt | 5 +- requirements/test.txt | 9 +- requirements/test312.txt | 579 ++++++++++++ requirements/validation.txt | 9 +- tox.ini | 10 +- validate.sh | 6 +- 18 files changed, 1493 insertions(+), 36 deletions(-) create mode 100644 requirements/dev312.txt create mode 100644 requirements/test312.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c44b8abd..eeb5ad591 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,21 +11,25 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [py38] + python-version: ['3.8', '3.12'] django-version: [django42] steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: - python-version: '3.8' + python-version: ${{ matrix.python-version }} architecture: x64 - name: Start container run: | docker-compose -f .github/docker-compose-github.yml up -d - name: Install test dependencies and run validation run: | - docker exec -e TOXENV=${{ matrix.python-version }}-${{ matrix.django-version }} -u root enterprise.catalog.app /edx/app/enterprise_catalog/enterprise_catalog/validate.sh + if [[ "${{ matrix.python-version }}" == "3.8" ]]; then + docker exec -e TOXENV=py38-${{ matrix.django-version }} -u root enterprise.catalog.app /edx/app/enterprise_catalog/enterprise_catalog/validate.sh + elif [[ "${{ matrix.python-version }}" == "3.12" ]]; then + docker exec -e TOXENV=py312-${{ matrix.django-version }} -u root enterprise.catalog.app /edx/app/enterprise_catalog/enterprise_catalog/validate.sh + fi - name: Code Coverage - if: matrix.python-version == 'py38' && matrix.django-version=='django42' + if: matrix.python-version == '3.8' && matrix.django-version=='django42' uses: codecov/codecov-action@v1 diff --git a/.github/workflows/mysql-migrations-check.yml b/.github/workflows/mysql-migrations-check.yml index 3a75f75f8..1692af970 100644 --- a/.github/workflows/mysql-migrations-check.yml +++ b/.github/workflows/mysql-migrations-check.yml @@ -53,7 +53,7 @@ jobs: pip uninstall -y mysqlclient pip install --no-binary mysqlclient mysqlclient pip uninstall -y xmlsec - pip install --no-binary xmlsec xmlsec + pip install --no-binary xmlsec xmlsec==1.3.13 - name: Initiate services run: | sudo /etc/init.d/mysql start diff --git a/Dockerfile b/Dockerfile index 331e98767..fef31c6fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,6 +36,16 @@ RUN apt-get update && apt-get -qy install --no-install-recommends \ git \ wget +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && apt-get -qy install libffi-dev libsqlite3-dev python3-distutils + +RUN apt-get update && apt-get install -y build-essential wget && \ +wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz && \ +tar -xzvf Python-3.12.0.tgz && cd Python-3.12.0 && ./configure --enable-optimizations && \ +make -j$(nproc) && make altinstall && python3.12 --version + ENV VIRTUAL_ENV=/venv RUN python3.8 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" diff --git a/Makefile b/Makefile index 159c37a9e..9fd92ac7e 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,10 @@ piptools: ## install pinned version of pip-compile and pip-sync requirements: piptools dev_requirements ## sync to default requirements +requirements312: ## sync to requirements for local development with Python 3.12 + pip3.12 install -qr requirements/pip-tools.txt + pip3.12 install -qr requirements/dev312.txt + dev_requirements: ## sync to requirements for local development pip-sync -q requirements/dev.txt @@ -99,9 +103,8 @@ html_coverage: ## generate and view HTML coverage report upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade upgrade: $(COMMON_CONSTRAINTS_TXT) piptools ## update the requirements/*.txt files with the latest packages satisfying requirements/*.in # Make sure to compile files after any other files they include! - sed 's/Django<4.0//g' requirements/common_constraints.txt > requirements/common_constraints.tmp + sed 's/django-simple-history==3.0.0//g' requirements/common_constraints.txt > requirements/common_constraints.tmp mv requirements/common_constraints.tmp requirements/common_constraints.txt - sed -i 's/django-simple-history==//g' requirements/common_constraints.txt pip-compile --allow-unsafe --rebuild --upgrade -o requirements/pip.txt requirements/pip.in pip-compile --upgrade -o requirements/pip-tools.txt requirements/pip-tools.in pip install -qr requirements/pip.txt diff --git a/enterprise_catalog/apps/api_client/tests/test_discovery.py b/enterprise_catalog/apps/api_client/tests/test_discovery.py index c61bac229..a125bc5fc 100644 --- a/enterprise_catalog/apps/api_client/tests/test_discovery.py +++ b/enterprise_catalog/apps/api_client/tests/test_discovery.py @@ -192,7 +192,7 @@ def test_retrieve_course_reviews_with_successful_response( "total_enrollments": 300 } }) - assert mock_sleep.not_called() + mock_sleep.assert_not_called() @mock.patch('enterprise_catalog.apps.api_client.discovery.time.sleep') @mock.patch('enterprise_catalog.apps.api_client.discovery.LOGGER') diff --git a/requirements/base.txt b/requirements/base.txt index f8f79163f..bbe2964bb 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -27,15 +27,16 @@ attrs==23.2.0 # referencing backoff==1.10.0 # via analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # celery # django # djangorestframework # kombu billiard==4.2.0 # via celery -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/base.in diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index b5d2098db..fc5c765e7 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -20,7 +20,7 @@ Django<5.0 elasticsearch<7.14.0 # django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected -3.0.0 + # opentelemetry requires version 6.x at the moment: # https://github.com/open-telemetry/opentelemetry-python/issues/3570 diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 822279be8..6878afae9 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -40,3 +40,6 @@ astroid<2.12 # To avoid any breaking changes openai<=1.13.3 + +# For python greater than or equal to 3.9 backports.zoneinfo causing failures +backports.zoneinfo; python_version<'3.9' diff --git a/requirements/dev.txt b/requirements/dev.txt index a38cfa29b..012a49300 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -53,8 +53,9 @@ backoff==1.10.0 # -r requirements/quality.txt # -r requirements/test.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # -r requirements/quality.txt # -r requirements/test.txt # celery @@ -74,7 +75,7 @@ cachetools==5.3.3 # via # -r requirements/test.txt # tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/quality.txt @@ -351,7 +352,7 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==24.9.0 +faker==24.11.0 # via # -r requirements/test.txt # factory-boy @@ -360,7 +361,7 @@ filelock==3.13.4 # -r requirements/test.txt # tox # virtualenv -gunicorn==21.2.0 +gunicorn==22.0.0 # via -r requirements/dev.in h11==0.14.0 # via @@ -858,7 +859,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.1 +virtualenv==20.25.3 # via # -r requirements/test.txt # tox diff --git a/requirements/dev312.txt b/requirements/dev312.txt new file mode 100644 index 000000000..2f1c048e5 --- /dev/null +++ b/requirements/dev312.txt @@ -0,0 +1,842 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# make upgrade +# +algoliasearch==3.0.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +amqp==5.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # kombu +analytics-python==1.4.post1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +annotated-types==0.6.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pydantic +anyio==4.3.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # httpx + # openai +asgiref==3.8.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # django + # django-cors-headers + # django-simple-history +astroid==2.11.7 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint + # pylint-celery +attrs==23.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # jsonschema + # referencing +backoff==1.10.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # analytics-python +billiard==4.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +build==1.2.1 + # via + # -r requirements/pip-tools.txt + # pip-tools +cachetools==5.3.3 + # via + # -r requirements/test.txt + # tox +celery==5.3.6 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt + # django-celery-results + # edx-celeryutils +certifi==2024.2.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # httpcore + # httpx + # requests +cffi==1.16.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # cryptography + # pynacl +chardet==5.2.0 + # via + # -r requirements/test.txt + # tox +charset-normalizer==3.3.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # requests +click==8.1.7 + # via + # -r requirements/pip-tools.txt + # -r requirements/quality.txt + # -r requirements/test.txt + # celery + # click-didyoumean + # click-log + # click-plugins + # click-repl + # code-annotations + # edx-django-utils + # edx-lint + # pip-tools +click-didyoumean==0.3.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +click-log==0.4.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-lint +click-plugins==1.1.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +click-repl==0.3.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +code-annotations==1.8.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-lint + # edx-toggles +colorama==0.4.6 + # via + # -r requirements/test.txt + # tox +coverage[toml]==7.4.4 + # via + # -r requirements/test.txt + # pytest-cov +cryptography==42.0.5 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pyjwt + # social-auth-core +ddt==1.7.2 + # via + # -r requirements/dev.in + # -r requirements/test.txt +defusedxml==0.7.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # djangorestframework-xml + # python3-openid + # social-auth-core +diff-cover==4.0.0 + # via + # -c requirements/constraints.txt + # -r requirements/dev.in +dill==0.3.8 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint +distlib==0.3.8 + # via + # -r requirements/test.txt + # virtualenv +distro==1.9.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # openai +django==4.2.11 + # via + # -c requirements/common_constraints.txt + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt + # django-celery-results + # django-clearcache + # django-config-models + # django-cors-headers + # django-crum + # django-debug-toolbar + # django-extensions + # django-log-request-id + # django-model-utils + # django-waffle + # djangorestframework + # drf-jwt + # drf-spectacular + # edx-auth-backends + # edx-celeryutils + # edx-django-release-util + # edx-django-utils + # edx-drf-extensions + # edx-i18n-tools + # edx-rbac + # edx-toggles + # jsonfield + # jsonfield2 + # social-auth-app-django +django-celery-results==2.5.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-clearcache==1.2.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-config-models==2.7.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-cors-headers==4.3.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-crum==0.7.9 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-django-utils + # edx-rbac + # edx-toggles +django-debug-toolbar==4.3.0 + # via -r requirements/dev.in +django-dynamic-fixture==4.0.1 + # via -r requirements/test.txt +django-extensions==3.2.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-log-request-id==2.1.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +django-model-utils==4.5.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-celeryutils + # edx-rbac +django-simple-history==3.5.0 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt +django-waffle==4.1.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-django-utils + # edx-drf-extensions + # edx-toggles +djangoql==0.18.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +djangorestframework==3.15.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # django-config-models + # drf-jwt + # drf-spectacular + # edx-drf-extensions +djangorestframework-xml==2.0.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +drf-jwt==1.19.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-drf-extensions +drf-spectacular==0.27.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-auth-backends==4.3.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-celeryutils==1.3.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-django-release-util==1.4.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-django-utils==5.12.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # django-config-models + # edx-drf-extensions + # edx-rest-api-client + # edx-toggles +edx-drf-extensions==10.3.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-rbac +edx-i18n-tools==1.5.0 + # via -r requirements/dev.in +edx-lint==5.2.5 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt +edx-opaque-keys==2.5.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-drf-extensions +edx-rbac==1.8.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-rest-api-client==5.7.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +edx-toggles==5.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +factory-boy==3.3.0 + # via -r requirements/test.txt +faker==24.9.0 + # via + # -r requirements/test.txt + # factory-boy +filelock==3.13.4 + # via + # -r requirements/test.txt + # tox + # virtualenv +gunicorn==22.0.0 + # via -r requirements/dev.in +h11==0.14.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # httpcore +httpcore==1.0.5 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # httpx +httpx==0.27.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # openai +idna==3.7 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # anyio + # httpx + # requests +importlib-metadata==6.11.0 + # via + # -c requirements/common_constraints.txt + # inflect +inflect==3.0.2 + # via + # -c requirements/constraints.txt + # -r requirements/dev.in + # jinja2-pluralize +inflection==0.5.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # drf-spectacular +iniconfig==2.0.0 + # via + # -r requirements/test.txt + # pytest +isort==5.13.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint +jinja2==3.1.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # code-annotations + # diff-cover + # jinja2-pluralize +jinja2-pluralize==0.3.0 + # via diff-cover +joblib==1.4.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # scikit-learn +jsonfield==3.1.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-celeryutils +jsonfield2==4.0.0.post0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +jsonschema==4.21.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # drf-spectacular +jsonschema-specifications==2023.12.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # jsonschema +kombu==5.3.7 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +lazy-object-proxy==1.10.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # astroid +lxml==5.2.1 + # via edx-i18n-tools +markupsafe==2.1.5 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # jinja2 +mccabe==0.7.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint +monotonic==1.6 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # analytics-python +mysqlclient==2.2.4 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +newrelic==9.8.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-django-utils +numpy==1.26.4 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # scikit-learn + # scipy +oauthlib==3.2.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # requests-oauthlib + # social-auth-core +openai==1.13.3 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt +packaging==24.0 + # via + # -r requirements/pip-tools.txt + # -r requirements/test.txt + # build + # gunicorn + # pyproject-api + # pytest + # tox +path==16.14.0 + # via edx-i18n-tools +pbr==6.0.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # stevedore +pip-tools==7.4.1 + # via -r requirements/pip-tools.txt +platformdirs==4.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint + # tox + # virtualenv +pluggy==1.4.0 + # via + # -r requirements/test.txt + # diff-cover + # pytest + # tox +ply==3.11 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # djangoql +polib==1.2.0 + # via edx-i18n-tools +prompt-toolkit==3.0.43 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # click-repl +psutil==5.9.8 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-django-utils +pycodestyle==2.11.1 + # via -r requirements/quality.txt +pycparser==2.22 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # cffi +pydantic==2.7.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # openai +pydantic-core==2.18.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pydantic +pydocstyle==6.3.0 + # via -r requirements/quality.txt +pygments==2.17.2 + # via diff-cover +pyjwt[crypto]==2.8.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # drf-jwt + # edx-auth-backends + # edx-drf-extensions + # edx-rest-api-client + # social-auth-core +pylint==2.14.5 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-lint + # pylint-celery + # pylint-django + # pylint-plugin-utils +pylint-celery==0.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-lint +pylint-django==2.5.5 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-lint +pylint-plugin-utils==0.8.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint-celery + # pylint-django +pymemcache==4.0.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +pymongo==3.13.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-opaque-keys +pynacl==1.5.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-django-utils +pyproject-api==1.6.1 + # via + # -r requirements/test.txt + # tox +pyproject-hooks==1.0.0 + # via + # -r requirements/pip-tools.txt + # build + # pip-tools +pytest==8.1.1 + # via + # -r requirements/test.txt + # pytest-cov + # pytest-django +pytest-cov==5.0.0 + # via -r requirements/test.txt +pytest-django==4.8.0 + # via -r requirements/test.txt +python-dateutil==2.9.0.post0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # analytics-python + # celery + # faker +python-memcached==1.62 + # via -r requirements/dev.in +python-slugify==8.0.4 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # code-annotations +python3-openid==3.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # social-auth-core +pytz==2024.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +pyyaml==6.0.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # code-annotations + # drf-spectacular + # edx-django-release-util + # edx-i18n-tools + # responses +redis==3.5.3 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt + # -r requirements/test.txt +referencing==0.34.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # algoliasearch + # analytics-python + # edx-drf-extensions + # edx-rest-api-client + # requests-oauthlib + # responses + # slumber + # social-auth-core +requests-oauthlib==2.0.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # social-auth-core +responses==0.25.0 + # via + # -r requirements/dev.in + # -r requirements/test.txt +rpds-py==0.18.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # jsonschema + # referencing +rules==3.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +scikit-learn==1.4.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +scipy==1.13.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # scikit-learn +semantic-version==2.10.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-drf-extensions +simplejson==3.19.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +six==1.16.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # analytics-python + # edx-auth-backends + # edx-django-release-util + # edx-lint + # edx-rbac + # python-dateutil +slumber==0.7.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-rest-api-client +sniffio==1.3.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # anyio + # httpx + # openai +snowballstemmer==2.2.0 + # via + # -r requirements/quality.txt + # pydocstyle +social-auth-app-django==5.4.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-auth-backends +social-auth-core==4.5.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-auth-backends + # social-auth-app-django +sqlparse==0.5.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # django + # django-debug-toolbar +stevedore==5.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # code-annotations + # edx-django-utils + # edx-opaque-keys +text-unidecode==1.3 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # python-slugify +threadpoolctl==3.4.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # scikit-learn +tomlkit==0.12.4 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # pylint +tox==4.14.2 + # via -r requirements/test.txt +tqdm==4.66.2 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # openai +typing-extensions==4.11.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # edx-opaque-keys + # openai + # pydantic + # pydantic-core +tzdata==2024.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # celery +uritemplate==4.1.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # drf-spectacular +urllib3==2.2.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # requests + # responses +vine==5.1.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # amqp + # celery + # kombu +virtualenv==20.25.3 + # via + # -r requirements/test.txt + # tox +wcwidth==0.2.13 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # prompt-toolkit +wheel==0.43.0 + # via + # -r requirements/pip-tools.txt + # pip-tools +wrapt==1.16.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # astroid +xlsxwriter==3.2.0 + # via + # -r requirements/quality.txt + # -r requirements/test.txt +zipp==3.18.1 + # via + # -r requirements/quality.txt + # -r requirements/test.txt + # importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/requirements/doc.txt b/requirements/doc.txt index 23c8d4e96..e66ba9888 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -50,8 +50,9 @@ backoff==1.10.0 # via # -r requirements/test.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # -r requirements/test.txt # celery # django @@ -67,7 +68,7 @@ cachetools==5.3.3 # via # -r requirements/test.txt # tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/test.txt @@ -283,7 +284,7 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==24.9.0 +faker==24.11.0 # via # -r requirements/test.txt # factory-boy @@ -710,7 +711,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.1 +virtualenv==20.25.3 # via # -r requirements/test.txt # tox diff --git a/requirements/production.txt b/requirements/production.txt index 124079573..c1f5df7e7 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -36,7 +36,7 @@ backoff==1.10.0 # via # -r requirements/base.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via # -r requirements/base.txt # celery @@ -47,7 +47,7 @@ billiard==4.2.0 # via # -r requirements/base.txt # celery -celery==5.3.6 +celery==5.4.0 # via # -r requirements/base.txt # django-celery-results @@ -215,7 +215,7 @@ gevent==24.2.1 # via -r requirements/production.in greenlet==3.0.3 # via gevent -gunicorn==21.2.0 +gunicorn==22.0.0 # via -r requirements/production.in h11==0.14.0 # via diff --git a/requirements/quality.txt b/requirements/quality.txt index 977c9418e..1eec6f46f 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -41,8 +41,9 @@ backoff==1.10.0 # via # -r requirements/base.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # -r requirements/base.txt # celery # django @@ -52,7 +53,7 @@ billiard==4.2.0 # via # -r requirements/base.txt # celery -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/base.txt diff --git a/requirements/test.txt b/requirements/test.txt index 3d056c73c..245cb5c37 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -41,8 +41,9 @@ backoff==1.10.0 # via # -r requirements/base.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # -r requirements/base.txt # celery # django @@ -54,7 +55,7 @@ billiard==4.2.0 # celery cachetools==5.3.3 # via tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/base.txt @@ -251,7 +252,7 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.in -faker==24.9.0 +faker==24.11.0 # via factory-boy filelock==3.13.4 # via @@ -599,7 +600,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.1 +virtualenv==20.25.3 # via tox wcwidth==0.2.13 # via diff --git a/requirements/test312.txt b/requirements/test312.txt new file mode 100644 index 000000000..c4926131e --- /dev/null +++ b/requirements/test312.txt @@ -0,0 +1,579 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# make upgrade +# +algoliasearch==3.0.0 + # via -r requirements/base.txt +amqp==5.2.0 + # via + # -r requirements/base.txt + # kombu +analytics-python==1.4.post1 + # via -r requirements/base.txt +annotated-types==0.6.0 + # via + # -r requirements/base.txt + # pydantic +anyio==4.3.0 + # via + # -r requirements/base.txt + # httpx + # openai +asgiref==3.8.1 + # via + # -r requirements/base.txt + # django + # django-cors-headers + # django-simple-history +astroid==2.11.7 + # via + # -c requirements/constraints.txt + # pylint + # pylint-celery +attrs==23.2.0 + # via + # -r requirements/base.txt + # jsonschema + # referencing +backoff==1.10.0 + # via + # -r requirements/base.txt + # analytics-python +billiard==4.2.0 + # via + # -r requirements/base.txt + # celery +cachetools==5.3.3 + # via tox +celery==5.3.6 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt + # django-celery-results + # edx-celeryutils +certifi==2024.2.2 + # via + # -r requirements/base.txt + # httpcore + # httpx + # requests +cffi==1.16.0 + # via + # -r requirements/base.txt + # cryptography + # pynacl +chardet==5.2.0 + # via tox +charset-normalizer==3.3.2 + # via + # -r requirements/base.txt + # requests +click==8.1.7 + # via + # -r requirements/base.txt + # celery + # click-didyoumean + # click-log + # click-plugins + # click-repl + # code-annotations + # edx-django-utils + # edx-lint +click-didyoumean==0.3.1 + # via + # -r requirements/base.txt + # celery +click-log==0.4.0 + # via edx-lint +click-plugins==1.1.1 + # via + # -r requirements/base.txt + # celery +click-repl==0.3.0 + # via + # -r requirements/base.txt + # celery +code-annotations==1.8.0 + # via + # -r requirements/base.txt + # -r requirements/test.in + # edx-lint + # edx-toggles +colorama==0.4.6 + # via tox +coverage[toml]==7.4.4 + # via + # -r requirements/test.in + # pytest-cov +cryptography==42.0.5 + # via + # -r requirements/base.txt + # pyjwt + # social-auth-core +ddt==1.7.2 + # via -r requirements/test.in +defusedxml==0.7.1 + # via + # -r requirements/base.txt + # djangorestframework-xml + # python3-openid + # social-auth-core +dill==0.3.8 + # via pylint +distlib==0.3.8 + # via virtualenv +distro==1.9.0 + # via + # -r requirements/base.txt + # openai + # via + # -c requirements/common_constraints.txt + # -c requirements/constraints.txt + # -r requirements/base.txt + # django-celery-results + # django-clearcache + # django-config-models + # django-cors-headers + # django-crum + # django-extensions + # django-log-request-id + # django-model-utils + # django-waffle + # djangorestframework + # drf-jwt + # drf-spectacular + # edx-auth-backends + # edx-celeryutils + # edx-django-release-util + # edx-django-utils + # edx-drf-extensions + # edx-rbac + # edx-toggles + # jsonfield + # jsonfield2 + # social-auth-app-django +django-celery-results==2.5.1 + # via -r requirements/base.txt +django-clearcache==1.2.1 + # via -r requirements/base.txt +django-config-models==2.7.0 + # via -r requirements/base.txt +django-cors-headers==4.3.1 + # via -r requirements/base.txt +django-crum==0.7.9 + # via + # -r requirements/base.txt + # edx-django-utils + # edx-rbac + # edx-toggles +django-dynamic-fixture==4.0.1 + # via -r requirements/test.in +django-extensions==3.2.3 + # via -r requirements/base.txt +django-log-request-id==2.1.0 + # via -r requirements/base.txt +django-model-utils==4.5.0 + # via + # -r requirements/base.txt + # edx-celeryutils + # edx-rbac +django-simple-history==3.5.0 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt +django-waffle==4.1.0 + # via + # -r requirements/base.txt + # edx-django-utils + # edx-drf-extensions + # edx-toggles +djangoql==0.18.1 + # via -r requirements/base.txt +djangorestframework==3.15.1 + # via + # -r requirements/base.txt + # django-config-models + # drf-jwt + # drf-spectacular + # edx-drf-extensions +djangorestframework-xml==2.0.0 + # via -r requirements/base.txt +drf-jwt==1.19.2 + # via + # -r requirements/base.txt + # edx-drf-extensions +drf-spectacular==0.27.2 + # via -r requirements/base.txt +edx-auth-backends==4.3.0 + # via -r requirements/base.txt +edx-celeryutils==1.3.0 + # via -r requirements/base.txt +edx-django-release-util==1.4.0 + # via -r requirements/base.txt +edx-django-utils==5.12.0 + # via + # -r requirements/base.txt + # django-config-models + # edx-drf-extensions + # edx-rest-api-client + # edx-toggles +edx-drf-extensions==10.3.0 + # via + # -r requirements/base.txt + # edx-rbac +edx-lint==5.2.5 + # via + # -c requirements/constraints.txt + # -r requirements/test.in +edx-opaque-keys==2.5.1 + # via + # -r requirements/base.txt + # edx-drf-extensions +edx-rbac==1.8.0 + # via -r requirements/base.txt +edx-rest-api-client==5.7.0 + # via -r requirements/base.txt +edx-toggles==5.2.0 + # via -r requirements/base.txt +factory-boy==3.3.0 + # via -r requirements/test.in +faker==24.9.0 + # via factory-boy +filelock==3.13.4 + # via + # tox + # virtualenv +h11==0.14.0 + # via + # -r requirements/base.txt + # httpcore +httpcore==1.0.5 + # via + # -r requirements/base.txt + # httpx +httpx==0.27.0 + # via + # -r requirements/base.txt + # openai +idna==3.7 + # via + # -r requirements/base.txt + # anyio + # httpx + # requests +inflection==0.5.1 + # via + # -r requirements/base.txt + # drf-spectacular +iniconfig==2.0.0 + # via pytest +isort==5.13.2 + # via pylint +jinja2==3.1.3 + # via + # -r requirements/base.txt + # code-annotations +joblib==1.4.0 + # via + # -r requirements/base.txt + # scikit-learn +jsonfield==3.1.0 + # via + # -r requirements/base.txt + # edx-celeryutils +jsonfield2==4.0.0.post0 + # via -r requirements/base.txt +jsonschema==4.21.1 + # via + # -r requirements/base.txt + # drf-spectacular +jsonschema-specifications==2023.12.1 + # via + # -r requirements/base.txt + # jsonschema +kombu==5.3.7 + # via + # -r requirements/base.txt + # celery +lazy-object-proxy==1.10.0 + # via astroid +markupsafe==2.1.5 + # via + # -r requirements/base.txt + # jinja2 +mccabe==0.7.0 + # via pylint +monotonic==1.6 + # via + # -r requirements/base.txt + # analytics-python +mysqlclient==2.2.4 + # via -r requirements/base.txt +newrelic==9.8.0 + # via + # -r requirements/base.txt + # edx-django-utils +numpy==1.26.4 + # via + # -r requirements/base.txt + # scikit-learn + # scipy +oauthlib==3.2.2 + # via + # -r requirements/base.txt + # requests-oauthlib + # social-auth-core +openai==1.13.3 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt +packaging==24.0 + # via + # pyproject-api + # pytest + # tox +pbr==6.0.0 + # via + # -r requirements/base.txt + # stevedore +platformdirs==4.2.0 + # via + # pylint + # tox + # virtualenv +pluggy==1.4.0 + # via + # pytest + # tox +ply==3.11 + # via + # -r requirements/base.txt + # djangoql +prompt-toolkit==3.0.43 + # via + # -r requirements/base.txt + # click-repl +psutil==5.9.8 + # via + # -r requirements/base.txt + # edx-django-utils +pycparser==2.22 + # via + # -r requirements/base.txt + # cffi +pydantic==2.7.0 + # via + # -r requirements/base.txt + # openai +pydantic-core==2.18.1 + # via + # -r requirements/base.txt + # pydantic +pyjwt[crypto]==2.8.0 + # via + # -r requirements/base.txt + # drf-jwt + # edx-auth-backends + # edx-drf-extensions + # edx-rest-api-client + # social-auth-core +pylint==2.14.5 + # via + # -c requirements/constraints.txt + # edx-lint + # pylint-celery + # pylint-django + # pylint-plugin-utils +pylint-celery==0.3 + # via edx-lint +pylint-django==2.5.5 + # via edx-lint +pylint-plugin-utils==0.8.2 + # via + # pylint-celery + # pylint-django +pymemcache==4.0.0 + # via -r requirements/base.txt +pymongo==3.13.0 + # via + # -r requirements/base.txt + # edx-opaque-keys +pynacl==1.5.0 + # via + # -r requirements/base.txt + # edx-django-utils +pyproject-api==1.6.1 + # via tox +pytest==8.1.1 + # via + # pytest-cov + # pytest-django +pytest-cov==5.0.0 + # via -r requirements/test.in +pytest-django==4.8.0 + # via -r requirements/test.in +python-dateutil==2.9.0.post0 + # via + # -r requirements/base.txt + # analytics-python + # celery + # faker +python-slugify==8.0.4 + # via + # -r requirements/base.txt + # code-annotations +python3-openid==3.2.0 + # via + # -r requirements/base.txt + # social-auth-core +pytz==2024.1 + # via -r requirements/base.txt +pyyaml==6.0.1 + # via + # -r requirements/base.txt + # code-annotations + # drf-spectacular + # edx-django-release-util + # responses +redis==3.5.3 + # via + # -c requirements/constraints.txt + # -r requirements/base.txt +referencing==0.34.0 + # via + # -r requirements/base.txt + # jsonschema + # jsonschema-specifications +requests==2.31.0 + # via + # -r requirements/base.txt + # algoliasearch + # analytics-python + # edx-drf-extensions + # edx-rest-api-client + # requests-oauthlib + # responses + # slumber + # social-auth-core +requests-oauthlib==2.0.0 + # via + # -r requirements/base.txt + # social-auth-core +responses==0.25.0 + # via -r requirements/test.in +rpds-py==0.18.0 + # via + # -r requirements/base.txt + # jsonschema + # referencing +rules==3.3 + # via -r requirements/base.txt +scikit-learn==1.4.2 + # via -r requirements/base.txt +scipy==1.13.0 + # via + # -r requirements/base.txt + # scikit-learn +semantic-version==2.10.0 + # via + # -r requirements/base.txt + # edx-drf-extensions +simplejson==3.19.2 + # via -r requirements/base.txt +six==1.16.0 + # via + # -r requirements/base.txt + # analytics-python + # edx-auth-backends + # edx-django-release-util + # edx-lint + # edx-rbac + # python-dateutil +slumber==0.7.1 + # via + # -r requirements/base.txt + # edx-rest-api-client +sniffio==1.3.1 + # via + # -r requirements/base.txt + # anyio + # httpx + # openai +social-auth-app-django==5.4.0 + # via + # -r requirements/base.txt + # edx-auth-backends +social-auth-core==4.5.3 + # via + # -r requirements/base.txt + # edx-auth-backends + # social-auth-app-django +sqlparse==0.5.0 + # via + # -r requirements/base.txt + # django +stevedore==5.2.0 + # via + # -r requirements/base.txt + # code-annotations + # edx-django-utils + # edx-opaque-keys +text-unidecode==1.3 + # via + # -r requirements/base.txt + # python-slugify +threadpoolctl==3.4.0 + # via + # -r requirements/base.txt + # scikit-learn +tomlkit==0.12.4 + # via pylint +tox==4.14.2 + # via -r requirements/test.in +tqdm==4.66.2 + # via + # -r requirements/base.txt + # openai +typing-extensions==4.11.0 + # via + # -r requirements/base.txt + # edx-opaque-keys + # openai + # pydantic + # pydantic-core +tzdata==2024.1 + # via + # -r requirements/base.txt + # celery +uritemplate==4.1.1 + # via + # -r requirements/base.txt + # drf-spectacular +urllib3==2.2.1 + # via + # -r requirements/base.txt + # requests + # responses +vine==5.1.0 + # via + # -r requirements/base.txt + # amqp + # celery + # kombu +virtualenv==20.25.3 + # via tox +wcwidth==0.2.13 + # via + # -r requirements/base.txt + # prompt-toolkit +wrapt==1.16.0 + # via astroid +xlsxwriter==3.2.0 + # via -r requirements/base.txt +zipp==3.18.1 + # via -r requirements/base.txt + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/requirements/validation.txt b/requirements/validation.txt index 5464491fc..1c698a22f 100644 --- a/requirements/validation.txt +++ b/requirements/validation.txt @@ -53,8 +53,9 @@ backoff==1.10.0 # -r requirements/quality.txt # -r requirements/test.txt # analytics-python -backports-zoneinfo[tzdata]==0.2.1 +backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" # via + # -c requirements/constraints.txt # -r requirements/quality.txt # -r requirements/test.txt # celery @@ -70,7 +71,7 @@ cachetools==5.3.3 # via # -r requirements/test.txt # tox -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # -r requirements/quality.txt @@ -333,7 +334,7 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==24.9.0 +faker==24.11.0 # via # -r requirements/test.txt # factory-boy @@ -794,7 +795,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.25.1 +virtualenv==20.25.3 # via # -r requirements/test.txt # tox diff --git a/tox.ini b/tox.ini index 90a45394a..ef20b2c46 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,17 @@ [tox] skipsdist = true -envlist = {py38}-django{42} +envlist = py{38, 312}-django{42} -[testenv] +[testenv:py38-django42] deps = django42: Django>=4.2,<5.0 -r{toxinidir}/requirements/test.txt commands = {posargs:pytest} +[testenv:py312-django42] +deps = + django42: Django>=4.2,<5.0 + -r{toxinidir}/requirements/test312.txt +commands = + {posargs:pytest} diff --git a/validate.sh b/validate.sh index cf15e59dc..2db4d40fa 100755 --- a/validate.sh +++ b/validate.sh @@ -6,7 +6,11 @@ export DJANGO_SETTINGS_MODULE=enterprise_catalog.settings.test cd /edx/app/enterprise_catalog/enterprise_catalog -make requirements +if [[ "$TOXENV" == "py38-django42" ]]; then + make requirements +elif [[ "$TOXENV" == "py312-django42" ]]; then + make requirements312 +fi # Alex Dusenbery 2022-04-12: This is failing CI for a reason I don't understand # and I don't know why we care about translations here, anyway.