Metadata-Version: 2.5
Name: schema-archi
Version: 0.12.0
Summary: Génération de schémas d'architecture SVG (flux applicatifs) depuis des définitions YAML/JSON
Project-URL: Homepage, https://framagit.org/opikanoba/schema-archi
Project-URL: Repository, https://framagit.org/opikanoba/schema-archi.git
Project-URL: Issues, https://framagit.org/opikanoba/schema-archi/-/issues
Project-URL: Changelog, https://framagit.org/opikanoba/schema-archi/-/blob/main/CHANGELOG.md
Author-email: Frédéric Laurent <flt@opikanoba.org>
License-Expression: MIT
License-File: LICENSE
Keywords: architecture,diagram,schema,svg,yaml
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Graphics :: Presentation
Classifier: Topic :: Software Development :: Documentation
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: loguru>=0.7.2
Requires-Dist: pyyaml>=6.0.2
Provides-Extra: png
Requires-Dist: cairosvg>=2.7.1; extra == 'png'
Provides-Extra: ui
Requires-Dist: fastapi>=0.115; extra == 'ui'
Requires-Dist: uvicorn>=0.32; extra == 'ui'
Description-Content-Type: text/markdown

# schema-archi

Génération de schémas d'architecture SVG à partir d'un simple fichier YAML ou
JSON : on décrit les applications et les flux, la bibliothèque place les
boîtes, trace les flèches et écrit le dessin.

```yaml
apps:
  m     : "Dossier patient"
  urg   : "Urgences"
  labo  : "Laboratoire"
  ville : "Médecine de ville"
bus:
  esb : "EAI Santé"
main: m
flows_def:
  - urg -(mllp:2575)-> esb --> m [admissions]
  - labo -(sftp:22)-> esb --> m [résultats]
  - m --> esb -(mllp:2575)-> ville [comptes rendus]
  - ville --> m [identités](https://example.org/identites)
```

![Schéma de flux](https://framagit.org/opikanoba/schema-archi/-/raw/main/docs/images/patient-appli.png)

Aucun placement n'est à donner : ni coordonnées, ni tailles, ni ordre des
colonnes. C'est
[`examples/yaml/patient.yaml`](https://framagit.org/opikanoba/schema-archi/-/blob/main/examples/yaml/patient.yaml),
rendu ici sans sa clé `type` — celle qui choisit le diagramme.

## Deux types de diagramme

La clé `type` choisit **ce qui est raconté**, et le suffixe `+tech` **jusqu'où
on descend**. La même définition sert aux deux lectures : les détails
techniques s'écrivent une fois, et le type décide de les montrer ou non.

**`appli` — le schéma de flux.** Une application centrale, les autres de part
et d'autre. C'est l'exemple ci-dessus.

**`+tech` — la couche technique.** Chaque protocole devient un connecteur posé
sur le bord de la boîte où sa flèche arrive, le port écrit à côté. Voici la
même définition, au mot près, avec `type: appli+tech` :

![Le même schéma, avec sa couche technique](https://framagit.org/opikanoba/schema-archi/-/raw/main/docs/images/patient-tech.png)

**`doctype` — le schéma de document.** Pas de centre : le schéma suit un type
de document, ceux qui le produisent à gauche, ceux qui le consomment à droite.
Ici en `doctype+tech`, depuis
[`examples/yaml/resultats.yaml`](https://framagit.org/opikanoba/schema-archi/-/blob/main/examples/yaml/resultats.yaml) :

![Schéma de document](https://framagit.org/opikanoba/schema-archi/-/raw/main/docs/images/resultats.png)

Un flux peut traverser un ou plusieurs **bus d'intégration**, porter un lien
cliquable, et chaque application une **étiquette**. Le détail des quatre
valeurs et de tout ce qui s'écrit dans une définition est dans
[docs/formats.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/formats.md).

## Installation

```bash
pip install schema-archi              # bibliothèque + commande
pip install schema-archi[png]         # + export PNG (cairosvg)
pip install schema-archi[ui]          # + éditeur web (FastAPI)
```

## Trois façons de s'en servir

### En ligne de commande

Un répertoire de définitions en entrée, un schéma par fichier en sortie.

```bash
schema-archi -i mes-schemas -o resultats -c config.yaml --overwrite
```

Options, codes de retour et journal :
[docs/cli.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/cli.md).

### Depuis Python

```python
from schema_archi import Generator

g = Generator()
g.load_data("examples/yaml/patient.yaml")
g.load_config("examples/yaml/config.yaml")  # facultatif

svg = g.graph()
```

Les définitions s'écrivent aussi en objets, sans passer par un fichier. Seize
exemples commentés, chacun avec son rendu, et la liste des noms exportés :
[docs/api.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/api.md).

### Dans un éditeur web

```bash
schema-archi-ui          # http://localhost:8080
```

Deux panneaux YAML, l'aperçu à côté, l'export en SVG ou PNG. Rien n'est écrit
côté serveur, et aucune ressource n'est chargée depuis Internet. Réglages,
limites et API :
[docs/ui.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/ui.md).

## En conteneur

L'éditeur et le traitement par lot se construisent aussi en images OCI,
vérifiées sans privilège avant d'être exportées :

```bash
scripts/build_container.sh --image all   # les deux images, exportées dans dist/
scripts/run_container.sh                 # l'éditeur, confiné, sur http://127.0.0.1:8080/
```

Construction, confinement et exposition derrière un mandataire :
[docker/README.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docker/README.md).

## Habiller le schéma

Couleurs, dimensions, polices et marges se règlent dans un second fichier,
facultatif, organisé par sujet — `page`, `app`, `main`, `flow`, `tag`, `bus`,
`connector` :

```yaml
app:
  colors: {text: '#0050ef', stroke: '#6c8ebf', fill: '#dae8fc'}
flow:
  label:
    font_size: 12
```

Les clés omises gardent leur valeur par défaut.
[`examples/yaml/config.yaml`](https://framagit.org/opikanoba/schema-archi/-/blob/main/examples/yaml/config.yaml)
les contient toutes, et
[docs/formats.md § 4](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/formats.md#4-le-fichier-de-configuration)
décrit chaque paramètre.

## Documentation

- [Formats d'entrée](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/formats.md)
  — les types de diagramme, la définition clé par clé, la disposition, la
  configuration, et les messages de diagnostic.
- [Utiliser la bibliothèque depuis Python](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/api.md)
  — seize exemples commentés, du plus court chemin au traitement par lot,
  chacun avec son rendu, et l'API publique.
- [La commande `schema-archi`](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/cli.md)
  — le traitement par lot, ses options et ses codes de retour.
- [L'éditeur web](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/ui.md)
  — la page, les variables d'environnement, les limites et l'API.
- [Fonctionnement et algorithme](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/algorithme.md)
  — les cinq étapes de la génération, les formules de placement, un exemple
  chiffré et les limites connues.
- [Développement](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/developpement.md)
  — la barrière qualité, les suites de tests, la régénération des images.
- [Analyses de qualité](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/analyses/README.md)
  — une passe par fichier daté : constats retenus, faux positifs confirmés, et
  la méthode pour rejouer les outils.
- [Publier sur PyPI](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/publication.md)
  — comptes, jetons, numérotation, répétition sur TestPyPI et marche à suivre.

## Développement

```bash
uv sync --all-extras --group dev
uv run pytest
scripts/check.sh            # ruff, pyright, pytest — la barrière complète
```

Le détail est dans
[docs/developpement.md](https://framagit.org/opikanoba/schema-archi/-/blob/main/docs/developpement.md).

## Licence

MIT — voir [LICENSE](LICENSE).
