Async SQLModel Adapter for PyCasbin
====
## Repo
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/shepilov-vladislav/async-casbin-sqlmodel-adapter/pytest.yml?branch=main&logo=github&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)
[![Codecov](https://img.shields.io/codecov/c/github/shepilov-vladislav/async-casbin-sqlmodel-adapter?branch=main&logo=github&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)
[![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/shepilov-vladislav/async-casbin-sqlmodel-adapter?branch=main&logo=code%20climate&style=for-the-badge)](https://codeclimate.com/github/shepilov-vladislav/async-casbin-sqlmodel-adapter/maintainability)
[![Dependabot](https://img.shields.io/badge/dependabot-Active-brightgreen?branch=main&logo=dependabot&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)
## GitHub
[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/shepilov-vladislav/async-casbin-sqlmodel-adapter?label=latest%20stable&sort=semver&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/releases)
[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/shepilov-vladislav/async-casbin-sqlmodel-adapter?label=latest%20unstable&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/releases)
[![GitHub last commit](https://img.shields.io/github/last-commit/shepilov-vladislav/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/commits/master)
## PyPI
[![PyPI - Version](https://img.shields.io/pypi/v/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - Python Wheel](https://img.shields.io/pypi/wheel/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - Format](https://img.shields.io/pypi/format/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - Status](https://img.shields.io/pypi/status/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - Downloads](https://img.shields.io/pypi/dd/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
[![PyPI - License](https://img.shields.io/pypi/l/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)
Async SQLModel Adapter is the [SQLModel](https://github.com/tiangolo/sqlmodel) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLModel supported database or save policy to it.
Based on [Officially Supported Databases](https://github.com/tiangolo/sqlmodel), The current supported databases are:
- PostgreSQL
- MySQL
- SQLite
## Installation
```
pip install async_casbin_sqlmodel_adapter
```
or
```
poetry add async-casbin-sqlmodel-adapter
```
## Simple Example
```python
# Stdlib:
import asyncio
# Thirdparty:
import casbin
from async_casbin_sqlmodel_adapter import Adapter
from sqlalchemy.ext.asyncio import create_async_engine
from sqlmodel import Field, SQLModel
engine = create_async_engine("sqlite+aiosqlite:///")
class CasbinRule(SQLModel, table=True): # type: ignore
"""
CasbinRule class for SQLModel-based Casbin adapter.
"""
__tablename__ = "casbin_rule"
id: int = Field(primary_key=True)
ptype: str = Field(max_length=255)
v0: str = Field(max_length=255)
v1: str = Field(max_length=255)
v2: str | None = Field(max_length=255, default=None)
v3: str | None = Field(max_length=255, default=None)
v4: str | None = Field(max_length=255, default=None)
v5: str | None = Field(max_length=255, default=None)
def __str__(self) -> str:
arr = [self.ptype]
# pylint: disable=invalid-name
for v in (self.v0, self.v1, self.v2, self.v3, self.v4, self.v5):
if v is None:
break
arr.append(v)
return ", ".join(arr)
def __repr__(self) -> str:
return f'<CasbinRule {self.id}: "{str(self)}">'
async def main():
async with engine.begin() as conn:
await conn.run_sync(SQLModel.metadata.create_all)
adapter = Adapter(engine)
e = casbin.AsyncEnforcer("path/to/model.conf", adapter, True)
sub = "alice" # the user that wants to access a resource.
obj = "data1" # the resource that is going to be accessed.
act = "read" # the operation that the user performs on the resource.
if e.enforce(sub, obj, act):
# permit alice to read data1async_casbin_sqlmodel_adapter
pass
else:
# deny the request, show an error
pass
asyncio.run(main())
```
### Getting Help
- [PyCasbin](https://github.com/casbin/pycasbin)
### License
This project is licensed under the [Apache 2.0 license](LICENSE).
Raw data
{
"_id": null,
"home_page": "https://github.com/shepilov-vladislav/sqlmodel-casbin-adapter",
"name": "async-casbin-sqlmodel-adapter",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10,<4.0",
"maintainer_email": "",
"keywords": "pycasbin,asynccasbin,sqlmodel",
"author": "Vladislav Shepilov",
"author_email": "shepilov.v@protonmail.com",
"download_url": "https://files.pythonhosted.org/packages/8e/12/7fa2f41c7054eefcce8efb2992dcefb142691ecbe10c02e650cd8a35f58b/async_casbin_sqlmodel_adapter-0.1.5.tar.gz",
"platform": null,
"description": "Async SQLModel Adapter for PyCasbin\n====\n\n## Repo\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/shepilov-vladislav/async-casbin-sqlmodel-adapter/pytest.yml?branch=main&logo=github&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)\n[![Codecov](https://img.shields.io/codecov/c/github/shepilov-vladislav/async-casbin-sqlmodel-adapter?branch=main&logo=github&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)\n[![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/shepilov-vladislav/async-casbin-sqlmodel-adapter?branch=main&logo=code%20climate&style=for-the-badge)](https://codeclimate.com/github/shepilov-vladislav/async-casbin-sqlmodel-adapter/maintainability)\n[![Dependabot](https://img.shields.io/badge/dependabot-Active-brightgreen?branch=main&logo=dependabot&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter)\n\n\n## GitHub\n\n[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/shepilov-vladislav/async-casbin-sqlmodel-adapter?label=latest%20stable&sort=semver&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/releases)\n[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/shepilov-vladislav/async-casbin-sqlmodel-adapter?label=latest%20unstable&style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/releases)\n[![GitHub last commit](https://img.shields.io/github/last-commit/shepilov-vladislav/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://github.com/shepilov-vladislav/async-casbin-sqlmodel-adapter/commits/master)\n\n## PyPI\n\n[![PyPI - Version](https://img.shields.io/pypi/v/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - Python Versions](https://img.shields.io/pypi/pyversions/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - Python Wheel](https://img.shields.io/pypi/wheel/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - Format](https://img.shields.io/pypi/format/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - Status](https://img.shields.io/pypi/status/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - Downloads](https://img.shields.io/pypi/dd/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n[![PyPI - License](https://img.shields.io/pypi/l/async-casbin-sqlmodel-adapter?style=for-the-badge)](https://pypi.org/project/async-casbin-sqlmodel-adapter)\n\nAsync SQLModel Adapter is the [SQLModel](https://github.com/tiangolo/sqlmodel) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLModel supported database or save policy to it.\n\nBased on [Officially Supported Databases](https://github.com/tiangolo/sqlmodel), The current supported databases are:\n\n- PostgreSQL\n- MySQL\n- SQLite\n\n## Installation\n\n```\npip install async_casbin_sqlmodel_adapter\n```\n\nor\n\n```\npoetry add async-casbin-sqlmodel-adapter\n```\n\n## Simple Example\n\n```python\n# Stdlib:\nimport asyncio\n\n# Thirdparty:\nimport casbin\nfrom async_casbin_sqlmodel_adapter import Adapter\nfrom sqlalchemy.ext.asyncio import create_async_engine\nfrom sqlmodel import Field, SQLModel\n\nengine = create_async_engine(\"sqlite+aiosqlite:///\")\n\n\nclass CasbinRule(SQLModel, table=True): # type: ignore\n \"\"\"\n CasbinRule class for SQLModel-based Casbin adapter.\n \"\"\"\n\n __tablename__ = \"casbin_rule\"\n\n id: int = Field(primary_key=True)\n ptype: str = Field(max_length=255)\n v0: str = Field(max_length=255)\n v1: str = Field(max_length=255)\n v2: str | None = Field(max_length=255, default=None)\n v3: str | None = Field(max_length=255, default=None)\n v4: str | None = Field(max_length=255, default=None)\n v5: str | None = Field(max_length=255, default=None)\n\n def __str__(self) -> str:\n arr = [self.ptype]\n # pylint: disable=invalid-name\n for v in (self.v0, self.v1, self.v2, self.v3, self.v4, self.v5):\n if v is None:\n break\n arr.append(v)\n return \", \".join(arr)\n\n def __repr__(self) -> str:\n return f'<CasbinRule {self.id}: \"{str(self)}\">'\n\n\nasync def main():\n async with engine.begin() as conn:\n await conn.run_sync(SQLModel.metadata.create_all)\n\n adapter = Adapter(engine)\n\n e = casbin.AsyncEnforcer(\"path/to/model.conf\", adapter, True)\n\n sub = \"alice\" # the user that wants to access a resource.\n obj = \"data1\" # the resource that is going to be accessed.\n act = \"read\" # the operation that the user performs on the resource.\n\n if e.enforce(sub, obj, act):\n # permit alice to read data1async_casbin_sqlmodel_adapter\n pass\n else:\n # deny the request, show an error\n pass\n\n\nasyncio.run(main())\n```\n\n\n### Getting Help\n\n- [PyCasbin](https://github.com/casbin/pycasbin)\n\n### License\n\nThis project is licensed under the [Apache 2.0 license](LICENSE).\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Async SQLModel Adapter for PyCasbin",
"version": "0.1.5",
"project_urls": {
"Homepage": "https://github.com/shepilov-vladislav/sqlmodel-casbin-adapter",
"Repository": "https://github.com/shepilov-vladislav/sqlmodel-casbin-adapter"
},
"split_keywords": [
"pycasbin",
"asynccasbin",
"sqlmodel"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "3bce4c0d86a3b457ec30a2b6cedfef78070236fb9347cf4506707318b2f66e78",
"md5": "564cfae4b39e969676a768414f341a36",
"sha256": "eecf3bb9aeaa393bc4d5861b80d99a8010f54ec369f794bad9a27478a6235c71"
},
"downloads": -1,
"filename": "async_casbin_sqlmodel_adapter-0.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "564cfae4b39e969676a768414f341a36",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10,<4.0",
"size": 13836,
"upload_time": "2024-02-04T22:01:07",
"upload_time_iso_8601": "2024-02-04T22:01:07.081198Z",
"url": "https://files.pythonhosted.org/packages/3b/ce/4c0d86a3b457ec30a2b6cedfef78070236fb9347cf4506707318b2f66e78/async_casbin_sqlmodel_adapter-0.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8e127fa2f41c7054eefcce8efb2992dcefb142691ecbe10c02e650cd8a35f58b",
"md5": "20b33f659cf8530fe6cb408bc8f6c0db",
"sha256": "b9eb0e201a55c81926250bff64d29dc410c89f393d1481e4ae5f3cf4e86be6b0"
},
"downloads": -1,
"filename": "async_casbin_sqlmodel_adapter-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "20b33f659cf8530fe6cb408bc8f6c0db",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10,<4.0",
"size": 9449,
"upload_time": "2024-02-04T22:01:08",
"upload_time_iso_8601": "2024-02-04T22:01:08.495300Z",
"url": "https://files.pythonhosted.org/packages/8e/12/7fa2f41c7054eefcce8efb2992dcefb142691ecbe10c02e650cd8a35f58b/async_casbin_sqlmodel_adapter-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-04 22:01:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "shepilov-vladislav",
"github_project": "sqlmodel-casbin-adapter",
"github_not_found": true,
"lcname": "async-casbin-sqlmodel-adapter"
}