Skip to content

Commit 5f99571

Browse files
committed
Fix ignoring kwargs and ensure deterministic output (#439)
1 parent 615d79c commit 5f99571

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/sqlacodegen/generators.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,10 @@ def render_table(self, table: Table) -> str:
414414

415415
def render_index(self, index: Index) -> str:
416416
extra_args = [repr(col.name) for col in index.columns]
417-
kwargs = {}
417+
kwargs = {
418+
key: repr(value) if isinstance(value, str) else value
419+
for key, value in sorted(index.kwargs.items())
420+
}
418421
if index.unique:
419422
kwargs["unique"] = True
420423

tests/test_generator_declarative.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,41 @@ class SimpleItems(Base):
7676
)
7777

7878

79+
def test_index_with_kwargs(generator: CodeGenerator) -> None:
80+
simple_items = Table(
81+
"simple_items",
82+
generator.metadata,
83+
Column("id", INTEGER, primary_key=True),
84+
Column("name", VARCHAR),
85+
)
86+
simple_items.indexes.add(
87+
Index("idx_name", simple_items.c.name, postgresql_using="gist", mysql_length=10)
88+
)
89+
90+
validate_code(
91+
generator.generate(),
92+
"""\
93+
from typing import Optional
94+
95+
from sqlalchemy import Index, Integer, String
96+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
97+
98+
class Base(DeclarativeBase):
99+
pass
100+
101+
102+
class SimpleItems(Base):
103+
__tablename__ = 'simple_items'
104+
__table_args__ = (
105+
Index('idx_name', 'name', mysql_length=10, postgresql_using='gist'),
106+
)
107+
108+
id: Mapped[int] = mapped_column(Integer, primary_key=True)
109+
name: Mapped[Optional[str]] = mapped_column(String)
110+
""",
111+
)
112+
113+
79114
def test_constraints(generator: CodeGenerator) -> None:
80115
Table(
81116
"simple_items",
@@ -1971,8 +2006,8 @@ class Base(DeclarativeBase):
19712006
class SpatialTable(Base):
19722007
__tablename__ = 'spatial_table'
19732008
__table_args__ = (
1974-
Index('idx_spatial_table_geog', 'geog'),
1975-
Index('idx_spatial_table_geom', 'geom')
2009+
Index('idx_spatial_table_geog', 'geog', postgresql_using='gist'),
2010+
Index('idx_spatial_table_geom', 'geom', postgresql_using='gist')
19762011
)
19772012
19782013
id: Mapped[int] = mapped_column(Integer, primary_key=True)

0 commit comments

Comments
 (0)