diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3007fb4..e06ddf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,10 +14,9 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ['3.8'] - toxenv: [ - quality, docs, django32-drf314, django42-drf314 - ] + python-version: ['3.8', '3.11', '3.12'] + toxenv: [quality, docs, django42-drf314] + steps: - uses: actions/checkout@v2 diff --git a/Makefile b/Makefile index 3cce448..524e0a5 100644 --- a/Makefile +++ b/Makefile @@ -37,9 +37,21 @@ dev_requirements: ## Install Dev Requirements test_requirements: ## Install Test Requirements pip install -r requirements/test.txt -upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade -upgrade: ## Update the requirements/*.txt files with the latest packages satisfying requirements/*.in - pip install -qr requirements/pip-tools.txt +piptools: + pip install -q -r requirements/pip-tools.txt + +define COMMON_CONSTRAINTS_TEMP_COMMENT +# This is a temporary solution to override the real common_constraints.txt\n# In edx-lint, until the pyjwt constraint in edx-lint has been removed.\n# See BOM-2721 for more details.\n# Below is the copied and edited version of common_constraints\n +endef + +COMMON_CONSTRAINTS_TXT=requirements/common_constraints.txt +.PHONY: $(COMMON_CONSTRAINTS_TXT) +$(COMMON_CONSTRAINTS_TXT): + wget -O "$(@)" https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt || touch "$(@)" + echo "$(COMMON_CONSTRAINTS_TEMP_COMMENT)" | cat - $(@) > temp && mv temp $(@) + +export CUSTOM_COMPILE_COMMAND = make upgrade +upgrade: piptools $(COMMON_CONSTRAINTS_TXT) ## update the requirements/*.txt files with the latest packages satisfying requirements/*.in # Make sure to compile files after any other files they include! pip-compile --upgrade --allow-unsafe --rebuild -o requirements/pip.txt requirements/pip.in pip-compile --upgrade --verbose --rebuild -o requirements/pip-tools.txt requirements/pip-tools.in diff --git a/pylintrc b/pylintrc index cadb490..2853a4d 100644 --- a/pylintrc +++ b/pylintrc @@ -64,7 +64,7 @@ # SERIOUSLY. # # ------------------------------ -# Generated by edx-lint version: 5.2.5 +# Generated by edx-lint version: 5.3.6 # ------------------------------ [MASTER] ignore = @@ -141,7 +141,6 @@ enable = no-self-argument, no-value-for-parameter, non-iterator-returned, - non-parent-method-called, nonexistent-operator, not-a-mapping, not-an-iterable, @@ -161,13 +160,10 @@ enable = return-outside-function, signature-differs, super-init-not-called, - super-method-not-called, syntax-error, - test-inherits-tests, too-few-format-args, too-many-format-args, too-many-function-args, - translation-of-non-string, truncated-format-string, undefined-all-variable, undefined-loop-variable, @@ -213,7 +209,6 @@ enable = consider-using-enumerate, global-at-module-level, global-variable-not-assigned, - literal-used-as-attribute, logging-format-interpolation, logging-not-lazy, multiple-imports, @@ -224,7 +219,6 @@ enable = redundant-unittest-assert, reimported, simplifiable-if-statement, - simplifiable-range, singleton-comparison, superfluous-parens, unidiomatic-typecheck, @@ -233,7 +227,6 @@ enable = unnecessary-semicolon, unneeded-not, useless-else-on-loop, - wrong-assert-type, deprecated-method, deprecated-module, @@ -259,6 +252,7 @@ enable = useless-suppression, disable = bad-indentation, + broad-exception-raised, consider-using-f-string, duplicate-code, file-ignored, @@ -282,9 +276,6 @@ disable = unused-wildcard-import, use-maxsplit-arg, - feature-toggle-needs-doc, - illegal-waffle-usage, - logging-fstring-interpolation, [REPORTS] @@ -380,6 +371,6 @@ ext-import-graph = int-import-graph = [EXCEPTIONS] -overgeneral-exceptions = Exception +overgeneral-exceptions = builtins.Exception -# 54daa2b24c4b5341a45cdb4727fe15d05ef04c5f +# 5f343c05ade94b1f05eeb1763ca543bf867246f6 diff --git a/requirements/base.in b/requirements/base.in index 2da04d9..18a523f 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -3,12 +3,7 @@ -c constraints.txt Django -django-model-utils>=2.3.1 - +django-model-utils jsonfield pytz - - -# Don't let edx-platform upgrade DRF past versions that have already been tested here -djangorestframework<3.15.0 - +djangorestframework diff --git a/requirements/base.txt b/requirements/base.txt index c206548..97262be 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -4,27 +4,33 @@ # # make upgrade # -asgiref==3.7.2 +asgiref==3.8.1 # via django -django==3.2.24 +backports-zoneinfo==0.2.1 ; python_version < "3.9" # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/constraints.txt + # django + # djangorestframework +django==4.2.11 + # via + # -c requirements/common_constraints.txt # -r requirements/base.in # django-model-utils # djangorestframework # jsonfield django-model-utils==4.4.0 # via -r requirements/base.in -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via -r requirements/base.in jsonfield==3.1.0 # via -r requirements/base.in pytz==2024.1 - # via - # -r requirements/base.in - # django - # djangorestframework + # via -r requirements/base.in sqlparse==0.4.4 # via django typing-extensions==4.10.0 # via asgiref + +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.2.0 + # via -r requirements/base.in diff --git a/requirements/ci.txt b/requirements/ci.txt index 4987c48..53fbcda 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -4,7 +4,7 @@ # # make upgrade # -cachetools==5.3.2 +cachetools==5.3.3 # via # -r requirements/tox.txt # tox @@ -30,14 +30,14 @@ distlib==0.3.8 # virtualenv docopt==0.6.2 # via coveralls -filelock==3.13.1 +filelock==3.13.3 # via # -r requirements/tox.txt # tox # virtualenv idna==3.6 # via requests -packaging==23.2 +packaging==24.0 # via # -r requirements/tox.txt # pyproject-api @@ -62,7 +62,7 @@ tomli==2.0.1 # -r requirements/tox.txt # pyproject-api # tox -tox==4.13.0 +tox==4.14.2 # via -r requirements/tox.txt urllib3==2.2.1 # via requests diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt new file mode 100644 index 0000000..c9d8d9c --- /dev/null +++ b/requirements/common_constraints.txt @@ -0,0 +1,37 @@ +# This is a temporary solution to override the real common_constraints.txt +# In edx-lint, until the pyjwt constraint in edx-lint has been removed. +# See BOM-2721 for more details. +# Below is the copied and edited version of common_constraints + +# A central location for most common version constraints +# (across edx repos) for pip-installation. +# +# Similar to other constraint files this file doesn't install any packages. +# It specifies version constraints that will be applied if a package is needed. +# When pinning something here, please provide an explanation of why it is a good +# idea to pin this package across all edx repos, Ideally, link to other information +# that will help people in the future to remove the pin when possible. +# Writing an issue against the offending project and linking to it here is good. +# +# Note: Changes to this file will automatically be used by other repos, referencing +# this file from Github directly. It does not require packaging in edx-lint. + + +# using LTS django version +Django<5.0 + +# elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. +# elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html +elasticsearch<7.14.0 + +# django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected +django-simple-history==3.0.0 + +# opentelemetry requires version 6.x at the moment: +# https://github.com/open-telemetry/opentelemetry-python/issues/3570 +# Normally this could be added as a constraint in edx-django-utils, where we're +# adding the opentelemetry dependency. However, when we compile pip-tools.txt, +# that uses version 7.x, and then there's no undoing that when compiling base.txt. +# So we need to pin it globally, for now. +# Ticket for unpinning: https://github.com/openedx/edx-lint/issues/407 +importlib-metadata<7 diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 9972418..e824313 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -9,4 +9,7 @@ # linking to it here is good. # This file contains all common constraints for edx-repos --c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt +# Common constraints for edx repos +-c common_constraints.txt + +backports.zoneinfo;python_version<"3.9" \ No newline at end of file diff --git a/requirements/dev.txt b/requirements/dev.txt index 4e3d7a3..0dffed8 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -14,7 +14,7 @@ alabaster==0.7.13 # -r requirements/docs.txt # -r requirements/test.txt # sphinx -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/base.txt # -r requirements/docs.txt @@ -31,6 +31,14 @@ babel==2.14.0 # -r requirements/test.txt # pydata-sphinx-theme # sphinx +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/base.txt + # -r requirements/docs.txt + # -r requirements/test.txt + # django + # djangorestframework beautifulsoup4==4.12.3 # via # -r requirements/docs.txt @@ -56,11 +64,11 @@ click-log==0.4.0 # via # -r requirements/test.txt # edx-lint -code-annotations==1.6.0 +code-annotations==1.7.0 # via # -r requirements/test.txt # edx-lint -coverage[toml]==7.4.3 +coverage[toml]==7.4.4 # via # -r requirements/test.txt # pytest-cov @@ -70,9 +78,9 @@ dill==0.3.8 # via # -r requirements/test.txt # pylint -django==3.2.24 +django==4.2.11 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/common_constraints.txt # -r requirements/base.txt # -r requirements/docs.txt # -r requirements/test.txt @@ -84,7 +92,7 @@ django-model-utils==4.4.0 # -r requirements/base.txt # -r requirements/docs.txt # -r requirements/test.txt -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via # -r requirements/base.txt # -r requirements/docs.txt @@ -103,7 +111,7 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==23.2.1 +faker==24.4.0 # via # -r requirements/test.txt # factory-boy @@ -119,8 +127,9 @@ imagesize==1.4.1 # -r requirements/docs.txt # -r requirements/test.txt # sphinx -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/common_constraints.txt # -r requirements/docs.txt # -r requirements/test.txt # sphinx @@ -154,7 +163,7 @@ mccabe==0.7.0 # pylint mock==5.1.0 # via -r requirements/test.txt -packaging==23.2 +packaging==24.0 # via # -r requirements/docs.txt # -r requirements/test.txt @@ -212,16 +221,16 @@ pylint-plugin-utils==0.8.2 # -r requirements/test.txt # pylint-celery # pylint-django -pytest==8.0.2 +pytest==8.1.1 # via # -r requirements/test.txt # pytest-cov # pytest-django -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/test.txt pytest-django==4.8.0 # via -r requirements/test.txt -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/test.txt # faker @@ -236,8 +245,6 @@ pytz==2024.1 # -r requirements/docs.txt # -r requirements/test.txt # babel - # django - # djangorestframework pyyaml==6.0.1 # via # -r requirements/test.txt @@ -329,7 +336,7 @@ tomli==2.0.1 # coverage # pylint # pytest -tomlkit==0.12.3 +tomlkit==0.12.4 # via # -r requirements/test.txt # pylint @@ -348,8 +355,15 @@ urllib3==2.2.1 # -r requirements/docs.txt # -r requirements/test.txt # requests -zipp==3.17.0 +zipp==3.18.1 # via # -r requirements/docs.txt # -r requirements/test.txt # importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.2.0 + # via + # -r requirements/base.txt + # -r requirements/docs.txt + # -r requirements/test.txt diff --git a/requirements/docs.txt b/requirements/docs.txt index 3ea9fad..79cb8a0 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -8,7 +8,7 @@ accessible-pygments==0.0.4 # via pydata-sphinx-theme alabaster==0.7.13 # via sphinx -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/base.txt # django @@ -16,22 +16,28 @@ babel==2.14.0 # via # pydata-sphinx-theme # sphinx +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/base.txt + # django + # djangorestframework beautifulsoup4==4.12.3 # via pydata-sphinx-theme certifi==2024.2.2 # via requests charset-normalizer==3.3.2 # via requests -django==3.2.24 +django==4.2.11 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/common_constraints.txt # -r requirements/base.txt # django-model-utils # djangorestframework # jsonfield django-model-utils==4.4.0 # via -r requirements/base.txt -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via -r requirements/base.txt docutils==0.19 # via @@ -41,15 +47,17 @@ idna==3.6 # via requests imagesize==1.4.1 # via sphinx -importlib-metadata==7.0.1 - # via sphinx +importlib-metadata==6.11.0 + # via + # -c requirements/common_constraints.txt + # sphinx jinja2==3.1.3 # via sphinx jsonfield==3.1.0 # via -r requirements/base.txt markupsafe==2.1.5 # via jinja2 -packaging==23.2 +packaging==24.0 # via # pydata-sphinx-theme # sphinx @@ -66,8 +74,6 @@ pytz==2024.1 # via # -r requirements/base.txt # babel - # django - # djangorestframework requests==2.31.0 # via sphinx six==1.16.0 @@ -110,5 +116,9 @@ typing-extensions==4.10.0 # pydata-sphinx-theme urllib3==2.2.1 # via requests -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.2.0 + # via -r requirements/base.txt diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 44c48d9..53b0fb2 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -4,15 +4,17 @@ # # make upgrade # -build==1.0.3 +build==1.2.1 # via pip-tools click==8.1.7 # via pip-tools -importlib-metadata==7.0.1 - # via build -packaging==23.2 +importlib-metadata==6.11.0 + # via + # -c requirements/common_constraints.txt + # build +packaging==24.0 # via build -pip-tools==7.4.0 +pip-tools==7.4.1 # via -r requirements/pip-tools.in pyproject-hooks==1.0.0 # via @@ -23,11 +25,13 @@ tomli==2.0.1 # build # pip-tools # pyproject-hooks -wheel==0.42.0 +wheel==0.43.0 # via pip-tools -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools +pip==24.0 + # via pip-tools +setuptools==69.2.0 + # via pip-tools diff --git a/requirements/pip.txt b/requirements/pip.txt index 6665603..cf44902 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -4,11 +4,11 @@ # # make upgrade # -wheel==0.42.0 +wheel==0.43.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: pip==24.0 # via -r requirements/pip.in -setuptools==69.1.1 +setuptools==69.2.0 # via -r requirements/pip.in diff --git a/requirements/test.txt b/requirements/test.txt index 8a8e286..4262ba1 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -12,7 +12,7 @@ alabaster==0.7.13 # via # -r requirements/docs.txt # sphinx -asgiref==3.7.2 +asgiref==3.8.1 # via # -r requirements/base.txt # -r requirements/docs.txt @@ -26,6 +26,13 @@ babel==2.14.0 # -r requirements/docs.txt # pydata-sphinx-theme # sphinx +backports-zoneinfo==0.2.1 ; python_version < "3.9" + # via + # -c requirements/constraints.txt + # -r requirements/base.txt + # -r requirements/docs.txt + # django + # djangorestframework beautifulsoup4==4.12.3 # via # -r requirements/docs.txt @@ -45,16 +52,16 @@ click==8.1.7 # edx-lint click-log==0.4.0 # via edx-lint -code-annotations==1.6.0 +code-annotations==1.7.0 # via edx-lint -coverage[toml]==7.4.3 +coverage[toml]==7.4.4 # via pytest-cov ddt==1.7.2 # via -r requirements/test.in dill==0.3.8 # via pylint # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/common_constraints.txt # -r requirements/base.txt # -r requirements/docs.txt # django-model-utils @@ -78,7 +85,7 @@ exceptiongroup==1.2.0 # via pytest factory-boy==3.3.0 # via -r requirements/test.in -faker==23.2.1 +faker==24.4.0 # via factory-boy freezegun==1.4.0 # via -r requirements/test.in @@ -90,8 +97,9 @@ imagesize==1.4.1 # via # -r requirements/docs.txt # sphinx -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/common_constraints.txt # -r requirements/docs.txt # sphinx iniconfig==2.0.0 @@ -117,7 +125,7 @@ mccabe==0.7.0 # via pylint mock==5.1.0 # via -r requirements/test.in -packaging==23.2 +packaging==24.0 # via # -r requirements/docs.txt # pydata-sphinx-theme @@ -159,15 +167,15 @@ pylint-plugin-utils==0.8.2 # via # pylint-celery # pylint-django -pytest==8.0.2 +pytest==8.1.1 # via # pytest-cov # pytest-django -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/test.in pytest-django==4.8.0 # via -r requirements/test.in -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/test.in # faker @@ -179,8 +187,6 @@ pytz==2024.1 # -r requirements/base.txt # -r requirements/docs.txt # babel - # django - # djangorestframework pyyaml==6.0.1 # via code-annotations requests==2.31.0 @@ -249,7 +255,7 @@ tomli==2.0.1 # coverage # pylint # pytest -tomlkit==0.12.3 +tomlkit==0.12.4 # via pylint typing-extensions==4.10.0 # via @@ -264,7 +270,13 @@ urllib3==2.2.1 # via # -r requirements/docs.txt # requests -zipp==3.17.0 +zipp==3.18.1 # via # -r requirements/docs.txt # importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.2.0 + # via + # -r requirements/base.txt + # -r requirements/docs.txt diff --git a/requirements/tox.txt b/requirements/tox.txt index 9a12d68..cc5293d 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -4,7 +4,7 @@ # # make upgrade # -cachetools==5.3.2 +cachetools==5.3.3 # via tox chardet==5.2.0 # via tox @@ -12,11 +12,11 @@ colorama==0.4.6 # via tox distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via # tox # virtualenv -packaging==23.2 +packaging==24.0 # via # pyproject-api # tox @@ -32,7 +32,7 @@ tomli==2.0.1 # via # pyproject-api # tox -tox==4.13.0 +tox==4.14.2 # via -r requirements/tox.in virtualenv==20.25.1 # via tox diff --git a/setup.py b/setup.py index 7c81bf5..fdf3bff 100644 --- a/setup.py +++ b/setup.py @@ -74,14 +74,15 @@ def get_version(*file_paths): classifiers=[ 'Development Status :: 3 - Alpha', 'Framework :: Django', - 'Framework :: Django :: 3.2', - 'Framework :: Django :: 4.0', + 'Framework :: Django :: 4.2', 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU Affero General Public License v3', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', ], packages=find_packages(include=['submissions*'], exclude=['*.test', '*.tests']), install_requires=load_requirements('requirements/base.in'), diff --git a/submissions/__init__.py b/submissions/__init__.py index 75d3609..60e7110 100644 --- a/submissions/__init__.py +++ b/submissions/__init__.py @@ -1,2 +1,2 @@ """ API for creating submissions and scores. """ -__version__ = '3.6.1' +__version__ = '3.7.0' diff --git a/submissions/errors.py b/submissions/errors.py index 25d0f3d..12d812b 100644 --- a/submissions/errors.py +++ b/submissions/errors.py @@ -67,8 +67,8 @@ def __repr__(self): Show the field errors upon output. """ return ( - f'{self.__class__.__name__}' # pylint: disable=no-member - f'(msg="{self.message}", field_errors={self.field_errors})' + # pylint: disable=no-member + f'{self.__class__.__name__}(msg="{self.message}", field_errors={self.field_errors})' ) diff --git a/tox.ini b/tox.ini index cde9012..d9d9027 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,11 @@ [tox] -envlist = py38-django{32,42}-drf{312, drf314}, quality, docs +envlist = py{38,311,312}-django{42}-drf{drf314}, quality, docs [testenv] setenv = DJANGO_SETTINGS_MODULE = settings deps = -r{toxinidir}/requirements/test.txt - django32: Django>=3.2,<4.0 django42: Django>=4.2,<4.3 drf314: djangorestframework<3.15.0 commands = @@ -23,7 +22,8 @@ commands = make test_quality [testenv:docs] -deps = +deps = + setuptools -r{toxinidir}/requirements/dev.txt commands = python setup.py build_sphinx