Name | authanor JSON |
Version |
1.1.0
JSON |
| download |
home_page | None |
Summary | A Pythonic SQLALchemy interface to enforce authorization criteria. |
upload_time | 2023-07-08 16:05:11 |
maintainer | None |
docs_url | None |
author | None |
requires_python | <3.11,>=3.9 |
license | GNU GPLv3 |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Authanor
<img src="https://upload.wikimedia.org/wikipedia/commons/1/10/Athanor.jpg" alt="Athanor" />
A tool providing a a Pythonic interface to SQLAlchemy while enforcing authorization criteria for Flask.
SQLAlchemy provides a solid interface for managing database operations.
However, this package is designed to enable the construction of handler objects that perform a series of consistent actions on many similar ORM entities.
For example, I find that I frequently want to select all values (for specific columns) in a given table using an ORM or add an entry to the table based on a mapping.
At the same time, I want to rigorously test my databases—but not pay the penalty for reconstructing the database for _every_ test.
### Authorizations & Database Handlers
The common operations are easy to do using SQLAlchemy, but rather than rolling new functions for each new query in every application, this tool provides a set of handlers that are designed to abstract away a bunch of the tedious details.
Also, my experience is that enforcing authorization constraints when manipulating sophisticated table relationships can be tricky, and so this tool and its handlers provide an interface for managing those authorizations consistently.
It's possible I'm missing a key functionality of SQLAlchemy that enables this behavior elegantly, but I haven't found a satisfiably clean way to do it yet.
Until I become so enlightened, this package creates an interface where each model may define the chain of joins required to establish whether it belongs to an authorized user, and then a handler to query the database and perform those joins for each query.
This is designed to be extensible, since I often want this behavior available for the majority of ORM models in my application.
If you read this and think "This dude's dumb; why on Earth didn't he use _this_ functionality baked into SQLAlchemy?" drop me a line because I'm interested to know what I'm missing.
## Installation
The _Authanor_ package is registered on the [Python Package Index (PyPI)](https://pypi.org/project/authanor) for easy installation.
To install the package, simply run
```
$ pip install authanor
```
The package requires a recent version of Python (3.9+).
## License
This project is licensed under the GNU General Public License, Version 3.
It is fully open-source, and while you are more than welcome to fork, add, modify, etc. it is required that you keep any distributed changes and additions open-source.
## Changes
Changes between versions are tracked in the [changelog](https://github.com/mitchnegus/authanor/blob/main/CHANGELOG.md).
Raw data
{
"_id": null,
"home_page": null,
"name": "authanor",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.11,>=3.9",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Mitch Negus <mitchnegus57@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/7f/b0/09d4437ed30f65354816a2096537f134de5bf1f2989ca6c14ccddd719158/authanor-1.1.0.tar.gz",
"platform": null,
"description": "# Authanor\n\n<img src=\"https://upload.wikimedia.org/wikipedia/commons/1/10/Athanor.jpg\" alt=\"Athanor\" />\n\nA tool providing a a Pythonic interface to SQLAlchemy while enforcing authorization criteria for Flask.\n\nSQLAlchemy provides a solid interface for managing database operations.\nHowever, this package is designed to enable the construction of handler objects that perform a series of consistent actions on many similar ORM entities.\nFor example, I find that I frequently want to select all values (for specific columns) in a given table using an ORM or add an entry to the table based on a mapping.\nAt the same time, I want to rigorously test my databases\u2014but not pay the penalty for reconstructing the database for _every_ test.\n\n\n### Authorizations & Database Handlers\n\nThe common operations are easy to do using SQLAlchemy, but rather than rolling new functions for each new query in every application, this tool provides a set of handlers that are designed to abstract away a bunch of the tedious details.\nAlso, my experience is that enforcing authorization constraints when manipulating sophisticated table relationships can be tricky, and so this tool and its handlers provide an interface for managing those authorizations consistently.\n\nIt's possible I'm missing a key functionality of SQLAlchemy that enables this behavior elegantly, but I haven't found a satisfiably clean way to do it yet.\nUntil I become so enlightened, this package creates an interface where each model may define the chain of joins required to establish whether it belongs to an authorized user, and then a handler to query the database and perform those joins for each query.\nThis is designed to be extensible, since I often want this behavior available for the majority of ORM models in my application.\n\nIf you read this and think \"This dude's dumb; why on Earth didn't he use _this_ functionality baked into SQLAlchemy?\" drop me a line because I'm interested to know what I'm missing.\n\n\n## Installation\n\nThe _Authanor_ package is registered on the [Python Package Index (PyPI)](https://pypi.org/project/authanor) for easy installation.\nTo install the package, simply run\n\n```\n$ pip install authanor\n```\n\nThe package requires a recent version of Python (3.9+).\n\n\n## License\n\nThis project is licensed under the GNU General Public License, Version 3.\nIt is fully open-source, and while you are more than welcome to fork, add, modify, etc. it is required that you keep any distributed changes and additions open-source.\n\n\n## Changes\n\nChanges between versions are tracked in the [changelog](https://github.com/mitchnegus/authanor/blob/main/CHANGELOG.md).\n",
"bugtrack_url": null,
"license": "GNU GPLv3",
"summary": "A Pythonic SQLALchemy interface to enforce authorization criteria.",
"version": "1.1.0",
"project_urls": {
"Changelog": "https://github.com/mitchnegus/authanor/blob/main/CHANGELOG.md",
"Download": "https://pypi.org/project/authanor",
"Homepage": "https://github.com/mitchnegus/authanor",
"Repository": "https://github.com/mitchnegus/authanor"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "20f3864d169abc4894142799c629e326660f74b28792fc61794ba2c6b8a167bd",
"md5": "1846c38b89651eaaa76c2291832b0693",
"sha256": "d5772a420df6db2814149f94009e9fc0cd74d7b9efa43f56789ae7bc60134411"
},
"downloads": -1,
"filename": "authanor-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1846c38b89651eaaa76c2291832b0693",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.11,>=3.9",
"size": 24798,
"upload_time": "2023-07-08T16:05:12",
"upload_time_iso_8601": "2023-07-08T16:05:12.878933Z",
"url": "https://files.pythonhosted.org/packages/20/f3/864d169abc4894142799c629e326660f74b28792fc61794ba2c6b8a167bd/authanor-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7fb009d4437ed30f65354816a2096537f134de5bf1f2989ca6c14ccddd719158",
"md5": "b21ef3575da448c4ec1c0b91a7457728",
"sha256": "4a621c1ff026a88bc76dc06abc7008af01b6b571452716a1a243f63d26180244"
},
"downloads": -1,
"filename": "authanor-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "b21ef3575da448c4ec1c0b91a7457728",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.11,>=3.9",
"size": 33157,
"upload_time": "2023-07-08T16:05:11",
"upload_time_iso_8601": "2023-07-08T16:05:11.263242Z",
"url": "https://files.pythonhosted.org/packages/7f/b0/09d4437ed30f65354816a2096537f134de5bf1f2989ca6c14ccddd719158/authanor-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-08 16:05:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mitchnegus",
"github_project": "authanor",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "authanor"
}