Skip to content

Commit a12b4e2

Browse files
committed
Implement naming conventions for DeclarativeGenerator
1 parent 1b85ce1 commit a12b4e2

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
@@ -1026,6 +1026,13 @@ def render_module_variables(self, models: list[Model]) -> str:
10261026
return super().render_module_variables(models)
10271027

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

tests/test_generators.py

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

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

@@ -2330,7 +2328,7 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
23302328
ForeignKeyConstraint(
23312329
["container_id"],
23322330
["containers.id"],
2333-
name="FOREIGN_items_container_id_containers_id",
2331+
name="FOREIGN_items_container_id_containers",
23342332
),
23352333
)
23362334
Table(
@@ -2346,44 +2344,38 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
23462344
validate_code(
23472345
generator.generate(),
23482346
"""\
2349-
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2350-
Integer, String, UniqueConstraint, MetaData
2351-
from sqlalchemy.orm import declarative_base, relationship
2352-
2353-
metadata = MetaData(
2354-
naming_convention={
2355-
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
2356-
"ck": "CHECK_%(table_name)s",
2357-
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_\
2358-
%(referred_table_name)s_%(referred_column_0_label)s",
2359-
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
2360-
}
2361-
)
2347+
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2348+
Integer, String, UniqueConstraint
2349+
from sqlalchemy.orm import declarative_base, relationship
23622350
2363-
Base = declarative_base(metadata=metadata)
2351+
Base = declarative_base()
2352+
Base.metadata.naming_convention = {'ck': 'CHECK_%(table_name)s',
2353+
'fk': 'FOREIGN_%(table_name)s_%(column_0_key)s_%(referred_table_name)s',
2354+
'pk': 'PRIMARY_%(table_name)s_%(column_0N_name)s',
2355+
'uq': 'UNIQUE_%(table_name)s_%(column_0_N_name)s'}
23642356
23652357
2366-
class Containers(Base):
2367-
__tablename__ = 'containers'
2368-
__table_args__ = (
2369-
CheckConstraint('id > 0'),
2370-
UniqueConstraint('id', 'name')
2371-
)
2358+
class Containers(Base):
2359+
__tablename__ = 'containers'
2360+
__table_args__ = (
2361+
CheckConstraint('id > 0'),
2362+
UniqueConstraint('id', 'name')
2363+
)
23722364
2373-
id = Column(Integer, primary_key=True)
2374-
name = Column(String)
2365+
id = Column(Integer, primary_key=True)
2366+
name = Column(String)
23752367
2376-
items = relationship('Items', back_populates='container')
2368+
items = relationship('Items', back_populates='container')
23772369
23782370
2379-
class Items(Base):
2380-
__tablename__ = 'items'
2371+
class Items(Base):
2372+
__tablename__ = 'items'
23812373
2382-
id = Column(Integer, primary_key=True, nullable=False, unique=True)
2383-
name = Column(String, primary_key=True, nullable=False)
2384-
container_id = Column(ForeignKey('containers.id'))
2374+
id = Column(Integer, primary_key=True, nullable=False, unique=True)
2375+
name = Column(String, primary_key=True, nullable=False)
2376+
container_id = Column(ForeignKey('containers.id'))
23852377
2386-
container = relationship('Containers', back_populates='items')
2378+
container = relationship('Containers', back_populates='items')
23872379
""",
23882380
)
23892381

0 commit comments

Comments
 (0)