diff options
| -rw-r--r-- | doc/build/changelog/migration_14.rst | 2 | ||||
| -rw-r--r-- | doc/build/changelog/unreleased_14/drop_python34.rst | 5 | ||||
| -rw-r--r-- | doc/build/intro.rst | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/base.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/mock.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/__init__.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/compat.py | 21 | ||||
| -rw-r--r-- | setup.py | 3 | ||||
| -rw-r--r-- | test/ext/declarative/test_basic.py | 2 | ||||
| -rw-r--r-- | test/orm/test_mapper.py | 2 | ||||
| -rw-r--r-- | test/sql/test_metadata.py | 12 |
11 files changed, 18 insertions, 43 deletions
diff --git a/doc/build/changelog/migration_14.rst b/doc/build/changelog/migration_14.rst index e7ee2a7b2..72cd996fb 100644 --- a/doc/build/changelog/migration_14.rst +++ b/doc/build/changelog/migration_14.rst @@ -1508,7 +1508,7 @@ join rewriting logic would only occur for SQLite verisons prior to 3.7.16 after bisection was used to identify where SQLite fixed its support for this construct, and no further issues were reported against the behavior (even though some bugs were found internally). It is now anticipated that there -are little to no Python builds for Python 2.7 or 3.4 and above (the supported +are little to no Python builds for Python 2.7 or 3.5 and above (the supported Python versions) which would include a SQLite version prior to 3.7.17, and the behavior is only necessary only in more complex ORM joining scenarios. A warning is now emitted if the installed SQLite version is older than diff --git a/doc/build/changelog/unreleased_14/drop_python34.rst b/doc/build/changelog/unreleased_14/drop_python34.rst new file mode 100644 index 000000000..695639313 --- /dev/null +++ b/doc/build/changelog/unreleased_14/drop_python34.rst @@ -0,0 +1,5 @@ +.. change:: + :tags: change + + Python 3.4 has reached EOL and its support has been dropped from + SQLAlchemy. diff --git a/doc/build/intro.rst b/doc/build/intro.rst index f31206bde..828ba31b3 100644 --- a/doc/build/intro.rst +++ b/doc/build/intro.rst @@ -71,14 +71,14 @@ Supported Platforms SQLAlchemy has been tested against the following platforms: * cPython 2.7 -* cPython 3.4 and higher +* cPython 3.5 and higher * `PyPy <http://pypy.org/>`_ 2.1 or greater .. versionchanged:: 1.2 Python 2.7 is now the minimum Python version supported. -.. versionchanged:: 1.3 - Within the Python 3 series, 3.4 is now the minimum Python 3 version supported. +.. versionchanged:: 1.4 + Within the Python 3 series, 3.5 is now the minimum Python 3 version supported. Supported Installation Methods ------------------------------- diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py index f093cad90..682ef891c 100644 --- a/lib/sqlalchemy/sql/base.py +++ b/lib/sqlalchemy/sql/base.py @@ -192,7 +192,7 @@ class _DialectArgView(util.collections_abc.MutableMapping): def __iter__(self): return ( - util.safe_kwarg("%s_%s" % (dialect_name, value_name)) + "%s_%s" % (dialect_name, value_name) for dialect_name in self.obj.dialect_options for value_name in self.obj.dialect_options[ dialect_name diff --git a/lib/sqlalchemy/testing/mock.py b/lib/sqlalchemy/testing/mock.py index 16c2d2ac9..a63082b9b 100644 --- a/lib/sqlalchemy/testing/mock.py +++ b/lib/sqlalchemy/testing/mock.py @@ -9,10 +9,10 @@ """ from __future__ import absolute_import -from ..util import py33 +from ..util import py3k -if py33: +if py3k: from unittest.mock import MagicMock from unittest.mock import Mock from unittest.mock import call diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py index 1909619c5..c0e290cb0 100644 --- a/lib/sqlalchemy/util/__init__.py +++ b/lib/sqlalchemy/util/__init__.py @@ -63,7 +63,6 @@ from .compat import parse_qsl # noqa from .compat import pickle # noqa from .compat import print_ # noqa from .compat import py2k # noqa -from .compat import py33 # noqa from .compat import py36 # noqa from .compat import py3k # noqa from .compat import quote_plus # noqa @@ -71,7 +70,6 @@ from .compat import raise_ # noqa from .compat import raise_from_cause # noqa from .compat import reduce # noqa from .compat import reraise # noqa -from .compat import safe_kwarg # noqa from .compat import string_types # noqa from .compat import StringIO # noqa from .compat import text_type # noqa diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index 31654b97c..79de3c978 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -16,12 +16,8 @@ import sys py36 = sys.version_info >= (3, 6) -py33 = sys.version_info >= (3, 3) -py35 = sys.version_info >= (3, 5) -py32 = sys.version_info >= (3, 2) py3k = sys.version_info >= (3, 0) py2k = sys.version_info < (3, 0) -py265 = sys.version_info >= (2, 6, 5) cpython = platform.python_implementation() == "CPython" @@ -53,13 +49,6 @@ except ImportError: import dummy_threading as threading # noqa -# work around http://bugs.python.org/issue2646 -if py265: - safe_kwarg = lambda arg: arg # noqa -else: - safe_kwarg = str - - def inspect_getfullargspec(func): """Fully vendored version of getfullargspec from Python 3.3.""" @@ -298,7 +287,7 @@ else: TYPE_CHECKING = False -if py35: +if py3k: def _formatannotation(annotation, base_module=None): """vendored from python 3.7 @@ -378,7 +367,7 @@ if py35: return result -elif py2k: +else: from inspect import formatargspec as _inspect_formatargspec def inspect_formatargspec(*spec, **kw): @@ -386,13 +375,9 @@ elif py2k: return _inspect_formatargspec(*spec[0:4], **kw) # noqa -else: - from inspect import formatargspec as inspect_formatargspec # noqa - - # Fix deprecation of accessing ABCs straight from collections module # (which will stop working in 3.8). -if py33: +if py3k: import collections.abc as collections_abc else: import collections as collections_abc # noqa @@ -157,7 +157,7 @@ def run_setup(with_cext): license="MIT", cmdclass=cmdclass, long_description=readme, - python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", + python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", @@ -166,7 +166,6 @@ def run_setup(with_cext): "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", diff --git a/test/ext/declarative/test_basic.py b/test/ext/declarative/test_basic.py index d81b99ccd..cb70b59f1 100644 --- a/test/ext/declarative/test_basic.py +++ b/test/ext/declarative/test_basic.py @@ -1006,7 +1006,7 @@ class DeclarativeTest(DeclarativeTestBase): try: hasattr(User.addresses, "property") except exc.InvalidRequestError: - assert sa.util.compat.py32 + assert sa.util.compat.py3k # the exception is preserved. Remains the # same through repeated calls. diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index 99e7358e5..e4ba50f13 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -182,7 +182,7 @@ class MapperTest(_fixtures.FixtureTest, AssertsCompiledSQL): try: hasattr(Address.user, "property") except sa.orm.exc.UnmappedClassError: - assert util.compat.py32 + assert util.compat.py3k for i in range(3): assert_raises_message( diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 8ef272a9e..afe5bdb59 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -29,7 +29,6 @@ from sqlalchemy import TypeDecorator from sqlalchemy import types as sqltypes from sqlalchemy import Unicode from sqlalchemy import UniqueConstraint -from sqlalchemy import util from sqlalchemy.engine import default from sqlalchemy.schema import AddConstraint from sqlalchemy.schema import CreateIndex @@ -4164,17 +4163,6 @@ class DialectKWArgTest(fixtures.TestBase): }, ) # still populates - def test_runs_safekwarg(self): - - with mock.patch( - "sqlalchemy.util.safe_kwarg", lambda arg: "goofy_%s" % arg - ): - with self._fixture(): - idx = Index("a", "b") - idx.kwargs[util.u("participating_x")] = 7 - - eq_(list(idx.dialect_kwargs), ["goofy_participating_x"]) - def test_combined(self): with self._fixture(): idx = Index( |
