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/<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 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.1.tar.gz (12.0 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.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

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

Hashes for jdat-1.1.1.tar.gz
Algorithm Hash digest
SHA256 321f52b4e2f4c53d6232d586ce0d2dae57f5a50508f8323fc69c137db189899b
MD5 ab2c8d59de461165b535d9ce57d37c7c
BLAKE2b-256 adb7e51c7adca653b41da87c6e3c056cf818aea23e2132cddafb85a4b42778af

See more details on using hashes here.

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

Hashes for jdat-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c72ea48d9b62c33422426cc24871cdb254414ac3a2c570464c8b23f26c0a7529
MD5 3b62b1b2c6c1673508c977b9a6a4d0a1
BLAKE2b-256 ab36e011703e7b745f5a008e65e3bddfeae9d053275e2846add9aa77b07951d7

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