codex/files-formats/yaml_config.cat
# Parsing et écriture YAML avec PyYAML
# YAML est le format de config standard (Kubernetes, CI/CD, etc.)
#
# Exécuter: catnip -m yaml -m tempfile -m pathlib -m shutil yaml_config.cat

yaml = import("yaml")
tempfile = import("tempfile")
pathlib = import("pathlib")
shutil = import("shutil")

# Parsing d'une chaîne YAML

yaml_string = "
name: mon-app
version: 1.2.3
debug: true
port: 8080
features:
  - auth
  - logging
  - cache
database:
  host: localhost
  port: 5432
"

print("⇒ Parsing YAML")
config = yaml.safe_load(yaml_string)
print("  Clés:", config.keys())

# Accès aux données

print("\n⇒ Accès aux données")
print("  Nom:", config["name"])
print("  Version:", config["version"])
print("  Debug:", config["debug"])
print("  Port:", config["port"])

# Structures imbriquées

print("\n⇒ Structures imbriquées")
print("  DB host:", config["database"]["host"])
print("  DB port:", config["database"]["port"])

# Listes

print("\n⇒ Listes")
print("  Features:")
for f in config["features"] {
    print("    -", f)
}

# Sérialisation YAML

print("\n⇒ Sérialisation YAML")
output = yaml.dump(config)
print(output)

# Multi-documents YAML

multi_doc = "
---
env: development
debug: true
---
env: production
debug: false
"

print("⇒ Multi-documents YAML")
docs = yaml.safe_load_all(multi_doc)
i = 0
for doc in docs {
    i = i + 1
    print("  Doc", i, "- env:", doc["env"])
}

# Création et écriture d'un fichier

temp_dir = pathlib.Path(tempfile.mkdtemp())
config_file = temp_dir / "config.yaml"

# Créer une config avec dict()
app_config = dict(name="catnip-demo", version="0.1.0", port=8000)

print("\n⇒ Écriture fichier YAML")
yaml_output = yaml.dump(app_config)
config_file.write_text(yaml_output)
print("  Fichier créé:", config_file)

# Lecture du contenu

print("\n⇒ Contenu du fichier:")
print(config_file.read_text())

# Relecture avec parsing

print("⇒ Relecture du fichier")
reloaded = yaml.safe_load(config_file.read_text())
print("  App name:", reloaded["name"])
print("  Port:", reloaded["port"])

# Nettoyage

shutil.rmtree(str(temp_dir))
print("\n⇒ Nettoyage effectué")