New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

sqlacodegen

Package Overview
Dependencies
Maintainers
2
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sqlacodegen - pypi Package Compare versions

Comparing version
4.0.1
to
4.0.2
+10
-0
CHANGES.rst
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