# layered-persistence
[](https://pypi.org/project/layered-persistence/) [](https://github.com/ceil-python/persistence/blob/main/LICENSE)
**Flexible, multi-layer key-value persistence library for Python and MicroPython. In-memory, file, and HTTP storage, with simple pluggable API.**
---
## Features
- Persistent key-value storage with multiple, cascading "layers"
- Storage backends: RAM, JSON file, remote HTTP
- Supports async and sync use
- Lightweight, only core Python dependencies
- Optional HTTP server for networked persistence
---
## Installation
```sh
pip install layered-persistence
```
or
```sh
python -m pip install layered-persistence
```
or
```sh
python3 -m pip install layered-persistence
```
---
## Quickstart
```python
from layered_persistence import LayeredPersistence, RuntimeLayer, FileLayer
# Use both in-memory (fast) and file (persistent) layers
store = LayeredPersistence(layers=[
RuntimeLayer(),
FileLayer(directory="./data")
])
# Store and retrieve a value
await store.set('foo', {'bar': 123})
val = await store.get('foo')
await store.set('foo', {'bar': val["value"]["bar"]+1})
print(val) # {'value': {'bar': 123}}
```
---
## Layers
- **`RuntimeLayer`** — Fastest, memory only, cleared on reboot.
- **`FileLayer`** — Stores each key as `./directory/key.json`.
- **`HttpLayer`** — For network/remote server persistence (see docs).
Layers can be stacked; reads backfill for speed, writes cascade for durability.
---
## HTTP Server
Expose your store as a simple HTTP API:
```python
from layered_persistence import serve_via_http, LayeredPersistence, RuntimeLayer
store = LayeredPersistence([RuntimeLayer()])
serve_via_http(store, port=8080)
```
---
## License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "layered-persistence",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "layers, persistence, storage",
"author": null,
"author_email": "Sergey Shkatula <sergey@ceil.dev>",
"download_url": "https://files.pythonhosted.org/packages/5d/b9/cda6600867676060d254e97efaea9330703d26f096763ce351ead982cb93/layered_persistence-0.0.2.tar.gz",
"platform": null,
"description": "# layered-persistence\n\n[](https://pypi.org/project/layered-persistence/) [](https://github.com/ceil-python/persistence/blob/main/LICENSE)\n\n**Flexible, multi-layer key-value persistence library for Python and MicroPython. In-memory, file, and HTTP storage, with simple pluggable API.**\n\n---\n\n## Features\n\n- Persistent key-value storage with multiple, cascading \"layers\"\n- Storage backends: RAM, JSON file, remote HTTP\n- Supports async and sync use\n- Lightweight, only core Python dependencies\n- Optional HTTP server for networked persistence\n\n---\n\n## Installation\n\n```sh\npip install layered-persistence\n```\n\nor\n\n```sh\npython -m pip install layered-persistence\n```\n\nor\n\n```sh\npython3 -m pip install layered-persistence\n```\n\n---\n\n## Quickstart\n\n```python\nfrom layered_persistence import LayeredPersistence, RuntimeLayer, FileLayer\n\n# Use both in-memory (fast) and file (persistent) layers\nstore = LayeredPersistence(layers=[\n RuntimeLayer(),\n FileLayer(directory=\"./data\")\n])\n\n# Store and retrieve a value\nawait store.set('foo', {'bar': 123})\nval = await store.get('foo')\nawait store.set('foo', {'bar': val[\"value\"][\"bar\"]+1})\nprint(val) # {'value': {'bar': 123}}\n```\n\n---\n\n## Layers\n\n- **`RuntimeLayer`** \u2014 Fastest, memory only, cleared on reboot.\n- **`FileLayer`** \u2014 Stores each key as `./directory/key.json`.\n- **`HttpLayer`** \u2014 For network/remote server persistence (see docs).\n\nLayers can be stacked; reads backfill for speed, writes cascade for durability.\n\n---\n\n## HTTP Server\n\nExpose your store as a simple HTTP API:\n\n```python\nfrom layered_persistence import serve_via_http, LayeredPersistence, RuntimeLayer\n\nstore = LayeredPersistence([RuntimeLayer()])\nserve_via_http(store, port=8080)\n```\n\n---\n\n## License\n\nMIT\n",
"bugtrack_url": null,
"license": null,
"summary": "Persistence",
"version": "0.0.2",
"project_urls": {
"Homepage": "https://github.com/ceil-python/persistence"
},
"split_keywords": [
"layers",
" persistence",
" storage"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "cf89902597dda030ebb6c57dcdfa87c0b12cf73d28291a17037a58acd5b40110",
"md5": "3a61277c1da0de964b62978420142198",
"sha256": "af2f6333a4e5f290b8c14e8c6639aee1208a8323e3709bcd4ba3794c5242be57"
},
"downloads": -1,
"filename": "layered_persistence-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3a61277c1da0de964b62978420142198",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 8105,
"upload_time": "2025-07-16T09:30:42",
"upload_time_iso_8601": "2025-07-16T09:30:42.021213Z",
"url": "https://files.pythonhosted.org/packages/cf/89/902597dda030ebb6c57dcdfa87c0b12cf73d28291a17037a58acd5b40110/layered_persistence-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5db9cda6600867676060d254e97efaea9330703d26f096763ce351ead982cb93",
"md5": "0fb9e93a0f62049d9b5e9e9d8c8de65a",
"sha256": "a5e2b677dd9a5935a109333644703a550addc67c5d6824ce4e7ca4ac1e207e4d"
},
"downloads": -1,
"filename": "layered_persistence-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "0fb9e93a0f62049d9b5e9e9d8c8de65a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 7538,
"upload_time": "2025-07-16T09:30:43",
"upload_time_iso_8601": "2025-07-16T09:30:43.333034Z",
"url": "https://files.pythonhosted.org/packages/5d/b9/cda6600867676060d254e97efaea9330703d26f096763ce351ead982cb93/layered_persistence-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-16 09:30:43",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ceil-python",
"github_project": "persistence",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "layered-persistence"
}