11"""Pre-commit hook that generates DDL via alembic upgrade --sql and lints with squawk."""
22
33import argparse
4- import ast
5- import configparser
64import os
75import re
86import subprocess
97import sys
108import tempfile
9+ from ast import Assign , Constant , Name , Tuple , iter_child_nodes , parse
10+ from configparser import ConfigParser , NoOptionError , NoSectionError
1111from pathlib import Path
1212
1313_BRANCH_RE = re .compile (r"^[a-zA-Z0-9._/\-]+$" )
@@ -19,12 +19,12 @@ def find_migrations_path():
1919 if not config_path .exists ():
2020 return None
2121
22- config = configparser . ConfigParser ()
22+ config = ConfigParser ()
2323 config .read (config_path )
2424
2525 try :
2626 script_location = config .get ("alembic" , "script_location" )
27- except (configparser . NoSectionError , configparser . NoOptionError ):
27+ except (NoSectionError , NoOptionError ):
2828 return None
2929
3030 script_location = script_location .removeprefix ("./" )
@@ -49,35 +49,35 @@ def extract_revision_info(filepath):
4949 """Parse a migration file to extract revision and down_revision from module-level assignments."""
5050 with open (filepath ) as f :
5151 try :
52- tree = ast . parse (f .read ())
52+ tree = parse (f .read ())
5353 except SyntaxError :
5454 return None
5555
5656 revision = None
5757 down_revision = None
5858
59- for node in ast . iter_child_nodes (tree ):
60- if not isinstance (node , ast . Assign ):
59+ for node in iter_child_nodes (tree ):
60+ if not isinstance (node , Assign ):
6161 continue
62- if len (node .targets ) != 1 or not isinstance (node .targets [0 ], ast . Name ):
62+ if len (node .targets ) != 1 or not isinstance (node .targets [0 ], Name ):
6363 continue
6464
6565 name = node .targets [0 ].id
6666 if name == "revision" :
67- if isinstance (node .value , ast . Constant ) and isinstance (
67+ if isinstance (node .value , Constant ) and isinstance (
6868 node .value .value , str
6969 ):
7070 revision = node .value .value
7171 elif name == "down_revision" :
72- if isinstance (node .value , ast . Constant ):
72+ if isinstance (node .value , Constant ):
7373 if isinstance (node .value .value , str ):
7474 down_revision = node .value .value
7575 elif node .value .value is None :
7676 down_revision = None
77- elif isinstance (node .value , ast . Tuple ):
77+ elif isinstance (node .value , Tuple ):
7878 values = []
7979 for elt in node .value .elts :
80- if isinstance (elt , ast . Constant ) and isinstance (elt .value , str ):
80+ if isinstance (elt , Constant ) and isinstance (elt .value , str ):
8181 values .append (elt .value )
8282 down_revision = tuple (values )
8383
0 commit comments