Skip to content

Commit

Permalink
Merge branch 'release/0.31.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
ri-gilfanov committed Jul 21, 2021
2 parents b139996 + 1dc332e commit e69c5f3
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 41 deletions.
12 changes: 3 additions & 9 deletions aiohttp_sqlalchemy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,15 @@
ListDeleteMixin,
ListEditMixin,
ListViewMixin,
OffsetPagination,
OffsetPaginationMixin,
PrimaryKeyMixin,
SABaseView,
SAMixin,
SAModelDeleteMixin,
SAModelEditMixin,
SAModelMixin,
SAModelView,
SAModelViewMixin,
)

__version__ = '0.30.2'
__version__ = '0.31.0'

__all__ = [
'DEFAULT_KEY',
Expand All @@ -66,16 +63,13 @@
'ListEditMixin',
'ListViewMixin',

'OffsetPagination',
'OffsetPaginationMixin',
'PrimaryKeyMixin',

'SABaseView',
'SA_DEFAULT_KEY',

'SAModelMixin',
'SAModelDeleteMixin',
'SAModelEditMixin',
'SAModelViewMixin',

'SAMixin',
'SAModelView',
Expand Down
6 changes: 5 additions & 1 deletion aiohttp_sqlalchemy/deprecation.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from typing import Any
import warnings
from typing import Any

DEPRECATION_MAP = {
'OffsetPagination': 'OffsetPaginationMixin',
'SAItemAddMixin': 'ItemAddMixin',
'SAItemDeleteMixin': 'ItemDeleteMixin',
'SAItemEditMixin': 'ItemEditMixin',
Expand All @@ -10,6 +11,9 @@
'SAListDeleteMixin': 'ListDeleteMixin',
'SAListEditMixin': 'ListEditMixin',
'SAListViewMixin': 'ListViewMixin',
'SAModelDeleteMixin': 'DeleteStatementMixin',
'SAModelEditMixin': 'UpdateStatementMixin',
'SAModelViewMixin': 'SelectStatementMixin',
'SAPrimaryKeyMixin': 'PrimaryKeyMixin',
}

Expand Down
39 changes: 27 additions & 12 deletions aiohttp_sqlalchemy/web_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from sqlalchemy import delete, select, update
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.sql import Delete, Select, Update
from sqlalchemy_things.pagination import OffsetPaginator
from sqlalchemy_things.pagination import OffsetPage, OffsetPaginator

from aiohttp_sqlalchemy.constants import SA_DEFAULT_KEY
from aiohttp_sqlalchemy.deprecation import _handle_deprecation
Expand All @@ -24,23 +24,38 @@ class SAModelMixin(SAMixin, metaclass=ABCMeta):
sa_model: Any = None # Not all developers use declarative mapping


class SAModelDeleteMixin(SAModelMixin):
class DeleteStatementMixin(SAModelMixin):
def get_delete_stmt(self, model: Any = None) -> Delete:
return delete(model or self.sa_model)


class SAModelEditMixin(SAModelMixin):
class UpdateStatementMixin(SAModelMixin):
def get_update_stmt(self, model: Any = None) -> Update:
return update(model or self.sa_model)


class SAModelViewMixin(SAModelMixin):
class SelectStatementMixin(SAModelMixin):
def get_select_stmt(self, model: Any = None) -> Select:
return select(model or self.sa_model)


class OffsetPagination(ahth.PaginationMixin):
paginator = OffsetPaginator()
class OffsetPaginationMixin(ahth.PaginationMixin, SelectStatementMixin):
page_key: int = 1
page_key_adapter = int
paginator: OffsetPaginator = OffsetPaginator()

async def execute_select_stmt(
self,
model: Any = None,
key: Optional[str] = None,
) -> Optional[OffsetPage]:
async with self.get_sa_session().begin():
page = await self.paginator.get_page_async(
self.get_sa_session(key or self.sa_session_key),
self.get_select_stmt(model or self.sa_model),
self.page_key,
)
return page


class PrimaryKeyMixin(ahth.PrimaryKeyMixin, SAModelMixin, metaclass=ABCMeta):
Expand All @@ -53,7 +68,7 @@ def sa_add(self, *, key: Optional[str] = None) -> None:


class ItemDeleteMixin(
SAModelDeleteMixin,
DeleteStatementMixin,
PrimaryKeyMixin,
metaclass=ABCMeta,
):
Expand All @@ -65,7 +80,7 @@ def get_delete_stmt(self, model: Any = None) -> Delete:

class ItemEditMixin(
ahth.ItemMixin,
SAModelEditMixin,
UpdateStatementMixin,
PrimaryKeyMixin,
metaclass=ABCMeta,
):
Expand All @@ -77,7 +92,7 @@ def get_update_stmt(self, model: Any = None) -> Update:

class ItemViewMixin(
ahth.ItemMixin,
SAModelViewMixin,
SelectStatementMixin,
PrimaryKeyMixin,
metaclass=ABCMeta,
):
Expand All @@ -94,17 +109,17 @@ def sa_add_all(self, *, key: Optional[str] = None) -> None:
self.get_sa_session(key).add_all(self.items)


class ListDeleteMixin(ahth.ListMixin, SAModelDeleteMixin, metaclass=ABCMeta):
class ListDeleteMixin(ahth.ListMixin, DeleteStatementMixin, metaclass=ABCMeta):
pass


class ListEditMixin(ahth.ListMixin, SAModelEditMixin, metaclass=ABCMeta):
class ListEditMixin(ahth.ListMixin, UpdateStatementMixin, metaclass=ABCMeta):
pass


class ListViewMixin(
ahth.ListMixin,
SAModelViewMixin,
SelectStatementMixin,
metaclass=ABCMeta,
):
pass
Expand Down
8 changes: 4 additions & 4 deletions docs/reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Class based views
-----------------
.. warning::

API of most classes of stabilizes to version 1.0.
API of most classes will be stabilized for 1.0 release.

.. autoclass:: aiohttp_sqlalchemy.SAMixin
:inherited-members:
Expand All @@ -26,17 +26,17 @@ Class based views
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAModelDeleteMixin
.. autoclass:: aiohttp_sqlalchemy.DeleteStatementMixin
:inherited-members:
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAModelEditMixin
.. autoclass:: aiohttp_sqlalchemy.UpdateStatementMixin
:inherited-members:
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAModelViewMixin
.. autoclass:: aiohttp_sqlalchemy.SelectStatementMixin
:inherited-members:
:members:
:show-inheritance:
Expand Down
15 changes: 15 additions & 0 deletions docs/releases.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
========
Releases
========
Version 0.31
------------
**Added**

* Added default ``page_key`` and ``page_key_adapter`` attributes
for ``OffsetPaginationMixin``;
* Added ``execute_select_stmt`` method for ``OffsetPaginationMixin``.

**Deprecated**

* ``OffsetPagination`` is deprecated. Use ``OffsetPaginationMixin``;
* ``SAModelDeleteMixin`` is deprecated. Use ``DeleteStatementMixin``;
* ``SAModelEditMixin`` is deprecated. Use ``UpdateStatementMixin``;
* ``SAModelViewMixin`` is deprecated. Use ``SelectStatementMixin``.

Version 0.30
------------
**Deprecated**
Expand Down
14 changes: 7 additions & 7 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "aiohttp-sqlalchemy"
version = "0.30.2"
version = "0.31.0"
description = "SQLAlchemy 1.4 / 2.0 support for aiohttp."
authors = [
"Ruslan Ilyasovich Gilfanov <ri.gilfanov@yandex.ru>",
Expand Down Expand Up @@ -36,7 +36,7 @@ python = "^3.7"
aiohttp = "^3.7.4.post0"
aiohttp-things = ">=0.13.0"
SQLAlchemy = "^1.4.21"
sqlalchemy-things = ">=0.9.0"
sqlalchemy-things = ">=0.10.0"
aiomysql = { version = ">=0.0.21", optional = true }
aiosqlite = { version = ">=0.17.0", optional = true }
asyncpg = { version = ">=0.23.0", optional = true }
Expand Down
9 changes: 3 additions & 6 deletions tests/test_deprecation.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@


def test_deprecation() -> None:
from aiohttp_sqlalchemy import views
from aiohttp_sqlalchemy import web_handlers
from aiohttp_sqlalchemy import views, web_handlers
assert views is web_handlers

from aiohttp_sqlalchemy import SAItemAddMixin
from aiohttp_sqlalchemy import ItemAddMixin
from aiohttp_sqlalchemy import ItemAddMixin, SAItemAddMixin
assert SAItemAddMixin is ItemAddMixin

from aiohttp_sqlalchemy.web_handlers import SAListAddMixin
from aiohttp_sqlalchemy.web_handlers import ListAddMixin
from aiohttp_sqlalchemy.web_handlers import ListAddMixin, SAListAddMixin
assert SAListAddMixin is ListAddMixin

with pytest.raises(ImportError):
Expand Down
27 changes: 27 additions & 0 deletions tests/test_web_handlers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import pytest
import sqlalchemy as sa
from aiohttp import web
from aiohttp.hdrs import METH_GET
from aiohttp.test_utils import make_mocked_request
from aiohttp.web import Request
from sqlalchemy import orm
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy_things.pagination import OffsetPage

from aiohttp_sqlalchemy import (
SA_DEFAULT_KEY,
Expand All @@ -12,7 +15,9 @@
ItemEditMixin,
ItemViewMixin,
ListAddMixin,
OffsetPaginationMixin,
SABaseView,
init_db,
)


Expand Down Expand Up @@ -85,6 +90,28 @@ class InstanceView(web.View, ItemViewMixin):
view.get_select_stmt()


async def test_offset_pagination(
middlewared_app: web.Application,
session: AsyncSession,
base_model: orm.Mapper,
) -> None:
class Model(base_model): # type: ignore
__tablename__ = 'model'

pk = sa.Column(sa.Integer, primary_key=True)

class OffsetPaginationHandler(web.View, OffsetPaginationMixin):
sa_model = Model

await init_db(middlewared_app, Model.metadata)

request = make_mocked_request(METH_GET, '/?page_key=2')
request[SA_DEFAULT_KEY] = session
handler = OffsetPaginationHandler(request)
page = await handler.execute_select_stmt()
isinstance(page, OffsetPage)


def test_list_add(
mocked_request: Request,
session: AsyncSession,
Expand Down

0 comments on commit e69c5f3

Please sign in to comment.