♻️ Update expresion.py, sync from Jinja2 template, implement inherit_cache to solve errors like: SAWarning: Class SelectOfScalar will not make use of SQL compilation caching (#422)

This commit is contained in:
Sebastián Ramírez 2022-08-29 11:44:08 +02:00 committed by GitHub
parent f232166db5
commit b51ebaf658
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,4 @@
import os
from itertools import product
from pathlib import Path
from typing import List, Tuple
@ -52,4 +53,11 @@ result = (
result = black.format_str(result, mode=black.Mode())
current_content = destiny_path.read_text()
if current_content != result and os.getenv("CHECK_JINJA"):
raise RuntimeError(
"sqlmodel/sql/expression.py content not update with Jinja2 template"
)
destiny_path.write_text(result)

View File

@ -7,3 +7,5 @@ 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

View File

@ -29,14 +29,14 @@ _TSelect = TypeVar("_TSelect")
if sys.version_info.minor >= 7:
class Select(_Select, Generic[_TSelect]):
pass
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]):
pass
inherit_cache = True
else:
from typing import GenericMeta # type: ignore
@ -45,10 +45,10 @@ else:
pass
class _Py36Select(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
pass
inherit_cache = True
class _Py36SelectOfScalar(_Select, Generic[_TSelect], metaclass=GenericSelectMeta):
pass
inherit_cache = True
# Cast them for editors to work correctly, from several tricks tried, this works
# for both VS Code and PyCharm