From aedebe0403a1b5d570461267dbff5a1a1301107f Mon Sep 17 00:00:00 2001 From: collerek Date: Mon, 30 Aug 2021 09:47:38 +0200 Subject: [PATCH] add support for sqlalchemy >=1.4 --- docs/releases.md | 2 +- ormar/models/model_row.py | 22 +++++++++++++--------- requirements.txt | 8 ++++---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 0735513..c488d01 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -3,7 +3,7 @@ ## ✨ Features * Allow overwriting the default pydantic type for model fields [#312](https://github.com/collerek/ormar/issues/285) - +* Add support for `sqlalchemy` >=1.4 (requires `databases` >= 0.5.0) [#142](https://github.com/collerek/ormar/issues/142) # 0.10.16 diff --git a/ormar/models/model_row.py b/ormar/models/model_row.py index 3c2dd1c..a9f0680 100644 --- a/ormar/models/model_row.py +++ b/ormar/models/model_row.py @@ -10,7 +10,11 @@ from typing import ( cast, ) -import sqlalchemy +try: + from sqlalchemy.engine.result import ResultProxy +except ImportError: # pragma: no cover + from sqlalchemy.engine.result import Row as ResultProxy # type: ignore + from ormar.models import NewBaseModel # noqa: I202 from ormar.models.excludable import ExcludableItems @@ -25,7 +29,7 @@ class ModelRow(NewBaseModel): @classmethod def from_row( # noqa: CFQ002 cls, - row: sqlalchemy.engine.ResultProxy, + row: ResultProxy, source_model: Type["Model"], select_related: List = None, related_models: Any = None, @@ -59,7 +63,7 @@ class ModelRow(NewBaseModel): :param source_model: model on which relation was defined :type source_model: Type[Model] :param row: raw result row from the database - :type row: sqlalchemy.engine.result.ResultProxy + :type row: ResultProxy :param select_related: list of names of related models fetched from database :type select_related: List :param related_models: list or dict of related models @@ -153,7 +157,7 @@ class ModelRow(NewBaseModel): def _populate_nested_models_from_row( # noqa: CFQ002 cls, item: dict, - row: sqlalchemy.engine.ResultProxy, + row: ResultProxy, source_model: Type["Model"], related_models: Any, excludable: ExcludableItems, @@ -183,7 +187,7 @@ class ModelRow(NewBaseModel): :param item: dictionary of already populated nested models, otherwise empty dict :type item: Dict :param row: raw result row from the database - :type row: sqlalchemy.engine.result.ResultProxy + :type row: ResultProxy :param related_models: list or dict of related models :type related_models: Union[Dict, List] :return: dictionary with keys corresponding to model fields names @@ -263,7 +267,7 @@ class ModelRow(NewBaseModel): @classmethod def _populate_through_instance( # noqa: CFQ002 cls, - row: sqlalchemy.engine.ResultProxy, + row: ResultProxy, item: Dict, related: str, excludable: ExcludableItems, @@ -275,7 +279,7 @@ class ModelRow(NewBaseModel): Normally it's child class, unless the query is from queryset. :param row: row from db result - :type row: sqlalchemy.engine.ResultProxy + :type row: ResultProxy :param item: parent item dict :type item: Dict :param related: current relation name @@ -301,7 +305,7 @@ class ModelRow(NewBaseModel): @classmethod def _create_through_instance( cls, - row: sqlalchemy.engine.ResultProxy, + row: ResultProxy, through_name: str, related: str, excludable: ExcludableItems, @@ -343,7 +347,7 @@ class ModelRow(NewBaseModel): def extract_prefixed_table_columns( cls, item: dict, - row: sqlalchemy.engine.result.ResultProxy, + row: ResultProxy, table_prefix: str, excludable: ExcludableItems, ) -> Dict: diff --git a/requirements.txt b/requirements.txt index abdd726..696c4aa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -databases[sqlite]>=0.3.2,<=0.4.1 -databases[postgresql]>=0.3.2,<=0.4.1 -databases[mysql]>=0.3.2,<=0.4.1 +databases[sqlite]>=0.3.2,<0.5.1 +databases[postgresql]>=0.3.2,<0.5.1 +databases[mysql]>=0.3.2,<0.5.1 pydantic >=1.6.1,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<=1.8.2 -sqlalchemy>=1.3.18,<=1.3.23 +sqlalchemy>=1.3.18,<=1.4.23 typing_extensions>=3.7,<=3.7.4.3 orjson cryptography