]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Support generics in code to allow Column[int] etc
authorFederico Caselli <cfederico87@gmail.com>
Sat, 24 Jul 2021 17:17:49 +0000 (19:17 +0200)
committerFederico Caselli <cfederico87@gmail.com>
Tue, 27 Jul 2021 20:39:45 +0000 (22:39 +0200)
Fixes: #6804
Fixes: #6759
Change-Id: Ie7f32c38a22dbfa059b5709b883ff464b16031ae

doc/build/changelog/unreleased_14/6804.rst [new file with mode: 0644]
lib/sqlalchemy/sql/visitors.py
lib/sqlalchemy/testing/requirements.py
lib/sqlalchemy/util/__init__.py
lib/sqlalchemy/util/compat.py
test/base/test_misc_py3k.py [new file with mode: 0644]

diff --git a/doc/build/changelog/unreleased_14/6804.rst b/doc/build/changelog/unreleased_14/6804.rst
new file mode 100644 (file)
index 0000000..92c41d6
--- /dev/null
@@ -0,0 +1,6 @@
+.. change::
+    :tags: change
+    :tickets: 6804, 6759
+
+    Add basic support for generic classes without requiring
+    ``TYPE_CHECKING``.
index 1cd7b63cdecfd8c4baeb46c928c181f08a8de375..7111c5efd70be0babd915a5f0945147ec902825d 100644 (file)
@@ -120,6 +120,10 @@ class Traversible(util.with_metaclass(TraversibleType)):
 
     """
 
+    def __class_getitem__(cls, key):
+        # allow generic classes in py3.9+
+        return cls
+
     @util.preload_module("sqlalchemy.sql.traversals")
     def get_children(self, omit_attrs=(), **kw):
         r"""Return immediate child :class:`.visitors.Traversible`
index 702a40fe29dd35adaefe090e49d097b134950909..74ed1ad9b7ecbac885a1efc32b95525d50f9e197 100644 (file)
@@ -1424,3 +1424,8 @@ class SuiteRequirements(Requirements):
         sequence. This should be false only for oracle.
         """
         return exclusions.open()
+
+    @property
+    def builtin_generics(self):
+        "If list[int] is a valid syntax. basically py3.9+"
+        return exclusions.only_if(lambda: util.py39)
index 10139fb9f58e07ecb93718008e1c76ea38ae3389..bdd69431e0f81c3f731b416266139a51a481fc9d 100644 (file)
@@ -77,6 +77,8 @@ from .compat import pickle
 from .compat import print_
 from .compat import py2k
 from .compat import py37
+from .compat import py38
+from .compat import py39
 from .compat import py3k
 from .compat import pypy
 from .compat import quote_plus
index 37239f532cc3fc05435d18b26ee291696b97d614..5d52f740fcbf26adfd9aa78986432e204fb9cdb3 100644 (file)
@@ -14,7 +14,7 @@ import operator
 import platform
 import sys
 
-py310 = sys.version_info >= (3, 10)
+py39 = sys.version_info >= (3, 9)
 py38 = sys.version_info >= (3, 8)
 py37 = sys.version_info >= (3, 7)
 py3k = sys.version_info >= (3, 0)
diff --git a/test/base/test_misc_py3k.py b/test/base/test_misc_py3k.py
new file mode 100644 (file)
index 0000000..3cd9e1a
--- /dev/null
@@ -0,0 +1,10 @@
+from sqlalchemy import Column
+from sqlalchemy.testing import fixtures
+from sqlalchemy.testing import requires
+
+
+class TestGenerics(fixtures.TestBase):
+    @requires.builtin_generics
+    def test_traversible_is_generic(self):
+        col = Column[int]
+        assert col is Column