Skip to content

Commit 293a943

Browse files
authored
Merge pull request #101 from DanCardin/dc/view-naming-convention
fix: Metadata naming_convention registration in combination with regi…
2 parents 3719fc0 + 0ca1f73 commit 293a943

File tree

7 files changed

+31
-10
lines changed

7 files changed

+31
-10
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## 0.15
44

5+
### 0.15.6
6+
7+
- fix: Metadata naming_convention registration in combination with register_sqlalchemy_events.
8+
59
### 0.15.5
610

711
- fix: Dont set `None` audit "context values".

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "sqlalchemy-declarative-extensions"
3-
version = "0.15.5"
3+
version = "0.15.6"
44
authors = [
55
{name = "Dan Cardin", email = "[email protected]"},
66
]

src/sqlalchemy_declarative_extensions/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def register_create_events(
227227
concrete_schemas = metadata.info.get("schemas")
228228
concrete_roles = metadata.info.get("roles")
229229
concrete_grants = metadata.info.get("grants")
230-
concrete_views = metadata.info.get("views")
230+
concrete_views = Views.extract(metadata)
231231
concrete_procedures = metadata.info.get("procedures")
232232
concrete_functions = metadata.info.get("functions")
233233
concrete_triggers = metadata.info.get("triggers")

src/sqlalchemy_declarative_extensions/view/base.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Sequence,
1616
TypeVar,
1717
cast,
18+
overload,
1819
)
1920

2021
from sqlalchemy import Index, MetaData, UniqueConstraint, text
@@ -533,8 +534,26 @@ def coerce_from_unknown(
533534

534535
return None
535536

537+
@overload
536538
@classmethod
537-
def extract(cls, metadata: MetaData | list[MetaData | None] | None) -> Self | None:
539+
def extract(cls, metadata: MetaData) -> Self: ...
540+
541+
@overload
542+
@classmethod
543+
def extract(cls, metadata: list[MetaData]) -> Self: ...
544+
545+
@overload
546+
@classmethod
547+
def extract(cls, metadata: list[MetaData | None]) -> Self | None: ...
548+
549+
@overload
550+
@classmethod
551+
def extract(cls, metadata: None) -> None: ...
552+
553+
@classmethod
554+
def extract(
555+
cls, metadata: MetaData | list[MetaData] | list[MetaData | None] | None
556+
) -> Self | None:
538557
if not isinstance(metadata, Sequence):
539558
metadata = [metadata]
540559

@@ -547,9 +566,6 @@ def extract(cls, metadata: MetaData | list[MetaData | None] | None) -> Self | No
547566
if instance_count == 0:
548567
return None
549568

550-
if instance_count == 1:
551-
return instances[0]
552-
553569
if not all(
554570
x.ignore_unspecified == instances[0].ignore_unspecified
555571
and x.naming_convention == instances[0].naming_convention

src/sqlalchemy_declarative_extensions/view/ddl.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010

1111
def view_ddl(views: Views, view_filter: list[str] | None = None):
1212
def after_create(metadata: MetaData, connection: Connection, **_):
13-
result = compare_views(connection, views, normalize_with_connection=False)
13+
result = compare_views(
14+
connection, views, normalize_with_connection=False
15+
)
1416
for op in result:
1517
if not match_name(op.view.qualified_name, view_filter):
1618
continue

tests/view/test_metadata_sequence.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ def test_valid_combination():
4848
def test_single():
4949
views = Views.extract(metadata5)
5050
assert views
51-
assert views is metadata5.info["views"]
52-
assert views.naming_convention is None
51+
assert views.naming_convention == {"ix": "asdf"}
5352

5453

5554
def test_naming_convention_fallback():

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)