From c7c35e019ca67b6cf8028c30236fc46e88436fab Mon Sep 17 00:00:00 2001 From: Andriy Kornatskyy Date: Tue, 17 Nov 2020 20:12:37 +0200 Subject: [PATCH] Dropped python 3.5 and below. --- .travis.yml | 4 +- MANIFEST.in | 2 +- README.md | 8 ++-- demos/api/app.py | 7 ++-- demos/api/test_app.py | 2 +- demos/guestbook/models.py | 6 +-- demos/quickstart-empty/setup.py | 32 +++------------ demos/quickstart-i18n/setup.py | 32 +++------------ demos/reusable/hello/setup.py | 6 ++- demos/reusable/world/setup.py | 6 ++- demos/template/setup.py | 31 +++------------ demos/template/src/membership/models.py | 12 +++--- .../src/membership/repository/mock.py | 3 +- .../src/membership/repository/samples.py | 3 +- .../template/src/membership/service/bridge.py | 3 +- demos/template/src/membership/web/views.py | 9 ++--- demos/template/src/shared/authorization.py | 7 +--- doc/gettingstarted.rst | 4 +- doc/tutorial.rst | 7 +--- requirements/dev-py2.txt | 39 ------------------- requirements/{dev-py3.txt => dev.txt} | 4 +- setup.py | 12 +----- src/wheezy/web/handlers/base.py | 6 +-- src/wheezy/web/handlers/template.py | 8 ++-- src/wheezy/web/templates.py | 4 +- tox.ini | 8 +--- 26 files changed, 69 insertions(+), 196 deletions(-) delete mode 100644 requirements/dev-py2.txt rename requirements/{dev-py3.txt => dev.txt} (90%) diff --git a/.travis.yml b/.travis.yml index aba5d2f..501e4ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,8 @@ language: python matrix: include: - - python: 2.7 - env: TOXENV=py27 + - python: 3.6 + env: TOXENV=py36 - python: 3.7 env: TOXENV=py37 - python: 3.8 diff --git a/MANIFEST.in b/MANIFEST.in index 8dce522..72ca36c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -include LICENSE README.rst +include LICENSE README.md diff --git a/README.md b/README.md index 811854f..a03c956 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ high concurrency [WSGI](http://www.python.org/dev/peps/pep-3333) web framework with the key features to *build modern, efficient web*: -- Requires Python 2.4-2.7 or 3.2+. +- Requires Python 3.6+. - MVC architectural pattern ([push](http://en.wikipedia.org/wiki/Web_application_framework#Push-based_vs._pull-based)-based). - Functionality includes @@ -44,9 +44,9 @@ Resources: ## Install [wheezy.web](https://pypi.org/project/wheezy.web/) requires -[python](https://www.python.org) version 2.4 to 2.7 or 3.2+. It is -independent of operating system. You can install it from -[pypi](https://pypi.org/project/wheezy.web/) site: +[python](https://www.python.org) version 3.6+. It is independent of operating +system. You can install it from [pypi](https://pypi.org/project/wheezy.web/) +site: ```sh pip install -U wheezy.web diff --git a/demos/api/app.py b/demos/api/app.py index a828003..55dd36b 100644 --- a/demos/api/app.py +++ b/demos/api/app.py @@ -6,7 +6,6 @@ from wheezy.caching import MemoryCache from wheezy.caching.patterns import Cached from wheezy.core.collections import attrdict -from wheezy.core.comp import ntob, u from wheezy.core.db import NullSession from wheezy.core.descriptors import attribute from wheezy.http import CacheProfile, WSGIApplication, response_cache @@ -66,7 +65,7 @@ def factory(self, session_name): def status_response(self): assert not self.errors response = HTTPResponse("application/json; charset=UTF-8", "UTF-8") - response.write_bytes(ntob('{"status":"OK"}', "UTF-8")) + response.write_bytes(b'{"status":"OK"}') return response def error_response(self, status_code=200): @@ -103,8 +102,8 @@ def wraps(self): # region: models -def Task(other={}): # noqa: N802 - return attrdict({"task_id": None, "title": u(""), "status": 1}, **other) +def Task(other={}): # noqa: N802,B006 + return attrdict({"task_id": None, "title": "", "status": 1}, **other) Task.keys = frozenset(Task().keys()) diff --git a/demos/api/test_app.py b/demos/api/test_app.py index 011f0ff..501d6a5 100644 --- a/demos/api/test_app.py +++ b/demos/api/test_app.py @@ -2,9 +2,9 @@ """ import unittest +from json import dumps as json_dumps from app import main -from wheezy.core.comp import json_dumps from wheezy.http.functional import WSGIClient # region: foundation diff --git a/demos/guestbook/models.py b/demos/guestbook/models.py index 62d1886..b354558 100644 --- a/demos/guestbook/models.py +++ b/demos/guestbook/models.py @@ -3,13 +3,9 @@ from datetime import datetime -from wheezy.core.comp import u - class Greeting(object): - def __init__( - self, id=0, created_on=None, author=u(""), message=u("") # noqa: B008 - ): + def __init__(self, id=0, created_on=None, author="", message=""): self.id = id self.created_on = created_on or datetime.now() self.author = author diff --git a/demos/quickstart-empty/setup.py b/demos/quickstart-empty/setup.py index 67c4fc2..434ae3e 100644 --- a/demos/quickstart-empty/setup.py +++ b/demos/quickstart-empty/setup.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import os -import sys from setuptools import setup @@ -19,33 +18,12 @@ "wheezy.web>=0.1.450", ] -install_optional = [ - # 'PIL>=1.1.7', - "pycrypto>=2.6.1" -] - -if sys.version_info[0] == 2: - install_optional.append("pylibmc<1.3") - -install_requires += install_optional - -try: - import uuid # noqa -except ImportError: - install_requires.append("uuid") - -dependency_links = [ - # pylibmc - "https://bitbucket.org/akorn/wheezy.caching/downloads", - # PIL - # 'https://bitbucket.org/akorn/wheezy.captcha/downloads', - # pycrypto - "https://bitbucket.org/akorn/wheezy.security/downloads", -] +dependency_links = [] setup( name="mysite", version="0.1", + python_requires=">=3.6", description="MySite Project", long_description=README, url="https://scm.dev.local/svn/mysite/trunk", @@ -53,12 +31,14 @@ author_email="mysite at dev.local", license="COMMERCIAL", classifiers=[ - "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/demos/quickstart-i18n/setup.py b/demos/quickstart-i18n/setup.py index 67c4fc2..434ae3e 100644 --- a/demos/quickstart-i18n/setup.py +++ b/demos/quickstart-i18n/setup.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import os -import sys from setuptools import setup @@ -19,33 +18,12 @@ "wheezy.web>=0.1.450", ] -install_optional = [ - # 'PIL>=1.1.7', - "pycrypto>=2.6.1" -] - -if sys.version_info[0] == 2: - install_optional.append("pylibmc<1.3") - -install_requires += install_optional - -try: - import uuid # noqa -except ImportError: - install_requires.append("uuid") - -dependency_links = [ - # pylibmc - "https://bitbucket.org/akorn/wheezy.caching/downloads", - # PIL - # 'https://bitbucket.org/akorn/wheezy.captcha/downloads', - # pycrypto - "https://bitbucket.org/akorn/wheezy.security/downloads", -] +dependency_links = [] setup( name="mysite", version="0.1", + python_requires=">=3.6", description="MySite Project", long_description=README, url="https://scm.dev.local/svn/mysite/trunk", @@ -53,12 +31,14 @@ author_email="mysite at dev.local", license="COMMERCIAL", classifiers=[ - "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/demos/reusable/hello/setup.py b/demos/reusable/hello/setup.py index a59e08c..a4f3d66 100644 --- a/demos/reusable/hello/setup.py +++ b/demos/reusable/hello/setup.py @@ -11,6 +11,7 @@ setup( name="hello", version="0.1", + python_requires=">=3.6", description="Hello Project", long_description=README, url="https://scm.dev.local/svn/mysite/trunk", @@ -23,7 +24,10 @@ "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/demos/reusable/world/setup.py b/demos/reusable/world/setup.py index 4ef9e00..f1ec843 100644 --- a/demos/reusable/world/setup.py +++ b/demos/reusable/world/setup.py @@ -11,6 +11,7 @@ setup( name="helloworld", version="0.1", + python_requires=">=3.6", description="Hello World Project", long_description=README, url="https://scm.dev.local/svn/mysite/trunk", @@ -22,7 +23,10 @@ "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/demos/template/setup.py b/demos/template/setup.py index 250e9db..c68e1a0 100644 --- a/demos/template/setup.py +++ b/demos/template/setup.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import os -import sys from setuptools import setup @@ -18,33 +17,12 @@ "wheezy.web>=0.1.450", ] -install_optional = [ - # 'PIL>=1.1.7', - "pycrypto>=2.6.1" -] - -if sys.version_info[0] == 2: - install_optional.append("pylibmc<1.3") - -install_requires += install_optional - -try: - import uuid # noqa -except ImportError: - install_requires.append("uuid") - -dependency_links = [ - # pylibmc - "https://bitbucket.org/akorn/wheezy.caching/downloads", - # PIL - # 'https://bitbucket.org/akorn/wheezy.captcha/downloads', - # pycrypto - "https://bitbucket.org/akorn/wheezy.security/downloads", -] +dependency_links = [] setup( name="mysite", version="0.1", + python_requires=">=3.6", description="MySite Project", long_description=README, url="https://scm.dev.local/svn/mysite/trunk", @@ -56,7 +34,10 @@ "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", - "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", diff --git a/demos/template/src/membership/models.py b/demos/template/src/membership/models.py index 979d09a..d034b5b 100644 --- a/demos/template/src/membership/models.py +++ b/demos/template/src/membership/models.py @@ -3,8 +3,6 @@ from datetime import date -from wheezy.core.comp import u - def _(s): return s @@ -14,19 +12,19 @@ def _(s): class Credential(object): - username = u("") - password = u("") + username = "" + password = "" class Account(object): - email = u("") - display_name = u("") + email = "" + display_name = "" account_type = "user" class Registration(object): question_id = "0" - answer = u("") + answer = "" date_of_birth = date.min def __init__(self): diff --git a/demos/template/src/membership/repository/mock.py b/demos/template/src/membership/repository/mock.py index 6d8fadd..2496a7c 100644 --- a/demos/template/src/membership/repository/mock.py +++ b/demos/template/src/membership/repository/mock.py @@ -4,7 +4,6 @@ from config import translations from membership.repository.contract import IMembershipRepository from membership.repository.samples import db -from wheezy.core.i18n import ref_gettext from wheezy.core.introspection import looks translations = translations.domains["membership"] @@ -16,7 +15,7 @@ def __init__(self, session): session.cursor() def list_password_questions(self, locale): - gettext = ref_gettext(translations[locale]) + gettext = translations[locale].gettext return tuple((k, gettext(v)) for k, v in db["password_question"]) def authenticate(self, credential): diff --git a/demos/template/src/membership/repository/samples.py b/demos/template/src/membership/repository/samples.py index 13281f5..7397035 100644 --- a/demos/template/src/membership/repository/samples.py +++ b/demos/template/src/membership/repository/samples.py @@ -5,7 +5,6 @@ from datetime import date from membership.models import Account, Credential, Registration -from wheezy.core.comp import u def _(s): @@ -49,7 +48,7 @@ def next_registration(question_id="1"): db = { - "user": {"demo": u("P@ssw0rd"), "biz": u("P@ssw0rd")}, + "user": {"demo": "P@ssw0rd", "biz": "P@ssw0rd"}, "user_role": {"demo": ["user"], "biz": ["business"]}, "password_question": ( ("1", _("Favorite number")), diff --git a/demos/template/src/membership/service/bridge.py b/demos/template/src/membership/service/bridge.py index 144fa5d..2e16a6e 100644 --- a/demos/template/src/membership/service/bridge.py +++ b/demos/template/src/membership/service/bridge.py @@ -4,7 +4,6 @@ from config import translations from membership.models import Credential, Registration, account_types from wheezy.core.descriptors import attribute -from wheezy.core.i18n import ref_gettext from wheezy.validation.mixin import ErrorsMixin account_types = tuple(dict(account_types).keys()) @@ -19,7 +18,7 @@ def __init__(self, factory, errors, locale): @attribute def gettext(self): - return ref_gettext(translations[self.locale]) + return translations[self.locale].gettext @attribute def password_questions(self): diff --git a/demos/template/src/membership/web/views.py b/demos/template/src/membership/web/views.py index 1b8a02c..e3f6f31 100644 --- a/demos/template/src/membership/web/views.py +++ b/demos/template/src/membership/web/views.py @@ -14,7 +14,6 @@ ) from shared.authorization import RedirectQueryStringReturnPathMixin from wheezy.core.collections import attrdict -from wheezy.core.comp import u from wheezy.core.descriptors import attribute from wheezy.http import none_cache_profile from wheezy.security import Principal @@ -66,7 +65,7 @@ def post(self): ): if self.request.ajax: return self.json_response({"errors": self.errors}) - credential.password = u("") + credential.password = "" return self.get(credential) del self.xsrf_token return self.redirect_to_return_path() @@ -109,7 +108,7 @@ class SignUpHandler(MembershipBaseHandler): @attribute def model(self): - return attrdict({"password": u(""), "confirm_password": u("")}) + return attrdict({"password": "", "confirm_password": ""}) @handler_cache(profile=none_cache_profile) def get(self, registration=None): @@ -161,8 +160,8 @@ def post(self): ): if self.request.ajax: return self.json_response({"errors": self.errors}) - registration.credential.password = u("") - self.model.confirm_password = u("") + registration.credential.password = "" + self.model.confirm_password = "" return self.get(registration) # with self.factory('ro') as f: diff --git a/demos/template/src/shared/authorization.py b/demos/template/src/shared/authorization.py index 6893c2c..0e79bcb 100644 --- a/demos/template/src/shared/authorization.py +++ b/demos/template/src/shared/authorization.py @@ -1,9 +1,4 @@ -from wheezy.core.comp import PY3 - -if PY3: # pragma: nocover - from urllib.parse import quote -else: # pragma: nocover - from urllib import quote +from urllib.parse import quote from wheezy.core.url import urlparts # noqa: I202 from wheezy.http import HTTPCookie, ajax_redirect, redirect diff --git a/doc/gettingstarted.rst b/doc/gettingstarted.rst index 21b7a1e..1bab787 100644 --- a/doc/gettingstarted.rst +++ b/doc/gettingstarted.rst @@ -5,8 +5,8 @@ Getting Started Install ------- -:ref:`wheezy.web` requires `python`_ version 2.4 to 2.7 or 3.2+. -It is independent of operating system. You can install it from `pypi`_:: +:ref:`wheezy.web` requires `python`_ version 3.6+. It is independent of +operating system. You can install it from `pypi`_:: $ pip install wheezy.web diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 56f1b14..7efc374 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -56,20 +56,15 @@ when it was added (current time), an author and a message. Let's model what we figured so far (file ``models.py``):: from datetime import datetime - from wheezy.core.comp import u class Greeting(object): - def __init__(self, id=0, created_on=None, author=u(''), message=u('')): + def __init__(self, id=0, created_on=None, author='', message=''): self.id = id self.created_on = created_on or datetime.now() self.author = author self.message = message -The function ``u()`` is a compatibility function that always returns the unicode -version of a string regardless of python version. If you are using python 3 -you can eliminate it completely since any string is natively unicode in -python 3 (vs byte string in python 2). Validation Rules ---------------- diff --git a/requirements/dev-py2.txt b/requirements/dev-py2.txt deleted file mode 100644 index 27461e0..0000000 --- a/requirements/dev-py2.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile -# To update, run: -# -# pip-compile --output-file=requirements/dev-py2.txt requirements/dev.in -# -atomicwrites==1.4.0 # via pytest -attrs==20.3.0 # via pytest -backports.functools-lru-cache==1.6.1 # via wcwidth -click==7.1.2 # via pip-tools -colorama==0.4.4 # via pytest -configparser==4.0.2 # via importlib-metadata -contextlib2==0.6.0.post1 # via importlib-metadata -coverage==5.3 # via pytest-cov -funcsigs==1.0.2 # via mock, pytest -importlib-metadata==2.0.0 # via pluggy, pytest -jinja2==2.11.2 # via -r requirements/dev.in -mako==1.1.3 # via -r requirements/dev.in -markupsafe==1.1.1 # via jinja2, mako -mock==3.0.5 # via -r requirements/dev.in -more-itertools==5.0.0 # via pytest -packaging==20.4 # via pytest -pathlib2==2.3.5 # via importlib-metadata, pytest -pip-tools==5.3.1 # via -r requirements/dev.in -pluggy==0.13.1 # via pytest -py==1.9.0 # via pytest -pycryptodome==3.9.9; platform_system != 'Windows' or implementation_name != 'pypy' # via -r requirements/dev.in -pyparsing==2.4.7 # via packaging -pytest-cov==2.10.1 # via -r requirements/dev.in -pytest==4.6.11 # via -r requirements/dev.in, pytest-cov -scandir==1.10.0 # via pathlib2 -six==1.15.0 # via mock, more-itertools, packaging, pathlib2, pip-tools, pytest -tenjin==1.1.1 # via -r requirements/dev.in -wcwidth==0.2.5 # via pytest -wheezy.template==2.0.0 # via -r requirements/dev.in -zipp==1.2.0 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# pip diff --git a/requirements/dev-py3.txt b/requirements/dev.txt similarity index 90% rename from requirements/dev-py3.txt rename to requirements/dev.txt index 1efadaa..97f37c5 100644 --- a/requirements/dev-py3.txt +++ b/requirements/dev.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# pip-compile --output-file=requirements/dev-py3.txt requirements/dev.in +# pip-compile --output-file=requirements/dev.txt requirements/dev.in # atomicwrites==1.4.0 # via pytest attrs==20.3.0 # via pytest @@ -15,7 +15,7 @@ mako==1.1.3 # via -r requirements/dev.in markupsafe==1.1.1 # via jinja2, mako mock==4.0.2 # via -r requirements/dev.in packaging==20.4 # via pytest -pip-tools==5.3.1 # via -r requirements/dev.in +pip-tools==5.4.0 # via -r requirements/dev.in pluggy==0.13.1 # via pytest py==1.9.0 # via pytest pycryptodome==3.9.9; platform_system != 'Windows' or implementation_name != 'pypy' # via -r requirements/dev.in diff --git a/setup.py b/setup.py index 88c1b9e..32be25e 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ os.path.join(p, "middleware", "__init__.py"), ], nthreads=2, + compiler_directives={"language_level": 3}, quiet=True, ) except ImportError: @@ -55,6 +56,7 @@ setup( name="wheezy.web", version=VERSION, + python_requires=">=3.6", description="A lightweight, high performance, high concurrency WSGI " "web framework with the key features to build modern, efficient web", long_description=README, @@ -70,16 +72,6 @@ "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.4", - "Programming Language :: Python :: 2.5", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.2", - "Programming Language :: Python :: 3.3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", diff --git a/src/wheezy/web/handlers/base.py b/src/wheezy/web/handlers/base.py index a3ff04c..d2337a9 100644 --- a/src/wheezy/web/handlers/base.py +++ b/src/wheezy/web/handlers/base.py @@ -3,7 +3,7 @@ from uuid import uuid4 from wheezy.core.descriptors import attribute -from wheezy.core.i18n import null_translations, ref_gettext +from wheezy.core.i18n import null_translations from wheezy.core.url import urlparts from wheezy.core.uuid import UUID_EMPTY, parse_uuid, shrink_uuid from wheezy.http import ( @@ -81,11 +81,11 @@ def translation(self): @attribute def gettext(self): - return ref_gettext(self.translation) + return self.translation.gettext @attribute def _(self): - return ref_gettext(self.translation) + return self.translation.gettext # region: model diff --git a/src/wheezy/web/handlers/template.py b/src/wheezy/web/handlers/template.py index b68b8e4..974cfb7 100644 --- a/src/wheezy/web/handlers/template.py +++ b/src/wheezy/web/handlers/template.py @@ -1,8 +1,6 @@ """ """ -from wheezy.core.i18n import ref_gettext - from wheezy.web.handlers.base import BaseHandler @@ -15,9 +13,9 @@ def handle_request(request): h.template_name = template_name h.status_code = status_code h.helpers = { - "_": ref_gettext( - h.options["translations_manager"][h.locale][translation_name] - ), + "_": h.options["translations_manager"][h.locale][ + translation_name + ].gettext, "locale": h.locale, "path_for": h.path_for, "principal": h.principal, diff --git a/src/wheezy/web/templates.py b/src/wheezy/web/templates.py index b976379..e78cec2 100644 --- a/src/wheezy/web/templates.py +++ b/src/wheezy/web/templates.py @@ -93,10 +93,8 @@ def __init__( except ImportError: # pragma: nocover from tenjin.helpers import escape # noqa - from wheezy.core.comp import str_type - self.helpers = { - "to_str": str_type, + "to_str": str, "escape": escape, "capture_as": capture_as, "captured_as": captured_as, diff --git a/tox.ini b/tox.ini index 59156f3..e7b86e9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,15 +1,11 @@ [tox] -envlist = py27,py37,py38,py39,pypy3,lint,docs +envlist = py36,py37,py38,py39,pypy3,lint,docs skipsdist = True [testenv] usedevelop = True deps = - py27: -r requirements/dev-py2.txt - py37: -r requirements/dev-py3.txt - py38: -r requirements/dev-py3.txt - py39: -r requirements/dev-py3.txt - pypy3: -r requirements/dev-py3.txt + -r requirements/dev.txt commands = pytest -q -x --disable-pytest-warnings --doctest-modules \ --cov-report term-missing --cov wheezy.web \