# Stockage de Configuration

Le stockage de configuration (Storage) est un système de stockage clé-valeur intégré à FIRERPA, qui est persistant. Même si FIRERPA ou l'appareil redémarre, vous pouvez toujours lire ces variables au prochain démarrage. Ce Stockage vous permet de stocker des informations de manière persistante sur l'appareil pour qu'elles soient lues par différents processus clients, afin de partager la configuration de l'appareil comme les comptes de connexion ou d'autres informations indépendantes. Vous pouvez même stocker des configurations chiffrées sur la machine.

```{attention}
La capacité totale du Stockage intégré est de 128 Mo. Veuillez ne pas l'utiliser pour stocker de grandes quantités de données. Il ne prend pas en charge le listage des noms de conteneurs ou de clés existants dans le stockage. Vous devez connaître le nom complet du conteneur et de la clé pour pouvoir lire une valeur, sinon elle sera inaccessible à jamais.
```

## Obtenir le Stockage

Vous pouvez obtenir un objet de stockage (Storage) avec le code suivant, ce qui vous permettra d'effectuer les opérations ultérieures.

```python
storage = d.stub("Storage")
```

## Vider le Stockage

Vous pouvez utiliser le code suivant pour effacer toutes les informations du Stockage, y compris les conteneurs. Vous pouvez considérer cela comme un formatage du Stockage.

```python
storage.clear()
```

## Obtenir un Conteneur

Avec le code suivant, vous pouvez obtenir un objet conteneur de stockage clé-valeur. Le stockage est le système global, et un conteneur est un "bucket" à l'intérieur de ce stockage. Toutes vos opérations de lecture et d'écriture ultérieures s'effectueront sur ce conteneur.

```python
container = storage.use("container_name")
```

## Obtenir un Conteneur Chiffré

Si vous avez besoin de stocker des valeurs de manière sécurisée, par exemple, lorsque l'appareil peut être utilisé par d'autres personnes et que vous ne voulez pas que vos configurations stockées soient lues, vous pouvez utiliser un conteneur chiffré. Contrairement à un conteneur simple, un conteneur chiffré stockera vos paires clé-valeur de manière chiffrée. D'autres personnes auront besoin d'un mot de passe ou d'une autre forme de vérification pour les lire correctement.

Notre bibliothèque est fournie avec un chiffreur/déchiffreur, FernetCryptor. Vous pouvez également implémenter votre propre algorithme de chiffrement en suivant l'exemple de FernetCryptor. Il vous suffit d'implémenter les méthodes `encrypt` et `decrypt`.

```python
from lamda.client import FernetCryptor
container = storage.use("container_name", cryptor=FernetCryptor,
                                          key="this_is_password")
```

## Supprimer un Conteneur

Vous pouvez utiliser le code suivant pour supprimer toutes les paires clé-valeur stockées dans le conteneur nommé `container_name`. Cette opération équivaut à supprimer le conteneur.

```python
storage.remove("container_name")
```

## Écrire une paire clé-valeur dans un conteneur

Vous pouvez utiliser l'appel d'exemple suivant pour définir la valeur de `key_name` à `"value"`. La valeur peut être n'importe quelle variable sérialisable par msgpack.

```python
container.set("key_name", [1, 2, 3])
container.set("key_name", {"john": "due"})
container.set("key_name", b"value")
container.set("key_name", "value")
```

## Lire une paire clé-valeur d'un conteneur

Vous pouvez utiliser la méthode suivante pour obtenir la valeur de `key_name`. Si elle n'existe pas, la méthode retourne `None`.

```python
container.get("key_name")
```

## Obtenir la durée de vie

Avec l'appel suivant, vous pouvez obtenir la durée de vie de `key_name`. `-2` signifie que la clé n'existe pas, `-1` signifie qu'elle n'expire jamais, et tout autre entier positif représente le nombre de secondes de vie restantes pour cette clé.

```python
container.ttl("key_name")
```

## Définir la durée de vie

Vous pouvez utiliser l'appel suivant pour définir la durée de vie d'une clé-valeur. Par exemple, l'appel ci-dessous définira la clé-valeur et la fera supprimer automatiquement après 10 secondes.

```python
container.setex("key_name", "value", 10)
```

Ou, si vous avez déjà défini cette clé et que vous souhaitez maintenant lui attribuer une durée de vie, vous pouvez procéder comme suit. Après 60 secondes, `key_name` sera automatiquement supprimé.

```python
container.expire("key_name", 60)
```

## Écriture Conditionnelle

Vous pouvez utiliser l'appel suivant pour définir la clé-valeur uniquement si `key_name` n'existe pas. Si la clé existe déjà, aucune opération ne sera effectuée.

```python
container.setnx("key_name", "value")
```

## Vérifier l'existence

Vous pouvez utiliser l'appel suivant pour vérifier si `key_name` existe dans le conteneur.

```python
container.exists("key_name")
```

## Supprimer une paire clé-valeur d'un conteneur

Vous pouvez utiliser l'appel suivant pour supprimer `key_name` et sa valeur du conteneur.

```python
container.delete("key_name")
```