diff --git a/.github/actions/comment-docs-preview-in-pr/Dockerfile b/.github/actions/comment-docs-preview-in-pr/Dockerfile
index 4f20c5f10b..d8d278432d 100644
--- a/.github/actions/comment-docs-preview-in-pr/Dockerfile
+++ b/.github/actions/comment-docs-preview-in-pr/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.7
+FROM python:3.8
RUN pip install httpx "pydantic==1.5.1" pygithub
diff --git a/.github/actions/watch-previews/Dockerfile b/.github/actions/watch-previews/Dockerfile
index b8cc64d948..8d6dedc850 100644
--- a/.github/actions/watch-previews/Dockerfile
+++ b/.github/actions/watch-previews/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.7
+FROM python:3.8
RUN pip install httpx PyGithub "pydantic==1.5.1"
diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml
index 6400691533..8cffa375c2 100644
--- a/.github/workflows/build-docs.yml
+++ b/.github/workflows/build-docs.yml
@@ -8,7 +8,7 @@ on:
workflow_dispatch:
inputs:
debug_enabled:
- description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
+ description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: false
jobs:
@@ -23,7 +23,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: "3.7"
+ python-version: "3.8.1"
# Allow debugging with tmate
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
@@ -42,9 +42,8 @@ jobs:
# Ref: https://github.com/python-poetry/poetry-core/pull/188
run: |
python -m pip install --upgrade pip
- python -m pip install --force git+https://github.com/python-poetry/poetry-core.git@ad33bc2
- python -m pip install "poetry==1.2.0a2"
- python -m poetry plugin add poetry-version-plugin
+ python -m pip install "poetry==1.4.2"
+ python -m poetry self add poetry-version-plugin
- name: Configure poetry
run: python -m poetry config virtualenvs.create false
- name: Install Dependencies
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index f3c1e980a6..1cde34455e 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -7,7 +7,7 @@ on:
workflow_dispatch:
inputs:
debug_enabled:
- description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
+ description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: false
@@ -19,7 +19,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: "3.7"
+ python-version: "3.8.1"
# Allow debugging with tmate
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
@@ -38,9 +38,8 @@ jobs:
# Ref: https://github.com/python-poetry/poetry-core/pull/188
run: |
python -m pip install --upgrade pip
- python -m pip install --force git+https://github.com/python-poetry/poetry-core.git@ad33bc2
- python -m pip install "poetry==1.2.0a2"
- python -m poetry plugin add poetry-version-plugin
+ python -m pip install "poetry==1.4.2"
+ python -m poetry self add poetry-version-plugin
- name: Configure poetry
run: python -m poetry config virtualenvs.create false
- name: Install Dependencies
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 585ffc0455..a03f0d9ae5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -9,7 +9,7 @@ on:
workflow_dispatch:
inputs:
debug_enabled:
- description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
+ description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: false
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
- python-version: ["3.6.15", "3.7", "3.8", "3.9", "3.10"]
+ python-version: ["3.8.1", "3.9", "3.10", "3.11"]
fail-fast: false
steps:
@@ -45,16 +45,14 @@ jobs:
# Ref: https://github.com/python-poetry/poetry-core/pull/188
run: |
python -m pip install --upgrade pip
- python -m pip install --force git+https://github.com/python-poetry/poetry-core.git@ad33bc2
- python -m pip install "poetry==1.2.0a2"
- python -m poetry plugin add poetry-version-plugin
+ python -m pip install "poetry==1.4.2"
+ python -m poetry self add poetry-version-plugin
- name: Configure poetry
run: python -m poetry config virtualenvs.create false
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: python -m poetry install
- name: Lint
- if: ${{ matrix.python-version != '3.6.15' }}
run: python -m poetry run bash scripts/lint.sh
- run: mkdir coverage
- name: Test
@@ -76,7 +74,7 @@ jobs:
- uses: actions/setup-python@v4
with:
- python-version: '3.8'
+ python-version: '3.8.1'
- name: Get coverage files
uses: actions/download-artifact@v3
diff --git a/README.md b/README.md
index 5721f1cdb0..dce050053f 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ It combines SQLAlchemy and Pydantic and tries to simplify the code you write as
## Requirements
-A recent and currently supported version of Python (right now, Python supports versions 3.6 and above).
+A recent and currently supported version of Python (right now, Python supports versions 3.8.1 and above).
As **SQLModel** is based on **Pydantic** and **SQLAlchemy**, it requires them. They will be automatically installed when you install SQLModel.
diff --git a/docs/contributing.md b/docs/contributing.md
index f2964fba9b..fbf19076c2 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -8,7 +8,7 @@ If you already cloned the repository and you know that you need to deep dive in
### Python
-SQLModel supports Python 3.6 and above, but for development you should have at least **Python 3.7**.
+SQLModel supports Python 3.8.1 and above.
### Poetry
@@ -116,7 +116,7 @@ There is a script that you can run locally to test all the code and generate cov
```console
-$ bash scripts/test-cov-html.sh
+$ bash scripts/test.sh
```
diff --git a/docs/features.md b/docs/features.md
index 09de0c17f9..fecdad8992 100644
--- a/docs/features.md
+++ b/docs/features.md
@@ -12,7 +12,7 @@ Nevertheless, SQLModel is completely **independent** of FastAPI and can be used
## Just Modern Python
-It's all based on standard modern **Python** type annotations. No new syntax to learn. Just standard modern Python.
+It's all based on standard modern **Python** type annotations. No new syntax to learn. Just standard modern Python.
If you need a 2 minute refresher of how to use Python types (even if you don't use SQLModel or FastAPI), check the FastAPI tutorial section: Python types intro.
diff --git a/docs/index.md b/docs/index.md
index 5721f1cdb0..dce050053f 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -50,7 +50,7 @@ It combines SQLAlchemy and Pydantic and tries to simplify the code you write as
## Requirements
-A recent and currently supported version of Python (right now, Python supports versions 3.6 and above).
+A recent and currently supported version of Python (right now, Python supports versions 3.8.1 and above).
As **SQLModel** is based on **Pydantic** and **SQLAlchemy**, it requires them. They will be automatically installed when you install SQLModel.
diff --git a/docs/tutorial/fastapi/tests.md b/docs/tutorial/fastapi/tests.md
index f817a883a1..0aeac5c33f 100644
--- a/docs/tutorial/fastapi/tests.md
+++ b/docs/tutorial/fastapi/tests.md
@@ -389,7 +389,7 @@ Now we can run the tests with `pytest` and see the results:
$ pytest
============= test session starts ==============
-platform linux -- Python 3.7.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
+platform linux -- Python 3.8.16, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /home/user/code/sqlmodel-tutorial
collected 7 items
diff --git a/docs/tutorial/index.md b/docs/tutorial/index.md
index 33cf6226c4..603dd35774 100644
--- a/docs/tutorial/index.md
+++ b/docs/tutorial/index.md
@@ -64,7 +64,7 @@ $ cd sqlmodel-tutorial
Make sure you have an officially supported version of Python.
-Currently it is **Python 3.6** and above (Python 3.5 was already deprecated).
+Currently it is **Python 3.8.1** and above (Python 3.5 was already deprecated).
You can check which version you have with:
@@ -72,7 +72,7 @@ You can check which version you have with:
```console
$ python3 --version
-Python 3.6.9
+Python 3.8.16
```
@@ -81,11 +81,10 @@ There's a chance that you have multiple Python versions installed.
You might want to try with the specific versions, for example with:
+* `python3.11`
* `python3.10`
* `python3.9`
-* `python3.8`
-* `python3.7`
-* `python3.6`
+* `python3.8.1`
The code would look like this:
@@ -136,7 +135,7 @@ Here are the commands you could use:
```console
- // Remember that you might need to use python3.9 or similar 💡
+ // Remember that you might need to use python3.9 or similar 💡
// Create the virtual environment using the module "venv"
$ python3 -m venv env
// ...here it creates the virtual enviroment in the directory "env"
diff --git a/docs_src/tutorial/fastapi/app_testing/tutorial001/main.py b/docs_src/tutorial/fastapi/app_testing/tutorial001/main.py
index 88b8fbbcea..d106c4ebab 100644
--- a/docs_src/tutorial/fastapi/app_testing/tutorial001/main.py
+++ b/docs_src/tutorial/fastapi/app_testing/tutorial001/main.py
@@ -98,7 +98,6 @@ def update_hero(
@app.delete("/heroes/{hero_id}")
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
-
hero = session.get(Hero, hero_id)
if not hero:
raise HTTPException(status_code=404, detail="Hero not found")
diff --git a/docs_src/tutorial/fastapi/relationships/tutorial001.py b/docs_src/tutorial/fastapi/relationships/tutorial001.py
index 97220b95e5..6a03846686 100644
--- a/docs_src/tutorial/fastapi/relationships/tutorial001.py
+++ b/docs_src/tutorial/fastapi/relationships/tutorial001.py
@@ -136,7 +136,6 @@ def update_hero(
@app.delete("/heroes/{hero_id}")
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
-
hero = session.get(Hero, hero_id)
if not hero:
raise HTTPException(status_code=404, detail="Hero not found")
diff --git a/docs_src/tutorial/fastapi/session_with_dependency/tutorial001.py b/docs_src/tutorial/fastapi/session_with_dependency/tutorial001.py
index 88b8fbbcea..d106c4ebab 100644
--- a/docs_src/tutorial/fastapi/session_with_dependency/tutorial001.py
+++ b/docs_src/tutorial/fastapi/session_with_dependency/tutorial001.py
@@ -98,7 +98,6 @@ def update_hero(
@app.delete("/heroes/{hero_id}")
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
-
hero = session.get(Hero, hero_id)
if not hero:
raise HTTPException(status_code=404, detail="Hero not found")
diff --git a/docs_src/tutorial/fastapi/teams/tutorial001.py b/docs_src/tutorial/fastapi/teams/tutorial001.py
index 2a0bd600fc..6f84182bc9 100644
--- a/docs_src/tutorial/fastapi/teams/tutorial001.py
+++ b/docs_src/tutorial/fastapi/teams/tutorial001.py
@@ -127,7 +127,6 @@ def update_hero(
@app.delete("/heroes/{hero_id}")
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
-
hero = session.get(Hero, hero_id)
if not hero:
raise HTTPException(status_code=404, detail="Hero not found")
diff --git a/pyproject.toml b/pyproject.toml
index e3b1d3c279..1a31c5a8a3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,10 +17,10 @@ classifiers = [
"Intended Audience :: System Administrators",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3 :: Only",
- "Programming Language :: Python :: 3.6",
- "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
"Topic :: Database",
"Topic :: Database :: Database Engines/Servers",
"Topic :: Internet",
@@ -30,28 +30,29 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6.1"
+python = "^3.8.1"
SQLAlchemy = ">=1.4.17,<=1.4.41"
-pydantic = "^1.8.2"
+pydantic = "^1.10.8"
sqlalchemy2-stubs = {version = "*", allow-prereleases = true}
[tool.poetry.dev-dependencies]
pytest = "^7.0.1"
-mypy = "0.971"
-flake8 = "^5.0.4"
-black = {version = "^22.10.0", python = "^3.7"}
-mkdocs = "^1.2.1"
-mkdocs-material = "^8.1.4"
-pillow = {version = "^9.3.0", python = "^3.7"}
-cairosvg = {version = "^2.5.2", python = "^3.7"}
-mdx-include = "^1.4.1"
-coverage = {extras = ["toml"], version = "^6.2"}
-fastapi = "^0.68.1"
+mypy = "1.3.0"
+flake8 = "^6.0.0"
+black = {version = "^23.3.0", python = "^3.8.1"}
+mkdocs = "^1.4.3"
+mkdocs-material = "^9.1.15"
+pillow = {version = "^9.3.0", python = "^3.8.1"}
+cairosvg = {version = "^2.5.2", python = "^3.8.1"}
+mdx-include = "^1.4.2"
+coverage = {extras = ["toml"], version = "^7.2"}
+fastapi = "^0.95.2"
+httpx = "^0.24.0"
requests = "^2.26.0"
-autoflake = "^1.4"
+autoflake = "^2.1.1"
isort = "^5.9.3"
-async_generator = {version = "*", python = "~3.6"}
-async-exit-stack = {version = "*", python = "~3.6"}
+async_generator = {version = "*", python = "~3.8.1"}
+async-exit-stack = {version = "*", python = "~3.8.1"}
[build-system]
requires = ["poetry-core"]
@@ -88,16 +89,16 @@ skip_glob = [
[tool.mypy]
# --strict
disallow_any_generics = true
-disallow_subclassing_any = true
-disallow_untyped_calls = true
+disallow_subclassing_any = true
+disallow_untyped_calls = true
disallow_untyped_defs = true
-disallow_incomplete_defs = true
-check_untyped_defs = true
-disallow_untyped_decorators = true
+disallow_incomplete_defs = true
+check_untyped_defs = true
+disallow_untyped_decorators = true
no_implicit_optional = true
-warn_redundant_casts = true
+warn_redundant_casts = true
warn_unused_ignores = true
-warn_return_any = true
+warn_return_any = true
implicit_reexport = false
strict_equality = true
# --strict end
diff --git a/scripts/lint.sh b/scripts/lint.sh
index 02568cda6b..4191d90f1f 100755
--- a/scripts/lint.sh
+++ b/scripts/lint.sh
@@ -7,5 +7,3 @@ mypy sqlmodel
flake8 sqlmodel tests docs_src
black sqlmodel tests docs_src --check
isort sqlmodel tests docs_src scripts --check-only
-# TODO: move this to test.sh after deprecating Python 3.6
-CHECK_JINJA=1 python scripts/generate_select.py
diff --git a/scripts/test.sh b/scripts/test.sh
index 9b758bdbdf..4fae64f046 100755
--- a/scripts/test.sh
+++ b/scripts/test.sh
@@ -3,6 +3,8 @@
set -e
set -x
+CHECK_JINJA=1 python scripts/generate_select.py
+
coverage run -m pytest tests
coverage combine
coverage report --show-missing
diff --git a/sqlmodel/main.py b/sqlmodel/main.py
index d95c498507..5b5950a811 100644
--- a/sqlmodel/main.py
+++ b/sqlmodel/main.py
@@ -11,6 +11,7 @@
Callable,
ClassVar,
Dict,
+ ForwardRef,
List,
Mapping,
Optional,
@@ -29,7 +30,7 @@
from pydantic.fields import FieldInfo as PydanticFieldInfo
from pydantic.fields import ModelField, Undefined, UndefinedType
from pydantic.main import ModelMetaclass, validate_model
-from pydantic.typing import ForwardRef, NoArgAnyCallable, resolve_annotations
+from pydantic.typing import NoArgAnyCallable, resolve_annotations
from pydantic.utils import ROOT_KEY, Representation
from sqlalchemy import Boolean, Column, Date, DateTime
from sqlalchemy import Enum as sa_Enum
diff --git a/sqlmodel/sql/expression.py b/sqlmodel/sql/expression.py
index 31c0bc1a1e..264e39cba7 100644
--- a/sqlmodel/sql/expression.py
+++ b/sqlmodel/sql/expression.py
@@ -1,6 +1,5 @@
# WARNING: do not modify this code, it is generated by expression.py.jinja2
-import sys
from datetime import datetime
from typing import (
TYPE_CHECKING,
@@ -12,7 +11,6 @@
Type,
TypeVar,
Union,
- cast,
overload,
)
from uuid import UUID
@@ -24,36 +22,17 @@
_TSelect = TypeVar("_TSelect")
-# Workaround Generics incompatibility in Python 3.6
-# Ref: https://github.com/python/typing/issues/449#issuecomment-316061322
-if sys.version_info.minor >= 7:
- class Select(_Select, Generic[_TSelect]):
- inherit_cache = True
+class Select(_Select, Generic[_TSelect]):
+ inherit_cache = True
- # This is not comparable to sqlalchemy.sql.selectable.ScalarSelect, that has a different
- # purpose. This is the same as a normal SQLAlchemy Select class where there's only one
- # entity, so the result will be converted to a scalar by default. This way writing
- # for loops on the results will feel natural.
- class SelectOfScalar(_Select, Generic[_TSelect]):
- inherit_cache = True
-else:
- from typing import GenericMeta # type: ignore
-
- class GenericSelectMeta(GenericMeta, _Select.__class__): # type: ignore
- pass
-
- class _Py36Select(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
- inherit_cache = True
-
- class _Py36SelectOfScalar(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
- inherit_cache = True
-
- # Cast them for editors to work correctly, from several tricks tried, this works
- # for both VS Code and PyCharm
- Select = cast("Select", _Py36Select) # type: ignore
- SelectOfScalar = cast("SelectOfScalar", _Py36SelectOfScalar) # type: ignore
+# This is not comparable to sqlalchemy.sql.selectable.ScalarSelect, that has a different
+# purpose. This is the same as a normal SQLAlchemy Select class where there's only one
+# entity, so the result will be converted to a scalar by default. This way writing
+# for loops on the results will feel natural.
+class SelectOfScalar(_Select, Generic[_TSelect]):
+ inherit_cache = True
if TYPE_CHECKING: # pragma: no cover
diff --git a/sqlmodel/sql/expression.py.jinja2 b/sqlmodel/sql/expression.py.jinja2
index 51f04a215d..80c2c5016e 100644
--- a/sqlmodel/sql/expression.py.jinja2
+++ b/sqlmodel/sql/expression.py.jinja2
@@ -1,4 +1,3 @@
-import sys
from datetime import datetime
from typing import (
TYPE_CHECKING,
@@ -10,7 +9,6 @@ from typing import (
Type,
TypeVar,
Union,
- cast,
overload,
)
from uuid import UUID
@@ -22,36 +20,17 @@ from sqlalchemy.sql.expression import Select as _Select
_TSelect = TypeVar("_TSelect")
-# Workaround Generics incompatibility in Python 3.6
-# Ref: https://github.com/python/typing/issues/449#issuecomment-316061322
-if sys.version_info.minor >= 7:
- class Select(_Select, Generic[_TSelect]):
- inherit_cache = True
+class Select(_Select, Generic[_TSelect]):
+ inherit_cache = True
- # This is not comparable to sqlalchemy.sql.selectable.ScalarSelect, that has a different
- # purpose. This is the same as a normal SQLAlchemy Select class where there's only one
- # entity, so the result will be converted to a scalar by default. This way writing
- # for loops on the results will feel natural.
- class SelectOfScalar(_Select, Generic[_TSelect]):
- inherit_cache = True
-else:
- from typing import GenericMeta # type: ignore
-
- class GenericSelectMeta(GenericMeta, _Select.__class__): # type: ignore
- pass
-
- class _Py36Select(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
- inherit_cache = True
-
- class _Py36SelectOfScalar(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
- inherit_cache = True
-
- # Cast them for editors to work correctly, from several tricks tried, this works
- # for both VS Code and PyCharm
- Select = cast("Select", _Py36Select) # type: ignore
- SelectOfScalar = cast("SelectOfScalar", _Py36SelectOfScalar) # type: ignore
+# This is not comparable to sqlalchemy.sql.selectable.ScalarSelect, that has a different
+# purpose. This is the same as a normal SQLAlchemy Select class where there's only one
+# entity, so the result will be converted to a scalar by default. This way writing
+# for loops on the results will feel natural.
+class SelectOfScalar(_Select, Generic[_TSelect]):
+ inherit_cache = True
if TYPE_CHECKING: # pragma: no cover
diff --git a/sqlmodel/sql/sqltypes.py b/sqlmodel/sql/sqltypes.py
index 09b8239476..17d9b06126 100644
--- a/sqlmodel/sql/sqltypes.py
+++ b/sqlmodel/sql/sqltypes.py
@@ -8,7 +8,6 @@
class AutoString(types.TypeDecorator): # type: ignore
-
impl = types.String
cache_ok = True
mysql_default_length = 255
diff --git a/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py
index e560d04c0e..a89ac09479 100644
--- a/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py
@@ -241,7 +241,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -261,7 +261,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
@@ -288,6 +287,11 @@ def test_tutorial(clear_sqlmodel):
response = client.get("/openapi.json")
data = response.json()
assert response.status_code == 200, response.text
+ print("-" * 50)
+ print(data)
+ print("=" * 50)
+ print(openapi_schema)
+ print("*" * 50)
assert data == openapi_schema
response = client.get("/heroes/")
assert response.status_code == 200, response.text
diff --git a/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py
index b58afdf683..08f0d1fa42 100644
--- a/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py
@@ -164,7 +164,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -184,7 +184,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py
index cf008563f4..8c44f48ddb 100644
--- a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py
@@ -103,7 +103,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -123,7 +123,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py
index 57393a7ddc..710c5682b6 100644
--- a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py
+++ b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py
@@ -103,7 +103,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -123,7 +123,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py
index 5b3c771bb9..aaef3db30a 100644
--- a/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py
@@ -135,7 +135,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -155,7 +155,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py
index 125e00179c..e631660e13 100644
--- a/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py
@@ -488,7 +488,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
diff --git a/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py
index 54fbbdccad..6df4edfa93 100644
--- a/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py
@@ -91,7 +91,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -111,7 +111,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
response = client.post("/heroes/", json=hero_data)
data = response.json()
diff --git a/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py
index d8dbe3f7fb..628a14f220 100644
--- a/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py
@@ -241,7 +241,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -261,7 +261,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py
index 2f87fafeff..99fe6a1d70 100644
--- a/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py
@@ -79,7 +79,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -99,7 +99,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py
index 6ac1cffc5e..0520cd8805 100644
--- a/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py
@@ -454,7 +454,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -474,7 +474,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
diff --git a/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py
index e622fd37fb..54e95aa5de 100644
--- a/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py
+++ b/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py
@@ -213,7 +213,7 @@
"loc": {
"title": "Location",
"type": "array",
- "items": {"type": "string"},
+ "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"},
@@ -233,7 +233,6 @@ def test_tutorial(clear_sqlmodel):
)
with TestClient(mod.app) as client:
-
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",