Skip to content

Commit b2997f2

Browse files
committed
integrate feedback
1 parent 74daca7 commit b2997f2

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Version history
22
===============
33

44
**UNRELEASED**
5+
56
- Handle SQLAlchemy type with unimplemented python_type as typing.Any (PR by @danplischke)
67
- Fix SQLModel metadata reference (PR by @danplischke)
78

src/sqlacodegen/generators.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1246,14 +1246,15 @@ def render_python_type(column_type: TypeEngine[Any]) -> str:
12461246
try:
12471247
python_type = column_type.python_type
12481248
except NotImplementedError:
1249-
self.add_literal_import("typing", "Any")
1249+
self.add_import(Any)
12501250
python_type = Any
12511251

12521252
python_type_name = (
12531253
python_type.__name__
12541254
if hasattr(python_type, "__name__")
12551255
else python_type._name
12561256
)
1257+
12571258
python_type_module = python_type.__module__
12581259
if python_type_module == "builtins":
12591260
return python_type_name

tests/test_generator_sqlmodel.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,3 +233,33 @@ class SimpleTsvector(SQLModel, table=True):
233233
search: Optional[typing.Any] = Field(default=None, sa_column=Column('search', TSVECTOR))
234234
""",
235235
)
236+
237+
238+
def test_metadata_ref(generator: CodeGenerator) -> None:
239+
from sqlmodel import SQLModel
240+
241+
Table(
242+
"metadata_ref_test_table",
243+
generator.metadata,
244+
Column("id", INTEGER, primary_key=True),
245+
)
246+
247+
code = generator.generate()
248+
validate_code(
249+
code,
250+
"""\
251+
from sqlalchemy import Column, Integer
252+
from sqlmodel import Field, SQLModel
253+
254+
class MetadataRefTestTable(SQLModel, table=True):
255+
__tablename__ = 'metadata_ref_test_table'
256+
257+
id: int = Field(sa_column=Column('id', Integer, primary_key=True))
258+
""",
259+
)
260+
261+
SQLModel.metadata.clear() # clear the metadata to avoid with the tables defined in this test
262+
exec(code, globals())
263+
264+
assert len(SQLModel.metadata.tables) == 1
265+
assert "metadata_ref_test_table" in SQLModel.metadata.tables

0 commit comments

Comments
 (0)