Skip to main content

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/gabriel/secrets.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 lisible
  • l: lien unique (utilisé comme clé d'accès)
  • t:1 données structurées clé/valeur
  • t:2 texte 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


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.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jdat-1.1.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file jdat-1.1.0.tar.gz.

File metadata

  • Download URL: jdat-1.1.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for jdat-1.1.0.tar.gz
Algorithm Hash digest
SHA256 80344590253575a93a57211e46b10307402ca3441c8e646d83f00e2837596b79
MD5 f942cfaeeb572bf27e1f0d55b5ebd38b
BLAKE2b-256 865bf4a13f07d7fb6a89ca0217f358b0779bfc1889a5f264483f1152057ec8b7

See more details on using hashes here.

File details

Details for the file jdat-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: jdat-1.1.0-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

Hashes for jdat-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 95d14129119e6d174ffcd9dc5396370b979f579e36c5cffe7620de5692ac0a29
MD5 33f45072aa98fdf614f5485444016f6b
BLAKE2b-256 b295bf4c4f9debeae06d156e9dfcb8b7d2682238ee4d6dfed5cff36a88cda1fc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page