Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-sqlmodel for openSUSE:Factory
checked in at 2026-04-26 21:11:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sqlmodel (Old)
and /work/SRC/openSUSE:Factory/.python-sqlmodel.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sqlmodel"
Sun Apr 26 21:11:35 2026 rev:8 rq:1349299 version:0.0.38
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sqlmodel/python-sqlmodel.changes
2026-03-30 18:34:14.726448436 +0200
+++
/work/SRC/openSUSE:Factory/.python-sqlmodel.new.11940/python-sqlmodel.changes
2026-04-26 21:14:15.912657754 +0200
@@ -1,0 +2,16 @@
+Sat Apr 25 21:40:16 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.0.38:
+ * Fix type annotation in `SQLModel.__new__`, avoid explicitly
+ returning `Any`.
+ * Fix `tuple_` return type annotation.
+ * Fix typos in `contributing.md`. PR #1842 by @GopalGB.
+ * Remove outdated Python 3.9 tutorial file.
+ * Fix ambiguous phrasing regarding `HeroPublicWithTeam`
+ model.
+ * Handle external links `target=_blank` and CSS automatically
+ in JS and CSS.
+ * Document `.in_()` method. PR #619 by @masylum.
+ * Fix small typos in the documentation. PR #1641
+
+-------------------------------------------------------------------
Old:
----
sqlmodel-0.0.37.tar.gz
New:
----
sqlmodel-0.0.38.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sqlmodel.spec ++++++
--- /var/tmp/diff_new_pack.lphm56/_old 2026-04-26 21:14:16.360676059 +0200
+++ /var/tmp/diff_new_pack.lphm56/_new 2026-04-26 21:14:16.364676223 +0200
@@ -26,7 +26,7 @@
%endif
%{?sle15_python_module_pythons}
Name: python-sqlmodel%{psuffix}
-Version: 0.0.37
+Version: 0.0.38
Release: 0
Summary: SQL databases in Python, designed for simplicity,
compatibility, and robustness
License: MIT
++++++ sqlmodel-0.0.37.tar.gz -> sqlmodel-0.0.38.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/PKG-INFO new/sqlmodel-0.0.38/PKG-INFO
--- old/sqlmodel-0.0.37/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/sqlmodel-0.0.38/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: sqlmodel
-Version: 0.0.37
+Version: 0.0.38
Summary: SQLModel, SQL databases in Python, designed for simplicity,
compatibility, and robustness.
Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <[email protected]>
License-Expression: MIT
@@ -30,6 +30,7 @@
Requires-Python: >=3.10
Requires-Dist: SQLAlchemy<2.1.0,>=2.0.14
Requires-Dist: pydantic>=2.11.0
+Requires-Dist: typing-extensions>=4.5.0
Description-Content-Type: text/markdown
<p align="center">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/sqlmodel-0.0.37/docs_src/tutorial/where/tutorial006b_py310.py
new/sqlmodel-0.0.38/docs_src/tutorial/where/tutorial006b_py310.py
--- old/sqlmodel-0.0.37/docs_src/tutorial/where/tutorial006b_py310.py
1970-01-01 01:00:00.000000000 +0100
+++ new/sqlmodel-0.0.38/docs_src/tutorial/where/tutorial006b_py310.py
2026-04-02 23:03:51.778127000 +0200
@@ -0,0 +1,57 @@
+from sqlmodel import Field, Session, SQLModel, col, create_engine, select
+
+
+class Hero(SQLModel, table=True):
+ id: int | None = Field(default=None, primary_key=True)
+ name: str
+ secret_name: str
+ age: int | None = None
+
+
+sqlite_file_name = "database.db"
+sqlite_url = f"sqlite:///{sqlite_file_name}"
+
+engine = create_engine(sqlite_url, echo=True)
+
+
+def create_db_and_tables():
+ SQLModel.metadata.create_all(engine)
+
+
+def create_heroes():
+ hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
+ hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
+ hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
+ hero_4 = Hero(name="Tarantula", secret_name="Natalia Roman-on", age=32)
+ hero_5 = Hero(name="Black Lion", secret_name="Trevor Challa", age=35)
+ hero_6 = Hero(name="Dr. Weird", secret_name="Steve Weird", age=36)
+ hero_7 = Hero(name="Captain North America", secret_name="Esteban
Rogelios", age=93)
+
+ with Session(engine) as session:
+ session.add(hero_1)
+ session.add(hero_2)
+ session.add(hero_3)
+ session.add(hero_4)
+ session.add(hero_5)
+ session.add(hero_6)
+ session.add(hero_7)
+
+ session.commit()
+
+
+def select_heroes():
+ with Session(engine) as session:
+ statement = select(Hero).where(col(Hero.name).in_(["Deadpond",
"Ratman"]))
+ results = session.exec(statement)
+ for hero in results:
+ print(hero)
+
+
+def main():
+ create_db_and_tables()
+ create_heroes()
+ select_heroes()
+
+
+if __name__ == "__main__":
+ main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/pyproject.toml
new/sqlmodel-0.0.38/pyproject.toml
--- old/sqlmodel-0.0.37/pyproject.toml 2026-02-21 17:39:45.853665000 +0100
+++ new/sqlmodel-0.0.38/pyproject.toml 2026-04-02 23:03:54.431071000 +0200
@@ -39,8 +39,9 @@
dependencies = [
"SQLAlchemy >=2.0.14,<2.1.0",
"pydantic>=2.11.0",
+ "typing-extensions>=4.5.0",
]
-version = "0.0.37"
+version = "0.0.38"
[project.urls]
Homepage = "https://github.com/fastapi/sqlmodel"
@@ -56,39 +57,38 @@
"prek>=0.2.24,<1.0.0",
]
docs = [
- "black>=24.1.0",
- "cairosvg==2.8.2",
- "griffe-typingdoc==0.3.0",
- "griffe-warnings-deprecated==1.1.0",
- "markdown-include-variants==0.0.8",
- "mdx-include>=1.4.1,<2.0.0",
- "mkdocs-macros-plugin==1.5.0",
- "mkdocs-material==9.7.1",
- "mkdocs-redirects>=1.2.1,<1.3.0",
- "mkdocstrings[python]==0.30.1",
- "pillow==11.3.0",
- "pyyaml>=5.3.1,<7.0.0",
- "typer==0.23.2",
+ "black >=24.1.0",
+ "cairosvg >=2.9.0",
+ "griffe-typingdoc >=0.3.0",
+ "griffe-warnings-deprecated >=1.1.0",
+ "markdown-include-variants >=0.0.8",
+ "mdx-include >=1.4.1",
+ "mkdocs-macros-plugin >=1.5.0",
+ "mkdocs-material >=9.7.5",
+ "mkdocs-redirects >=1.2.1",
+ "mkdocstrings[python] >=1.0.3",
+ "pillow >=12.1.1",
+ "pyyaml >=5.3.1",
+ "typer >=0.24.1",
]
github-actions = [
- "httpx>=0.27.0,<0.29.0",
- "pydantic>=2.5.3,<3.0.0",
- "pydantic-settings>=2.1.0,<3.0.0",
- "pygithub>=2.3.0,<3.0.0",
- "smokeshow>=0.5.0",
+ "httpx >=0.28.1",
+ "pydantic >=2.5.3",
+ "pydantic-settings >=2.1.0",
+ "pygithub >=2.3.0",
+ "smokeshow >=0.5.0",
]
tests = [
- "black>=24.1.0",
- "coverage[toml]>=6.2,<8.0",
- "dirty-equals==0.11",
- "fastapi>=0.128.0",
- "httpx==0.28.1",
- "jinja2==3.1.6",
- "mypy==1.19.1",
- "pre-commit>=2.17.0,<5.0.0",
- "pytest>=7.0.1,<9.0.0",
- "ruff==0.15.1",
- "typing-extensions==4.15.0",
+ "black >=24.1.0",
+ "coverage[toml] >=6.2",
+ "dirty-equals >=0.11",
+ "fastapi >=0.128.0",
+ "httpx >=0.28.1",
+ "jinja2 >=3.1.6",
+ "mypy >=1.19.1",
+ "pytest >=7.0.1",
+ "ruff >=0.15.6",
+ "typing-extensions >=4.15.0",
]
[tool.pdm]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/scripts/add_latest_release_date.py
new/sqlmodel-0.0.38/scripts/add_latest_release_date.py
--- old/sqlmodel-0.0.37/scripts/add_latest_release_date.py 1970-01-01
01:00:00.000000000 +0100
+++ new/sqlmodel-0.0.38/scripts/add_latest_release_date.py 2026-04-02
23:03:51.778127000 +0200
@@ -0,0 +1,40 @@
+"""Check release-notes.md and add today's date to the latest release header if
missing."""
+
+import re
+import sys
+from datetime import date
+
+RELEASE_NOTES_FILE = "docs/release-notes.md"
+RELEASE_HEADER_PATTERN = re.compile(r"^## (\d+\.\d+\.\d+)\s*(\(.*\))?\s*$")
+
+
+def main() -> None:
+ with open(RELEASE_NOTES_FILE) as f:
+ lines = f.readlines()
+
+ for i, line in enumerate(lines):
+ match = RELEASE_HEADER_PATTERN.match(line)
+ if not match:
+ continue
+
+ version = match.group(1)
+ date_part = match.group(2)
+
+ if date_part:
+ print(f"Latest release {version} already has a date: {date_part}")
+ sys.exit(0)
+
+ today = date.today().isoformat()
+ lines[i] = f"## {version} ({today})\n"
+ print(f"Added date: {version} ({today})")
+
+ with open(RELEASE_NOTES_FILE, "w") as f:
+ f.writelines(lines)
+ sys.exit(0)
+
+ print("No release header found")
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/sqlmodel/__init__.py
new/sqlmodel-0.0.38/sqlmodel/__init__.py
--- old/sqlmodel-0.0.37/sqlmodel/__init__.py 2026-02-21 17:39:42.151568400
+0100
+++ new/sqlmodel-0.0.38/sqlmodel/__init__.py 2026-04-02 23:03:51.778623600
+0200
@@ -1,4 +1,4 @@
-__version__ = "0.0.37"
+__version__ = "0.0.38"
# Re-export from SQLAlchemy
from sqlalchemy.engine import create_engine as create_engine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/sqlmodel/main.py
new/sqlmodel-0.0.38/sqlmodel/main.py
--- old/sqlmodel-0.0.37/sqlmodel/main.py 2026-02-21 17:39:42.152568300
+0100
+++ new/sqlmodel-0.0.38/sqlmodel/main.py 2026-04-02 23:03:51.779301600
+0200
@@ -814,7 +814,9 @@
__allow_unmapped__ = True #
https://docs.sqlalchemy.org/en/20/changelog/migration_20.html#migration-20-step-six
model_config = SQLModelConfig(from_attributes=True)
- def __new__(cls, *args: Any, **kwargs: Any) -> Any:
+ # Typing spec says `__new__` returning `Any` overrides normal constructor
+ # behavior, but a missing annotation does not:
+ def __new__(cls, *args: Any, **kwargs: Any): # type:
ignore[no-untyped-def]
new_object = super().__new__(cls)
# SQLAlchemy doesn't call __init__ on the base class when querying
from DB
# Ref: https://docs.sqlalchemy.org/en/14/orm/constructors.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/sqlmodel-0.0.37/sqlmodel/sql/expression.py
new/sqlmodel-0.0.38/sqlmodel/sql/expression.py
--- old/sqlmodel-0.0.37/sqlmodel/sql/expression.py 2026-02-21
17:39:42.152568300 +0100
+++ new/sqlmodel-0.0.38/sqlmodel/sql/expression.py 2026-04-02
23:03:51.779737200 +0200
@@ -179,8 +179,8 @@
def tuple_(
*clauses: _ColumnExpressionArgument[Any] | Any,
types: Sequence["_TypeEngineArgument[Any]"] | None = None,
-) -> tuple[Any, ...]:
- return sqlalchemy.tuple_(*clauses, types=types) # type:
ignore[return-value]
+) -> sqlalchemy.Tuple:
+ return sqlalchemy.tuple_(*clauses, types=types)
def type_coerce(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/sqlmodel-0.0.37/tests/test_tutorial/test_where/test_tutorial006b.py
new/sqlmodel-0.0.38/tests/test_tutorial/test_where/test_tutorial006b.py
--- old/sqlmodel-0.0.37/tests/test_tutorial/test_where/test_tutorial006b.py
1970-01-01 01:00:00.000000000 +0100
+++ new/sqlmodel-0.0.38/tests/test_tutorial/test_where/test_tutorial006b.py
2026-04-02 23:03:51.785757500 +0200
@@ -0,0 +1,34 @@
+import importlib
+from types import ModuleType
+
+import pytest
+from sqlmodel import create_engine
+
+from ...conftest import PrintMock, needs_py310
+
+
[email protected](
+ name="mod",
+ params=[
+ pytest.param("tutorial006b_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
+ [
+ {
+ "name": "Deadpond",
+ "secret_name": "Dive Wilson",
+ "age": None,
+ "id": 1,
+ }
+ ]
+ ]