zpp_store


Namezpp_store JSON
Version 0.4.0 PyPI version JSON
download
home_pagehttps://github.com/ZephyrOff/zpp_store
SummarySystème de sérialisation de données
upload_time2025-08-01 07:33:31
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licensemit
keywords store zephyroff
VCS
bugtrack_url
requirements cryptography pyyaml msgpack
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # zpp_store

## Informations

Outil de sérialisation d'objet Python.
Il peut prendre en charge:
- les formats classiques: str, int, float, bool, type, none, complex, bytes, decimal
- les formats structurés: list, dict, tuple, array, bytearray, frozenset
- les formats io: BytesIO, StringIO, TextIOWrapper, BufferedReader
- les objets: Class, datetime, function, builtin function

Le fichier de sortie peut-être soit un yaml, soit un fichier binaire; et celui-ci peut être chiffré avec un mot de passe.
Le système fonctionne comme un coffre dans lequel on peut stocker plusieurs données et utilise le système clé/valeur pour identifier les données.

Il intègre également un outil pour stocker des données sous forme de Class pour les structurer et faciliter leurs manipulations.

### Prérequis
- Python 3

## Installation


```shell
pip install zpp_store
```

## Utilisation
### Initialisation du connecteur

Le store est accessible de deux façons:
- En initialisant le store dans une variable
```python
import zpp_store

vault = zpp_store.Store()
```
- Ou avec la méthode **with**
```python
import zpp_store

with zpp_store.Store() as vault:
	'''Traitement'''
```

La Classe Store peut prendre plusieurs arguments:
- ***filename***: pour spécifier le fichier de sortie
	Si le fichier de sortie n'est pas précisé, le résultat restera dans le stockage de la classe. Il sera alors possible de récupérer le résultat avec la méthode **get_content()**
- ***protected***: pour spécifier si le fichier doit être chiffré (si le mot de passe n'est pas spécifié. Un prompt demandera le mot de passe)
- ***password***: pour spécifier le mot de passe pour le chiffrement (active protected)
- ***format***: pour spécifier le format de sortie. **zpp_store.Formatstore.to_yaml**, **zpp_store.Formatstore.to_binary** ou **zpp_store.Formatstore.to_dict**. 
	Attention, le format to_dict n'accepte pas la sortie dans un fichier.
<br>

###  Sérialisation de données

Pour sérialiser des données, il suffit d'appeler la classe **Store** et d'utiliser la méthode **push** avec comme paramètre le nom de la clé à utiliser et la donnée à sérialiser.

```python
import zpp_store

class Person:
	def __init__(self, name, age, city):
		self.name = name
		self.age = age
		self.city = city

new_person = Person("Bob", 35, "Paris")

with zpp_store.Store() as vault:
	vault.push("utilisateur_bob", new_person)
```

Possibilité de travailler avec des données hiérarchiques en séparant les clés par un point.
```python
vault.push("config.app.data", "data_line")  #Ce qui donnera {"config": {"app": {"data": "data_line"}}}
```

<br>

###  Désérialisation de données

Pour désérialiser des données, il suffit d'appeler la classe **Store** et d'utiliser la méthode **pull** avec comme paramètre le nom de la clé à récupérer.

```python
import zpp_store

class Person:
	def __init__(self, name, age, city):
		self.name = name
		self.age = age
		self.city = city

with zpp_store.Store() as vault:
	new_person = vault.pull("utilisateur_bob")
```
<br>

### Suppression de données

Il est possible de supprimer des données avec la méthode **erase()** en précisant en paramètre la clé.

```python
import zpp_store

with zpp_store.Store() as vault:
	vault.erase("utilisateur_bob")
```

La méthode retournera alors **True** si une donnée a été supprimée, sinon **False**.
<br>

### Liste des clés

Il est possible de lister l'ensemble des clés disponibles dans un store.

```python
import zpp_store

with zpp_store.Store() as vault:
	print(vault.list()) # Affiche: ['app', 'app.config', 'app.users']
```

### Structuration de données

Il est possible de structurer un dictionnaire pour le transformer en **DataStore** et pour nous permettre de manipuler ces données comme une Class avec a.b.c
Pour cela, il nous suffit d'appeler la méthode **structure()** avec comme argument le dictionnaire

```python
import zpp_store

dict_data = {"Bonjour": "Hello world", "Data": {"insert": True, "false": True}}

data = zpp_store.structure(dict_data)
```

Le dictionnaire devient alors un **zpp_store.structure.DataStore**

Pour permettre de contrôler la modification, le DataStore permet de récupérer un hash du contenu avec la méthode **get_hash()**

```python
import zpp_store

dict_data = {"Bonjour": "Hello world", "Data": {"insert": True, "false": True}}

data = zpp_store.structure(dict_data)
hash_dict = data.get_hash()
```
<br>

### Déstructuration de données

Pour récupérer un dictionnaire à partir d'un **DataStore**, il suffit d'appeler la méthode **destructure()**.

```python
import zpp_store

data = zpp_store.destructure(datastore)
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ZephyrOff/zpp_store",
    "name": "zpp_store",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "store zephyroff",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/ff/6a/9dc07121c8fcf1e1fbd62f59fe9f570661eefc128e3e5a8b823f030e1dd7/zpp_store-0.4.0-py3-none-any.whl",
    "platform": null,
    "description": "# zpp_store\r\n\r\n## Informations\r\n\r\nOutil de s\u00e9rialisation d'objet Python.\r\nIl peut prendre en charge:\r\n- les formats classiques: str, int, float, bool, type, none, complex, bytes, decimal\r\n- les formats structur\u00e9s: list, dict, tuple, array, bytearray, frozenset\r\n- les formats io: BytesIO, StringIO, TextIOWrapper, BufferedReader\r\n- les objets: Class, datetime, function, builtin function\r\n\r\nLe fichier de sortie peut-\u00eatre soit un yaml, soit un fichier binaire; et celui-ci peut \u00eatre chiffr\u00e9 avec un mot de passe.\r\nLe syst\u00e8me fonctionne comme un coffre dans lequel on peut stocker plusieurs donn\u00e9es et utilise le syst\u00e8me cl\u00e9/valeur pour identifier les donn\u00e9es.\r\n\r\nIl int\u00e8gre \u00e9galement un outil pour stocker des donn\u00e9es sous forme de Class pour les structurer et faciliter leurs manipulations.\r\n\r\n### Pr\u00e9requis\r\n- Python 3\r\n\r\n## Installation\r\n\r\n\r\n```shell\r\npip install zpp_store\r\n```\r\n\r\n## Utilisation\r\n### Initialisation du connecteur\r\n\r\nLe store est accessible de deux fa\u00e7ons:\r\n- En initialisant le store dans une variable\r\n```python\r\nimport zpp_store\r\n\r\nvault = zpp_store.Store()\r\n```\r\n- Ou avec la m\u00e9thode **with**\r\n```python\r\nimport zpp_store\r\n\r\nwith zpp_store.Store() as vault:\r\n\t'''Traitement'''\r\n```\r\n\r\nLa Classe Store peut prendre plusieurs arguments:\r\n- ***filename***: pour sp\u00e9cifier le fichier de sortie\r\n\tSi le fichier de sortie n'est pas pr\u00e9cis\u00e9, le r\u00e9sultat restera dans le stockage de la classe. Il sera alors possible de r\u00e9cup\u00e9rer le r\u00e9sultat avec la m\u00e9thode **get_content()**\r\n- ***protected***: pour sp\u00e9cifier si le fichier doit \u00eatre chiffr\u00e9 (si le mot de passe n'est pas sp\u00e9cifi\u00e9. Un prompt demandera le mot de passe)\r\n- ***password***: pour sp\u00e9cifier le mot de passe pour le chiffrement (active protected)\r\n- ***format***: pour sp\u00e9cifier le format de sortie. **zpp_store.Formatstore.to_yaml**, **zpp_store.Formatstore.to_binary** ou **zpp_store.Formatstore.to_dict**. \r\n\tAttention, le format to_dict n'accepte pas la sortie dans un fichier.\r\n<br>\r\n\r\n###  S\u00e9rialisation de donn\u00e9es\r\n\r\nPour s\u00e9rialiser des donn\u00e9es, il suffit d'appeler la classe **Store** et d'utiliser la m\u00e9thode **push** avec comme param\u00e8tre le nom de la cl\u00e9 \u00e0 utiliser et la donn\u00e9e \u00e0 s\u00e9rialiser.\r\n\r\n```python\r\nimport zpp_store\r\n\r\nclass Person:\r\n\tdef __init__(self, name, age, city):\r\n\t\tself.name = name\r\n\t\tself.age = age\r\n\t\tself.city = city\r\n\r\nnew_person = Person(\"Bob\", 35, \"Paris\")\r\n\r\nwith zpp_store.Store() as vault:\r\n\tvault.push(\"utilisateur_bob\", new_person)\r\n```\r\n\r\nPossibilit\u00e9 de travailler avec des donn\u00e9es hi\u00e9rarchiques en s\u00e9parant les cl\u00e9s par un point.\r\n```python\r\nvault.push(\"config.app.data\", \"data_line\")  #Ce qui donnera {\"config\": {\"app\": {\"data\": \"data_line\"}}}\r\n```\r\n\r\n<br>\r\n\r\n###  D\u00e9s\u00e9rialisation de donn\u00e9es\r\n\r\nPour d\u00e9s\u00e9rialiser des donn\u00e9es, il suffit d'appeler la classe **Store** et d'utiliser la m\u00e9thode **pull** avec comme param\u00e8tre le nom de la cl\u00e9 \u00e0 r\u00e9cup\u00e9rer.\r\n\r\n```python\r\nimport zpp_store\r\n\r\nclass Person:\r\n\tdef __init__(self, name, age, city):\r\n\t\tself.name = name\r\n\t\tself.age = age\r\n\t\tself.city = city\r\n\r\nwith zpp_store.Store() as vault:\r\n\tnew_person = vault.pull(\"utilisateur_bob\")\r\n```\r\n<br>\r\n\r\n### Suppression de donn\u00e9es\r\n\r\nIl est possible de supprimer des donn\u00e9es avec la m\u00e9thode **erase()** en pr\u00e9cisant en param\u00e8tre la cl\u00e9.\r\n\r\n```python\r\nimport zpp_store\r\n\r\nwith zpp_store.Store() as vault:\r\n\tvault.erase(\"utilisateur_bob\")\r\n```\r\n\r\nLa m\u00e9thode retournera alors **True** si une donn\u00e9e a \u00e9t\u00e9 supprim\u00e9e, sinon **False**.\r\n<br>\r\n\r\n### Liste des cl\u00e9s\r\n\r\nIl est possible de lister l'ensemble des cl\u00e9s disponibles dans un store.\r\n\r\n```python\r\nimport zpp_store\r\n\r\nwith zpp_store.Store() as vault:\r\n\tprint(vault.list()) # Affiche: ['app', 'app.config', 'app.users']\r\n```\r\n\r\n### Structuration de donn\u00e9es\r\n\r\nIl est possible de structurer un dictionnaire pour le transformer en **DataStore** et pour nous permettre de manipuler ces donn\u00e9es comme une Class avec a.b.c\r\nPour cela, il nous suffit d'appeler la m\u00e9thode **structure()** avec comme argument le dictionnaire\r\n\r\n```python\r\nimport zpp_store\r\n\r\ndict_data = {\"Bonjour\": \"Hello world\", \"Data\": {\"insert\": True, \"false\": True}}\r\n\r\ndata = zpp_store.structure(dict_data)\r\n```\r\n\r\nLe dictionnaire devient alors un **zpp_store.structure.DataStore**\r\n\r\nPour permettre de contr\u00f4ler la modification, le DataStore permet de r\u00e9cup\u00e9rer un hash du contenu avec la m\u00e9thode **get_hash()**\r\n\r\n```python\r\nimport zpp_store\r\n\r\ndict_data = {\"Bonjour\": \"Hello world\", \"Data\": {\"insert\": True, \"false\": True}}\r\n\r\ndata = zpp_store.structure(dict_data)\r\nhash_dict = data.get_hash()\r\n```\r\n<br>\r\n\r\n### D\u00e9structuration de donn\u00e9es\r\n\r\nPour r\u00e9cup\u00e9rer un dictionnaire \u00e0 partir d'un **DataStore**, il suffit d'appeler la m\u00e9thode **destructure()**.\r\n\r\n```python\r\nimport zpp_store\r\n\r\ndata = zpp_store.destructure(datastore)\r\n```\r\n",
    "bugtrack_url": null,
    "license": "mit",
    "summary": "Syst\u00c3\u00a8me de s\u00c3\u00a9rialisation de donn\u00c3\u00a9es",
    "version": "0.4.0",
    "project_urls": {
        "Documentation": "https://github.com/ZephyrOff/zpp_store",
        "Homepage": "https://github.com/ZephyrOff/zpp_store"
    },
    "split_keywords": [
        "store",
        "zephyroff"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ff6a9dc07121c8fcf1e1fbd62f59fe9f570661eefc128e3e5a8b823f030e1dd7",
                "md5": "9ed09afaccc70d0dfe2002c2bf717346",
                "sha256": "06899b4a4de7ecd1ab8eb2007dd6a602043f8d6c1ac83b8fe19e9a4fe1841a57"
            },
            "downloads": -1,
            "filename": "zpp_store-0.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9ed09afaccc70d0dfe2002c2bf717346",
            "packagetype": "bdist_wheel",
            "python_version": "source",
            "requires_python": null,
            "size": 9807,
            "upload_time": "2025-08-01T07:33:31",
            "upload_time_iso_8601": "2025-08-01T07:33:31.327170Z",
            "url": "https://files.pythonhosted.org/packages/ff/6a/9dc07121c8fcf1e1fbd62f59fe9f570661eefc128e3e5a8b823f030e1dd7/zpp_store-0.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1938279bc03281bf51d549e6f9a6703fa78c3c2c3f66256f691ed773cc7e1a17",
                "md5": "fcb9d8465848a5fda337722352f0ca7c",
                "sha256": "ca7927007f1632c456e07311e5b92d12d5a7e5d998673538cb5bc6f2e0e8518f"
            },
            "downloads": -1,
            "filename": "zpp_store-0.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "fcb9d8465848a5fda337722352f0ca7c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 12344,
            "upload_time": "2025-08-01T07:33:32",
            "upload_time_iso_8601": "2025-08-01T07:33:32.406664Z",
            "url": "https://files.pythonhosted.org/packages/19/38/279bc03281bf51d549e6f9a6703fa78c3c2c3f66256f691ed773cc7e1a17/zpp_store-0.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 07:33:31",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ZephyrOff",
    "github_project": "zpp_store",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "cryptography",
            "specs": []
        },
        {
            "name": "pyyaml",
            "specs": []
        },
        {
            "name": "msgpack",
            "specs": []
        }
    ],
    "lcname": "zpp_store"
}
        
Elapsed time: 1.45523s