import importlib
-import types # Add import for types
+import types # Add import for types
from decimal import Decimal
-from unittest.mock import MagicMock # Keep MagicMock for type hint, though not strictly necessary for runtime
import pytest
from sqlmodel import create_engine
-from ...conftest import needs_py310, PrintMock # Import PrintMock for type hint
+from ...conftest import PrintMock, needs_py310 # Import PrintMock for type hint
expected_calls = [
[
return importlib.import_module(f"docs_src.advanced.decimal.{module_name}")
-def test_tutorial(print_mock: PrintMock, module: types.ModuleType): # Use PrintMock for type hint and types.ModuleType
+def test_tutorial(
+ print_mock: PrintMock, module: types.ModuleType
+): # Use PrintMock for type hint and types.ModuleType
module.sqlite_url = "sqlite://"
module.engine = create_engine(module.sqlite_url)
module.main()
- assert print_mock.calls == expected_calls # Use .calls instead of .mock_calls
+ assert print_mock.calls == expected_calls # Use .calls instead of .mock_calls
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.delete.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.delete.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.insert.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.insert.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.select.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.select.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.select.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
import importlib
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from sqlmodel import create_engine
)
def get_module(request: pytest.FixtureRequest) -> ModuleType:
module_name = request.param
- mod = importlib.import_module(
- f"docs_src.tutorial.connect.update.{module_name}"
- )
+ mod = importlib.import_module(f"docs_src.tutorial.connect.update.{module_name}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
return mod
-def test_tutorial(clear_sqlmodel: Any, print_mock: PrintMock, module: ModuleType) -> None:
+def test_tutorial(
+ clear_sqlmodel: Any, print_mock: PrintMock, module: ModuleType
+) -> None:
module.main()
assert print_mock.calls == expected_calls
import importlib
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from sqlalchemy import inspect
import importlib
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from sqlalchemy import inspect
import importlib
-import sys # Add sys import
+import sys # Add sys import
from types import ModuleType
from typing import Any, Generator
import pytest
from fastapi.testclient import TestClient
-from sqlmodel import Session, SQLModel, create_engine # Keep this for session_fixture
-from sqlmodel.pool import StaticPool # Keep this for session_fixture
+from sqlmodel import Session, SQLModel, create_engine # Keep this for session_fixture
+from sqlmodel.pool import StaticPool # Keep this for session_fixture
from ....conftest import needs_py39, needs_py310
+
# This will be our parametrized fixture providing the versioned 'main' module
@pytest.fixture(
name="module",
pytest.param("tutorial001_py310", marks=needs_py310),
],
)
-def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: # clear_sqlmodel is autouse
+def get_module(
+ request: pytest.FixtureRequest, clear_sqlmodel: Any
+) -> ModuleType: # clear_sqlmodel is autouse
module_name = f"docs_src.tutorial.fastapi.app_testing.{request.param}.main"
# Forcing reload to try to get a fresh state for models
module = importlib.import_module(module_name)
return module
+
@pytest.fixture(name="session", scope="function")
def session_fixture(module: ModuleType) -> Generator[Session, None, None]:
# Store original engine-related attributes from the module
# Force module to use a fresh in-memory SQLite DB for this test run
module.sqlite_url = "sqlite://"
- module.connect_args = {"check_same_thread": False} # Crucial for FastAPI + SQLite
+ module.connect_args = {"check_same_thread": False} # Crucial for FastAPI + SQLite
# Re-create the engine in the module to use these new settings
test_engine = create_engine(
module.sqlite_url,
connect_args=module.connect_args,
- poolclass=StaticPool # Recommended for tests
+ poolclass=StaticPool, # Recommended for tests
)
module.engine = test_engine
# Fallback if the function isn't named create_db_and_tables
SQLModel.metadata.create_all(module.engine)
- with Session(module.engine) as session: # Use the module's (now test-configured) engine
+ with Session(
+ module.engine
+ ) as session: # Use the module's (now test-configured) engine
yield session
# Teardown: drop tables from the module's engine
module.connect_args = original_connect_args
if original_engine is not None:
module.engine = original_engine
- else: # If engine didn't exist, remove the one we created
+ else: # If engine didn't exist, remove the one we created
if hasattr(module, "engine"):
del module.engine
@pytest.fixture(name="client", scope="function")
-def client_fixture(session: Session, module: ModuleType) -> Generator[TestClient, None, None]:
- def get_session_override() -> Generator[Session, None, None]: # Must be a generator
+def client_fixture(
+ session: Session, module: ModuleType
+) -> Generator[TestClient, None, None]:
+ def get_session_override() -> Generator[Session, None, None]: # Must be a generator
yield session
module.app.dependency_overrides[module.get_session] = get_session_override
def test_read_hero(session: Session, client: TestClient, module: ModuleType):
- hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
+ hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
session.add(hero_1)
session.commit()
def test_update_hero(session: Session, client: TestClient, module: ModuleType):
- hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
+ hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
session.add(hero_1)
session.commit()
def test_delete_hero(session: Session, client: TestClient, module: ModuleType):
- hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
+ hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero
session.add(hero_1)
session.commit()
response = client.delete(f"/heroes/{hero_1.id}")
- hero_in_db = session.get(module.Hero, hero_1.id) # Use module.Hero
+ hero_in_db = session.get(module.Hero, hero_1.id) # Use module.Hero
assert response.status_code == 200
assert hero_in_db is None
import importlib
import sys
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations
+from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
],
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType:
- module_name = f"docs_src.tutorial.fastapi.delete.{request.param}" # No .main here
+ module_name = f"docs_src.tutorial.fastapi.delete.{request.param}" # No .main here
if module_name in sys.modules:
module = importlib.reload(sys.modules[module_name])
else:
module.sqlite_url = "sqlite://"
module.engine = create_engine(
module.sqlite_url,
- connect_args={"check_same_thread": False}, # connect_args from original main.py
- poolclass=StaticPool
+ connect_args={"check_same_thread": False}, # connect_args from original main.py
+ poolclass=StaticPool,
)
# Assuming the module has a create_db_and_tables or similar, or uses SQLModel.metadata directly
if hasattr(module, "create_db_and_tables"):
module.create_db_and_tables()
else:
- SQLModel.metadata.create_all(module.engine) # Fallback, ensure tables are created
+ SQLModel.metadata.create_all(
+ module.engine
+ ) # Fallback, ensure tables are created
return module
-def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is autouse but explicit for safety
+def test_tutorial(
+ clear_sqlmodel: Any, module: ModuleType
+): # clear_sqlmodel is autouse but explicit for safety
# The engine and tables are now set up by the 'module' fixture
# The app's dependency overrides for get_session will use module.engine
hero2_data = {
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "id": 9000, # Note: ID is part of creation data here
+ "id": 9000, # Note: ID is part of creation data here
}
hero3_data = {
"name": "Rusty-Man",
}
response = client.post("/heroes/", json=hero1_data)
assert response.status_code == 200, response.text
- hero1 = response.json() # Get actual ID of hero1
+ hero1 = response.json() # Get actual ID of hero1
hero1_id = hero1["id"]
response = client.post("/heroes/", json=hero2_data)
assert response.status_code == 200, response.text
hero2 = response.json()
- hero2_id = hero2["id"] # This will be the ID assigned by DB, not 9000 if 9000 is not allowed on POST
+ hero2_id = hero2[
+ "id"
+ ] # This will be the ID assigned by DB, not 9000 if 9000 is not allowed on POST
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
# For robustness, let's check for a non-existent ID based on actual data.
# If hero2_id is 1, check for 9000. If it's 9000, check for 1 (assuming hero1_id is 1).
non_existent_id_check = 9000
- if hero2_id == non_existent_id_check: # if DB somehow used 9000
- non_existent_id_check = hero1_id + hero2_id + 100 # just some other ID
+ if hero2_id == non_existent_id_check: # if DB somehow used 9000
+ non_existent_id_check = hero1_id + hero2_id + 100 # just some other ID
response = client.get(f"/heroes/{non_existent_id_check}")
assert response.status_code == 404, response.text
)
assert response.status_code == 200, response.text
- response = client.patch(f"/heroes/{non_existent_id_check}", json={"name": "Dragon Cube X"})
+ response = client.patch(
+ f"/heroes/{non_existent_id_check}", json={"name": "Dragon Cube X"}
+ )
assert response.status_code == 404, response.text
response = client.delete(f"/heroes/{hero2_id}")
response = client.get("/heroes/")
assert response.status_code == 200, response.text
data = response.json()
- assert len(data) == 2 # After deleting one hero
+ assert len(data) == 2 # After deleting one hero
response = client.delete(f"/heroes/{non_existent_id_check}")
assert response.status_code == 404, response.text
import importlib
import sys
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations
+from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
],
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType:
- module_name = f"docs_src.tutorial.fastapi.limit_and_offset.{request.param}" # No .main
+ module_name = (
+ f"docs_src.tutorial.fastapi.limit_and_offset.{request.param}" # No .main
+ )
if module_name in sys.modules:
module = importlib.reload(sys.modules[module_name])
else:
module.sqlite_url = "sqlite://"
module.engine = create_engine(
module.sqlite_url,
- connect_args={"check_same_thread": False}, # Assuming connect_args was in original mod or default
- poolclass=StaticPool
+ connect_args={
+ "check_same_thread": False
+ }, # Assuming connect_args was in original mod or default
+ poolclass=StaticPool,
)
if hasattr(module, "create_db_and_tables"):
module.create_db_and_tables()
response = client.post("/heroes/", json=hero2_data)
assert response.status_code == 200, response.text
hero2 = response.json()
- hero2_id = hero2["id"] # Use the actual ID from response
+ hero2_id = hero2["id"] # Use the actual ID from response
# Create hero 3
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
data_limit2 = response.json()
assert len(data_limit2) == 2
- assert data_limit2[0]["name"] == hero1["name"] # Compare with actual created hero data
+ assert (
+ data_limit2[0]["name"] == hero1["name"]
+ ) # Compare with actual created hero data
assert data_limit2[1]["name"] == hero2["name"]
response = client.get("/heroes/", params={"offset": 1})
import importlib
import sys
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import SQLModel, create_engine # Import SQLModel
+from sqlmodel import SQLModel, create_engine # Import SQLModel
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
],
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType:
- module_name = f"docs_src.tutorial.fastapi.multiple_models.{request.param}" # No .main
+ module_name = (
+ f"docs_src.tutorial.fastapi.multiple_models.{request.param}" # No .main
+ )
if module_name in sys.modules:
module = importlib.reload(sys.modules[module_name])
else:
# Ensure connect_args is available in module, default if not.
# Some tutorial files might not define it if they don't use on_event("startup") for engine creation.
connect_args = getattr(module, "connect_args", {"check_same_thread": False})
- if "check_same_thread" not in connect_args: # Ensure this specific arg for SQLite
+ if "check_same_thread" not in connect_args: # Ensure this specific arg for SQLite
connect_args["check_same_thread"] = False
module.engine = create_engine(
- module.sqlite_url,
- connect_args=connect_args,
- poolclass=StaticPool
+ module.sqlite_url, connect_args=connect_args, poolclass=StaticPool
)
if hasattr(module, "create_db_and_tables"):
module.create_db_and_tables()
assert data["secret_name"] == hero1_data["secret_name"]
assert data["id"] is not None
assert data["age"] is None
- hero1_id = data["id"] # Store actual ID
+ hero1_id = data["id"] # Store actual ID
response = client.post("/heroes/", json=hero2_data)
data = response.json()
# This is true if ID is auto-generated and not 9000.
assert data["id"] is not None
assert data["age"] is None
- hero2_id = data["id"] # Store actual ID
-
+ hero2_id = data["id"] # Store actual ID
response = client.get("/heroes/")
data = response.json()
assert data[1]["name"] == hero2_data["name"]
assert data[1]["secret_name"] == hero2_data["secret_name"]
-
response = client.get("/openapi.json")
assert response.status_code == 200, response.text
# OpenAPI schema check - kept as is from original test
}
# Test inherited indexes
- insp: Inspector = inspect(module.engine) # Use module.engine
- indexes = insp.get_indexes(str(module.Hero.__tablename__)) # Use module.Hero
+ insp: Inspector = inspect(module.engine) # Use module.engine
+ indexes = insp.get_indexes(str(module.Hero.__tablename__)) # Use module.Hero
expected_indexes = [
{
"name": "ix_hero_name",
]
# Convert list of dicts to list of tuples of sorted items for order-agnostic comparison
indexes_for_comparison = [tuple(sorted(d.items())) for d in indexes]
- expected_indexes_for_comparison = [tuple(sorted(d.items())) for d in expected_indexes]
+ expected_indexes_for_comparison = [
+ tuple(sorted(d.items())) for d in expected_indexes
+ ]
for index_data_tuple in expected_indexes_for_comparison:
- assert index_data_tuple in indexes_for_comparison, f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}"
+ assert index_data_tuple in indexes_for_comparison, (
+ f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}"
+ )
indexes_for_comparison.remove(index_data_tuple)
- assert len(indexes_for_comparison) == 0, f"Unexpected extra indexes found in DB: {indexes_for_comparison}"
+ assert len(indexes_for_comparison) == 0, (
+ f"Unexpected extra indexes found in DB: {indexes_for_comparison}"
+ )
import importlib
import sys
from types import ModuleType
-from typing import Any # For clear_sqlmodel type hint
+from typing import Any # For clear_sqlmodel type hint
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import SQLModel, create_engine # Import SQLModel
+from sqlmodel import SQLModel, create_engine # Import SQLModel
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
name="module",
scope="function",
params=[
- "tutorial002", # Changed to tutorial002
- pytest.param("tutorial002_py39", marks=needs_py39), # Changed to tutorial002_py39
- pytest.param("tutorial002_py310", marks=needs_py310), # Changed to tutorial002_py310
+ "tutorial002", # Changed to tutorial002
+ pytest.param(
+ "tutorial002_py39", marks=needs_py39
+ ), # Changed to tutorial002_py39
+ pytest.param(
+ "tutorial002_py310", marks=needs_py310
+ ), # Changed to tutorial002_py310
],
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType:
connect_args["check_same_thread"] = False
module.engine = create_engine(
- module.sqlite_url,
- connect_args=connect_args,
- poolclass=StaticPool
+ module.sqlite_url, connect_args=connect_args, poolclass=StaticPool
)
if hasattr(module, "create_db_and_tables"):
module.create_db_and_tables()
assert data["age"] is None
hero2_id = data["id"]
-
response = client.get("/heroes/")
data = response.json()
assert data[1]["name"] == hero2_data["name"]
assert data[1]["secret_name"] == hero2_data["secret_name"]
-
response = client.get("/openapi.json")
assert response.status_code == 200, response.text
assert response.json() == {
indexes = insp.get_indexes(str(module.Hero.__tablename__))
expected_indexes = [
{
- "name": "ix_hero_age", # For tutorial002, order of expected indexes is different
+ "name": "ix_hero_age", # For tutorial002, order of expected indexes is different
"dialect_options": {},
"column_names": ["age"],
"unique": 0,
},
]
indexes_for_comparison = [tuple(sorted(d.items())) for d in indexes]
- expected_indexes_for_comparison = [tuple(sorted(d.items())) for d in expected_indexes]
+ expected_indexes_for_comparison = [
+ tuple(sorted(d.items())) for d in expected_indexes
+ ]
for index_data_tuple in expected_indexes_for_comparison:
- assert index_data_tuple in indexes_for_comparison, f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}"
+ assert index_data_tuple in indexes_for_comparison, (
+ f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}"
+ )
indexes_for_comparison.remove(index_data_tuple)
- assert len(indexes_for_comparison) == 0, f"Unexpected extra indexes found in DB: {indexes_for_comparison}"
+ assert len(indexes_for_comparison) == 0, (
+ f"Unexpected extra indexes found in DB: {indexes_for_comparison}"
+ )
],
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType:
- module_name = f"docs_src.tutorial.fastapi.read_one.{request.param}" # No .main
+ module_name = f"docs_src.tutorial.fastapi.read_one.{request.param}" # No .main
if module_name in sys.modules:
module = importlib.reload(sys.modules[module_name])
else:
connect_args["check_same_thread"] = False
module.engine = create_engine(
- module.sqlite_url,
- connect_args=connect_args,
- poolclass=StaticPool
+ module.sqlite_url, connect_args=connect_args, poolclass=StaticPool
)
if hasattr(module, "create_db_and_tables"):
module.create_db_and_tables()
}
response = client.post("/heroes/", json=hero1_data)
assert response.status_code == 200, response.text
- hero1 = response.json() # Store created hero1 data
+ hero1 = response.json() # Store created hero1 data
response = client.post("/heroes/", json=hero2_data)
assert response.status_code == 200, response.text
- hero2 = response.json() # Store created hero2 data
+ hero2 = response.json() # Store created hero2 data
response_get_all = client.get("/heroes/")
assert response_get_all.status_code == 200, response_get_all.text
data_all = response_get_all.json()
assert len(data_all) == 2
- hero_id_to_get = hero2["id"] # Use actual ID from created hero2
+ hero_id_to_get = hero2["id"] # Use actual ID from created hero2
response_get_one = client.get(f"/heroes/{hero_id_to_get}")
assert response_get_one.status_code == 200, response_get_one.text
data_one = response_get_one.json()
assert data_one["id"] == hero2["id"]
# Check for a non-existent ID
- non_existent_id = hero1["id"] + hero2["id"] + 100 # A likely non-existent ID
+ non_existent_id = hero1["id"] + hero2["id"] + 100 # A likely non-existent ID
response_get_non_existent = client.get(f"/heroes/{non_existent_id}")
- assert response_get_non_existent.status_code == 404, response_get_non_existent.text
+ assert response_get_non_existent.status_code == 404, (
+ response_get_non_existent.text
+ )
response_openapi = client.get("/openapi.json")
assert response_openapi.status_code == 200, response_openapi.text
from typing import Any
import pytest
-from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import SQLModel, create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
hero2_data = {
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "id": 9000, # This ID might be problematic if the DB auto-increments differently or if this ID is expected to be user-settable and unique
+ "id": 9000, # This ID might be problematic if the DB auto-increments differently or if this ID is expected to be user-settable and unique
}
hero3_data = {
"name": "Rusty-Man",
hero2_id = hero2["id"]
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
- response = client.get("/heroes/9000") # This might fail if hero2_id is not 9000
- assert response.status_code == 404, response.text # Original test expects 404, this implies ID 9000 is not found after creation. This needs to align with how IDs are handled.
+ response = client.get("/heroes/9000") # This might fail if hero2_id is not 9000
+ assert response.status_code == 404, (
+ response.text
+ ) # Original test expects 404, this implies ID 9000 is not found after creation. This needs to align with how IDs are handled.
response = client.get("/heroes/")
assert response.status_code == 200, response.text
data = response.json()
assert data["name"] == hero1_data["name"]
# Ensure team is loaded and correct
- if "team" in data and data["team"] is not None: # Team might not be present if not correctly loaded by the endpoint
+ if (
+ "team" in data and data["team"] is not None
+ ): # Team might not be present if not correctly loaded by the endpoint
assert data["team"]["name"] == team_z_force["name"]
- elif short_module_name != "tutorial001_py310": # tutorial001_py310.py doesn't include team in HeroPublic
- # If team is expected, this is a failure. For tutorial001 and tutorial001_py39, team should be present.
- assert "team" in data and data["team"] is not None, "Team data missing in hero response"
-
+ elif (
+ short_module_name != "tutorial001_py310"
+ ): # tutorial001_py310.py doesn't include team in HeroPublic
+ # If team is expected, this is a failure. For tutorial001 and tutorial001_py39, team should be present.
+ assert "team" in data and data["team"] is not None, (
+ "Team data missing in hero response"
+ )
response = client.patch(
f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"}
)
assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Test patching non-existent hero
+ response = client.patch(
+ "/heroes/9001", json={"name": "Dragon Cube X"}
+ ) # Test patching non-existent hero
assert response.status_code == 404, response.text
response = client.delete(f"/heroes/{hero2_id}")
assert response.status_code == 200, response.text
data = response.json()
assert len(data) == 2
- response = client.delete("/heroes/9000") # Test deleting non-existent hero
+ response = client.delete("/heroes/9000") # Test deleting non-existent hero
assert response.status_code == 404, response.text
response = client.get(f"/teams/{team_preventers_id}")
data = response.json()
assert response.status_code == 200, response.text
assert data["name"] == team_preventers_data["name"]
- assert len(data["heroes"]) > 0 # Ensure heroes are loaded
+ assert len(data["heroes"]) > 0 # Ensure heroes are loaded
assert data["heroes"][0]["name"] == hero3_data["name"]
response = client.delete(f"/teams/{team_preventers_id}")
assert response.status_code == 200, response.text
- response = client.delete("/teams/9000") # Test deleting non-existent team
+ response = client.delete("/teams/9000") # Test deleting non-existent team
assert response.status_code == 404, response.text
response = client.get("/teams/")
assert response.status_code == 200, response.text
data = response.json()
- assert len(data) == 1 # Only Z-Force should remain
+ assert len(data) == 1 # Only Z-Force should remain
# OpenAPI schema check - this is a long part, keeping it as is from the original.
# Small modification to handle potential differences in Pydantic v1 vs v2 for optional fields in schema
# short_module_name is already defined at the start of the 'with TestClient' block
# All versions (base, py39, py310) use HeroPublicWithTeam for this endpoint based on previous test run.
- assert get_hero_path["responses"]["200"]["content"]["application/json"]["schema"]["$ref"] == "#/components/schemas/HeroPublicWithTeam"
+ assert (
+ get_hero_path["responses"]["200"]["content"]["application/json"]["schema"][
+ "$ref"
+ ]
+ == "#/components/schemas/HeroPublicWithTeam"
+ )
# Check HeroCreate schema for age and team_id nullability based on IsDict usage in original
- hero_create_props = openapi_schema["components"]["schemas"]["HeroCreate"]["properties"]
+ hero_create_props = openapi_schema["components"]["schemas"]["HeroCreate"][
+ "properties"
+ ]
# For Pydantic v2 style (anyOf with type and null) vs Pydantic v1 (just type, optionality by not being in required)
# This test was written with IsDict which complicates exact schema matching without knowing SQLModel version's Pydantic interaction
# For simplicity, we check if 'age' and 'team_id' are present. Detailed check would need to adapt to SQLModel's Pydantic version.
# It's better to check for key components and structures.
# Check if TeamPublicWithHeroes has heroes list
- team_public_with_heroes_props = openapi_schema["components"]["schemas"]["TeamPublicWithHeroes"]["properties"]
+ team_public_with_heroes_props = openapi_schema["components"]["schemas"][
+ "TeamPublicWithHeroes"
+ ]["properties"]
assert "heroes" in team_public_with_heroes_props
assert team_public_with_heroes_props["heroes"]["type"] == "array"
# short_module_name is already defined
if short_module_name == "tutorial001_py310":
- assert team_public_with_heroes_props["heroes"]["items"]["$ref"] == "#/components/schemas/HeroPublic" # tutorial001_py310 uses HeroPublic for heroes list
+ assert (
+ team_public_with_heroes_props["heroes"]["items"]["$ref"]
+ == "#/components/schemas/HeroPublic"
+ ) # tutorial001_py310 uses HeroPublic for heroes list
else:
- assert team_public_with_heroes_props["heroes"]["items"]["$ref"] == "#/components/schemas/HeroPublic" # Original tutorial001.py seems to imply HeroPublic as well.
+ assert (
+ team_public_with_heroes_props["heroes"]["items"]["$ref"]
+ == "#/components/schemas/HeroPublic"
+ ) # Original tutorial001.py seems to imply HeroPublic as well.
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import SQLModel, create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
assert data[0]["secret_name"] == hero_data["secret_name"]
# Ensure other fields are present as per the model Hero (which is used as response_model)
assert "id" in data[0]
- assert "age" in data[0] # Even if None, it should be in the response
+ assert "age" in data[0] # Even if None, it should be in the response
response = client.get("/openapi.json")
assert response.status_code == 200, response.text
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
# Let's rely on the app's startup event as per the tutorial's design.
# If `create_db_and_tables` exists as a global function in the module (outside app event), then call it.
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
- # Check if it's the function that FastAPI would call, or a standalone one.
- # This tutorial series usually has `create_db_and_tables` called by `app.on_event("startup")`.
- # If the tests run TestClient(mod.app), startup events will run.
- pass # Assuming startup event handles it.
+ # Check if it's the function that FastAPI would call, or a standalone one.
+ # This tutorial series usually has `create_db_and_tables` called by `app.on_event("startup")`.
+ # If the tests run TestClient(mod.app), startup events will run.
+ pass # Assuming startup event handles it.
return mod
hero2_data = {
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "id": 9000, # This ID might be ignored by DB if it's auto-incrementing primary key
+ "id": 9000, # This ID might be ignored by DB if it's auto-incrementing primary key
}
hero3_data = {
"name": "Rusty-Man",
response = client.post("/heroes/", json=hero2_data)
assert response.status_code == 200, response.text
- hero2_created = response.json() # Use the ID from the created hero
+ hero2_created = response.json() # Use the ID from the created hero
hero2_id = hero2_created["id"]
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}") # Use the actual ID from DB
+ response = client.get(f"/heroes/{hero2_id}") # Use the actual ID from DB
assert response.status_code == 200, response.text
# If hero ID 9000 was intended to be a specific test case for a non-existent ID
# Otherwise, if hero2 was expected to have ID 9000, this needs adjustment.
# Given typical auto-increment, ID 9000 for hero2 is unlikely unless DB is reset and hero2 is first entry.
# The original test implies hero2_data's ID is not necessarily the created ID.
- response = client.get("/heroes/9000") # Check for a potentially non-existent ID
- assert response.status_code == 404, response.text # Expect 404 if 9000 is not hero2_id and not another hero's ID
+ response = client.get("/heroes/9000") # Check for a potentially non-existent ID
+ assert response.status_code == 404, (
+ response.text
+ ) # Expect 404 if 9000 is not hero2_id and not another hero's ID
response = client.get("/heroes/")
assert response.status_code == 200, response.text
)
assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID
+ response = client.patch(
+ "/heroes/9001", json={"name": "Dragon Cube X"}
+ ) # Non-existent ID
assert response.status_code == 404, response.text
response = client.delete(f"/heroes/{hero2_id}")
data = response.json()
assert len(data) == 2
- response = client.delete("/heroes/9000") # Non-existent ID (same as the GET check)
+ response = client.delete(
+ "/heroes/9000"
+ ) # Non-existent ID (same as the GET check)
assert response.status_code == 404, response.text
response = client.get("/openapi.json")
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
# Adjust the import path based on the file's new location or structure
# Assuming conftest.py is located at tests/conftest.py
-from ....conftest import needs_py310 # This needs to be relative to this file's location
+from ....conftest import (
+ needs_py310, # This needs to be relative to this file's location
+)
@pytest.fixture(
)
def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = (
- f"docs_src.tutorial.fastapi.simple_hero_api.{module_name}"
- )
+ full_module_name = f"docs_src.tutorial.fastapi.simple_hero_api.{module_name}"
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
return mod
-def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used by get_module
+def test_tutorial(
+ module: types.ModuleType,
+): # clear_sqlmodel is implicitly used by get_module
with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "id": 9000, # This ID is part of the test logic for this tutorial specifically
+ "id": 9000, # This ID is part of the test logic for this tutorial specifically
}
response = client.post("/heroes/", json=hero1_data)
data = response.json()
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
return mod
-def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used by get_module
+def test_tutorial(
+ module: types.ModuleType,
+): # clear_sqlmodel is implicitly used by get_module
with TestClient(module.app) as client:
# Hero Operations
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = { # This hero's ID might be overridden by DB if not specified or if ID is auto-incrementing
+ hero2_data = { # This hero's ID might be overridden by DB if not specified or if ID is auto-incrementing
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
"id": 9000,
response = client.post("/heroes/", json=hero2_data)
assert response.status_code == 200, response.text
hero2_created = response.json()
- hero2_id = hero2_created["id"] # Use the actual ID returned by the DB
+ hero2_id = hero2_created["id"] # Use the actual ID returned by the DB
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}") # Use DB generated ID
+ response = client.get(f"/heroes/{hero2_id}") # Use DB generated ID
assert response.status_code == 200, response.text
- response = client.get("/heroes/9000") # Check for ID 9000 specifically (could be hero2_id or not)
- if hero2_id == 9000 : # If hero2 got ID 9000
- assert response.status_code == 200, response.text
- else: # If hero2 got a different ID, then 9000 should not exist
- assert response.status_code == 404, response.text
+ response = client.get(
+ "/heroes/9000"
+ ) # Check for ID 9000 specifically (could be hero2_id or not)
+ if hero2_id == 9000: # If hero2 got ID 9000
+ assert response.status_code == 200, response.text
+ else: # If hero2 got a different ID, then 9000 should not exist
+ assert response.status_code == 404, response.text
response = client.get("/heroes/")
assert response.status_code == 200, response.text
data = response.json()
assert len(data) == 3
- response = client.patch(f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"})
+ response = client.patch(
+ f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"}
+ )
assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID
+ response = client.patch(
+ "/heroes/9001", json={"name": "Dragon Cube X"}
+ ) # Non-existent ID
assert response.status_code == 404, response.text
response = client.delete(f"/heroes/{hero2_id}")
data = response.json()
assert len(data) == 2
- response = client.delete("/heroes/9000") # Try deleting ID 9000
- if hero2_id == 9000 and hero2_id not in [h["id"] for h in data]: # If it was hero2's ID and hero2 was deleted
- assert response.status_code == 404 # Already deleted
- elif hero2_id != 9000 and 9000 not in [h["id"] for h in data]: # If 9000 was never a valid ID among current heroes
+ response = client.delete("/heroes/9000") # Try deleting ID 9000
+ if hero2_id == 9000 and hero2_id not in [
+ h["id"] for h in data
+ ]: # If it was hero2's ID and hero2 was deleted
+ assert response.status_code == 404 # Already deleted
+ elif hero2_id != 9000 and 9000 not in [
+ h["id"] for h in data
+ ]: # If 9000 was never a valid ID among current heroes
assert response.status_code == 404
- else: # If 9000 was a valid ID of another hero still present (should not happen with current data)
- assert response.status_code == 200 # This case is unlikely with current test data
+ else: # If 9000 was a valid ID of another hero still present (should not happen with current data)
+ assert (
+ response.status_code == 200
+ ) # This case is unlikely with current test data
# Team Operations
team_preventers_data = {"name": "Preventers", "headquarters": "Sharp Tower"}
assert data["headquarters"] == team_preventers_created["headquarters"]
assert data["id"] == team_preventers_created["id"]
- response = client.get("/teams/9000") # Non-existent team ID
+ response = client.get("/teams/9000") # Non-existent team ID
assert response.status_code == 404, response.text
response = client.patch(
)
data = response.json()
assert response.status_code == 200, response.text
- assert data["name"] == team_preventers_data["name"] # Name should be unchanged
+ assert data["name"] == team_preventers_data["name"] # Name should be unchanged
assert data["headquarters"] == "Preventers Tower"
- response = client.patch("/teams/9000", json={"name": "Freedom League"}) # Non-existent
+ response = client.patch(
+ "/teams/9000", json={"name": "Freedom League"}
+ ) # Non-existent
assert response.status_code == 404, response.text
response = client.delete(f"/teams/{team_preventers_id}")
assert response.status_code == 200, response.text
- response = client.delete("/teams/9000") # Non-existent
+ response = client.delete("/teams/9000") # Non-existent
assert response.status_code == 404, response.text
response = client.get("/teams/")
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
response = client.post("/heroes/", json=hero2_input_data)
assert response.status_code == 200, response.text
hero2_created = response.json()
- hero2_id = hero2_created["id"] # This is the ID to use for hero2
+ hero2_id = hero2_created["id"] # This is the ID to use for hero2
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
)
data = response.json()
assert response.status_code == 200, response.text
- assert data["name"] == hero2_created["name"] # Name should not change from created state
+ assert (
+ data["name"] == hero2_created["name"]
+ ) # Name should not change from created state
assert data["secret_name"] == "Spider-Youngster"
response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
assert data["name"] == hero3_created["name"]
assert data["age"] is None
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID
+ response = client.patch(
+ "/heroes/9001", json={"name": "Dragon Cube X"}
+ ) # Non-existent ID
assert response.status_code == 404, response.text
response = client.get("/openapi.json")
}
)
| IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
+ {"title": "Age", "type": "integer"} # Pydantic v1
),
},
},
}
)
| IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
+ {"title": "Age", "type": "integer"} # Pydantic v1
),
"id": {"title": "Id", "type": "integer"},
},
}
)
| IsDict(
- {"title": "Name", "type": "string"} # Pydantic v1
+ {"title": "Name", "type": "string"} # Pydantic v1
),
"secret_name": IsDict(
{
}
)
| IsDict(
- {"title": "Secret Name", "type": "string"} # Pydantic v1
+ {
+ "title": "Secret Name",
+ "type": "string",
+ } # Pydantic v1
),
"age": IsDict(
{
}
)
| IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
+ {"title": "Age", "type": "integer"} # Pydantic v1
),
},
},
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
-from sqlmodel import create_engine, SQLModel, Session
+from sqlmodel import Session, create_engine
from sqlmodel.pool import StaticPool
from ....conftest import needs_py39, needs_py310
"secret_name": "Dive Wilson",
"password": "chimichanga",
}
- hero2_input_data = { # Renamed to avoid confusion with returned hero2
+ hero2_input_data = { # Renamed to avoid confusion with returned hero2
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "id": 9000, # ID might be ignored by DB
+ "id": 9000, # ID might be ignored by DB
"password": "auntmay",
}
hero3_data = {
response = client.post("/heroes/", json=hero1_data)
assert response.status_code == 200, response.text
- hero1_created = response.json() # Use created hero data
+ hero1_created = response.json() # Use created hero data
assert "password" not in hero1_created
assert "hashed_password" not in hero1_created
hero1_id = hero1_created["id"]
response = client.post("/heroes/", json=hero2_input_data)
assert response.status_code == 200, response.text
hero2_created = response.json()
- hero2_id = hero2_created["id"] # Use DB assigned ID
+ hero2_id = hero2_created["id"] # Use DB assigned ID
response = client.post("/heroes/", json=hero3_data)
assert response.status_code == 200, response.text
assert "hashed_password" not in fetched_hero2
response_get_9000 = client.get("/heroes/9000")
- if hero2_id == 9000: # If hero2 happened to get ID 9000
+ if hero2_id == 9000: # If hero2 happened to get ID 9000
assert response_get_9000.status_code == 200
- else: # Otherwise, 9000 should not exist
+ else: # Otherwise, 9000 should not exist
assert response_get_9000.status_code == 404
response = client.get("/heroes/")
with Session(module.engine) as session:
hero1_db = session.get(module.Hero, hero1_id)
assert hero1_db
- assert not hasattr(hero1_db, "password") # Model should not have 'password' field after read from DB
+ assert not hasattr(
+ hero1_db, "password"
+ ) # Model should not have 'password' field after read from DB
assert hero1_db.hashed_password == "not really hashed chimichanga hehehe"
hero2_db = session.get(module.Hero, hero2_id)
)
data = response.json()
assert response.status_code == 200, response.text
- assert data["name"] == hero2_created["name"] # Use created name for comparison
+ assert data["name"] == hero2_created["name"] # Use created name for comparison
assert data["secret_name"] == "Spider-Youngster"
assert "password" not in data
assert "hashed_password" not in data
hero2b_db = session.get(module.Hero, hero2_id)
assert hero2b_db
assert not hasattr(hero2b_db, "password")
- assert hero2b_db.hashed_password == "not really hashed auntmay hehehe" # Password shouldn't change on this patch
+ assert (
+ hero2b_db.hashed_password == "not really hashed auntmay hehehe"
+ ) # Password shouldn't change on this patch
response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
data = response.json()
data = response.json()
assert response.status_code == 200, response.text
assert data["name"] == hero3_created["name"]
- assert data["age"] is None # Age should persist as None from previous patch
+ assert data["age"] is None # Age should persist as None from previous patch
assert "password" not in data
assert "hashed_password" not in data
with Session(module.engine) as session:
- hero3c_db = session.get(module.Hero, hero3_id) # Renamed to avoid confusion
+ hero3c_db = session.get(module.Hero, hero3_id) # Renamed to avoid confusion
assert hero3c_db
assert not hasattr(hero3c_db, "password")
- assert hero3c_db.hashed_password == "not really hashed philantroplayboy hehehe"
+ assert (
+ hero3c_db.hashed_password == "not really hashed philantroplayboy hehehe"
+ )
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent
+ response = client.patch(
+ "/heroes/9001", json={"name": "Dragon Cube X"}
+ ) # Non-existent
assert response.status_code == 404, response.text
response = client.get("/openapi.json")
assert response.status_code == 200, response.text
# OpenAPI schema is consistent
- assert response.json() == {
- "openapi": "3.1.0",
- "info": {"title": "FastAPI", "version": "0.1.0"},
- "paths": {
- "/heroes/": {
- "get": {
- "summary": "Read Heroes",
- "operationId": "read_heroes_heroes__get",
- "parameters": [
- {
- "required": False,
- "schema": {
- "title": "Offset",
- "type": "integer",
- "default": 0,
+ assert (
+ response.json()
+ == {
+ "openapi": "3.1.0",
+ "info": {"title": "FastAPI", "version": "0.1.0"},
+ "paths": {
+ "/heroes/": {
+ "get": {
+ "summary": "Read Heroes",
+ "operationId": "read_heroes_heroes__get",
+ "parameters": [
+ {
+ "required": False,
+ "schema": {
+ "title": "Offset",
+ "type": "integer",
+ "default": 0,
+ },
+ "name": "offset",
+ "in": "query",
},
- "name": "offset",
- "in": "query",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100, # Corrected based on original test data
- "type": "integer",
- "default": 100,
+ {
+ "required": False,
+ "schema": {
+ "title": "Limit",
+ "maximum": 100, # Corrected based on original test data
+ "type": "integer",
+ "default": 100,
+ },
+ "name": "limit",
+ "in": "query",
},
- "name": "limit",
- "in": "query",
- },
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "title": "Response Read Heroes Heroes Get",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/HeroPublic"
+ },
+ }
}
- }
+ },
},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
}
- }
+ },
},
},
},
- },
- "post": {
- "summary": "Create Hero",
- "operationId": "create_hero_heroes__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HeroCreate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
+ "post": {
+ "summary": "Create Hero",
+ "operationId": "create_hero_heroes__post",
+ "requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/HeroPublic"
+ "$ref": "#/components/schemas/HeroCreate"
}
}
},
+ "required": True,
},
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HeroPublic"
+ }
}
- }
+ },
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ },
},
},
},
},
- },
- "/heroes/{hero_id}": {
- "get": {
- "summary": "Read Hero",
- "operationId": "read_hero_heroes__hero_id__get",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HeroPublic"
+ "/heroes/{hero_id}": {
+ "get": {
+ "summary": "Read Hero",
+ "operationId": "read_hero_heroes__hero_id__get",
+ "parameters": [
+ {
+ "required": True,
+ "schema": {"title": "Hero Id", "type": "integer"},
+ "name": "hero_id",
+ "in": "path",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HeroPublic"
+ }
}
- }
+ },
},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
}
- }
+ },
},
},
},
- },
- "patch": {
- "summary": "Update Hero",
- "operationId": "update_hero_heroes__hero_id__patch",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HeroUpdate"
- }
+ "patch": {
+ "summary": "Update Hero",
+ "operationId": "update_hero_heroes__hero_id__patch",
+ "parameters": [
+ {
+ "required": True,
+ "schema": {"title": "Hero Id", "type": "integer"},
+ "name": "hero_id",
+ "in": "path",
}
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
+ ],
+ "requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/HeroPublic"
+ "$ref": "#/components/schemas/HeroUpdate"
}
}
},
+ "required": True,
},
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HeroPublic"
+ }
}
- }
+ },
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ },
},
},
},
},
},
- },
- "components": {
- "schemas": {
- "HTTPValidationError": {
- "title": "HTTPValidationError",
- "type": "object",
- "properties": {
- "detail": {
- "title": "Detail",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/ValidationError"
- },
- }
- },
- },
- "HeroCreate": {
- "title": "HeroCreate",
- "required": ["name", "secret_name", "password"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- "title": "Age",
+ "components": {
+ "schemas": {
+ "HTTPValidationError": {
+ "title": "HTTPValidationError",
+ "type": "object",
+ "properties": {
+ "detail": {
+ "title": "Detail",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
}
- )
- | IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
- ),
- "password": {"type": "string", "title": "Password"},
+ },
},
- },
- "HeroPublic": {
- "title": "HeroPublic",
- "required": ["name", "secret_name", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- "title": "Age",
- }
- )
- | IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
- ),
- "id": {"title": "Id", "type": "integer"},
+ "HeroCreate": {
+ "title": "HeroCreate",
+ "required": ["name", "secret_name", "password"],
+ "type": "object",
+ "properties": {
+ "name": {"title": "Name", "type": "string"},
+ "secret_name": {
+ "title": "Secret Name",
+ "type": "string",
+ },
+ "age": IsDict(
+ {
+ "anyOf": [
+ {"type": "integer"},
+ {"type": "null"},
+ ],
+ "title": "Age",
+ }
+ )
+ | IsDict(
+ {"title": "Age", "type": "integer"} # Pydantic v1
+ ),
+ "password": {"type": "string", "title": "Password"},
+ },
},
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Name",
- }
- )
- | IsDict(
- {"title": "Name", "type": "string"} # Pydantic v1
- ),
- "secret_name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
+ "HeroPublic": {
+ "title": "HeroPublic",
+ "required": ["name", "secret_name", "id"],
+ "type": "object",
+ "properties": {
+ "name": {"title": "Name", "type": "string"},
+ "secret_name": {
"title": "Secret Name",
- }
- )
- | IsDict(
- {"title": "Secret Name", "type": "string"} # Pydantic v1
- ),
- "age": IsDict(
- {
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- "title": "Age",
- }
- )
- | IsDict(
- {"title": "Age", "type": "integer"} # Pydantic v1
- ),
- "password": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Password",
- }
- )
- | IsDict(
- {"title": "Password", "type": "string"} # Pydantic v1
- ),
+ "type": "string",
+ },
+ "age": IsDict(
+ {
+ "anyOf": [
+ {"type": "integer"},
+ {"type": "null"},
+ ],
+ "title": "Age",
+ }
+ )
+ | IsDict(
+ {"title": "Age", "type": "integer"} # Pydantic v1
+ ),
+ "id": {"title": "Id", "type": "integer"},
+ },
},
- },
- "ValidationError": {
- "title": "ValidationError",
- "required": ["loc", "msg", "type"],
- "type": "object",
- "properties": {
- "loc": {
- "title": "Location",
- "type": "array",
- "items": {
- "anyOf": [{"type": "string"}, {"type": "integer"}]
+ "HeroUpdate": {
+ "title": "HeroUpdate",
+ "type": "object",
+ "properties": {
+ "name": IsDict(
+ {
+ "anyOf": [{"type": "string"}, {"type": "null"}],
+ "title": "Name",
+ }
+ )
+ | IsDict(
+ {"title": "Name", "type": "string"} # Pydantic v1
+ ),
+ "secret_name": IsDict(
+ {
+ "anyOf": [{"type": "string"}, {"type": "null"}],
+ "title": "Secret Name",
+ }
+ )
+ | IsDict(
+ {
+ "title": "Secret Name",
+ "type": "string",
+ } # Pydantic v1
+ ),
+ "age": IsDict(
+ {
+ "anyOf": [
+ {"type": "integer"},
+ {"type": "null"},
+ ],
+ "title": "Age",
+ }
+ )
+ | IsDict(
+ {"title": "Age", "type": "integer"} # Pydantic v1
+ ),
+ "password": IsDict(
+ {
+ "anyOf": [{"type": "string"}, {"type": "null"}],
+ "title": "Password",
+ }
+ )
+ | IsDict(
+ {
+ "title": "Password",
+ "type": "string",
+ } # Pydantic v1
+ ),
+ },
+ },
+ "ValidationError": {
+ "title": "ValidationError",
+ "required": ["loc", "msg", "type"],
+ "type": "object",
+ "properties": {
+ "loc": {
+ "title": "Location",
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {"type": "string"},
+ {"type": "integer"},
+ ]
+ },
},
+ "msg": {"title": "Message", "type": "string"},
+ "type": {"title": "Error Type", "type": "string"},
},
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
},
- },
- }
- },
- }
+ }
+ },
+ }
+ )
import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine, SQLModel # Added SQLModel for potential use if main doesn't create tables
+from sqlmodel import ( # Added SQLModel for potential use if main doesn't create tables
+ create_engine,
+)
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
@pytest.fixture(
pytest.param("tutorial001_py310", marks=needs_py310),
],
)
-def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): # clear_sqlmodel ensures fresh DB state
+def get_module(
+ request: pytest.FixtureRequest, clear_sqlmodel: Any
+): # clear_sqlmodel ensures fresh DB state
module_name = request.param
full_module_name = f"docs_src.tutorial.indexes.{module_name}"
# These tests usually define engine in their main() or globally.
# We'll ensure it's set up for the test a standard way.
mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url) # connect_args not typically in these non-FastAPI examples
+ mod.engine = create_engine(
+ mod.sqlite_url
+ ) # connect_args not typically in these non-FastAPI examples
# Ensure tables are created. Some tutorials do it in main, others expect it externally.
# If mod.main() is expected to create tables, this might be redundant but safe.
# If Hero model is defined globally, SQLModel.metadata.create_all(mod.engine) can be used.
if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"):
- mod.Hero.metadata.create_all(mod.engine)
- elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): # Fallback if Hero specific metadata not found
- mod.SQLModel.metadata.create_all(mod.engine)
-
+ mod.Hero.metadata.create_all(mod.engine)
+ elif hasattr(mod, "SQLModel") and hasattr(
+ mod.SQLModel, "metadata"
+ ): # Fallback if Hero specific metadata not found
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
found_indexes_simplified = []
for index in indexes:
- found_indexes_simplified.append({
- "name": index["name"],
- "column_names": sorted(index["column_names"]), # Sort for consistency
- "unique": index["unique"],
- # Not including dialect_options as it can vary or be empty
- })
+ found_indexes_simplified.append(
+ {
+ "name": index["name"],
+ "column_names": sorted(index["column_names"]), # Sort for consistency
+ "unique": index["unique"],
+ # Not including dialect_options as it can vary or be empty
+ }
+ )
expected_indexes_simplified = []
for index in expected_indexes:
- expected_indexes_simplified.append({
- "name": index["name"],
- "column_names": sorted(index["column_names"]),
- "unique": index["unique"],
- })
+ expected_indexes_simplified.append(
+ {
+ "name": index["name"],
+ "column_names": sorted(index["column_names"]),
+ "unique": index["unique"],
+ }
+ )
for expected_index in expected_indexes_simplified:
- assert expected_index in found_indexes_simplified, f"Expected index {expected_index['name']} not found or mismatch."
+ assert expected_index in found_indexes_simplified, (
+ f"Expected index {expected_index['name']} not found or mismatch."
+ )
- assert len(found_indexes_simplified) == len(expected_indexes_simplified), \
+ assert len(found_indexes_simplified) == len(expected_indexes_simplified), (
f"Mismatch in number of indexes. Found: {len(found_indexes_simplified)}, Expected: {len(expected_indexes_simplified)}"
+ )
import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine, SQLModel # Added SQLModel
+from sqlmodel import create_engine # Added SQLModel
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
@pytest.fixture(
mod.engine = create_engine(mod.sqlite_url)
if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"):
- mod.Hero.metadata.create_all(mod.engine)
+ mod.Hero.metadata.create_all(mod.engine)
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
expected_indexes = [
{
"name": "ix_hero_name",
- "dialect_options": {}, # Included for completeness but not strictly compared below
+ "dialect_options": {}, # Included for completeness but not strictly compared below
"column_names": ["name"],
"unique": 0,
},
found_indexes_simplified = []
for index in indexes:
- found_indexes_simplified.append({
- "name": index["name"],
- "column_names": sorted(index["column_names"]),
- "unique": index["unique"],
- })
+ found_indexes_simplified.append(
+ {
+ "name": index["name"],
+ "column_names": sorted(index["column_names"]),
+ "unique": index["unique"],
+ }
+ )
expected_indexes_simplified = []
for index in expected_indexes:
- expected_indexes_simplified.append({
- "name": index["name"],
- "column_names": sorted(index["column_names"]),
- "unique": index["unique"],
- })
+ expected_indexes_simplified.append(
+ {
+ "name": index["name"],
+ "column_names": sorted(index["column_names"]),
+ "unique": index["unique"],
+ }
+ )
for expected_index in expected_indexes_simplified:
- assert expected_index in found_indexes_simplified, f"Expected index {expected_index['name']} not found or mismatch."
+ assert expected_index in found_indexes_simplified, (
+ f"Expected index {expected_index['name']} not found or mismatch."
+ )
- assert len(found_indexes_simplified) == len(expected_indexes_simplified), \
+ assert len(found_indexes_simplified) == len(expected_indexes_simplified), (
f"Mismatch in number of indexes. Found: {len(found_indexes_simplified)}, Expected: {len(expected_indexes_simplified)}"
+ )
from typing import Any
import pytest
-from sqlmodel import create_engine, SQLModel, Session, select # Ensure all necessary SQLModel parts are imported
+from sqlmodel import ( # Ensure all necessary SQLModel parts are imported
+ Session,
+ create_engine,
+ select,
+)
-from ...conftest import needs_py310 # Adjusted for typical conftest location
+from ...conftest import needs_py310 # Adjusted for typical conftest location
@pytest.fixture(
else:
mod = importlib.import_module(full_module_name)
- mod.sqlite_url = "sqlite://" # Ensure this is consistent
- mod.engine = create_engine(mod.sqlite_url) # Standard engine setup
+ mod.sqlite_url = "sqlite://" # Ensure this is consistent
+ mod.engine = create_engine(mod.sqlite_url) # Standard engine setup
# Table creation is usually in main() for these examples or implicitly by SQLModel.metadata.create_all
# If main() creates tables, calling it here might be redundant if test_tutorial also calls it.
# For safety, ensure tables are created if Hero model is defined directly in the module.
if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"):
- mod.Hero.metadata.create_all(mod.engine)
+ mod.Hero.metadata.create_all(mod.engine)
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
-def test_tutorial(module: types.ModuleType, clear_sqlmodel: Any): # clear_sqlmodel still useful for DB state
+def test_tutorial(
+ module: types.ModuleType, clear_sqlmodel: Any
+): # clear_sqlmodel still useful for DB state
# If module.main() is responsible for creating data and potentially tables, call it.
# The fixture get_module now ensures the engine is set and tables are created if models are defined.
# If main() also sets up engine/tables, ensure it's idempotent or adjust.
# Typically, main() in these tutorials contains the primary logic to be tested (e.g., data insertion).
- module.main() # This should execute the tutorial's data insertion logic
+ module.main() # This should execute the tutorial's data insertion logic
with Session(module.engine) as session:
heroes = session.exec(select(module.Hero)).all()
from typing import Any
import pytest
-from sqlmodel import create_engine, SQLModel, Session, select
+from sqlmodel import Session, SQLModel, create_engine, select
-from ...conftest import needs_py310, clear_sqlmodel as clear_sqlmodel_fixture # Use aliased import
+from ...conftest import needs_py310 # Use aliased import
@pytest.fixture(
- name="module", # Fixture provides the main module to be tested (tutorial002 variant)
+ name="module", # Fixture provides the main module to be tested (tutorial002 variant)
params=[
"tutorial002",
pytest.param("tutorial002_py310", marks=needs_py310),
return mod_tut002
-def test_tutorial(module: types.ModuleType, clear_sqlmodel_fixture: Any): # `module` is tutorial002 with .Team attached
- module.main() # Executes the tutorial002's data insertion logic
+def test_tutorial(
+ module: types.ModuleType, clear_sqlmodel_fixture: Any
+): # `module` is tutorial002 with .Team attached
+ module.main() # Executes the tutorial002's data insertion logic
with Session(module.engine) as session:
hero_spider_boy = session.exec(
select(module.Team).where(module.Team.name == "Preventers")
).one()
assert hero_spider_boy.team_id == team_preventers.id
- assert hero_spider_boy.team == team_preventers # This checks the relationship resolves
+ assert (
+ hero_spider_boy.team == team_preventers
+ ) # This checks the relationship resolves
heroes = session.exec(select(module.Hero)).all()
from typing import Any
import pytest
-from sqlmodel import create_engine, SQLModel, Session, select
+from sqlmodel import Session, create_engine, select
from ...conftest import needs_py310
# Create tables. Tutorial003.py in insert focuses on refresh, so tables and initial data are key.
# It's likely main() handles this. If not, direct creation is a fallback.
- if hasattr(mod, "create_db_and_tables"): # Some tutorials use this helper
+ if hasattr(mod, "create_db_and_tables"): # Some tutorials use this helper
mod.create_db_and_tables()
- elif hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"): # Check for Hero model metadata
- mod.Hero.metadata.create_all(mod.engine)
- elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): # Generic fallback
- mod.SQLModel.metadata.create_all(mod.engine)
+ elif hasattr(mod, "Hero") and hasattr(
+ mod.Hero, "metadata"
+ ): # Check for Hero model metadata
+ mod.Hero.metadata.create_all(mod.engine)
+ elif hasattr(mod, "SQLModel") and hasattr(
+ mod.SQLModel, "metadata"
+ ): # Generic fallback
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel # Added SQLModel for table creation
+from sqlmodel import create_engine # Added SQLModel for table creation
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
-
-expected_calls_tutorial001 = [ # Renamed to be specific
+expected_calls_tutorial001 = [ # Renamed to be specific
[
[
{"id": 1, "name": "Deadpond", "secret_name": "Dive Wilson", "age": None},
pytest.param("tutorial001_py310", marks=needs_py310),
],
)
-def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Changed name for clarity
+def module_fixture(
+ request: pytest.FixtureRequest, clear_sqlmodel: Any
+): # Changed name for clarity
module_name = request.param
# Corrected module path
full_module_name = f"docs_src.tutorial.offset_and_limit.{module_name}"
# If not, this is a safeguard.
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
# This function should ideally call SQLModel.metadata.create_all(engine)
- pass # Assuming main() will call it or tables are created before select
+ pass # Assuming main() will call it or tables are created before select
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
-
-expected_calls_tutorial002 = [ # Renamed for specificity
+expected_calls_tutorial002 = [ # Renamed for specificity
[
[
{
mod.engine = create_engine(mod.sqlite_url)
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
- pass # Assuming main() calls it
+ pass # Assuming main() calls it
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
-
-expected_calls_tutorial003 = [ # Renamed for specificity
+expected_calls_tutorial003 = [ # Renamed for specificity
[
[
{
mod.engine = create_engine(mod.sqlite_url)
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
- pass # Assuming main() calls it
+ pass # Assuming main() calls it
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
-
-expected_calls_tutorial004 = [ # Renamed for specificity
+expected_calls_tutorial004 = [ # Renamed for specificity
[
[
{"name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36, "id": 6},
mod.engine = create_engine(mod.sqlite_url)
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
- pass # Assuming main() calls it
+ pass # Assuming main() calls it
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
-
-expected_calls_tutorial001 = [ # Renamed for specificity
+expected_calls_tutorial001 = [ # Renamed for specificity
[
"Deadpond:",
{"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
# We assume it's called by main() or the test setup is fine if it's not explicitly called here.
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine) # Create all tables known to this module's metadata
+ mod.SQLModel.metadata.create_all(
+ mod.engine
+ ) # Create all tables known to this module's metadata
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
-
-expected_calls_tutorial002 = [ # Renamed for specificity
+expected_calls_tutorial002 = [ # Renamed for specificity
[
"Deadpond:",
{"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
-from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
-
-expected_calls_tutorial003 = [ # Renamed for specificity
+expected_calls_tutorial003 = [ # Renamed for specificity
[
"Z-Force hero:",
{"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None},
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel # Added SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine # Added SQLModel
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial001 = [
[
# or even lead to issues if not idempotent. Let main() handle it.
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial002 = [["Hero:", None]]
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial003 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlalchemy.exc import MultipleResultsFound # Keep this import
-from sqlmodel import create_engine, SQLModel, Session, delete # Ensure Session and delete are imported
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlalchemy.exc import MultipleResultsFound # Keep this import
+from sqlmodel import ( # Ensure Session and delete are imported
+ Session,
+ create_engine,
+ delete,
+)
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial004 = [
[
"Hero:",
{
- "id": 1, # Assuming ID will be 1 after clearing and adding one hero
+ "id": 1, # Assuming ID will be 1 after clearing and adding one hero
"name": "Test Hero",
"secret_name": "Secret Test Hero",
"age": 24,
# The original test calls main() first, then manipulates DB.
# The fixture should ensure tables are ready.
if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
# First, let main() run to create initial data and trigger the expected exception.
# The create_db_and_tables is called within main() in docs_src/tutorial/one/tutorial004.py
with pytest.raises(MultipleResultsFound):
- module.main() # This function in the tutorial is expected to raise this
+ module.main() # This function in the tutorial is expected to raise this
# After the expected exception, the original test clears the Hero table and adds a specific hero.
with Session(module.engine) as session:
# The delete statement needs the actual Hero class from the module
session.exec(delete(module.Hero))
- session.add(module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
+ session.add(
+ module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24)
+ )
session.commit()
# Now, test the select_heroes function part
with patch("builtins.print", new=get_testing_print_function(print_mock.calls)):
- module.select_heroes() # This function is defined in the tutorial module
+ module.select_heroes() # This function is defined in the tutorial module
assert print_mock.calls == expected_calls_tutorial004
from unittest.mock import patch
import pytest
-from sqlalchemy.exc import NoResultFound # Keep this import
-from sqlmodel import create_engine, SQLModel, Session, delete # Ensure Session and delete
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlalchemy.exc import NoResultFound # Keep this import
+from sqlmodel import ( # Ensure Session and delete
+ Session,
+ create_engine,
+ delete,
+)
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial005 = [
[
# The create_db_and_tables() is called inside main() *after* the select that fails.
# So, the fixture should create tables.
if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine) # Create tables
+ mod.SQLModel.metadata.create_all(mod.engine) # Create tables
return mod
# The `clear_sqlmodel` fixture ensures the DB is clean (tables might be recreated by module_fixture).
with pytest.raises(NoResultFound):
- module.main() # This should execute the part of main() that expects no results
+ module.main() # This should execute the part of main() that expects no results
# Phase 2: Test select_heroes() after manually adding a hero
# This part matches the original test's logic after the expected exception.
with Session(module.engine) as session:
- session.exec(delete(module.Hero)) # Clear any heroes if main() somehow added them
- session.add(module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
+ session.exec(
+ delete(module.Hero)
+ ) # Clear any heroes if main() somehow added them
+ session.add(
+ module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24)
+ )
session.commit()
with patch("builtins.print", new=get_testing_print_function(print_mock.calls)):
- module.select_heroes() # This function is defined in the tutorial module
+ module.select_heroes() # This function is defined in the tutorial module
assert print_mock.calls == expected_calls_tutorial005
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial006 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial007 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial008 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial009 = [["Hero:", None]]
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlalchemy.exc import SAWarning # Keep this import
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlalchemy.exc import SAWarning # Keep this import
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial001 = [
[
"age": None,
"id": 3,
"secret_name": "Pedro Parqueador",
- "team_id": 2, # Still has team_id locally until committed and refreshed
+ "team_id": 2, # Still has team_id locally until committed and refreshed
"name": "Spider-Boy",
},
],
[
- "Preventers Team Heroes again:", # Before commit, team still has Spider-Boy
+ "Preventers Team Heroes again:", # Before commit, team still has Spider-Boy
[
{
"age": 48,
],
["After committing"],
[
- "Spider-Boy after commit:", # team_id is None after commit and refresh
+ "Spider-Boy after commit:", # team_id is None after commit and refresh
{
"age": None,
"id": 3,
},
],
[
- "Preventers Team Heroes after commit:", # Spider-Boy is removed
+ "Preventers Team Heroes after commit:", # Spider-Boy is removed
[
{
"age": 48,
)
def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ full_module_name = (
+ f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ )
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-# SAWarning is not expected in this tutorial's test, so not importing it from sqlalchemy.exc
-from sqlmodel import create_engine, SQLModel
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+# SAWarning is not expected in this tutorial's test, so not importing it from sqlalchemy.exc
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial002 = [
[
)
def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ full_module_name = (
+ f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ )
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from typing import Any
import pytest
-from sqlalchemy import inspect # Keep this
-from sqlalchemy.engine.reflection import Inspector # Keep this
-from sqlmodel import create_engine, SQLModel
+from sqlalchemy import inspect # Keep this
+from sqlalchemy.engine.reflection import Inspector # Keep this
+from sqlmodel import create_engine
-from ....conftest import needs_py39, needs_py310 # Keep conftest imports
+from ....conftest import needs_py39, needs_py310 # Keep conftest imports
@pytest.fixture(
)
def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ full_module_name = (
+ f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}"
+ )
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
return mod
-def test_tutorial(module: types.ModuleType, clear_sqlmodel: Any): # print_mock not needed
+def test_tutorial(
+ module: types.ModuleType, clear_sqlmodel: Any
+): # print_mock not needed
# The main() function in the tutorial module is expected to create tables.
module.main()
insp: Inspector = inspect(module.engine)
assert insp.has_table(str(module.Hero.__tablename__))
- assert insp.has_table(str(module.Weapon.__tablename__)) # Specific to tutorial003
+ assert insp.has_table(str(module.Weapon.__tablename__)) # Specific to tutorial003
assert insp.has_table(str(module.Power.__tablename__)) # Specific to tutorial003
assert insp.has_table(str(module.Team.__tablename__))
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
# Assuming conftest.py is at tests/conftest.py, the path should be ....conftest
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
-
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial001 = [
[
# Assuming main() or create_db_and_tables() handles table creation
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
+from sqlmodel import create_engine
# Adjust the import path based on the file's new location or structure
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
-
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial001 = [
[
# Assuming main() or create_db_and_tables() handles table creation
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial001 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial002 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial003 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
import pytest
from sqlalchemy.exc import IntegrityError
-from sqlmodel import create_engine, SQLModel, Session, select, delete # Added Session, select, delete just in case module uses them
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import ( # Added Session, select, delete just in case module uses them
+ create_engine,
+)
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial004 = [
[
- "Created hero:", # From create_heroes() called by main()
+ "Created hero:", # From create_heroes() called by main()
{
"age": None,
"id": 1,
"id": 3,
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "team_id": None, # Initially no team
+ "team_id": None, # Initially no team
},
],
[
- "Updated hero:", # Spider-Boy gets a team
+ "Updated hero:", # Spider-Boy gets a team
{
"age": None,
"id": 3,
},
],
[
- "Team Wakaland:", # Team Wakaland is created
+ "Team Wakaland:", # Team Wakaland is created
{"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
],
# The main() in tutorial004.py (cascade_delete) is try_to_delete_team_preventers_alternative.
"Created hero:",
{
"age": None,
- "id": 1, # Assuming IDs start from 1 after clear_sqlmodel
+ "id": 1, # Assuming IDs start from 1 after clear_sqlmodel
"name": "Deadpond",
"secret_name": "Dive Wilson",
- "team_id": 1, # Assuming Preventers team gets ID 1
+ "team_id": 1, # Assuming Preventers team gets ID 1
},
],
[
"id": 2,
"name": "Rusty-Man",
"secret_name": "Tommy Sharp",
- "team_id": 1, # Also Preventers
+ "team_id": 1, # Also Preventers
},
],
[
"id": 3,
"name": "Spider-Boy",
"secret_name": "Pedro Parqueador",
- "team_id": 1, # Also Preventers
+ "team_id": 1, # Also Preventers
},
],
]
# However, if other functions from module were tested independently, tables would need to exist.
# For safety and consistency with other fixtures:
if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine) # Ensure tables are there before main might use them.
+ mod.SQLModel.metadata.create_all(
+ mod.engine
+ ) # Ensure tables are there before main might use them.
return mod
with pytest.raises(IntegrityError) as excinfo:
with patch("builtins.print", new=get_testing_print_function(print_mock.calls)):
- module.main() # This is try_to_delete_team_preventers_alternative
+ module.main() # This is try_to_delete_team_preventers_alternative
# Check the prints that occurred *before* the exception was raised
assert print_mock.calls == expected_calls_tutorial004_corrected
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial005 = [
[
{"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
],
[
- "Team with removed heroes:", # This print is specific to tutorial005.py's main()
+ "Team with removed heroes:", # This print is specific to tutorial005.py's main()
{"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
],
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial001 = [
[
)
def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}"
+ full_module_name = (
+ f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}"
+ )
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310
expected_calls_tutorial002 = [
[
"age": None,
"id": 3,
"secret_name": "Pedro Parqueador",
- "team_id": None, # This is after Spider-Boy's team is set to None
+ "team_id": None, # This is after Spider-Boy's team is set to None
"name": "Spider-Boy",
},
],
)
def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
module_name = request.param
- full_module_name = f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}"
+ full_module_name = (
+ f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}"
+ )
if full_module_name in sys.modules:
mod = importlib.reload(sys.modules[full_module_name])
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial001 = [
[
mod.engine = create_engine(mod.sqlite_url)
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
- pass # Assuming main() calls it or it's handled if needed by the tutorial's main logic
+ pass # Assuming main() calls it or it's handled if needed by the tutorial's main logic
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial002 = [
[
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
# expected_calls is defined within the test_tutorial function in the original test
# This is fine as it's used only there.
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
],
]
# Preserve the original assertion logic
- for call_item in expected_calls: # Renamed to avoid conflict with outer scope 'calls' if any
+ for (
+ call_item
+ ) in expected_calls: # Renamed to avoid conflict with outer scope 'calls' if any
assert call_item in print_mock.calls, "This expected item should be in the list"
print_mock.calls.pop(print_mock.calls.index(call_item))
assert len(print_mock.calls) == 0, "The list should only have the expected items"
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
# expected_calls is defined within the test_tutorial function in the original test
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial005 = [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}]
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial006 = [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial007 = [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial008 = [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial009 = [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
expected_calls_tutorial010 = [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod
from unittest.mock import patch
import pytest
-from sqlmodel import create_engine, SQLModel
-
-from ...conftest import get_testing_print_function, needs_py310, PrintMock
+from sqlmodel import create_engine
+from ...conftest import PrintMock, get_testing_print_function, needs_py310
# expected_calls is defined within the test_tutorial function in the original test
if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
pass
elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
- mod.SQLModel.metadata.create_all(mod.engine)
+ mod.SQLModel.metadata.create_all(mod.engine)
return mod