Format de données structurées avec chiffrement AES-256 par bloc
Project description
JDAT
Format de données structurées, lisible, modifiable et chiffrable par bloc avec AES-256.
pip install jdat
pip install jdat[crypto] # avec chiffrement AES-256
Démarrage rapide
getval — équivalent de os.getenv
import jdat
# Lit une valeur depuis un fichier .jdat (1 ligne)
email = jdat.getval("config.jdat", "utilisateur", "adresse mail")
port = jdat.getval("config.jdat", "serveur", "port", default="5000")
# Avec bloc chiffré
mdp = jdat.getval("secrets.jdat", "db", "password", password="monmdp")
JDATEnv — environnement global (comme os.environ)
from jdat import JDATEnv
env = JDATEnv("config.jdat")
# Accès style dict
env["serveur"]["port"] # "5000"
env.get("serveur", "port") # "5000" ou None
env.get("serveur", "port", "80") # "5000" ou "80"
env.require("db", "password") # valeur ou KeyError si absente
# Typage automatique
env.getint("serveur", "port") # 5000 (int)
env.getbool("app", "debug") # True (bool)
env.getlist("app", "allowed_hosts") # ["localhost", "127.0.0.1"]
# Bloc entier
config = env.section("serveur") # {"host": "0.0.0.0", "port": "5000"}
Depuis les variables d'environnement
export JDAT_FILE=/home/<name>/<fichier>.jdat
export JDAT_PASSWORD=monmotdepasse
env = JDATEnv.from_env()
db_url = env.require("db", "url")
Format JDAT
({<commentaire>})
(n:utilisateur l:user1 t:1 {
nom: alice
adresse mail: alice@exemple.com
rôle: admin
})
(n:script l:deploy t:2{
#!/bin/bash
git pull && systemctl restart app
})
En-tête du bloc :
n:nom lisiblel:lien unique (utilisé comme clé d'accès)t:1données structurées clé/valeurt:2texte ou code brut verbatim
JDATFile — API complète
from jdat import JDATFile
# Chargement
jf = JDATFile("data.jdat")
jf = JDATFile() # vide
jf = JDATFile.from_string(texte)
jf = JDATFile.from_env() # lit JDAT_FILE
# Accès style dict
bloc = jf["lien"]
valeur = jf["lien"]["clé"]
"lien" in jf # True/False
# Lecture
bloc.get("clé") # valeur ou None
bloc.get("clé", "défaut")
bloc.to_dict() # → dict complet
bloc.keys() / bloc.values() / bloc.items()
# Recherche
jf.get("lien") # bloc ou None
jf.find("partiel") # liste de blocs
jf.where(rôle="admin") # filtre par clé/valeur
# Modification
bloc["clé"] = "nouvelle valeur"
bloc.update({"clé": "val", "clé2": "val2"})
jf.add("nom", "lien", data={"clé": "val"})
jf.add("script", "deploy", btype=2, content="#!/bin/bash\n...")
del jf["lien"] # supprime un bloc
# Chiffrement (pip install jdat[crypto])
jf.encrypt("lien", "motdepasse")
jf.decrypt("lien", "motdepasse")
jf.encrypt_all("motdepasse")
jf.decrypt_all("motdepasse")
# Export
jf.to_dict() # dict Python
jf.to_json() # JSON string
# Sauvegarde (chaînable)
jf.save()
jf.save("autre.jdat")
jf.add("x", "x1", data={...}).save()
Chiffrement AES-256-GCM
from jdat import JDATEnv
# Déchiffrement automatique au chargement
env = JDATEnv("secrets.jdat", password="monmotdepasse")
secret = env["db"]["password"] # déjà déchiffré
# Injection dans os.environ
env.inject("secrets", prefix="APP_")
import os
print(os.environ["APP_DB_PASSWORD"])
Intégration Flask
from flask import Flask
from jdat import JDATEnv
app = Flask(__name__)
env = JDATEnv("config.jdat")
app.config["SECRET_KEY"] = env.require("flask", "secret_key")
app.config["DEBUG"] = env.getbool("flask", "debug")
app.config["PORT"] = env.getint("serveur", "port", 5000)
Licence
MIT
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
jdat-1.1.1.tar.gz
(12.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
jdat-1.1.1-py3-none-any.whl
(12.3 kB
view details)
File details
Details for the file jdat-1.1.1.tar.gz.
File metadata
- Download URL: jdat-1.1.1.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
321f52b4e2f4c53d6232d586ce0d2dae57f5a50508f8323fc69c137db189899b
|
|
| MD5 |
ab2c8d59de461165b535d9ce57d37c7c
|
|
| BLAKE2b-256 |
adb7e51c7adca653b41da87c6e3c056cf818aea23e2132cddafb85a4b42778af
|
File details
Details for the file jdat-1.1.1-py3-none-any.whl.
File metadata
- Download URL: jdat-1.1.1-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c72ea48d9b62c33422426cc24871cdb254414ac3a2c570464c8b23f26c0a7529
|
|
| MD5 |
3b62b1b2c6c1673508c977b9a6a4d0a1
|
|
| BLAKE2b-256 |
ab36e011703e7b745f5a008e65e3bddfeae9d053275e2846add9aa77b07951d7
|