diff --git a/.github/docker-compose-ci.yml b/.github/docker-compose-ci.yml index 21d29508..f630d06c 100644 --- a/.github/docker-compose-ci.yml +++ b/.github/docker-compose-ci.yml @@ -3,7 +3,11 @@ version: "2" services: analytics_api: - image: edxops/analytics-api-dev:latest + # Use this image once the Python version upgrade is complete + # image: edxops/analytics-api-dev:latest + build: + context: ../ + dockerfile: Dockerfile container_name: analytics_api_testing volumes: - ..:/edx/app/analytics_api/analytics_api diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b548116..7d607151 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: os: - ubuntu-20.04 python-version: - - 3.8 + - 3.11 targets: [ 'quality','main.test','docs' ] steps: @@ -40,7 +40,7 @@ jobs: && export TOXENV=django42 && make test.requirements tox.requirements ${{ matrix.targets }}" - name: Run Coverage - if: matrix.python-version == '3.8' && matrix.targets=='main.test' + if: matrix.python-version == '3.11' && matrix.targets=='main.test' uses: codecov/codecov-action@v1 with: fail_ci_if_error: true diff --git a/.github/workflows/mysql8-migrations.yml b/.github/workflows/mysql8-migrations.yml index 4ca91459..d8f78c3f 100644 --- a/.github/workflows/mysql8-migrations.yml +++ b/.github/workflows/mysql8-migrations.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ ubuntu-20.04 ] - python-version: [ 3.8 ] + python-version: [ 3.11 ] steps: - name: Checkout repo diff --git a/.github/workflows/upgrade-python-requirements.yml b/.github/workflows/upgrade-python-requirements.yml index 8b797093..f846ee96 100644 --- a/.github/workflows/upgrade-python-requirements.yml +++ b/.github/workflows/upgrade-python-requirements.yml @@ -15,7 +15,7 @@ jobs: uses: openedx/.github/.github/workflows/upgrade-python-requirements.yml@master with: branch: ${{ github.event.inputs.branch || 'master' }} - python_version: "3.8" + python_version: "3.11" # optional parameters below; fill in if you'd like github or email notifications # user_reviewers: "" # team_reviewers: "" diff --git a/Dockerfile b/Dockerfile index 71026f2a..8728e588 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,22 +2,41 @@ FROM ubuntu:focal as base # System requirements. +# ENV variables for Python 3.11 support +ARG PYTHON_VERSION=3.11 +ENV TZ=UTC +ENV TERM=xterm-256color +ENV DEBIAN_FRONTEND=noninteractive + +# software-properties-common is needed to setup Python 3.11 env +RUN apt-get update && \ + apt-get install -y software-properties-common && \ + apt-add-repository -y ppa:deadsnakes/ppa + # pkg-config; mysqlclient>=2.2.0 requires pkg-config (https://github.com/PyMySQL/mysqlclient/issues/620) -RUN apt update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -qy \ +RUN apt-get update && \ + apt-get install -qy \ + build-essential \ curl \ vim \ language-pack-en \ build-essential \ - python3.8-dev \ - python3-virtualenv \ - python3.8-distutils \ + python${PYTHON_VERSION} \ + python${PYTHON_VERSION}-dev \ + python${PYTHON_VERSION}-distutils \ libmysqlclient-dev \ pkg-config \ libssl-dev && \ rm -rf /var/lib/apt/lists/* +RUN update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1 +RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 + +# need to use virtualenv pypi package with Python 3.11 +RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION} +RUN pip install virtualenv + # Use UTF-8. RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 @@ -39,7 +58,7 @@ ENV ANALYTICS_API_CFG "/edx/etc/${ANALYTICS_API_SERVICE_NAME}.yml" # Working directory will be root of repo. WORKDIR ${ANALYTICS_API_CODE_DIR} -RUN virtualenv -p python3.8 --always-copy ${ANALYTICS_API_VENV_DIR} +RUN virtualenv -p python${PYTHON_VERSION} --always-copy ${ANALYTICS_API_VENV_DIR} # Expose canonical Analytics port EXPOSE 19001 diff --git a/analytics_data_api/v0/tests/utils.py b/analytics_data_api/v0/tests/utils.py index 3ee1d811..06aa7834 100644 --- a/analytics_data_api/v0/tests/utils.py +++ b/analytics_data_api/v0/tests/utils.py @@ -17,7 +17,7 @@ def flatten(dictionary, parent_key='', sep='.'): items = [] for key, value in dictionary.items(): new_key = parent_key + sep + key if parent_key else key - if isinstance(value, collections.MutableMapping): + if isinstance(value, collections.abc.MutableMapping): items.extend(list(flatten(value, new_key).items())) else: items.append((new_key, value)) diff --git a/pylintrc b/pylintrc index 9c193307..0d3a1905 100644 --- a/pylintrc +++ b/pylintrc @@ -30,40 +30,28 @@ load-plugins= # multiple time (only on the command line, not in the configuration file where # it should appear only once). disable= -# Never going to use these -# I0011: Locally disabling W0232 -# W0141: Used builtin function 'map' -# W0142: Used * or ** magic -# R0921: Abstract class not referenced -# R0922: Abstract class is only referenced 1 times - I0011,W0141,W0142,R0921,R0922, - - duplicate-code, -# Django makes classes that trigger these -# W0232: Class has no __init__ method - W0232, - -# Might use these when the code is in better shape -# C0302: Too many lines in module -# R0201: Method could be a function -# R0901: Too many ancestors -# R0902: Too many instance attributes -# R0903: Too few public methods (1/2) -# R0904: Too many public methods -# R0911: Too many return statements -# R0912: Too many branches -# R0913: Too many arguments -# R0914: Too many local variables - C0302,R0201,R0901,R0902,R0903,R0904,R0911,R0912,R0913,R0914, -# W0511: TODOs etc - W0511, -# E1103: maybe no member - E1103, -# C0111: missing docstring (handled by pep257) - C0111, - -# We can decide if names are invalid on our own + no-member, + locally-disabled, + duplicate-code, invalid-name, + consider-using-f-string, + raise-missing-from, + deprecated-decorator, + invalid-str-returned, + use-yield-from, + consider-using-generator, + use-dict-literal, + not-callable, + redundant-u-string-prefix, + consider-using-from-import, + missing-module-docstring, + missing-function-docstring, + missing-class-docstring, + too-many-arguments, + too-many-ancestors, + too-many-locals, + too-many-lines, + too-few-public-methods, [REPORTS] @@ -74,11 +62,6 @@ output-format=text # Include message's id in output msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - # Tells whether to display a full report or only the messages reports=no @@ -121,9 +104,6 @@ generated-members= [BASIC] -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ @@ -166,7 +146,7 @@ no-docstring-rgx=__.*__|test_.*|setUp|tearDown [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO +notes=FIXME,XXX [FORMAT] @@ -241,9 +221,6 @@ max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 -# Maximum number of branch for function / method body -max-branchs=12 - # Maximum number of statements in function / method body max-statements=50 diff --git a/requirements/base.txt b/requirements/base.txt index 2a744a27..1cf89c6f 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -9,21 +9,17 @@ asgiref==3.8.1 # django # django-cors-headers # django-countries -backports-zoneinfo==0.2.1 - # via - # django - # djangorestframework boto==2.49.0 # via -r requirements/base.in -boto3==1.35.8 +boto3==1.35.15 # via -r requirements/base.in -botocore==1.35.8 +botocore==1.35.15 # via # boto3 # s3transfer -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.17.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -35,11 +31,11 @@ coreapi==2.3.3 # via -r requirements/base.in coreschema==0.0.4 # via coreapi -cryptography==43.0.0 +cryptography==43.0.1 # via # django-fernet-fields-v2 # pyjwt -django==4.2.15 +django==4.2.16 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -71,7 +67,7 @@ django-fernet-fields-v2==0.9 # via edx-enterprise-data django-filter==24.3 # via edx-enterprise-data -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-enterprise-data # edx-rbac @@ -113,14 +109,14 @@ edx-django-utils==5.15.0 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.in # edx-enterprise-data # edx-rbac -edx-enterprise-data==8.11.0 +edx-enterprise-data==8.11.1 # via -r requirements/base.in -edx-opaque-keys==2.10.0 +edx-opaque-keys==2.11.0 # via # -r requirements/base.in # edx-ccx-keys @@ -128,20 +124,18 @@ edx-opaque-keys==2.10.0 # edx-enterprise-data edx-rbac==1.10.0 # via edx-enterprise-data -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.in # edx-enterprise-data factory-boy==3.3.1 # via edx-enterprise-data -faker==28.0.0 +faker==28.4.1 # via factory-boy html5lib==1.1 # via -r requirements/base.in idna==3.8 # via requests -importlib-metadata==8.4.0 - # via markdown inflection==0.5.1 # via drf-yasg itypes==1.2.0 @@ -208,8 +202,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client - # slumber -rules==3.4 +rules==3.5 # via edx-enterprise-data s3transfer==0.10.2 # via boto3 @@ -222,8 +215,6 @@ six==1.16.0 # edx-rbac # html5lib # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client sqlparse==0.5.1 # via django stevedore==5.3.0 @@ -234,7 +225,6 @@ tqdm==4.66.5 # via -r requirements/base.in typing-extensions==4.12.2 # via - # asgiref # django-countries # edx-opaque-keys tzdata==2024.1 @@ -243,7 +233,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.19 +urllib3==1.26.20 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -251,8 +241,6 @@ urllib3==1.26.19 # requests webencodings==0.5.1 # via html5lib -zipp==3.20.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/ci.txt b/requirements/ci.txt index c52b940f..1f4abdbc 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 829e5a87..41c27074 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -21,9 +21,8 @@ elasticsearch < 7.14.0 # elasticsearch-dsl depends on elasticsearch >=7.8.0,<8.0.0 elasticsearch-dsl>=7.2.1,<8.0.0 -# Use same version of edx-lint -pylint==2.4.4 -pylint-django==2.0.11 - -# botocore 1.34.144 depends on urllib3<1.27 and >=1.25.4; python_version < "3.10" +# botocore 1.35.14 has requirement urllib3<1.27,>=1.25.4; python_version < "3.10" urllib3<2.0.0 + +# path>16.14.0 has removed the deprecated abspath function, which is breaking the docs build +path<16.15.0 diff --git a/requirements/dev.txt b/requirements/dev.txt index 01561887..ce118cd0 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -9,21 +9,17 @@ asgiref==3.8.1 # django # django-cors-headers # django-countries -backports-zoneinfo==0.2.1 - # via - # django - # djangorestframework boto==2.49.0 # via -r requirements/base.in -boto3==1.35.8 +boto3==1.35.15 # via -r requirements/base.in -botocore==1.35.8 +botocore==1.35.15 # via # boto3 # s3transfer -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.17.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -35,11 +31,11 @@ coreapi==2.3.3 # via -r requirements/base.in coreschema==0.0.4 # via coreapi -cryptography==43.0.0 +cryptography==43.0.1 # via # django-fernet-fields-v2 # pyjwt -django==4.2.15 +django==4.2.16 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -71,7 +67,7 @@ django-fernet-fields-v2==0.9 # via edx-enterprise-data django-filter==24.3 # via edx-enterprise-data -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-enterprise-data # edx-rbac @@ -113,14 +109,14 @@ edx-django-utils==5.15.0 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.in # edx-enterprise-data # edx-rbac edx-enterprise-data==8.11.1 # via -r requirements/base.in -edx-opaque-keys==2.10.0 +edx-opaque-keys==2.11.0 # via # -r requirements/base.in # edx-ccx-keys @@ -128,20 +124,18 @@ edx-opaque-keys==2.10.0 # edx-enterprise-data edx-rbac==1.10.0 # via edx-enterprise-data -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.in # edx-enterprise-data factory-boy==3.3.1 # via edx-enterprise-data -faker==28.0.0 +faker==28.4.1 # via factory-boy html5lib==1.1 # via -r requirements/base.in idna==3.8 # via requests -importlib-metadata==8.4.0 - # via markdown inflection==0.5.1 # via drf-yasg itypes==1.2.0 @@ -210,8 +204,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client - # slumber -rules==3.4 +rules==3.5 # via edx-enterprise-data s3transfer==0.10.2 # via boto3 @@ -224,8 +217,6 @@ six==1.16.0 # edx-rbac # html5lib # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client sqlparse==0.5.1 # via django stevedore==5.3.0 @@ -236,7 +227,6 @@ tqdm==4.66.5 # via -r requirements/base.in typing-extensions==4.12.2 # via - # asgiref # django-countries # edx-opaque-keys tzdata==2024.1 @@ -245,7 +235,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.19 +urllib3==1.26.20 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -253,8 +243,6 @@ urllib3==1.26.19 # requests webencodings==0.5.1 # via html5lib -zipp==3.20.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/django.txt b/requirements/django.txt index 16bc98be..64aaf996 100644 --- a/requirements/django.txt +++ b/requirements/django.txt @@ -1 +1 @@ -django==4.2.15 +django==4.2.16 diff --git a/requirements/doc.txt b/requirements/doc.txt index ffa237f9..a7800dfa 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -accessible-pygments==0.0.4 +accessible-pygments==0.0.5 # via pydata-sphinx-theme -alabaster==0.7.13 +alabaster==1.0.0 # via sphinx asgiref==3.8.1 # via @@ -17,23 +17,19 @@ babel==2.16.0 # via # pydata-sphinx-theme # sphinx -backports-zoneinfo==0.2.1 - # via - # django - # djangorestframework beautifulsoup4==4.12.3 # via pydata-sphinx-theme boto==2.49.0 # via -r requirements/base.in -boto3==1.35.8 +boto3==1.35.15 # via -r requirements/base.in -botocore==1.35.8 +botocore==1.35.15 # via # boto3 # s3transfer -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.17.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -45,11 +41,11 @@ coreapi==2.3.3 # via -r requirements/base.in coreschema==0.0.4 # via coreapi -cryptography==43.0.0 +cryptography==43.0.1 # via # django-fernet-fields-v2 # pyjwt -django==4.2.15 +django==4.2.16 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -81,7 +77,7 @@ django-fernet-fields-v2==0.9 # via edx-enterprise-data django-filter==24.3 # via edx-enterprise-data -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-enterprise-data # edx-rbac @@ -107,7 +103,7 @@ djangorestframework-csv==3.0.2 # edx-enterprise-data dnspython==2.6.1 # via pymongo -docutils==0.19 +docutils==0.21.2 # via # pydata-sphinx-theme # sphinx @@ -127,14 +123,14 @@ edx-django-utils==5.15.0 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.in # edx-enterprise-data # edx-rbac edx-enterprise-data==8.11.1 # via -r requirements/base.in -edx-opaque-keys==2.10.0 +edx-opaque-keys==2.11.0 # via # -r requirements/base.in # edx-ccx-keys @@ -142,13 +138,13 @@ edx-opaque-keys==2.10.0 # edx-enterprise-data edx-rbac==1.10.0 # via edx-enterprise-data -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.in # edx-enterprise-data factory-boy==3.3.1 # via edx-enterprise-data -faker==28.0.0 +faker==28.4.1 # via factory-boy html5lib==1.1 # via -r requirements/base.in @@ -156,10 +152,6 @@ idna==3.8 # via requests imagesize==1.4.1 # via sphinx -importlib-metadata==8.4.0 - # via - # markdown - # sphinx inflection==0.5.1 # via drf-yasg itypes==1.2.0 @@ -193,15 +185,17 @@ packaging==24.1 # sphinx pandas==2.0.3 # via edx-enterprise-data -path==17.0.0 - # via -r requirements/doc.in +path==16.14.0 + # via + # -c requirements/constraints.txt + # -r requirements/doc.in pbr==6.1.0 # via stevedore psutil==6.0.0 # via edx-django-utils pycparser==2.22 # via cffi -pydata-sphinx-theme==0.14.4 +pydata-sphinx-theme==0.15.4 # via sphinx-book-theme pygments==2.18.0 # via @@ -228,7 +222,6 @@ python-memcached==1.62 # via -r requirements/base.in pytz==2024.1 # via - # babel # drf-yasg # pandas pyyaml==6.0.2 @@ -241,9 +234,8 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client - # slumber # sphinx -rules==3.4 +rules==3.5 # via edx-enterprise-data s3transfer==0.10.2 # via boto3 @@ -256,30 +248,28 @@ six==1.16.0 # edx-rbac # html5lib # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client snowballstemmer==2.2.0 # via sphinx soupsieve==2.6 # via beautifulsoup4 -sphinx==6.2.1 +sphinx==8.0.2 # via # -r requirements/doc.in # pydata-sphinx-theme # sphinx-book-theme -sphinx-book-theme==1.0.1 +sphinx-book-theme==1.1.3 # via -r requirements/doc.in -sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-applehelp==2.0.0 # via sphinx -sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-devhelp==2.0.0 # via sphinx -sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-qthelp==2.0.0 # via sphinx -sphinxcontrib-serializinghtml==1.1.5 +sphinxcontrib-serializinghtml==2.0.0 # via sphinx sqlparse==0.5.1 # via django @@ -291,7 +281,6 @@ tqdm==4.66.5 # via -r requirements/base.in typing-extensions==4.12.2 # via - # asgiref # django-countries # edx-opaque-keys # pydata-sphinx-theme @@ -301,7 +290,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.19 +urllib3==1.26.20 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -309,8 +298,6 @@ urllib3==1.26.19 # requests webencodings==0.5.1 # via html5lib -zipp==3.20.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/pip.txt b/requirements/pip.txt index f3fa6b47..fd3267b5 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # pip-compile --allow-unsafe --output-file=requirements/pip.txt requirements/pip.in @@ -10,5 +10,5 @@ wheel==0.44.0 # The following packages are considered to be unsafe in a requirements file: pip==24.2 # via -r requirements/pip.in -setuptools==74.0.0 +setuptools==74.1.2 # via -r requirements/pip.in diff --git a/requirements/pip_tools.txt b/requirements/pip_tools.txt index 290fd324..479354ad 100644 --- a/requirements/pip_tools.txt +++ b/requirements/pip_tools.txt @@ -1,15 +1,13 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -build==1.2.1 +build==1.2.2 # via pip-tools click==8.1.7 # via pip-tools -importlib-metadata==8.4.0 - # via build packaging==24.1 # via build pip-tools==7.4.1 @@ -20,14 +18,8 @@ pyproject-hooks==1.1.0 # pip-tools six==1.16.0 # via -r requirements/pip_tools.in -tomli==2.0.1 - # via - # build - # pip-tools wheel==0.44.0 # via pip-tools -zipp==3.20.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/production.txt b/requirements/production.txt index 99f67a33..addf8d31 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -9,21 +9,17 @@ asgiref==3.8.1 # django # django-cors-headers # django-countries -backports-zoneinfo==0.2.1 - # via - # django - # djangorestframework boto==2.49.0 # via -r requirements/base.in -boto3==1.35.8 +boto3==1.35.15 # via -r requirements/base.in -botocore==1.35.8 +botocore==1.35.15 # via # boto3 # s3transfer -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.17.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -35,11 +31,11 @@ coreapi==2.3.3 # via -r requirements/base.in coreschema==0.0.4 # via coreapi -cryptography==43.0.0 +cryptography==43.0.1 # via # django-fernet-fields-v2 # pyjwt -django==4.2.15 +django==4.2.16 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -71,7 +67,7 @@ django-fernet-fields-v2==0.9 # via edx-enterprise-data django-filter==24.3 # via edx-enterprise-data -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-enterprise-data # edx-rbac @@ -113,14 +109,14 @@ edx-django-utils==5.15.0 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.in # edx-enterprise-data # edx-rbac edx-enterprise-data==8.11.1 # via -r requirements/base.in -edx-opaque-keys==2.10.0 +edx-opaque-keys==2.11.0 # via # -r requirements/base.in # edx-ccx-keys @@ -128,13 +124,13 @@ edx-opaque-keys==2.10.0 # edx-enterprise-data edx-rbac==1.10.0 # via edx-enterprise-data -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.in # edx-enterprise-data factory-boy==3.3.1 # via edx-enterprise-data -faker==28.0.0 +faker==28.4.1 # via factory-boy gevent==24.2.1 # via -r requirements/production.in @@ -146,8 +142,6 @@ html5lib==1.1 # via -r requirements/base.in idna==3.8 # via requests -importlib-metadata==8.4.0 - # via markdown inflection==0.5.1 # via drf-yasg itypes==1.2.0 @@ -223,8 +217,7 @@ requests==2.32.3 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client - # slumber -rules==3.4 +rules==3.5 # via edx-enterprise-data s3transfer==0.10.2 # via boto3 @@ -237,8 +230,6 @@ six==1.16.0 # edx-rbac # html5lib # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client sqlparse==0.5.1 # via django stevedore==5.3.0 @@ -249,7 +240,6 @@ tqdm==4.66.5 # via -r requirements/base.in typing-extensions==4.12.2 # via - # asgiref # django-countries # edx-opaque-keys tzdata==2024.1 @@ -258,7 +248,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.19 +urllib3==1.26.20 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -266,8 +256,6 @@ urllib3==1.26.19 # requests webencodings==0.5.1 # via html5lib -zipp==3.20.1 - # via importlib-metadata zope-event==5.0 # via gevent zope-interface==7.0.3 diff --git a/requirements/test.txt b/requirements/test.txt index 42bcb999..f0cf2cc0 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -9,23 +9,19 @@ asgiref==3.8.1 # django # django-cors-headers # django-countries -astroid==2.3.3 +astroid==3.2.4 # via pylint -backports-zoneinfo==0.2.1 - # via - # django - # djangorestframework boto==2.49.0 # via -r requirements/base.in -boto3==1.35.8 +boto3==1.35.15 # via -r requirements/base.in -botocore==1.35.8 +botocore==1.35.15 # via # boto3 # s3transfer -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.17.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -43,14 +39,16 @@ coverage[toml]==7.6.1 # via # -r requirements/test.in # pytest-cov -cryptography==43.0.0 +cryptography==43.0.1 # via # django-fernet-fields-v2 # pyjwt ddt==1.7.2 # via -r requirements/test.in -diff-cover==9.1.1 +diff-cover==9.2.0 # via -r requirements/test.in +dill==0.3.8 + # via pylint # via # -c requirements/constraints.txt # -r requirements/base.in @@ -84,7 +82,7 @@ django-fernet-fields-v2==0.9 # via edx-enterprise-data django-filter==24.3 # via edx-enterprise-data -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-enterprise-data # edx-rbac @@ -126,14 +124,14 @@ edx-django-utils==5.15.0 # edx-drf-extensions # edx-enterprise-data # edx-rest-api-client -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.in # edx-enterprise-data # edx-rbac edx-enterprise-data==8.11.1 # via -r requirements/base.in -edx-opaque-keys==2.10.0 +edx-opaque-keys==2.11.0 # via # -r requirements/base.in # edx-ccx-keys @@ -141,15 +139,13 @@ edx-opaque-keys==2.10.0 # edx-enterprise-data edx-rbac==1.10.0 # via edx-enterprise-data -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.in # edx-enterprise-data -exceptiongroup==1.2.2 - # via pytest factory-boy==3.3.1 # via edx-enterprise-data -faker==28.0.0 +faker==28.4.1 # via factory-boy freezegun==1.5.1 # via -r requirements/test.in @@ -157,13 +153,11 @@ html5lib==1.1 # via -r requirements/base.in idna==3.8 # via requests -importlib-metadata==8.4.0 - # via markdown inflection==0.5.1 # via drf-yasg iniconfig==2.0.0 # via pytest -isort==4.3.21 +isort==5.13.2 # via pylint itypes==1.2.0 # via coreapi @@ -175,13 +169,11 @@ jmespath==1.0.1 # via # boto3 # botocore -lazy-object-proxy==1.4.3 - # via astroid markdown==3.7 # via -r requirements/base.in markupsafe==2.1.5 # via jinja2 -mccabe==0.6.1 +mccabe==0.7.0 # via pylint mysql-connector-python==9.0.0 # via edx-enterprise-data @@ -201,6 +193,8 @@ pandas==2.0.3 # via edx-enterprise-data pbr==6.1.0 # via stevedore +platformdirs==4.3.2 + # via pylint pluggy==1.5.0 # via # diff-cover @@ -220,10 +214,8 @@ pyjwt[crypto]==2.9.0 # drf-jwt # edx-drf-extensions # edx-rest-api-client -pylint==2.4.4 - # via - # -c requirements/constraints.txt - # -r requirements/test.in +pylint==3.2.7 + # via -r requirements/test.in pymemcache==4.0.0 # via -r requirements/base.in pymongo==4.8.0 @@ -236,7 +228,7 @@ pytest==8.3.2 # pytest-django pytest-cov==5.0.0 # via -r requirements/test.in -pytest-django==4.8.0 +pytest-django==4.9.0 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via @@ -263,10 +255,9 @@ requests==2.32.3 # edx-enterprise-data # edx-rest-api-client # responses - # slumber responses==0.25.3 # via -r requirements/test.in -rules==3.4 +rules==3.5 # via edx-enterprise-data s3transfer==0.10.2 # via boto3 @@ -274,14 +265,11 @@ semantic-version==2.10.0 # via edx-drf-extensions six==1.16.0 # via - # astroid # edx-ccx-keys # edx-django-release-util # edx-rbac # html5lib # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client snowballstemmer==2.2.0 # via pydocstyle sqlparse==0.5.1 @@ -290,15 +278,12 @@ stevedore==5.3.0 # via # edx-django-utils # edx-opaque-keys -tomli==2.0.1 - # via - # coverage - # pytest +tomlkit==0.13.2 + # via pylint tqdm==4.66.5 # via -r requirements/base.in typing-extensions==4.12.2 # via - # asgiref # django-countries # edx-opaque-keys tzdata==2024.1 @@ -307,7 +292,7 @@ uritemplate==4.1.1 # via # coreapi # drf-yasg -urllib3==1.26.19 +urllib3==1.26.20 # via # -c requirements/constraints.txt # -r requirements/base.in @@ -316,10 +301,6 @@ urllib3==1.26.19 # responses webencodings==0.5.1 # via html5lib -wrapt==1.11.2 - # via astroid -zipp==3.20.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/tox.txt b/requirements/tox.txt index 71ceb495..c6769e27 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -12,7 +12,7 @@ colorama==0.4.6 # via tox distlib==0.3.8 # via virtualenv -filelock==3.15.4 +filelock==3.16.0 # via # tox # virtualenv @@ -20,7 +20,7 @@ packaging==24.1 # via # pyproject-api # tox -platformdirs==4.2.2 +platformdirs==4.3.2 # via # tox # virtualenv @@ -28,11 +28,7 @@ pluggy==1.5.0 # via tox pyproject-api==1.7.1 # via tox -tomli==2.0.1 - # via - # pyproject-api - # tox -tox==4.18.0 +tox==4.18.1 # via -r requirements/tox.in -virtualenv==20.26.3 +virtualenv==20.26.4 # via tox diff --git a/tox.ini b/tox.ini index d188d1d4..7296da4e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] skipsdist = True -envlist = py38-django{42} +envlist = py311-django{42} [testenv] passenv =