Skip to content

Commit 553811d

Browse files
committed
Implement naming conventions for DataclassGenerator
1 parent a12b4e2 commit 553811d

File tree

2 files changed

+42
-43
lines changed

2 files changed

+42
-43
lines changed

src/sqlacodegen/generators.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,6 +1290,15 @@ def render_module_variables(self, models: list[Model]) -> str:
12901290
return super().render_module_variables(models)
12911291

12921292
declarations: list[str] = ["mapper_registry = registry()"]
1293+
1294+
if self.metadata.naming_convention != DEFAULT_NAMING_CONVENTION:
1295+
formatted_naming_convention = pformat(self.metadata.naming_convention)
1296+
declarations.append(
1297+
"mapper_registry.metadata.naming_convention = {}".format(
1298+
formatted_naming_convention
1299+
)
1300+
)
1301+
12931302
if any(not isinstance(model, ModelClass) for model in models):
12941303
declarations.append("metadata = mapper_registry.metadata")
12951304

tests/test_generators.py

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2727,13 +2727,11 @@ class Simple:
27272727
""",
27282728
)
27292729

2730-
@pytest.mark.xfail
27312730
def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
27322731
generator.metadata.naming_convention = {
27332732
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
27342733
"ck": "CHECK_%(table_name)s",
2735-
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s"
2736-
"_%(referred_table_name)s_%(referred_column_0_label)s",
2734+
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_%(referred_table_name)s",
27372735
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
27382736
}
27392737

@@ -2748,7 +2746,7 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
27482746
ForeignKeyConstraint(
27492747
["container_id"],
27502748
["containers.id"],
2751-
name="FOREIGN_items_container_id_containers_id",
2749+
name="FOREIGN_items_container_id_containers",
27522750
),
27532751
)
27542752
Table(
@@ -2764,61 +2762,53 @@ def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
27642762
validate_code(
27652763
generator.generate(),
27662764
"""\
2767-
from __future__ import annotations
2765+
from __future__ import annotations
27682766
2769-
from dataclasses import dataclass, field
2770-
from typing import List, Optional
2767+
from dataclasses import dataclass, field
2768+
from typing import List, Optional
27712769
2772-
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2770+
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
27732771
Integer, String, UniqueConstraint
2774-
from sqlalchemy.orm import registry, relationship
2772+
from sqlalchemy.orm import registry, relationship
27752773
2776-
metadata = MetaData(
2777-
naming_convention={
2778-
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
2779-
"ck": "CHECK_%(table_name)s",
2780-
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_\
2781-
%(referred_table_name)s_%(referred_column_0_label)s",
2782-
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
2783-
}
2784-
)
2785-
2786-
mapper_registry = registry(metadata=metadata)
2774+
mapper_registry = registry()
2775+
mapper_registry.metadata.naming_convention = {'ck': 'CHECK_%(table_name)s',
2776+
'fk': 'FOREIGN_%(table_name)s_%(column_0_key)s_%(referred_table_name)s',
2777+
'pk': 'PRIMARY_%(table_name)s_%(column_0N_name)s',
2778+
'uq': 'UNIQUE_%(table_name)s_%(column_0_N_name)s'}
27872779
27882780
2789-
@mapper_registry.mapped
2790-
@dataclass
2791-
class Containers:
2792-
__tablename__ = 'containers'
2793-
__table_args__ = (
2794-
CheckConstraint('id > 0'),
2795-
UniqueConstraint('id', 'name')
2796-
)
2797-
__sa_dataclass_metadata_key__ = 'sa'
2781+
@mapper_registry.mapped
2782+
@dataclass
2783+
class Containers:
2784+
__tablename__ = 'containers'
2785+
__table_args__ = (
2786+
CheckConstraint('id > 0'),
2787+
UniqueConstraint('id', 'name')
2788+
)
2789+
__sa_dataclass_metadata_key__ = 'sa'
27982790
2799-
id: int = field(init=False, metadata={'sa': \
2800-
Column(Integer, primary_key=True)})
2801-
name: Optional[str] = field(default=None, metadata={'sa': \
2802-
Column(String)})
2791+
id: int = field(init=False, metadata={'sa': Column(Integer, primary_key=True)})
2792+
name: Optional[str] = field(default=None, metadata={'sa': Column(String)})
28032793
2804-
items: List[Items] = field(default_factory=list, metadata={'sa': \
2794+
items: List[Items] = field(default_factory=list, metadata={'sa': \
28052795
relationship('Items', back_populates='container')})
28062796
28072797
2808-
@mapper_registry.mapped
2809-
@dataclass
2810-
class Items:
2811-
__tablename__ = 'items'
2812-
__sa_dataclass_metadata_key__ = 'sa'
2798+
@mapper_registry.mapped
2799+
@dataclass
2800+
class Items:
2801+
__tablename__ = 'items'
2802+
__sa_dataclass_metadata_key__ = 'sa'
28132803
2814-
id: int = field(init=False, metadata={'sa': \
2804+
id: int = field(init=False, metadata={'sa': \
28152805
Column(Integer, primary_key=True, nullable=False, unique=True)})
2816-
name: str = field(init=False, metadata={'sa': \
2806+
name: str = field(init=False, metadata={'sa': \
28172807
Column(String, primary_key=True, nullable=False)})
2818-
container_id: Optional[int] = field(default=None, metadata={'sa': \
2808+
container_id: Optional[int] = field(default=None, metadata={'sa': \
28192809
Column(ForeignKey('containers.id'))})
28202810
2821-
container: Optional[Containers] = field(default=None, metadata={'sa': \
2811+
container: Optional[Containers] = field(default=None, metadata={'sa': \
28222812
relationship('Containers', back_populates='items')})
28232813
""",
28242814
)

0 commit comments

Comments
 (0)