Skip to content

Commit

Permalink
Merge branch 'release/0.30.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
ri-gilfanov committed Jul 21, 2021
2 parents fd36071 + 0a85f67 commit 8284510
Show file tree
Hide file tree
Showing 9 changed files with 94 additions and 72 deletions.
43 changes: 21 additions & 22 deletions aiohttp_sqlalchemy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
"""AIOHTTP-SQLAlchemy. SQLAlchemy 1.4 / 2.0 support for aiohttp."""
from typing import cast
import warnings
from typing import Any, cast

from aiohttp.web import Application
from aiohttp_things import web_handlers
from sqlalchemy.engine import Engine
from sqlalchemy.ext.asyncio import (
AsyncEngine,
Expand All @@ -12,6 +14,7 @@

from aiohttp_sqlalchemy.constants import DEFAULT_KEY, SA_DEFAULT_KEY
from aiohttp_sqlalchemy.decorators import sa_decorator
from aiohttp_sqlalchemy.deprecation import _handle_deprecation
from aiohttp_sqlalchemy.exceptions import (
DuplicateAppKeyError,
DuplicateRequestKeyError,
Expand All @@ -38,24 +41,15 @@
OffsetPagination,
PrimaryKeyMixin,
SABaseView,
SAItemAddMixin,
SAItemDeleteMixin,
SAItemEditMixin,
SAItemViewMixin,
SAListAddMixin,
SAListDeleteMixin,
SAListEditMixin,
SAListViewMixin,
SAMixin,
SAModelDeleteMixin,
SAModelEditMixin,
SAModelMixin,
SAModelView,
SAModelViewMixin,
SAPrimaryKeyMixin,
)

__version__ = '0.29.0'
__version__ = '0.30.1'

__all__ = [
'DEFAULT_KEY',
Expand Down Expand Up @@ -83,19 +77,8 @@
'SAModelEditMixin',
'SAModelViewMixin',

'SAItemAddMixin',
'SAItemDeleteMixin',
'SAItemEditMixin',
'SAItemViewMixin',

'SAListAddMixin',
'SAListDeleteMixin',
'SAListEditMixin',
'SAListViewMixin',

'SAMixin',
'SAModelView',
'SAPrimaryKeyMixin',
'bind',
'get_session',
'get_session_factory',
Expand Down Expand Up @@ -168,3 +151,19 @@ def setup(app: Application, binds: "TBinds") -> None:

# Synonyms
sa_bind = bind


def __getattr__(name: str) -> Any:
if name == 'views':
warnings.warn(
'`views` module is deprecated. '
'Use `web_handlers` module.',
DeprecationWarning,
stacklevel=2,
)
return web_handlers

name = _handle_deprecation(name)
if name:
return globals().get(name)
raise AttributeError(f"module {__name__} has no attribute {name}")
26 changes: 26 additions & 0 deletions aiohttp_sqlalchemy/deprecation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from typing import Any
import warnings

DEPRECATION_MAP = {
'SAItemAddMixin': 'ItemAddMixin',
'SAItemDeleteMixin': 'ItemDeleteMixin',
'SAItemEditMixin': 'ItemEditMixin',
'SAItemViewMixin': 'ItemViewMixin',
'SAListAddMixin': 'ListAddMixin',
'SAListDeleteMixin': 'ListDeleteMixin',
'SAListEditMixin': 'ListEditMixin',
'SAListViewMixin': 'ListViewMixin',
'SAPrimaryKeyMixin': 'PrimaryKeyMixin',
}


def _handle_deprecation(name: str) -> Any:
if name in DEPRECATION_MAP.keys():
warnings.warn(
f'`{name}` is deprecated. '
f'Use `{DEPRECATION_MAP[name]}`.',
DeprecationWarning,
stacklevel=3,
)
return DEPRECATION_MAP.get(name)
return None
2 changes: 1 addition & 1 deletion aiohttp_sqlalchemy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def get_session_factory(
"""
if isinstance(source, Request):
return cast(TOptSessionFactory, source.config_dict.get(key))
elif isinstance(source, Application):
if isinstance(source, Application):
return cast(TOptSessionFactory, source.get(key))
raise TypeError(
'Arg `source` must be `Application` or `Request` from `aiohttp.web`.'
Expand Down
37 changes: 0 additions & 37 deletions aiohttp_sqlalchemy/views.py

This file was deleted.

15 changes: 6 additions & 9 deletions aiohttp_sqlalchemy/web_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from sqlalchemy_things.pagination import OffsetPaginator

from aiohttp_sqlalchemy.constants import SA_DEFAULT_KEY
from aiohttp_sqlalchemy.deprecation import _handle_deprecation
from aiohttp_sqlalchemy.utils import get_session


Expand Down Expand Up @@ -117,12 +118,8 @@ class SAModelView(View, SAModelMixin):
pass


SAItemAddMixin = ItemAddMixin
SAItemDeleteMixin = ItemDeleteMixin
SAItemEditMixin = ItemEditMixin
SAItemViewMixin = ItemViewMixin
SAListAddMixin = ListAddMixin
SAListDeleteMixin = ListDeleteMixin
SAListEditMixin = ListEditMixin
SAListViewMixin = ListViewMixin
SAPrimaryKeyMixin = PrimaryKeyMixin
def __getattr__(name: str) -> Any:
name = _handle_deprecation(name)
if name:
return globals().get(name)
raise AttributeError(f"module {__name__} has no attribute {name}")
16 changes: 16 additions & 0 deletions docs/releases.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
========
Releases
========
Unreleased
------------
**Deprecated**

* ``views`` module is deprecated. Use import from ``aiohttp_sqlalchemy``
or ``aiohttp_sqlalchemy.web_handlers``;
* ``SAItemAddMixin`` synonym is deprecated. Use ``ItemAddMixin`` class;
* ``SAItemDeleteMixin`` is deprecated. Use ``ItemDeleteMixin`` class;
* ``SAItemEditMixin`` synonym is deprecated. Use ``ItemEditMixin`` class;
* ``SAItemViewMixin`` synonym is deprecated. Use ``ItemViewMixin`` class;
* ``SAListAddMixin`` synonym is deprecated. Use ``ListAddMixin`` class;
* ``SAListDeleteMixin`` synonym is deprecated. Use ``ListDeleteMixin`` class;
* ``SAListEditMixin`` synonym is deprecated. Use ``ListEditMixin`` class;
* ``SAListViewMixin`` synonym is deprecated. Use ``ListViewMixin`` class;
* ``SAPrimaryKeyMixin`` synonym is deprecated. Use ``PrimaryKeyMixin`` class.

Version 0.29
------------
**Added**
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "aiohttp-sqlalchemy"
version = "0.29.0"
version = "0.30.1"
description = "SQLAlchemy 1.4 / 2.0 support for aiohttp."
authors = [
"Ruslan Ilyasovich Gilfanov <ri.gilfanov@yandex.ru>",
Expand Down
6 changes: 4 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,15 @@ def mocked_request(middlewared_app: Application) -> 'Request':
@pytest.fixture
def function_handler() -> THandler:
async def handler(request: Request) -> Response:
return web.json_response({})
assert isinstance(request, Request)
return web.json_response()
return handler


class ClassHandler:
async def get(self, request: Request) -> Response:
return web.json_response({})
assert isinstance(request, Request)
return web.json_response()


class ClassBasedView(web.View):
Expand Down
19 changes: 19 additions & 0 deletions tests/test_deprecation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import pytest


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

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

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

with pytest.raises(ImportError):
from aiohttp_sqlalchemy import NotExist
assert bool(NotExist)

0 comments on commit 8284510

Please sign in to comment.