Skip to content

Commit c050a47

Browse files
committed
Implement naming conventions for DeclarativeGenerator
1 parent 4cf8007 commit c050a47

File tree

2 files changed

+32
-33
lines changed

2 files changed

+32
-33
lines changed

src/sqlacodegen/generators.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,13 @@ def render_module_variables(self, models: list[Model]) -> str:
10241024
return super().render_module_variables(models)
10251025

10261026
declarations = [f"{self.base_class_name} = declarative_base()"]
1027+
1028+
if self.metadata.naming_convention != DEFAULT_NAMING_CONVENTION:
1029+
formatted_naming_convention = pformat(self.metadata.naming_convention)
1030+
declarations.append(
1031+
f"Base.metadata.naming_convention = {formatted_naming_convention}"
1032+
)
1033+
10271034
if any(not isinstance(model, ModelClass) for model in models):
10281035
declarations.append(f"metadata = {self.base_class_name}.metadata")
10291036

tests/test_generators.py

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,13 +2310,11 @@ class Simple(Base):
23102310
""",
23112311
)
23122312

2313-
@pytest.mark.xfail
23142313
def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
23152314
generator.metadata.naming_convention = {
23162315
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
23172316
"ck": "CHECK_%(table_name)s",
2318-
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s"
2319-
"_%(referred_table_name)s_%(referred_column_0_label)s",
2317+
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_%(referred_table_name)s",
23202318
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
23212319
}
23222320

@@ -2331,7 +2329,7 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
23312329
ForeignKeyConstraint(
23322330
["container_id"],
23332331
["containers.id"],
2334-
name="FOREIGN_items_container_id_containers_id",
2332+
name="FOREIGN_items_container_id_containers",
23352333
),
23362334
)
23372335
Table(
@@ -2347,44 +2345,38 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
23472345
validate_code(
23482346
generator.generate(),
23492347
"""\
2350-
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2351-
Integer, String, UniqueConstraint, MetaData
2352-
from sqlalchemy.orm import declarative_base, relationship
2353-
2354-
metadata = MetaData(
2355-
naming_convention={
2356-
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
2357-
"ck": "CHECK_%(table_name)s",
2358-
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_\
2359-
%(referred_table_name)s_%(referred_column_0_label)s",
2360-
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
2361-
}
2362-
)
2348+
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2349+
Integer, String, UniqueConstraint
2350+
from sqlalchemy.orm import declarative_base, relationship
23632351
2364-
Base = declarative_base(metadata=metadata)
2352+
Base = declarative_base()
2353+
Base.metadata.naming_convention = {'ck': 'CHECK_%(table_name)s',
2354+
'fk': 'FOREIGN_%(table_name)s_%(column_0_key)s_%(referred_table_name)s',
2355+
'pk': 'PRIMARY_%(table_name)s_%(column_0N_name)s',
2356+
'uq': 'UNIQUE_%(table_name)s_%(column_0_N_name)s'}
23652357
23662358
2367-
class Containers(Base):
2368-
__tablename__ = 'containers'
2369-
__table_args__ = (
2370-
CheckConstraint('id > 0'),
2371-
UniqueConstraint('id', 'name')
2372-
)
2359+
class Containers(Base):
2360+
__tablename__ = 'containers'
2361+
__table_args__ = (
2362+
CheckConstraint('id > 0'),
2363+
UniqueConstraint('id', 'name')
2364+
)
23732365
2374-
id = Column(Integer, primary_key=True)
2375-
name = Column(String)
2366+
id = Column(Integer, primary_key=True)
2367+
name = Column(String)
23762368
2377-
items = relationship('Items', back_populates='container')
2369+
items = relationship('Items', back_populates='container')
23782370
23792371
2380-
class Items(Base):
2381-
__tablename__ = 'items'
2372+
class Items(Base):
2373+
__tablename__ = 'items'
23822374
2383-
id = Column(Integer, primary_key=True, nullable=False, unique=True)
2384-
name = Column(String, primary_key=True, nullable=False)
2385-
container_id = Column(ForeignKey('containers.id'))
2375+
id = Column(Integer, primary_key=True, nullable=False, unique=True)
2376+
name = Column(String, primary_key=True, nullable=False)
2377+
container_id = Column(ForeignKey('containers.id'))
23862378
2387-
container = relationship('Containers', back_populates='items')
2379+
container = relationship('Containers', back_populates='items')
23882380
""",
23892381
)
23902382

0 commit comments

Comments
 (0)