]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Adds exception when trying to run write_pyi.py with Python < 3.9
authorTilmanK <tilman.krummeck@googlemail.com>
Tue, 14 Sep 2021 19:43:30 +0000 (15:43 -0400)
committerFederico Caselli <cfederico87@gmail.com>
Tue, 14 Sep 2021 19:46:58 +0000 (19:46 +0000)
### Description
write_pyi.py now raises an exception when someone tries to run the script with Python version 3.8 or smaller.

This also fixes:
- When using absolute Paths, i.e. on Windows, they are now converted to relative paths to avoid useless changes in the doc strings of the pyi files
- Corrected destination_path argument type when calling `generate_pyi_for_proxy` in `run_file`
- A comment typo

Fixes: #915
Closes: #919
Pull-request: https://github.com/sqlalchemy/alembic/pull/919
Pull-request-sha: e885d27ac5509858c8cb2927310f6195fc1d6004

Change-Id: Ia33d32b2828e71185186afc49848ce89d48a8323

tools/write_pyi.py

index 61c3052fd682e3658d73272023fd7662ec4b65dc..df2a55fd056079ae6a022b1472463fdb2359a2aa 100644 (file)
@@ -9,7 +9,7 @@ from mako.pygen import PythonPrinter
 
 sys.path.append(str(Path(__file__).parent.parent))
 
-if True:  # avoid flake/zimports missing with the order
+if True:  # avoid flake/zimports messing with the order
     from alembic.operations.base import Operations
     from alembic.runtime.environment import EnvironmentContext
     from alembic.script.write_hooks import console_scripts
@@ -36,6 +36,13 @@ def generate_pyi_for_proxy(
     ignore_output: bool,
     ignore_items: set,
 ):
+    if sys.version_info < (3, 9):
+        raise RuntimeError("This script must be run with Python 3.9 or higher")
+
+    # When using an absolute path on windows, this will generate the correct
+    # relative path that shall be written to the top comment of the pyi file.
+    if Path(progname).is_absolute():
+        progname = Path(progname).relative_to(Path().cwd()).as_posix()
 
     imports = []
     read_imports = False
@@ -154,15 +161,15 @@ def run_file(
     else:
         with NamedTemporaryFile(delete=False, suffix=".pyi") as f:
             f.close()
+            f_path = Path(f.name)
             generate_pyi_for_proxy(
                 cls_to_generate,
                 progname,
                 source_path=source_path,
-                destination_path=f.name,
+                destination_path=f_path,
                 ignore_output=True,
                 ignore_items=ignore_items,
             )
-            f_path = Path(f.name)
             sys.stdout.write(f_path.read_text())
         f_path.unlink()