layered-persistence


Namelayered-persistence JSON
Version 0.0.2 PyPI version JSON
download
home_pageNone
SummaryPersistence
upload_time2025-07-16 09:30:43
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseNone
keywords layers persistence storage
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # layered-persistence

[![PyPI version](https://img.shields.io/pypi/v/layered-persistence.svg)](https://pypi.org/project/layered-persistence/) [![License](https://img.shields.io/github/license/ceil-python/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[![PyPI version](https://img.shields.io/pypi/v/layered-persistence.svg)](https://pypi.org/project/layered-persistence/) [![License](https://img.shields.io/github/license/ceil-python/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"
}
        
Elapsed time: 2.46564s