sqlacodegen
Advanced tools
+10
-0
| Version history | ||
| =============== | ||
| **4.0.2** | ||
| - Fixed rendering of inherited keyword arguments for dialect-specific types that use | ||
| ``**kwargs`` in their initializers (such as MySQL ``CHAR`` with ``collation``) while | ||
| preserving existing ``*args`` rendering behavior (PR by @hyoj0942) | ||
| - Fixed missing metadata argument when rendering plain tables with the SQLModel | ||
| - Added support for self-referential tables in the SQLModel generator (PR by @sheinbergon) | ||
| - Fixed empty dialect kwargs (e.g. ``postgresql_include=[]``) being included in | ||
| rendered indexes, tables, and columns (PR by @sheinbergon) | ||
| **4.0.1** | ||
@@ -5,0 +15,0 @@ |
+1
-1
| Metadata-Version: 2.4 | ||
| Name: sqlacodegen | ||
| Version: 4.0.1 | ||
| Version: 4.0.2 | ||
| Summary: Automatic model code generator for SQLAlchemy | ||
@@ -5,0 +5,0 @@ Author-email: Alex Grönholm <alex.gronholm@nextday.fi> |
| Metadata-Version: 2.4 | ||
| Name: sqlacodegen | ||
| Version: 4.0.1 | ||
| Version: 4.0.2 | ||
| Summary: Automatic model code generator for SQLAlchemy | ||
@@ -5,0 +5,0 @@ Author-email: Alex Grönholm <alex.gronholm@nextday.fi> |
@@ -369,1 +369,104 @@ from __future__ import annotations | ||
| ) | ||
| def test_fallback_table(generator: CodeGenerator) -> None: | ||
| Table( | ||
| "simple_fallback", | ||
| generator.metadata, | ||
| Column("field", VARCHAR(20), nullable=False), | ||
| ) | ||
| validate_code( | ||
| generator.generate(), | ||
| """\ | ||
| from sqlalchemy import Column, String, Table | ||
| from sqlmodel import SQLModel | ||
| t_simple_fallback = Table( | ||
| 'simple_fallback', SQLModel.metadata, | ||
| Column('field', String(20), nullable=False) | ||
| ) | ||
| """, | ||
| ) | ||
| def test_onetomany_selfref(generator: CodeGenerator) -> None: | ||
| Table( | ||
| "simple_items", | ||
| generator.metadata, | ||
| Column("id", INTEGER, primary_key=True), | ||
| Column("parent_item_id", INTEGER), | ||
| ForeignKeyConstraint(["parent_item_id"], ["simple_items.id"]), | ||
| ) | ||
| validate_code( | ||
| generator.generate(), | ||
| """\ | ||
| from typing import Optional | ||
| from sqlalchemy import Column, ForeignKey, Integer | ||
| from sqlmodel import Field, Relationship, SQLModel | ||
| class SimpleItems(SQLModel, table=True): | ||
| __tablename__ = 'simple_items' | ||
| id: int = Field(sa_column=Column('id', Integer, primary_key=True)) | ||
| parent_item_id: Optional[int] = Field(default=None, sa_column=Column(\ | ||
| 'parent_item_id', ForeignKey('simple_items.id'))) | ||
| parent_item: Optional['SimpleItems'] = Relationship(\ | ||
| back_populates='parent_item_reverse', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItems.id]'}) | ||
| parent_item_reverse: list['SimpleItems'] = Relationship(\ | ||
| back_populates='parent_item', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItems.parent_item_id]'}) | ||
| """, | ||
| ) | ||
| def test_onetomany_selfref_multi(generator: CodeGenerator) -> None: | ||
| Table( | ||
| "simple_items_selfref", | ||
| generator.metadata, | ||
| Column("id", INTEGER, primary_key=True), | ||
| Column("parent_item_id", INTEGER), | ||
| Column("top_item_id", INTEGER), | ||
| ForeignKeyConstraint(["parent_item_id"], ["simple_items_selfref.id"]), | ||
| ForeignKeyConstraint(["top_item_id"], ["simple_items_selfref.id"]), | ||
| ) | ||
| validate_code( | ||
| generator.generate(), | ||
| """\ | ||
| from typing import Optional | ||
| from sqlalchemy import Column, ForeignKey, Integer | ||
| from sqlmodel import Field, Relationship, SQLModel | ||
| class SimpleItemsSelfref(SQLModel, table=True): | ||
| __tablename__ = 'simple_items_selfref' | ||
| id: int = Field(sa_column=Column('id', Integer, primary_key=True)) | ||
| parent_item_id: Optional[int] = Field(default=None, sa_column=Column(\ | ||
| 'parent_item_id', ForeignKey('simple_items_selfref.id'))) | ||
| top_item_id: Optional[int] = Field(default=None, sa_column=Column(\ | ||
| 'top_item_id', ForeignKey('simple_items_selfref.id'))) | ||
| parent_item: Optional['SimpleItemsSelfref'] = Relationship(\ | ||
| back_populates='parent_item_reverse', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItemsSelfref.id]', \ | ||
| 'foreign_keys': '[SimpleItemsSelfref.parent_item_id]'}) | ||
| parent_item_reverse: list['SimpleItemsSelfref'] = Relationship(\ | ||
| back_populates='parent_item', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItemsSelfref.parent_item_id]', \ | ||
| 'foreign_keys': '[SimpleItemsSelfref.parent_item_id]'}) | ||
| top_item: Optional['SimpleItemsSelfref'] = Relationship(\ | ||
| back_populates='top_item_reverse', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItemsSelfref.id]', \ | ||
| 'foreign_keys': '[SimpleItemsSelfref.top_item_id]'}) | ||
| top_item_reverse: list['SimpleItemsSelfref'] = Relationship(\ | ||
| back_populates='top_item', sa_relationship_kwargs={\ | ||
| 'remote_side': '[SimpleItemsSelfref.top_item_id]', \ | ||
| 'foreign_keys': '[SimpleItemsSelfref.top_item_id]'}) | ||
| """, | ||
| ) |
@@ -606,2 +606,30 @@ from __future__ import annotations | ||
| @pytest.mark.parametrize("engine", ["mysql"], indirect=["engine"]) | ||
| @pytest.mark.parametrize("generator", [["keep_dialect_types"]], indirect=True) | ||
| def test_mysql_char_collation_keep_dialect_types(generator: CodeGenerator) -> None: | ||
| Table( | ||
| "simple_items", | ||
| generator.metadata, | ||
| Column("id", mysql.INTEGER, primary_key=True), | ||
| Column("result_code", mysql.CHAR(1, collation="utf8mb3_bin"), nullable=False), | ||
| ) | ||
| validate_code( | ||
| generator.generate(), | ||
| """\ | ||
| from sqlalchemy import Column, MetaData, Table | ||
| from sqlalchemy.dialects.mysql import CHAR, INTEGER | ||
| metadata = MetaData() | ||
| t_simple_items = Table( | ||
| 'simple_items', metadata, | ||
| Column('id', INTEGER, primary_key=True), | ||
| Column('result_code', CHAR(1, collation='utf8mb3_bin'), nullable=False) | ||
| ) | ||
| """, | ||
| ) | ||
| def test_constraints(generator: CodeGenerator) -> None: | ||
@@ -608,0 +636,0 @@ Table( |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
315237
3.54%6420
4.12%