Skip to content

Commit

Permalink
Merge branch 'release/0.21.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
ri-gilfanov committed Jul 6, 2021
2 parents ad5b2a2 + 405ffd8 commit 3864f26
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 35 deletions.
10 changes: 9 additions & 1 deletion aiohttp_sqlalchemy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,27 @@
from aiohttp_sqlalchemy.views import (
SAAbstractView,
SABaseView,
SAInstanceMixin,
SAInstanceView,
SAItemMixin,
SAItemView,
SAMixin,
SAModelMixin,
SAModelView,
SAView,
)

__version__ = '0.19.0'
__version__ = '0.21.0'

__all__ = [
'SA_DEFAULT_KEY',
'DuplicateAppKeyError',
'DuplicateRequestKeyError',
'SABaseView',
'SAInstanceMixin',
'SAInstanceView',
'SAItemMixin',
'SAItemView',
'SAMixin',
'SAModelMixin',
'SAModelView',
Expand Down
Empty file added aiohttp_sqlalchemy/py.typed
Empty file.
30 changes: 25 additions & 5 deletions aiohttp_sqlalchemy/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from abc import ABCMeta
from typing import Any, Optional

from aiohttp.abc import AbstractView
from aiohttp.web import View
from aiohttp_things.views import ContextMixin, InstanceMixin, PrimaryKeyMixin
from sqlalchemy.ext.asyncio import AsyncSession

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


class SAMixin(AbstractView, metaclass=ABCMeta):
"""SQLAlchemy view mixin based `aiohttp.abc.AbstractView`."""
class SAMixin(ContextMixin, metaclass=ABCMeta):
"""SQLAlchemy class based view mixin."""

sa_session_key: str = SA_DEFAULT_KEY

Expand All @@ -23,9 +23,23 @@ def sa_session(self, key: Optional[str] = None) -> AsyncSession:


class SAModelMixin(SAMixin, metaclass=ABCMeta):
"""SQLAlchemy single model view mixin based `aiohttp.abc.AbstractView`."""
"""SQLAlchemy single model class based view mixin."""

sa_model: Any # Not all developers use declarative mapping
sa_model: Any = None # Not all developers use declarative mapping


class SAInstanceMixin(
InstanceMixin,
PrimaryKeyMixin,
SAModelMixin,
metaclass=ABCMeta,
):
"""
SQLAlchemy single instance class based view mixin.
:param sa_pk_attr: primary key column or hybrid attribute.
"""
sa_pk_attr: Any = getattr(SAModelMixin.sa_model, 'pk', None)


class SABaseView(View, SAMixin):
Expand All @@ -36,7 +50,13 @@ class SAModelView(View, SAModelMixin):
"""SQLAlchemy single model class based view."""


class SAInstanceView(View, SAInstanceMixin, metaclass=ABCMeta):
"""SQLAlchemy single instance class based view."""


# Synonyms
SAAbstractView = SAMixin
SAItemMixin = SAInstanceMixin
SAItemView = SAInstanceView
SAOneModelMixin = SAModelMixin
SAView = SAModelView
5 changes: 0 additions & 5 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,8 @@
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.

import os
import sys

from aiohttp_sqlalchemy import __version__

sys.path.insert(0, os.path.abspath('.'))

# -- Project information -----------------------------------------------------

project = 'aiohttp-sqlalchemy'
Expand Down
16 changes: 15 additions & 1 deletion docs/reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,37 @@ Main user functionality

.. autofunction:: aiohttp_sqlalchemy.bind

.. autofunction:: aiohttp_sqlalchemy.sa_init_db
.. autofunction:: aiohttp_sqlalchemy.init_db

.. autofunction:: aiohttp_sqlalchemy.get_session

Class based views
-----------------
.. autoclass:: aiohttp_sqlalchemy.SAMixin
:inherited-members:
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAModelMixin
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAInstanceMixin
:inherited-members:
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SABaseView
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAModelView
:members:
:show-inheritance:

.. autoclass:: aiohttp_sqlalchemy.SAInstanceView
:members:
:show-inheritance:

Additional functionality
------------------------
Expand Down
23 changes: 21 additions & 2 deletions docs/releases.rst
Original file line number Diff line number Diff line change
@@ -1,16 +1,35 @@
========
Releases
========
Version 0.21
------------
**Changed**

* Rename ``SAItemMixin`` to ``SAInstanceMixin``;
* Rename ``SAItemView`` to ``SAInstanceView``.

**Added**

* Synonym ``SAItemMixin`` for ``SAInstanceMixin``;
* Synonym ``SAItemView`` for ``SAInstanceView``.

Version 0.20
------------
**Added**

* Added ``SAItemMixin``;
* Added ``SAItemView``.

Version 0.19
------------
**Added**

* Synonym ``sa_session`` for ``get_session``.
* Synonym ``sa_session`` for ``get_session``;
* Synonym ``sa_session_factory`` for ``get_session_factory``.

**Changed**

* Rename ``sa_session`` to ``get_session``.
* Rename ``sa_session`` to ``get_session``;
* Rename ``sa_session_factory`` to ``get_session_factory``.

Version 0.18.1
Expand Down
49 changes: 31 additions & 18 deletions poetry.lock

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

8 changes: 5 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "aiohttp-sqlalchemy"
version = "0.19.0"
version = "0.21.0"
description = "SQLAlchemy 1.4 / 2.0 support for aiohttp."
authors = [
"Ruslan Ilyasovich Gilfanov <ri.gilfanov@yandex.ru>",
Expand All @@ -18,6 +18,7 @@ classifiers = [
"Topic :: Database :: Front-Ends",
"Topic :: Internet",
"Topic :: Internet :: WWW/HTTP",
"Typing :: Typed",
]
keywords = ["aiohttp", "sqlalchemy", "asyncio"]
license = "MIT License"
Expand All @@ -29,6 +30,7 @@ repository = "https://github.com/ri-gilfanov/aiohttp-sqlalchemy"
[tool.poetry.dependencies]
python = "^3.7"
aiohttp = "^3.7.4.post0"
aiohttp-things = ">=0.6.1"
SQLAlchemy = "^1.4.20"
aiomysql = { version = ">=0.0.21", optional = true }
aiosqlite = { version = ">=0.17.0", optional = true }
Expand All @@ -46,7 +48,7 @@ isort = ">=5.9.1"
mypy = ">=0.910"
pytest = ">=6.2.4"
pytest-cov = ">=2.12.1"
Sphinx = ">=4.0.2"
Sphinx = ">=4.0.3"
sphinx_rtd_theme = ">=0.5.2"
types-toml = ">=0.1.3"

Expand All @@ -56,7 +58,7 @@ build-backend = "poetry.core.masonry.api"

[tool.isort]
known_first_party = ["aiohttp_sqlalchemy"]
known_third_party = ["aiohttp", "sqlalchemy"]
known_third_party = ["aiohttp", "aiohttp-things", "sqlalchemy"]
profile = "wemake"
src_paths = ["aiohttp_sqlalchemy", "examples", "tests"]

Expand Down

0 comments on commit 3864f26

Please sign in to comment.