diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 673f96e4..a009cb26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: - name: Run Tests run: docker exec -t analytics_api_testing bash -c "cd /edx/app/analytics_api/analytics_api/ - && export TOXENV=django32 && make test.requirements tox.requirements ${{ matrix.targets }}" + && export TOXENV=django42 && make test.requirements tox.requirements ${{ matrix.targets }}" - name: Run Coverage if: matrix.python-version == '3.8' && matrix.targets=='main.test' diff --git a/analyticsdataserver/settings/base.py b/analyticsdataserver/settings/base.py index 44957a82..b77f5b3d 100644 --- a/analyticsdataserver/settings/base.py +++ b/analyticsdataserver/settings/base.py @@ -110,6 +110,10 @@ USE_TZ = True ########## END GENERAL CONFIGURATION +# Django 4.0+ uses zoneinfo if this is not set. We can remove this and +# migrate to zoneinfo after Django 4.2 upgrade. See more on following url +# https://docs.djangoproject.com/en/4.2/releases/4.0/#zoneinfo-default-timezone-implementation +USE_DEPRECATED_PYTZ = True ########## STATIC FILE CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root @@ -427,6 +431,7 @@ ########## EDX ENTERPRISE DATA CONFIGURATION API_AUTH_TOKEN = 'put-your-api-token-here' CSRF_COOKIE_SECURE = False +CSRF_TRUSTED_ORIGINS_WITH_SCHEME = [] # just for Django 4.2 upgrade EXTRA_APPS = [] SESSION_EXPIRE_AT_BROWSER_CLOSE = False diff --git a/analyticsdataserver/settings/production.py b/analyticsdataserver/settings/production.py index 5d505c98..f17d4e2d 100644 --- a/analyticsdataserver/settings/production.py +++ b/analyticsdataserver/settings/production.py @@ -4,6 +4,7 @@ from os import environ +import django import six import yaml # Normally you should not import ANYTHING from Django directly @@ -52,3 +53,6 @@ def get_env_setting(setting): for override, value in DB_OVERRIDES.items(): DATABASES['default'][override] = value + +if django.VERSION[0] >= 4: # for greater than django 3.2 use schemes. + CSRF_TRUSTED_ORIGINS = CSRF_TRUSTED_ORIGINS_WITH_SCHEME diff --git a/requirements/base.txt b/requirements/base.txt index b7de4152..ec5b5be8 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -8,21 +8,23 @@ asgiref==3.7.2 # via # django # django-countries +backports-zoneinfo==0.2.1 + # via django boto==2.49.0 # via -r requirements/base.in -boto3==1.28.54 +boto3==1.28.61 # via -r requirements/base.in -botocore==1.31.54 +botocore==1.31.61 # via # boto3 # s3transfer certifi==2023.7.22 # via requests -cffi==1.15.1 +cffi==1.16.0 # via # cryptography # pynacl -charset-normalizer==3.2.0 +charset-normalizer==3.3.0 # via requests click==8.1.7 # via edx-django-utils @@ -34,7 +36,7 @@ cryptography==41.0.4 # via # django-fernet-fields-v2 # pyjwt -django==3.2.21 +django==4.2.6 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -70,7 +72,7 @@ django-model-utils==4.3.1 # via # edx-enterprise-data # edx-rbac -django-storages==1.8 +django-storages==1.10.1 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -151,7 +153,7 @@ newrelic==9.1.0 # via edx-django-utils ordered-set==4.1.0 # via -r requirements/base.in -packaging==23.1 +packaging==23.2 # via drf-yasg pbr==5.11.1 # via stevedore @@ -178,7 +180,6 @@ python-memcached==1.59 # via -r requirements/base.in pytz==2023.3.post1 # via - # django # djangorestframework # drf-yasg pyyaml==6.0.1 @@ -194,7 +195,7 @@ requests==2.31.0 # slumber rules==3.3 # via edx-enterprise-data -s3transfer==0.6.2 +s3transfer==0.7.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -229,7 +230,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.16 +urllib3==1.26.17 # via # -r requirements/base.in # botocore diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 363d74cd..6e3d9853 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -9,10 +9,11 @@ # linking to it here is good. # TODO: Many pinned dependencies should be unpinned and/or moved to this constraints file. -django<4.0 +django<4.3 # django-storages version 1.9 drops support for boto storage backend. -django-storages<1.9 # BSD +# pinning before django upgrade, will unpin after that +django-storages<1.11 # BSD # elasticsearch library cannot be greater than 7.14.0. 7.14.0 library is not compatible with the 7.10 server in stage and prod elasticsearch < 7.14.0 diff --git a/requirements/dev.txt b/requirements/dev.txt index fcaab47e..eb44e72f 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,21 +8,23 @@ asgiref==3.7.2 # via # django # django-countries +backports-zoneinfo==0.2.1 + # via django boto==2.49.0 # via -r requirements/base.in -boto3==1.28.54 +boto3==1.28.61 # via -r requirements/base.in -botocore==1.31.54 +botocore==1.31.61 # via # boto3 # s3transfer certifi==2023.7.22 # via requests -cffi==1.15.1 +cffi==1.16.0 # via # cryptography # pynacl -charset-normalizer==3.2.0 +charset-normalizer==3.3.0 # via requests click==8.1.7 # via edx-django-utils @@ -34,7 +36,7 @@ cryptography==41.0.4 # via # django-fernet-fields-v2 # pyjwt -django==3.2.21 +django==4.2.6 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -70,7 +72,7 @@ django-model-utils==4.3.1 # via # edx-enterprise-data # edx-rbac -django-storages==1.8 +django-storages==1.10.1 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -153,7 +155,7 @@ newrelic==9.1.0 # via edx-django-utils ordered-set==4.1.0 # via -r requirements/base.in -packaging==23.1 +packaging==23.2 # via drf-yasg pbr==5.11.1 # via stevedore @@ -180,7 +182,6 @@ python-memcached==1.59 # via -r requirements/base.in pytz==2023.3.post1 # via - # django # djangorestframework # drf-yasg pyyaml==6.0.1 @@ -196,7 +197,7 @@ requests==2.31.0 # slumber rules==3.3 # via edx-enterprise-data -s3transfer==0.6.2 +s3transfer==0.7.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -231,7 +232,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.16 +urllib3==1.26.17 # via # -r requirements/base.in # botocore diff --git a/requirements/django.txt b/requirements/django.txt index 62b5cb85..7ac6d4fc 100644 --- a/requirements/django.txt +++ b/requirements/django.txt @@ -1 +1 @@ -django==3.2.21 +django==4.2.6 diff --git a/requirements/doc.txt b/requirements/doc.txt index dafd0ddd..4399c373 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -12,27 +12,29 @@ asgiref==3.7.2 # via # django # django-countries -babel==2.12.1 +babel==2.13.0 # via # pydata-sphinx-theme # sphinx +backports-zoneinfo==0.2.1 + # via django beautifulsoup4==4.12.2 # via pydata-sphinx-theme boto==2.49.0 # via -r requirements/base.in -boto3==1.28.54 +boto3==1.28.61 # via -r requirements/base.in -botocore==1.31.54 +botocore==1.31.61 # via # boto3 # s3transfer certifi==2023.7.22 # via requests -cffi==1.15.1 +cffi==1.16.0 # via # cryptography # pynacl -charset-normalizer==3.2.0 +charset-normalizer==3.3.0 # via requests click==8.1.7 # via edx-django-utils @@ -44,7 +46,7 @@ cryptography==41.0.4 # via # django-fernet-fields-v2 # pyjwt -django==3.2.21 +django==4.2.6 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -80,7 +82,7 @@ django-model-utils==4.3.1 # via # edx-enterprise-data # edx-rbac -django-storages==1.8 +django-storages==1.10.1 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -171,7 +173,7 @@ newrelic==9.1.0 # via edx-django-utils ordered-set==4.1.0 # via -r requirements/base.in -packaging==23.1 +packaging==23.2 # via # drf-yasg # pydata-sphinx-theme @@ -211,7 +213,6 @@ python-memcached==1.59 pytz==2023.3.post1 # via # babel - # django # djangorestframework # drf-yasg pyyaml==6.0.1 @@ -228,7 +229,7 @@ requests==2.31.0 # sphinx rules==3.3 # via edx-enterprise-data -s3transfer==0.6.2 +s3transfer==0.7.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -287,7 +288,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.16 +urllib3==1.26.17 # via # -r requirements/base.in # botocore diff --git a/requirements/pip_tools.txt b/requirements/pip_tools.txt index a808909d..f64fb7d7 100644 --- a/requirements/pip_tools.txt +++ b/requirements/pip_tools.txt @@ -10,7 +10,7 @@ click==8.1.7 # via pip-tools importlib-metadata==6.8.0 # via build -packaging==23.1 +packaging==23.2 # via build pip-tools==7.3.0 # via -r requirements/pip_tools.in diff --git a/requirements/production.txt b/requirements/production.txt index dee1f174..e2e67b3e 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -8,21 +8,23 @@ asgiref==3.7.2 # via # django # django-countries +backports-zoneinfo==0.2.1 + # via django boto==2.49.0 # via -r requirements/base.in -boto3==1.28.54 +boto3==1.28.61 # via -r requirements/base.in -botocore==1.31.54 +botocore==1.31.61 # via # boto3 # s3transfer certifi==2023.7.22 # via requests -cffi==1.15.1 +cffi==1.16.0 # via # cryptography # pynacl -charset-normalizer==3.2.0 +charset-normalizer==3.3.0 # via requests click==8.1.7 # via edx-django-utils @@ -34,7 +36,7 @@ cryptography==41.0.4 # via # django-fernet-fields-v2 # pyjwt -django==3.2.21 +django==4.2.6 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -70,7 +72,7 @@ django-model-utils==4.3.1 # via # edx-enterprise-data # edx-rbac -django-storages==1.8 +django-storages==1.10.1 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -129,7 +131,7 @@ faker==19.6.2 # via factory-boy gevent==23.9.1 # via -r requirements/production.in -greenlet==2.0.2 +greenlet==3.0.0 # via gevent gunicorn==21.2.0 # via -r requirements/production.in @@ -161,7 +163,7 @@ newrelic==9.1.0 # edx-django-utils ordered-set==4.1.0 # via -r requirements/base.in -packaging==23.1 +packaging==23.2 # via # drf-yasg # gunicorn @@ -192,7 +194,6 @@ python-memcached==1.59 # via -r requirements/base.in pytz==2023.3.post1 # via - # django # djangorestframework # drf-yasg pyyaml==6.0.1 @@ -209,7 +210,7 @@ requests==2.31.0 # slumber rules==3.3 # via edx-enterprise-data -s3transfer==0.6.2 +s3transfer==0.7.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -244,7 +245,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.16 +urllib3==1.26.17 # via # -r requirements/base.in # botocore @@ -255,7 +256,7 @@ zipp==3.17.0 # via importlib-metadata zope-event==5.0 # via gevent -zope-interface==6.0 +zope-interface==6.1 # via gevent # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/test.txt b/requirements/test.txt index c10fe79a..73f65265 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -10,23 +10,25 @@ asgiref==3.7.2 # django-countries astroid==2.3.3 # via pylint +backports-zoneinfo==0.2.1 + # via django boto==2.49.0 # via -r requirements/base.in -boto3==1.28.54 +boto3==1.28.61 # via -r requirements/base.in -botocore==1.31.54 +botocore==1.31.61 # via # boto3 # s3transfer certifi==2023.7.22 # via requests -cffi==1.15.1 +cffi==1.16.0 # via # cryptography # pynacl chardet==5.2.0 # via diff-cover -charset-normalizer==3.2.0 +charset-normalizer==3.3.0 # via requests click==8.1.7 # via edx-django-utils @@ -34,7 +36,7 @@ coreapi==2.3.3 # via -r requirements/base.in coreschema==0.0.4 # via coreapi -coverage[toml]==7.3.1 +coverage[toml]==7.3.2 # via # -r requirements/test.in # pytest-cov @@ -83,7 +85,7 @@ django-model-utils==4.3.1 # via # edx-enterprise-data # edx-rbac -django-storages==1.8 +django-storages==1.10.1 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -178,7 +180,7 @@ newrelic==9.1.0 # via edx-django-utils ordered-set==4.1.0 # via -r requirements/base.in -packaging==23.1 +packaging==23.2 # via # drf-yasg # pytest @@ -231,7 +233,6 @@ python-memcached==1.59 pytz==2023.3.post1 # via # -r requirements/test.in - # django # djangorestframework # drf-yasg pyyaml==6.0.1 @@ -251,7 +252,7 @@ responses==0.23.3 # via -r requirements/test.in rules==3.3 # via edx-enterprise-data -s3transfer==0.6.2 +s3transfer==0.7.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -295,7 +296,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.16 +urllib3==1.26.17 # via # -r requirements/base.in # botocore diff --git a/requirements/tox.txt b/requirements/tox.txt index 4766fa55..eccfb110 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -10,9 +10,9 @@ filelock==3.12.4 # via # tox # virtualenv -packaging==23.1 +packaging==23.2 # via tox -platformdirs==3.10.0 +platformdirs==3.11.0 # via virtualenv pluggy==1.3.0 # via tox diff --git a/tox.ini b/tox.ini index c28250f5..d188d1d4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] skipsdist = True -envlist = py38-django{32, 42} +envlist = py38-django{42} [testenv] passenv = @@ -11,7 +11,6 @@ setenv = NODE_BIN = ./node_modules/.bin PATH = $PATH:$NODE_BIN deps = - django32: Django>=3.2,<3.3 django42: Django>=4.2,<4.3 -r requirements/test.txt commands =