Skip to content

Commit

Permalink
keyword only arguments in ops
Browse files Browse the repository at this point in the history
Argument signatures of Alembic operations now enforce keyword-only
arguments as passed as keyword and not positionally, such as
:paramref:`.Operations.create_table.schema`,
:paramref:`.Operations.add_column.type_`, etc.

Change-Id: I91b453c8848dc5d24d63840bfd7ce4d22dd0e693
Fixes: #1130
  • Loading branch information
zzzeek authored and CaselIT committed May 11, 2023
1 parent 92e54a0 commit df75e85
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 26 deletions.
22 changes: 18 additions & 4 deletions alembic/op.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ if TYPE_CHECKING:
### end imports ###

def add_column(
table_name: str, column: Column, schema: Optional[str] = None
table_name: str, column: Column, *, schema: Optional[str] = None
) -> None:
"""Issue an "add column" instruction using the current
migration context.
Expand Down Expand Up @@ -124,6 +124,7 @@ def add_column(
def alter_column(
table_name: str,
column_name: str,
*,
nullable: Optional[bool] = None,
comment: Union[str, Literal[False], None] = False,
server_default: Any = False,
Expand Down Expand Up @@ -484,6 +485,7 @@ def create_check_constraint(
constraint_name: Optional[str],
table_name: str,
condition: Union[str, BinaryExpression, TextClause],
*,
schema: Optional[str] = None,
**kw: Any,
) -> None:
Expand Down Expand Up @@ -572,6 +574,7 @@ def create_foreign_key(
referent_table: str,
local_cols: List[str],
remote_cols: List[str],
*,
onupdate: Optional[str] = None,
ondelete: Optional[str] = None,
deferrable: Optional[bool] = None,
Expand Down Expand Up @@ -635,6 +638,7 @@ def create_index(
index_name: Optional[str],
table_name: str,
columns: Sequence[Union[str, TextClause, Function[Any]]],
*,
schema: Optional[str] = None,
unique: bool = False,
**kw: Any,
Expand Down Expand Up @@ -687,6 +691,7 @@ def create_primary_key(
constraint_name: Optional[str],
table_name: str,
columns: List[str],
*,
schema: Optional[str] = None,
) -> None:
"""Issue a "create primary key" instruction using the current
Expand Down Expand Up @@ -807,6 +812,7 @@ def create_table_comment(
table_name: str,
comment: Optional[str],
existing_comment: Optional[str] = None,
*,
schema: Optional[str] = None,
) -> None:
"""Emit a COMMENT ON operation to set the comment for a table.
Expand All @@ -833,6 +839,7 @@ def create_unique_constraint(
constraint_name: Optional[str],
table_name: str,
columns: Sequence[str],
*,
schema: Optional[str] = None,
**kw: Any,
) -> Any:
Expand Down Expand Up @@ -875,7 +882,11 @@ def create_unique_constraint(
"""

def drop_column(
table_name: str, column_name: str, schema: Optional[str] = None, **kw: Any
table_name: str,
column_name: str,
*,
schema: Optional[str] = None,
**kw: Any,
) -> None:
"""Issue a "drop column" instruction using the current
migration context.
Expand Down Expand Up @@ -917,6 +928,7 @@ def drop_column(
def drop_constraint(
constraint_name: str,
table_name: str,
*,
type_: Optional[str] = None,
schema: Optional[str] = None,
) -> None:
Expand All @@ -935,6 +947,7 @@ def drop_constraint(

def drop_index(
index_name: str,
*,
table_name: Optional[str] = None,
schema: Optional[str] = None,
**kw: Any,
Expand Down Expand Up @@ -962,7 +975,7 @@ def drop_index(
"""

def drop_table(
table_name: str, schema: Optional[str] = None, **kw: Any
table_name: str, *, schema: Optional[str] = None, **kw: Any
) -> None:
r"""Issue a "drop table" instruction using the current
migration context.
Expand All @@ -984,6 +997,7 @@ def drop_table(

def drop_table_comment(
table_name: str,
*,
existing_comment: Optional[str] = None,
schema: Optional[str] = None,
) -> None:
Expand Down Expand Up @@ -1226,7 +1240,7 @@ def register_operation(
"""

def rename_table(
old_table_name: str, new_table_name: str, schema: Optional[str] = None
old_table_name: str, new_table_name: str, *, schema: Optional[str] = None
) -> None:
"""Emit an ALTER TABLE to rename a table.
Expand Down
33 changes: 29 additions & 4 deletions alembic/operations/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,13 @@ def register(op_cls):
else:
defaulted_vals = ()

defaulted_vals += tuple(spec[4])
# here, we are using formatargspec in a different way in order
# to get a string that will re-apply incoming arguments to a new
# function call

apply_kw = inspect_formatargspec(
name_args,
name_args + spec[4],
spec[1],
spec[2],
defaulted_vals,
Expand Down Expand Up @@ -155,6 +160,7 @@ def %(name)s%(args)s:
"doc": fn.__doc__,
}
)

globals_ = dict(globals())
globals_.update({"op_cls": op_cls})
lcl = {}
Expand Down Expand Up @@ -520,7 +526,11 @@ class Operations(AbstractOperations):
# ### do not edit ###

def add_column(
self, table_name: str, column: Column, schema: Optional[str] = None
self,
table_name: str,
column: Column,
*,
schema: Optional[str] = None,
) -> None:
"""Issue an "add column" instruction using the current
migration context.
Expand Down Expand Up @@ -605,6 +615,7 @@ def alter_column(
self,
table_name: str,
column_name: str,
*,
nullable: Optional[bool] = None,
comment: Union[str, Literal[False], None] = False,
server_default: Any = False,
Expand Down Expand Up @@ -817,6 +828,7 @@ def create_check_constraint(
constraint_name: Optional[str],
table_name: str,
condition: Union[str, BinaryExpression, TextClause],
*,
schema: Optional[str] = None,
**kw: Any,
) -> None:
Expand Down Expand Up @@ -912,6 +924,7 @@ def create_foreign_key(
referent_table: str,
local_cols: List[str],
remote_cols: List[str],
*,
onupdate: Optional[str] = None,
ondelete: Optional[str] = None,
deferrable: Optional[bool] = None,
Expand Down Expand Up @@ -977,6 +990,7 @@ def create_index(
index_name: Optional[str],
table_name: str,
columns: Sequence[Union[str, TextClause, Function[Any]]],
*,
schema: Optional[str] = None,
unique: bool = False,
**kw: Any,
Expand Down Expand Up @@ -1031,6 +1045,7 @@ def create_primary_key(
constraint_name: Optional[str],
table_name: str,
columns: List[str],
*,
schema: Optional[str] = None,
) -> None:
"""Issue a "create primary key" instruction using the current
Expand Down Expand Up @@ -1156,6 +1171,7 @@ def create_table_comment(
table_name: str,
comment: Optional[str],
existing_comment: Optional[str] = None,
*,
schema: Optional[str] = None,
) -> None:
"""Emit a COMMENT ON operation to set the comment for a table.
Expand Down Expand Up @@ -1184,6 +1200,7 @@ def create_unique_constraint(
constraint_name: Optional[str],
table_name: str,
columns: Sequence[str],
*,
schema: Optional[str] = None,
**kw: Any,
) -> Any:
Expand Down Expand Up @@ -1230,6 +1247,7 @@ def drop_column(
self,
table_name: str,
column_name: str,
*,
schema: Optional[str] = None,
**kw: Any,
) -> None:
Expand Down Expand Up @@ -1275,6 +1293,7 @@ def drop_constraint(
self,
constraint_name: str,
table_name: str,
*,
type_: Optional[str] = None,
schema: Optional[str] = None,
) -> None:
Expand All @@ -1295,6 +1314,7 @@ def drop_constraint(
def drop_index(
self,
index_name: str,
*,
table_name: Optional[str] = None,
schema: Optional[str] = None,
**kw: Any,
Expand Down Expand Up @@ -1323,7 +1343,7 @@ def drop_index(
...

def drop_table(
self, table_name: str, schema: Optional[str] = None, **kw: Any
self, table_name: str, *, schema: Optional[str] = None, **kw: Any
) -> None:
r"""Issue a "drop table" instruction using the current
migration context.
Expand All @@ -1347,6 +1367,7 @@ def drop_table(
def drop_table_comment(
self,
table_name: str,
*,
existing_comment: Optional[str] = None,
schema: Optional[str] = None,
) -> None:
Expand Down Expand Up @@ -1460,6 +1481,7 @@ def rename_table(
self,
old_table_name: str,
new_table_name: str,
*,
schema: Optional[str] = None,
) -> None:
"""Emit an ALTER TABLE to rename a table.
Expand Down Expand Up @@ -1510,6 +1532,7 @@ def _noop(self, operation):
def add_column(
self,
column: Column,
*,
insert_before: Optional[str] = None,
insert_after: Optional[str] = None,
) -> None:
Expand All @@ -1526,6 +1549,7 @@ def add_column(
def alter_column(
self,
column_name: str,
*,
nullable: Optional[bool] = None,
comment: Union[str, Literal[False], None] = False,
server_default: Any = False,
Expand Down Expand Up @@ -1610,6 +1634,7 @@ def create_foreign_key(
referent_table: str,
local_cols: List[str],
remote_cols: List[str],
*,
referent_schema: Optional[str] = None,
onupdate: Optional[str] = None,
ondelete: Optional[str] = None,
Expand Down Expand Up @@ -1718,7 +1743,7 @@ def drop_column(self, column_name: str, **kw: Any) -> None:
...

def drop_constraint(
self, constraint_name: str, type_: Optional[str] = None
self, constraint_name: str, *, type_: Optional[str] = None
) -> None:
"""Issue a "drop constraint" instruction using the
current batch migration context.
Expand Down
Loading

0 comments on commit df75e85

Please sign in to comment.