]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
avoid importing ForwardRef that's py3.9+ only
authorCaselIT <cfederico87@gmail.com>
Mon, 23 Aug 2021 18:54:00 +0000 (20:54 +0200)
committerCaselIT <cfederico87@gmail.com>
Mon, 23 Aug 2021 19:26:32 +0000 (21:26 +0200)
Change-Id: I76654f10e208d618e21ab0c884cb0abede4d6177

alembic/operations/base.py
alembic/util/compat.py
tests/requirements.py
tests/test_stubs.py
tools/write_pyi.py

index 21f7a856815dbc4f1aac0780ed3cb877ef8f236b..59bbfc4831efbe0485098f7abd97a7c58c90850a 100644 (file)
@@ -1,8 +1,8 @@
 from contextlib import contextmanager
+import re
 import textwrap
 from typing import Any
 from typing import Callable
-from typing import ForwardRef  # noqa
 from typing import Iterator
 from typing import List  # noqa
 from typing import Optional
@@ -136,6 +136,12 @@ class Operations(util.ModuleClsProxy):
                 formatvalue=lambda x: "=" + x,
             )
 
+            args = re.sub(
+                r'[_]?ForwardRef\(([\'"].+?[\'"])\)',
+                lambda m: m.group(1),
+                args,
+            )
+
             func_text = textwrap.dedent(
                 """\
             def %(name)s%(args)s:
index b87f8a6387df2e89e819fc25a447377791539fea..dae98f472381b24df28dd11e78a82dbc20e9e95d 100644 (file)
@@ -1,11 +1,14 @@
 import io
 import os
+import sys
 
 from sqlalchemy.util import inspect_getfullargspec  # noqa
 from sqlalchemy.util.compat import inspect_formatargspec  # noqa
 
 is_posix = os.name == "posix"
 
+py39 = sys.version_info >= (3, 9)
+
 
 string_types = (str,)
 binary_type = bytes
index 04497f5f73017f17ac93c994d38ed2a1d907912a..011c620da38fae2e8990510d1012be8552b90ad7 100644 (file)
@@ -2,6 +2,7 @@ from sqlalchemy import text
 
 from alembic.testing import exclusions
 from alembic.testing.requirements import SuiteRequirements
+from alembic.util import compat
 from alembic.util import sqla_compat
 
 
@@ -301,3 +302,22 @@ class DefaultRequirements(SuiteRequirements):
         return exclusions.only_if(
             lambda config: not getattr(config.db, "_is_future", False)
         )
+
+    @property
+    def stubs_test(self):
+        def requirements():
+            try:
+                import black  # noqa
+                import zimports  # noqa
+
+                return False
+            except Exception:
+                return True
+
+        imports = exclusions.skip_if(
+            requirements, "black and zimports are required for this test"
+        )
+        version = exclusions.only_if(
+            lambda _: compat.py39, "python 3.9 is required"
+        )
+        return imports + version
index c5186c311083ffae3a3c7c0d0e86a79506be0d4f..efb1a9dfcd76fa815933630d2e8229372bca886f 100644 (file)
@@ -4,22 +4,11 @@ import sys
 
 import alembic
 from alembic.testing import eq_
-from alembic.testing import skip_if
 from alembic.testing import TestBase
 
 _home = Path(__file__).parent.parent
 
 
-def requirements():
-    try:
-        import black  # noqa
-        import zimports  # noqa
-
-        return False
-    except Exception:
-        return True
-
-
 def run_command(file):
     res = subprocess.run(
         [
@@ -37,14 +26,14 @@ def run_command(file):
 
 
 class TestStubFiles(TestBase):
-    @skip_if(requirements, "black and zimports are required for this test")
+    __requires__ = ("stubs_test",)
+
     def test_op_pyi(self):
         res = run_command("op")
         generated = res.stdout
         expected = Path(alembic.__file__).parent / "op.pyi"
         eq_(generated, expected.read_text())
 
-    @skip_if(requirements, "black and zimports are required for this test")
     def test_context_pyi(self):
         res = run_command("context")
         generated = res.stdout
index 6dfed09dd9a9ebb0160c77b77663338531f158f7..234b06f17f0b41797922d5bb9854ef6650a19efe 100644 (file)
@@ -50,7 +50,8 @@ def generate_pyi_for_proxy(
         printer = PythonPrinter(buf)
 
         printer.writeline(
-            f"# ### this file stubs are generated by {progname} - do not edit ###"
+            f"# ### this file stubs are generated by {progname} "
+            "- do not edit ###"
         )
         for line in imports:
             buf.write(line + "\n")