A better persistence layer for python
Project description
Persisty - a better persistence Layer for Python
The objective of this project is to provide a resource oriented approach accommodating both security and caching rich enough to handle most use cases while still being independant of the underlying persistence mechanism.
Using Servey to provide access via REST and GraphQL in either a hosted environment or AWS lambda environemnt, the project includes out of the box support for both SQL (via SQLAlchemy) and Dynamodb.
Concepts
Stored Items
Stored items are marked by the stored decorator. This decorator is similar to dataclass, and allows specifying attributes, keys, schemas, and indexes.
Stores
A Store provides a unified interface for interacting with stored items. StoreMeta contains info on what exactly a store supports
Standard Actions are:
- create an item
- read and item given its key
- update an item
- delete and item given its key
- search for items given filter and sort criteria
- count items given filter criteria
- read_batch read a batch of items given a list of keys
- edit_batch execute a batch of edits (create, update, delete operations)
Keys
Each item within a store has a string key, derived from the item. (Possibly based on one or more of it's attributes) A KeyConfig controls this process
Attributes
Stored items have Attributes associated with them, similar to columns in a relational database. Attributes can have generators associated with them.
SearchFilters
Search operations can have SearchFilters These can be natively supported (Converted to SQL or dynamodb query / scan criteria) or run locally in python.
Extras
We have optional extra projects to accommodate certain common usage patterns
Persisty Data
A binary data plugin for persisty, accommondating file uploads and downloads. (Delegating to services like S3)
Persisty Dynamic
A dynamic data plugin for persisty, accommodating the case where users can define metadata on the fly, and upload data that conforms to it.
Examples
Future Ideas
- REDIS Store
- A user app with support for OIDC, SAML and SCIM
- A Rate Limiting app / Rate Limit Access Control
- An AutoUI project in NPM
- An Event Bridge Project (Backed by AWS Event bridge in AWS, or celery in other environments)
- A Remote HTTP Store
- A Distributed Lock
- An explicit custom index (Spatial RTree)
Installing local development dependencies
python setup.py install easy_install "servey[dev]"
Release Procedure
The typical process here is:
- Create a PR with changes. Merge these to main (The
Quality
workflows make sure that your PR meets the styling, linting, and code coverage standards). - New releases created in github are automatically uploaded to pypi
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for persisty-0.0.11-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9276bf9d9d2fe775d007889a6d04cd7ba27657bd51ccf11fcbc67b8cc20c903f |
|
MD5 | 488a5d68c0178789f17fbc7acc77fb40 |
|
BLAKE2b-256 | af929aec7e9016a3896f85755f6ab5f3407e9674f312b888592b838aea2abfe5 |