arctyp 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arctyp-0.1.2/.gitignore +21 -0
- arctyp-0.1.2/.gitlab-ci.yml +76 -0
- arctyp-0.1.2/.python-version +1 -0
- arctyp-0.1.2/CONTRIBUTING.md +140 -0
- arctyp-0.1.2/PKG-INFO +185 -0
- arctyp-0.1.2/README.md +175 -0
- arctyp-0.1.2/pyproject.toml +22 -0
- arctyp-0.1.2/src/arctyp/__init__.py +22 -0
- arctyp-0.1.2/src/arctyp/__main__.py +8 -0
- arctyp-0.1.2/src/arctyp/cli.py +40 -0
- arctyp-0.1.2/src/arctyp/commands/__init__.py +35 -0
- arctyp-0.1.2/src/arctyp/commands/_shared.py +24 -0
- arctyp-0.1.2/src/arctyp/commands/compile.py +29 -0
- arctyp-0.1.2/src/arctyp/commands/doctor.py +107 -0
- arctyp-0.1.2/src/arctyp/commands/init.py +211 -0
- arctyp-0.1.2/src/arctyp/commands/uml.py +38 -0
- arctyp-0.1.2/src/arctyp/commands/watch.py +144 -0
- arctyp-0.1.2/src/arctyp/decorators.py +117 -0
- arctyp-0.1.2/src/arctyp/errors.py +18 -0
- arctyp-0.1.2/src/arctyp/http.py +36 -0
- arctyp-0.1.2/src/arctyp/output.py +56 -0
- arctyp-0.1.2/src/arctyp/parser.py +117 -0
- arctyp-0.1.2/src/arctyp/pipeline.py +66 -0
- arctyp-0.1.2/src/arctyp/plantuml.py +158 -0
- arctyp-0.1.2/src/arctyp/project.py +84 -0
- arctyp-0.1.2/tests/test_cli.py +750 -0
- arctyp-0.1.2/uv.lock +64 -0
arctyp-0.1.2/.gitignore
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
# uv cache (CI): contains build venvs whose absolute symlinks must never
|
|
13
|
+
# end up packed into a source distribution
|
|
14
|
+
.uv-cache/
|
|
15
|
+
|
|
16
|
+
# PDF générés par les tests/compilations
|
|
17
|
+
*.pdf
|
|
18
|
+
|
|
19
|
+
# Projets de test locaux créés par `arctyp init`
|
|
20
|
+
proj/
|
|
21
|
+
doctor/
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# CI/CD du paquet arctyp : test, build, publication.
|
|
2
|
+
#
|
|
3
|
+
# Publication uniquement sur un commit tagué :
|
|
4
|
+
# - Registre de paquets GitLab : automatique (CI_JOB_TOKEN, aucun secret à
|
|
5
|
+
# configurer) ;
|
|
6
|
+
# - PyPI : activée dès que la variable UV_PUBLISH_TOKEN existe
|
|
7
|
+
# (Paramètres > CI/CD > Variables, masquée et protégée).
|
|
8
|
+
#
|
|
9
|
+
# Le tag doit correspondre à la version de pyproject.toml (`v0.2.0` ou
|
|
10
|
+
# `0.2.0`), sinon la publication échoue avant tout envoi.
|
|
11
|
+
|
|
12
|
+
workflow:
|
|
13
|
+
rules:
|
|
14
|
+
# Évite les pipelines dupliqués (RM + branche) et couvre les tags.
|
|
15
|
+
- if: "$CI_PIPELINE_SOURCE == 'merge_request_event'"
|
|
16
|
+
- if: "$CI_COMMIT_BRANCH"
|
|
17
|
+
- if: "$CI_COMMIT_TAG"
|
|
18
|
+
|
|
19
|
+
stages: [test, build, publish]
|
|
20
|
+
|
|
21
|
+
variables:
|
|
22
|
+
UV_CACHE_DIR: .uv-cache
|
|
23
|
+
|
|
24
|
+
default:
|
|
25
|
+
image: ghcr.io/astral-sh/uv:python3.13-bookworm-slim
|
|
26
|
+
cache:
|
|
27
|
+
key:
|
|
28
|
+
files: [uv.lock]
|
|
29
|
+
paths: [$UV_CACHE_DIR]
|
|
30
|
+
|
|
31
|
+
test:
|
|
32
|
+
stage: test
|
|
33
|
+
script:
|
|
34
|
+
- uv sync --frozen
|
|
35
|
+
- uv run python -m unittest discover -s tests -v
|
|
36
|
+
|
|
37
|
+
build:
|
|
38
|
+
stage: build
|
|
39
|
+
script:
|
|
40
|
+
- uv build
|
|
41
|
+
artifacts:
|
|
42
|
+
paths: [dist/]
|
|
43
|
+
expire_in: 1 week
|
|
44
|
+
|
|
45
|
+
# Garde-fou partagé des publications : refuse d'envoyer si le tag et la
|
|
46
|
+
# version déclarée divergent (un upload PyPI est immuable).
|
|
47
|
+
.verify-tag:
|
|
48
|
+
before_script:
|
|
49
|
+
- |
|
|
50
|
+
VERSION=$(python -c \
|
|
51
|
+
"import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
52
|
+
if [ "$VERSION" != "${CI_COMMIT_TAG#v}" ]; then
|
|
53
|
+
echo "✗ tag $CI_COMMIT_TAG ≠ version $VERSION (pyproject.toml) — abandon."
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
publish:gitlab:
|
|
58
|
+
stage: publish
|
|
59
|
+
extends: .verify-tag
|
|
60
|
+
rules:
|
|
61
|
+
- if: "$CI_COMMIT_TAG"
|
|
62
|
+
script:
|
|
63
|
+
- >
|
|
64
|
+
uv publish
|
|
65
|
+
--publish-url "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi"
|
|
66
|
+
--username gitlab-ci-token
|
|
67
|
+
--password "$CI_JOB_TOKEN"
|
|
68
|
+
|
|
69
|
+
publish:pypi:
|
|
70
|
+
stage: publish
|
|
71
|
+
extends: .verify-tag
|
|
72
|
+
# Sans la variable, ce job est simplement ignoré : le pipeline reste vert.
|
|
73
|
+
rules:
|
|
74
|
+
- if: "$CI_COMMIT_TAG && $UV_PUBLISH_TOKEN"
|
|
75
|
+
script:
|
|
76
|
+
- uv publish # lit UV_PUBLISH_TOKEN depuis l'environnement
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Contribuer à arctyp
|
|
2
|
+
|
|
3
|
+
Guide pour les développeurs du projet : structure, conventions et procédure d'ajout d'une commande.
|
|
4
|
+
Voir aussi le [cahier des charges](../wiki/CDC.md) pour les spécifications complètes.
|
|
5
|
+
|
|
6
|
+
## Environnement de développement
|
|
7
|
+
|
|
8
|
+
Prérequis : [uv](https://docs.astral.sh/uv/) (gère le venv, les dépendances et l'installation
|
|
9
|
+
éditable). Le compilateur Typst est fourni par le paquet Python `typst` (déjà une dépendance du
|
|
10
|
+
projet) — aucun binaire externe n'est requis.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
uv sync # installe les dépendances dans .venv et synchronise uv.lock
|
|
14
|
+
uv run arctyp --help # lance la CLI depuis les sources
|
|
15
|
+
uv lock --check # vérifie que uv.lock est à jour
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Structure
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
src/arctyp/
|
|
22
|
+
├── cli.py # point d'entrée : parse, dispatch, codes de sortie
|
|
23
|
+
├── parser.py # construit l'arbre argparse depuis le registre (validation incluse)
|
|
24
|
+
├── decorators.py # @command / @argument + CommandSpec/ArgumentSpec + registre COMMANDS
|
|
25
|
+
├── errors.py # ArctypError : erreur métier affichée sans traceback
|
|
26
|
+
├── output.py # vocabulaire des messages (✔ / ✗, étapes, chemins)
|
|
27
|
+
├── http.py # requêtes HTTP simples partagées (stdlib)
|
|
28
|
+
├── plantuml.py # client PlantUML : encodage officiel + rendu SVG/PNG via l'API
|
|
29
|
+
├── gitlab.py # client API GitLab : liste et archive des templates
|
|
30
|
+
├── project.py # contexte projet partagé : racine, arctyp.toml, entrée main.typ
|
|
31
|
+
├── pipeline.py # chaîne de compilation (diagrammes + Typst), partagée compile/watch
|
|
32
|
+
├── commands/ # une commande (ou un groupe) par fichier, auto-découvert
|
|
33
|
+
│ └── compile.py # ex. : @command(name="compile") + @argument("pdf", ...)
|
|
34
|
+
└── tests/ # tests unittest (stdlib) : registre, parser, codes de sortie
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Le registre `decorators.COMMANDS` (liste typée de `CommandSpec`) est rempli à l'import du paquet
|
|
38
|
+
`arctyp.commands`, qui découvre automatiquement tous les modules du dossier (ordre alphabétique,
|
|
39
|
+
les fichiers préfixés `_` sont ignorés). `parser.build_parser()` lit ce registre, valide les
|
|
40
|
+
déclarations (noms dupliqués, `parent` inconnu, groupes mal formés) et construit l'arbre argparse ;
|
|
41
|
+
`cli.main()` se charge uniquement du dispatch et des codes de sortie.
|
|
42
|
+
|
|
43
|
+
## Ajouter une commande
|
|
44
|
+
|
|
45
|
+
Créez un fichier dans `src/arctyp/commands/` — aucune inscription ailleurs n'est nécessaire.
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
"""`arctyp ping` : exemple de nouvelle commande."""
|
|
49
|
+
|
|
50
|
+
from arctyp.decorators import argument, command
|
|
51
|
+
from arctyp.errors import ArctypError
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@command(
|
|
55
|
+
name="ping",
|
|
56
|
+
help="envoie une requête de test au serveur PlantUML",
|
|
57
|
+
description="Longue description affichée par `arctyp ping --help`.",
|
|
58
|
+
)
|
|
59
|
+
@argument(
|
|
60
|
+
"--count",
|
|
61
|
+
type=int,
|
|
62
|
+
default=1,
|
|
63
|
+
help="nombre de requêtes à envoyer",
|
|
64
|
+
)
|
|
65
|
+
def cmd_ping(args) -> int:
|
|
66
|
+
# TODO : implémenter la logique.
|
|
67
|
+
raise not_implemented("ping")
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- `@command` : nom, `help` (liste des commandes), `description` (aide détaillée), `parent`
|
|
71
|
+
(sous-commande d'un groupe, ex. `list` dans `template`), `group=True` (marqueur de groupe),
|
|
72
|
+
`**kwargs` passés à `add_parser`.
|
|
73
|
+
- `@argument` : arguments positionnels et options, passés tels quels à `add_argument` ; s'empile
|
|
74
|
+
librement au-dessus ou en dessous de `@command`.
|
|
75
|
+
- Pour un groupe avec sous-commandes, déclarez un marqueur `group=True` puis les sous-commandes
|
|
76
|
+
avec `parent="nom-du-groupe"` (voir `commands/template.py`).
|
|
77
|
+
- Un bouchon lève `not_implemented("nom-de-la-commande")` (voir `errors.py`).
|
|
78
|
+
|
|
79
|
+
## Conventions
|
|
80
|
+
|
|
81
|
+
- **Retour de commande** : chaque handler renvoie un `int` (code de sortie) ; `0` succès,
|
|
82
|
+
`1` erreur, `130` interruption (Ctrl-C).
|
|
83
|
+
- **Erreurs** : lever `ArctypError` pour toute erreur attendue — le message est affiché en une
|
|
84
|
+
ligne avec le préfixe `arctyp: erreur :`, sans traceback. Ne jamais laisser un traceback
|
|
85
|
+
atteindre l'utilisateur.
|
|
86
|
+
- **Messages** : en français, explicites et actionnables (que doit faire l'utilisateur ?).
|
|
87
|
+
- **Code** : identifiants et commentaires en anglais ; seules les chaînes visibles par
|
|
88
|
+
l'utilisateur (messages, aide, erreurs) restent en français.
|
|
89
|
+
- **Standard library only** : pas de nouvelle dépendance sans justification ; préférer
|
|
90
|
+
`urllib`, `tomllib`, `argparse`, `pathlib`. Seule exception actuelle :
|
|
91
|
+
`watchdog`, pour la surveillance par événements système de `arctyp watch`
|
|
92
|
+
(importé à la demande, ~400 ms de chargement non payés au démarrage de la CLI).
|
|
93
|
+
- **Rendu PlantUML** : tout rendu passe par `arctyp.plantuml` (encodage officiel PlantUML,
|
|
94
|
+
requête HTTP avant la compilation). Serveur par défaut : celui de l'école
|
|
95
|
+
(`plantuml.he-arc.ch`) ; l'option `--public` bascule sur l'API publique ; `ARCTYP_PLANTUML_URL`
|
|
96
|
+
ou `[plantuml] url` dans arctyp.toml vise un autre serveur.
|
|
97
|
+
- **Squelette** : tant que la logique n'est pas implémentée, lever `not_implemented("commande")`
|
|
98
|
+
(source unique du message « pas encore implémenté ») — les commandes doivent rester exécutables
|
|
99
|
+
(aide, args).
|
|
100
|
+
- **KISS / DRY** : pas d'abstraction superflue ; toute logique dupliquée deux fois ou plus est
|
|
101
|
+
factorisée (ex. `not_implemented`, `_add_subparsers`).
|
|
102
|
+
- **Validation** : à chaque modification, vérifier `uv run arctyp --help`, l'aide de la commande
|
|
103
|
+
touchée, et les codes de sortie attendus.
|
|
104
|
+
|
|
105
|
+
## Vérifications avant de pousser
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
uv lock --check
|
|
109
|
+
uv run python -m unittest discover -s tests -v # suite de tests (stdlib)
|
|
110
|
+
uv run arctyp --help
|
|
111
|
+
uv run arctyp doctor # diagnostique le projet et la chaîne (sortie propre)
|
|
112
|
+
uv run python -m arctyp --help
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Git
|
|
116
|
+
|
|
117
|
+
- Branche principale : `main` ; le suivi des tâches se fait via les issues GitLab du groupe.
|
|
118
|
+
- Identité locale du dépôt : `Yanis Amani <yanis.amani@he-arc.ch>` (`git config user.name/email`).
|
|
119
|
+
|
|
120
|
+
## Publication d'une version (CI/CD)
|
|
121
|
+
|
|
122
|
+
Le pipeline `.gitlab-ci.yml` teste, construit puis publie automatiquement le paquet sur un
|
|
123
|
+
commit tagué : registre de paquets GitLab (toujours), PyPI (si configurée).
|
|
124
|
+
|
|
125
|
+
1. Bumper la `version` dans `pyproject.toml`, commit sur `main`.
|
|
126
|
+
2. Créer un tag aligné (`v0.2.0` ou `0.2.0`) et le pousser — sinon la publication échoue :
|
|
127
|
+
`git tag v0.2.0 && git push origin main v0.2.0`.
|
|
128
|
+
3. Le job `publish:gitlab` publie via `$CI_JOB_TOKEN` (aucun secret à configurer) ; installer
|
|
129
|
+
ensuite depuis le registre du projet :
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
uv tool install arctyp \
|
|
133
|
+
--index-url https://<gitlab>/api/v4/projects/<PROJECT_ID>/packages/pypi/simple
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Pour activer PyPI en plus : définir la variable `UV_PUBLISH_TOKEN`
|
|
137
|
+
(Paramètres > CI/CD > Variables ; masquée + protégée, token du compte pypi.org).
|
|
138
|
+
Sans cette variable, le job `publish:pypi` est ignoré et le pipeline reste vert.
|
|
139
|
+
Recommandé : protéger les tags (`Settings > Repository > Protected tags`) pour que seuls
|
|
140
|
+
les mainteneurs puissent déclencher une publication.
|
arctyp-0.1.2/PKG-INFO
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: arctyp
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: CLI d'orchestration pour la composition Typst à la HE-Arc : rend les diagrammes UML via PlantUML interne et compile le PDF en local.
|
|
5
|
+
Author-email: Yanis Amani <yanis.amani@he-arc.ch>, Elias Tormos <elias.tormos@he-arc.ch>, Younes Kherbach <younes.kherbach@he-arc.ch>
|
|
6
|
+
Requires-Python: >=3.13
|
|
7
|
+
Requires-Dist: typst>=0.15.0
|
|
8
|
+
Requires-Dist: watchdog>=6.0.0
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
|
|
11
|
+
# arctyp
|
|
12
|
+
|
|
13
|
+
> Point d'entrée unique pour la composition de documents Typst à la HE-Arc : rend les diagrammes UML en interne, copie les templates officiels depuis GitLab dans le projet et compile le PDF, sans dépendre d'aucun service externe.
|
|
14
|
+
|
|
15
|
+
État : en cours de développement (projet P3, HES d'été 2026-2027).
|
|
16
|
+
|
|
17
|
+
## Table des matières
|
|
18
|
+
|
|
19
|
+
- [Pourquoi ce projet](#pourquoi-ce-projet)
|
|
20
|
+
- [Fonctionnement](#fonctionnement)
|
|
21
|
+
- [Installation](#installation)
|
|
22
|
+
- [Démarrage rapide](#démarrage-rapide)
|
|
23
|
+
- [Commandes](#commandes)
|
|
24
|
+
- [Configuration](#configuration)
|
|
25
|
+
- [Utilisation hors ligne](#utilisation-hors-ligne)
|
|
26
|
+
- [Développement](#développement)
|
|
27
|
+
- [Décisions de conception](#décisions-de-conception)
|
|
28
|
+
- [Dépôts liés](#dépôts-liés)
|
|
29
|
+
- [Équipe](#équipe)
|
|
30
|
+
|
|
31
|
+
## Pourquoi ce projet
|
|
32
|
+
|
|
33
|
+
Typst n'effectue aucun accès réseau à la compilation : un document ne peut ni appeler le serveur PlantUML, ni télécharger un template. C'est le rôle de `arctyp` d'orchestrer ces étapes, qui n'ont pas d'équivalent dans Typst seul. L'utilisateur final ne manipule donc que la CLI, sans connaître l'existence des serveurs sous-jacents.
|
|
34
|
+
|
|
35
|
+
## Fonctionnement
|
|
36
|
+
|
|
37
|
+
`arctyp` orchestre la compilation Typst sur le poste de l'utilisateur :
|
|
38
|
+
|
|
39
|
+
1. rendre les diagrammes `.puml` via le serveur PlantUML interne et écrire les SVG en cache ;
|
|
40
|
+
2. compiler `main.typ` en PDF via le paquet Python `typst` (nom de sortie obligatoire).
|
|
41
|
+
|
|
42
|
+
Le projet est initialisé par `arctyp init` : un projet de base prêt à l'emploi
|
|
43
|
+
(`conf.typ`, `template.typ`, `uml.typ`, `main.typ`, `diagrams/`, `images/`),
|
|
44
|
+
avec dépôt Git. Les templates officiels se récupèrent directement avec Git
|
|
45
|
+
(`git clone` du dépôt `templates`) — la CLI ne gère pas les templates.
|
|
46
|
+
|
|
47
|
+
Aucun paquet Typst n'est installé : le projet compile tel quel. L'utilisateur écrit son contenu
|
|
48
|
+
dans `main.typ`, et peut modifier les paramètres (couleurs, marges, page de titre…) directement dans
|
|
49
|
+
les fichiers, sans réinstaller quoi que ce soit :
|
|
50
|
+
|
|
51
|
+
```typst
|
|
52
|
+
#import "conf.typ": *
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Typst est épinglé dans la CLI, la CI, le web et la documentation : le même PDF est produit partout.
|
|
56
|
+
Version actuelle : **0.15.0** (paquet Python `typst` — dernière version publiée sur PyPI ; la 0.15.1 du
|
|
57
|
+
compilateur n'y est pas encore disponible). Le web (`arctyp-web`, typst.ts) épinglera la même version
|
|
58
|
+
de compilateur, écart documenté le temps que les paquets rattrapent la release.
|
|
59
|
+
|
|
60
|
+
## Installation
|
|
61
|
+
|
|
62
|
+
Prérequis : `pipx` ou `uv` installés.
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pipx install arctyp
|
|
66
|
+
# ou
|
|
67
|
+
uv tool install arctyp
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Démarrage rapide
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Initie un projet de base complet avec dépôt Git
|
|
74
|
+
arctyp init mon-rapport
|
|
75
|
+
cd mon-rapport
|
|
76
|
+
|
|
77
|
+
# Compile : rend les diagrammes, génère le PDF demandé (nom obligatoire)
|
|
78
|
+
arctyp compile mon-rapport.pdf
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Commandes
|
|
82
|
+
|
|
83
|
+
| Commande | Rôle |
|
|
84
|
+
|----------|------|
|
|
85
|
+
| `arctyp init [répertoire]` | Initie un projet de base complet (conf.typ, template.typ, uml.typ, dossiers diagrams/ et images/, dépôt Git) ; répertoire courant par défaut ; `--force` pour écraser un répertoire non vide |
|
|
86
|
+
| `arctyp uml <fichier.puml>` | Rend un diagramme UML via le serveur PlantUML interne ; `--public` pour l'API publique |
|
|
87
|
+
| `arctyp compile <rapport.pdf>` | Rendu des diagrammes, compilation du PDF ; le nom de sortie est obligatoire ; `--public` pour le serveur PlantUML public |
|
|
88
|
+
| `arctyp watch <rapport.pdf>` | Compile puis recompile à chaque modification (Ctrl-C pour arrêter) ; `--public` pour le serveur PlantUML public |
|
|
89
|
+
| `arctyp doctor` | Diagnostic de la configuration et de l'accessibilité des serveurs |
|
|
90
|
+
|
|
91
|
+
## Configuration
|
|
92
|
+
|
|
93
|
+
Un fichier `arctyp.toml` à la racine du projet regroupe ses paramètres ; il est écrit par
|
|
94
|
+
`arctyp init`. Les URLs des serveurs viennent de l'environnement (jamais de ce fichier, qui
|
|
95
|
+
est versionné) :
|
|
96
|
+
|
|
97
|
+
```toml
|
|
98
|
+
[project]
|
|
99
|
+
entry = "main.typ" # fichier d'entrée Typst
|
|
100
|
+
|
|
101
|
+
[plantuml]
|
|
102
|
+
format = "svg" # "svg" (défaut) ou "png" — l'extension de sortie suit
|
|
103
|
+
|
|
104
|
+
[compile] # options passées telles quelles à typst.compile
|
|
105
|
+
# pdf_standards = "a-2b" # PDF/A pour l'archivage
|
|
106
|
+
# font_paths = ["polices/"] # polices supplémentaires (charte graphique)
|
|
107
|
+
# ppi = 144 # résolution des conversions d'images
|
|
108
|
+
# sys_inputs = { date = "..." } # valeurs injectées dans le document
|
|
109
|
+
# format = "pdf" # format de sortie
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Variables d'environnement : `ARCTYP_PLANTUML_URL` ou `[plantuml] url` dans arctyp.toml pour
|
|
113
|
+
viser un autre serveur PlantUML ; sinon le serveur de l'école (`plantuml.he-arc.ch`) est
|
|
114
|
+
utilisé par défaut, et l'option `--public` (`uml`, `compile`, `watch`, `doctor`) bascule sur
|
|
115
|
+
l'API publique. `arctyp doctor` vérifie cette configuration et l'accessibilité de la
|
|
116
|
+
chaîne ; les messages d'erreur sont explicites et actionnables lorsque un serveur est
|
|
117
|
+
injoignable.
|
|
118
|
+
|
|
119
|
+
## Utilisation hors ligne
|
|
120
|
+
|
|
121
|
+
Dès lors que les diagrammes ont été rendus au moins une fois, un document se recompile hors ligne, sans accès au réseau de l'école.
|
|
122
|
+
|
|
123
|
+
## Développement
|
|
124
|
+
|
|
125
|
+
Le projet est géré avec `uv` : l'environnement virtuel, les dépendances et l'installation
|
|
126
|
+
éditable sont pris en charge par cet outil.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Installer les dépendances (crée .venv) et synchroniser uv.lock
|
|
130
|
+
uv sync
|
|
131
|
+
|
|
132
|
+
# Lancer la CLI depuis les sources (équivalent à `arctyp ...`)
|
|
133
|
+
uv run arctyp --help
|
|
134
|
+
uv run python -m arctyp --help
|
|
135
|
+
|
|
136
|
+
# Vérifier que le verrouillage des dépendances est à jour
|
|
137
|
+
uv lock --check
|
|
138
|
+
|
|
139
|
+
# Lancer la suite de tests (unittest, stdlib — aucune dépendance supplémentaire)
|
|
140
|
+
uv run python -m unittest discover -s tests -v
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Test rapide** :
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
uv run arctyp --version # -> arctyp 0.1.0
|
|
147
|
+
uv run arctyp uml diagrams/schema.puml # rend le diagramme via l'API PlantUML (foo.puml -> foo.svg)
|
|
148
|
+
uv run arctyp compile rapport.pdf # rend les diagrammes puis compile main.typ en PDF
|
|
149
|
+
uv run arctyp doctor # diagnostique le projet et la chaîne
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Les commandes sont déclarées via des décorateurs dans le paquet `arctyp.commands` (un fichier
|
|
153
|
+
par commande) ; voir [CONTRIBUTING.md](CONTRIBUTING.md) pour la structure, l'ajout d'une commande
|
|
154
|
+
et les conventions.
|
|
155
|
+
|
|
156
|
+
## Décisions de conception
|
|
157
|
+
|
|
158
|
+
Les choix structurants sont détaillés, avec leurs alternatives, dans le
|
|
159
|
+
[registre des décisions du wiki](../wiki/DECISIONS.md). Résumé côté CLI :
|
|
160
|
+
|
|
161
|
+
- **Pas de gestion de templates** : les templates se récupèrent par `git clone` (D-02) — la CLI
|
|
162
|
+
n'a ni `login`, ni `publish`, ni liste.
|
|
163
|
+
- **Templates = fichiers ordinaires** : jamais de paquet `@he-arc` à installer (D-01) ;
|
|
164
|
+
`arctyp init` crée un projet de base prêt à l'emploi.
|
|
165
|
+
- **Diagrammes avant compilation** : Typst n'a pas accès au réseau — la CLI rend les `.puml` et la
|
|
166
|
+
fonction `uml()` des templates charge le résultat (D-03).
|
|
167
|
+
- **Stdlib-only + `watchdog`** (seule dépendance, importée paresseusement) et tests `unittest`
|
|
168
|
+
(D-06) ; commandes déclarées par décorateurs dans chaque fichier (D-07).
|
|
169
|
+
- **Version de Typst épinglée** : 0.15.0 côté paquet Python (maximum PyPI), 0.15.1 compilateur —
|
|
170
|
+
écart documenté (D-08).
|
|
171
|
+
|
|
172
|
+
## Dépôts liés
|
|
173
|
+
|
|
174
|
+
| Dépôt | Rôle |
|
|
175
|
+
|-------|------|
|
|
176
|
+
| [`wiki`](../wiki/) | Documentation du projet : README global, cahier des charges, guides |
|
|
177
|
+
| [`templates`](../templates/) | Dépôt GitLab des templates officiels ; liste et téléchargement via l'API GitLab |
|
|
178
|
+
| [`plantuml`](../plantuml/) | Serveur PlantUML : `docker compose`, configuration de durcissement |
|
|
179
|
+
| [`arctyp-web`](../arctyp-web/) | Interface web de gestion des projets et compilation (exploratoire) |
|
|
180
|
+
|
|
181
|
+
Les spécifications fonctionnelles et non fonctionnelles détaillées figurent dans le [cahier des charges](../wiki/CDC.md).
|
|
182
|
+
|
|
183
|
+
## Équipe
|
|
184
|
+
|
|
185
|
+
Elias Tormos, Yanis Amani, Younes Kherbach (projet P3, HES d'été 2026-2027). Encadrement : Le Callennec Benoit, Senn Julien.
|
arctyp-0.1.2/README.md
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# arctyp
|
|
2
|
+
|
|
3
|
+
> Point d'entrée unique pour la composition de documents Typst à la HE-Arc : rend les diagrammes UML en interne, copie les templates officiels depuis GitLab dans le projet et compile le PDF, sans dépendre d'aucun service externe.
|
|
4
|
+
|
|
5
|
+
État : en cours de développement (projet P3, HES d'été 2026-2027).
|
|
6
|
+
|
|
7
|
+
## Table des matières
|
|
8
|
+
|
|
9
|
+
- [Pourquoi ce projet](#pourquoi-ce-projet)
|
|
10
|
+
- [Fonctionnement](#fonctionnement)
|
|
11
|
+
- [Installation](#installation)
|
|
12
|
+
- [Démarrage rapide](#démarrage-rapide)
|
|
13
|
+
- [Commandes](#commandes)
|
|
14
|
+
- [Configuration](#configuration)
|
|
15
|
+
- [Utilisation hors ligne](#utilisation-hors-ligne)
|
|
16
|
+
- [Développement](#développement)
|
|
17
|
+
- [Décisions de conception](#décisions-de-conception)
|
|
18
|
+
- [Dépôts liés](#dépôts-liés)
|
|
19
|
+
- [Équipe](#équipe)
|
|
20
|
+
|
|
21
|
+
## Pourquoi ce projet
|
|
22
|
+
|
|
23
|
+
Typst n'effectue aucun accès réseau à la compilation : un document ne peut ni appeler le serveur PlantUML, ni télécharger un template. C'est le rôle de `arctyp` d'orchestrer ces étapes, qui n'ont pas d'équivalent dans Typst seul. L'utilisateur final ne manipule donc que la CLI, sans connaître l'existence des serveurs sous-jacents.
|
|
24
|
+
|
|
25
|
+
## Fonctionnement
|
|
26
|
+
|
|
27
|
+
`arctyp` orchestre la compilation Typst sur le poste de l'utilisateur :
|
|
28
|
+
|
|
29
|
+
1. rendre les diagrammes `.puml` via le serveur PlantUML interne et écrire les SVG en cache ;
|
|
30
|
+
2. compiler `main.typ` en PDF via le paquet Python `typst` (nom de sortie obligatoire).
|
|
31
|
+
|
|
32
|
+
Le projet est initialisé par `arctyp init` : un projet de base prêt à l'emploi
|
|
33
|
+
(`conf.typ`, `template.typ`, `uml.typ`, `main.typ`, `diagrams/`, `images/`),
|
|
34
|
+
avec dépôt Git. Les templates officiels se récupèrent directement avec Git
|
|
35
|
+
(`git clone` du dépôt `templates`) — la CLI ne gère pas les templates.
|
|
36
|
+
|
|
37
|
+
Aucun paquet Typst n'est installé : le projet compile tel quel. L'utilisateur écrit son contenu
|
|
38
|
+
dans `main.typ`, et peut modifier les paramètres (couleurs, marges, page de titre…) directement dans
|
|
39
|
+
les fichiers, sans réinstaller quoi que ce soit :
|
|
40
|
+
|
|
41
|
+
```typst
|
|
42
|
+
#import "conf.typ": *
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Typst est épinglé dans la CLI, la CI, le web et la documentation : le même PDF est produit partout.
|
|
46
|
+
Version actuelle : **0.15.0** (paquet Python `typst` — dernière version publiée sur PyPI ; la 0.15.1 du
|
|
47
|
+
compilateur n'y est pas encore disponible). Le web (`arctyp-web`, typst.ts) épinglera la même version
|
|
48
|
+
de compilateur, écart documenté le temps que les paquets rattrapent la release.
|
|
49
|
+
|
|
50
|
+
## Installation
|
|
51
|
+
|
|
52
|
+
Prérequis : `pipx` ou `uv` installés.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pipx install arctyp
|
|
56
|
+
# ou
|
|
57
|
+
uv tool install arctyp
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Démarrage rapide
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Initie un projet de base complet avec dépôt Git
|
|
64
|
+
arctyp init mon-rapport
|
|
65
|
+
cd mon-rapport
|
|
66
|
+
|
|
67
|
+
# Compile : rend les diagrammes, génère le PDF demandé (nom obligatoire)
|
|
68
|
+
arctyp compile mon-rapport.pdf
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Commandes
|
|
72
|
+
|
|
73
|
+
| Commande | Rôle |
|
|
74
|
+
|----------|------|
|
|
75
|
+
| `arctyp init [répertoire]` | Initie un projet de base complet (conf.typ, template.typ, uml.typ, dossiers diagrams/ et images/, dépôt Git) ; répertoire courant par défaut ; `--force` pour écraser un répertoire non vide |
|
|
76
|
+
| `arctyp uml <fichier.puml>` | Rend un diagramme UML via le serveur PlantUML interne ; `--public` pour l'API publique |
|
|
77
|
+
| `arctyp compile <rapport.pdf>` | Rendu des diagrammes, compilation du PDF ; le nom de sortie est obligatoire ; `--public` pour le serveur PlantUML public |
|
|
78
|
+
| `arctyp watch <rapport.pdf>` | Compile puis recompile à chaque modification (Ctrl-C pour arrêter) ; `--public` pour le serveur PlantUML public |
|
|
79
|
+
| `arctyp doctor` | Diagnostic de la configuration et de l'accessibilité des serveurs |
|
|
80
|
+
|
|
81
|
+
## Configuration
|
|
82
|
+
|
|
83
|
+
Un fichier `arctyp.toml` à la racine du projet regroupe ses paramètres ; il est écrit par
|
|
84
|
+
`arctyp init`. Les URLs des serveurs viennent de l'environnement (jamais de ce fichier, qui
|
|
85
|
+
est versionné) :
|
|
86
|
+
|
|
87
|
+
```toml
|
|
88
|
+
[project]
|
|
89
|
+
entry = "main.typ" # fichier d'entrée Typst
|
|
90
|
+
|
|
91
|
+
[plantuml]
|
|
92
|
+
format = "svg" # "svg" (défaut) ou "png" — l'extension de sortie suit
|
|
93
|
+
|
|
94
|
+
[compile] # options passées telles quelles à typst.compile
|
|
95
|
+
# pdf_standards = "a-2b" # PDF/A pour l'archivage
|
|
96
|
+
# font_paths = ["polices/"] # polices supplémentaires (charte graphique)
|
|
97
|
+
# ppi = 144 # résolution des conversions d'images
|
|
98
|
+
# sys_inputs = { date = "..." } # valeurs injectées dans le document
|
|
99
|
+
# format = "pdf" # format de sortie
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Variables d'environnement : `ARCTYP_PLANTUML_URL` ou `[plantuml] url` dans arctyp.toml pour
|
|
103
|
+
viser un autre serveur PlantUML ; sinon le serveur de l'école (`plantuml.he-arc.ch`) est
|
|
104
|
+
utilisé par défaut, et l'option `--public` (`uml`, `compile`, `watch`, `doctor`) bascule sur
|
|
105
|
+
l'API publique. `arctyp doctor` vérifie cette configuration et l'accessibilité de la
|
|
106
|
+
chaîne ; les messages d'erreur sont explicites et actionnables lorsque un serveur est
|
|
107
|
+
injoignable.
|
|
108
|
+
|
|
109
|
+
## Utilisation hors ligne
|
|
110
|
+
|
|
111
|
+
Dès lors que les diagrammes ont été rendus au moins une fois, un document se recompile hors ligne, sans accès au réseau de l'école.
|
|
112
|
+
|
|
113
|
+
## Développement
|
|
114
|
+
|
|
115
|
+
Le projet est géré avec `uv` : l'environnement virtuel, les dépendances et l'installation
|
|
116
|
+
éditable sont pris en charge par cet outil.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Installer les dépendances (crée .venv) et synchroniser uv.lock
|
|
120
|
+
uv sync
|
|
121
|
+
|
|
122
|
+
# Lancer la CLI depuis les sources (équivalent à `arctyp ...`)
|
|
123
|
+
uv run arctyp --help
|
|
124
|
+
uv run python -m arctyp --help
|
|
125
|
+
|
|
126
|
+
# Vérifier que le verrouillage des dépendances est à jour
|
|
127
|
+
uv lock --check
|
|
128
|
+
|
|
129
|
+
# Lancer la suite de tests (unittest, stdlib — aucune dépendance supplémentaire)
|
|
130
|
+
uv run python -m unittest discover -s tests -v
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Test rapide** :
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
uv run arctyp --version # -> arctyp 0.1.0
|
|
137
|
+
uv run arctyp uml diagrams/schema.puml # rend le diagramme via l'API PlantUML (foo.puml -> foo.svg)
|
|
138
|
+
uv run arctyp compile rapport.pdf # rend les diagrammes puis compile main.typ en PDF
|
|
139
|
+
uv run arctyp doctor # diagnostique le projet et la chaîne
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Les commandes sont déclarées via des décorateurs dans le paquet `arctyp.commands` (un fichier
|
|
143
|
+
par commande) ; voir [CONTRIBUTING.md](CONTRIBUTING.md) pour la structure, l'ajout d'une commande
|
|
144
|
+
et les conventions.
|
|
145
|
+
|
|
146
|
+
## Décisions de conception
|
|
147
|
+
|
|
148
|
+
Les choix structurants sont détaillés, avec leurs alternatives, dans le
|
|
149
|
+
[registre des décisions du wiki](../wiki/DECISIONS.md). Résumé côté CLI :
|
|
150
|
+
|
|
151
|
+
- **Pas de gestion de templates** : les templates se récupèrent par `git clone` (D-02) — la CLI
|
|
152
|
+
n'a ni `login`, ni `publish`, ni liste.
|
|
153
|
+
- **Templates = fichiers ordinaires** : jamais de paquet `@he-arc` à installer (D-01) ;
|
|
154
|
+
`arctyp init` crée un projet de base prêt à l'emploi.
|
|
155
|
+
- **Diagrammes avant compilation** : Typst n'a pas accès au réseau — la CLI rend les `.puml` et la
|
|
156
|
+
fonction `uml()` des templates charge le résultat (D-03).
|
|
157
|
+
- **Stdlib-only + `watchdog`** (seule dépendance, importée paresseusement) et tests `unittest`
|
|
158
|
+
(D-06) ; commandes déclarées par décorateurs dans chaque fichier (D-07).
|
|
159
|
+
- **Version de Typst épinglée** : 0.15.0 côté paquet Python (maximum PyPI), 0.15.1 compilateur —
|
|
160
|
+
écart documenté (D-08).
|
|
161
|
+
|
|
162
|
+
## Dépôts liés
|
|
163
|
+
|
|
164
|
+
| Dépôt | Rôle |
|
|
165
|
+
|-------|------|
|
|
166
|
+
| [`wiki`](../wiki/) | Documentation du projet : README global, cahier des charges, guides |
|
|
167
|
+
| [`templates`](../templates/) | Dépôt GitLab des templates officiels ; liste et téléchargement via l'API GitLab |
|
|
168
|
+
| [`plantuml`](../plantuml/) | Serveur PlantUML : `docker compose`, configuration de durcissement |
|
|
169
|
+
| [`arctyp-web`](../arctyp-web/) | Interface web de gestion des projets et compilation (exploratoire) |
|
|
170
|
+
|
|
171
|
+
Les spécifications fonctionnelles et non fonctionnelles détaillées figurent dans le [cahier des charges](../wiki/CDC.md).
|
|
172
|
+
|
|
173
|
+
## Équipe
|
|
174
|
+
|
|
175
|
+
Elias Tormos, Yanis Amani, Younes Kherbach (projet P3, HES d'été 2026-2027). Encadrement : Le Callennec Benoit, Senn Julien.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "arctyp"
|
|
3
|
+
version = "0.1.2"
|
|
4
|
+
description = "CLI d'orchestration pour la composition Typst à la HE-Arc : rend les diagrammes UML via PlantUML interne et compile le PDF en local."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "Yanis Amani", email = "yanis.amani@he-arc.ch" },
|
|
8
|
+
{ name = "Elias Tormos", email = "elias.tormos@he-arc.ch" },
|
|
9
|
+
{ name = "Younes Kherbach", email = "younes.kherbach@he-arc.ch" },
|
|
10
|
+
]
|
|
11
|
+
requires-python = ">=3.13"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"typst>=0.15.0",
|
|
14
|
+
"watchdog>=6.0.0",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.scripts]
|
|
18
|
+
arctyp = "arctyp.cli:main"
|
|
19
|
+
|
|
20
|
+
[build-system]
|
|
21
|
+
requires = ["hatchling"]
|
|
22
|
+
build-backend = "hatchling.build"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""arctyp — orchestration CLI for Typst composition at HE-Arc.
|
|
2
|
+
|
|
3
|
+
Renders UML diagrams via the internal PlantUML server and compiles the PDF
|
|
4
|
+
locally.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib.metadata import PackageNotFoundError
|
|
8
|
+
from importlib.metadata import version as _package_version
|
|
9
|
+
|
|
10
|
+
APP_NAME = "arctyp"
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
# Single source of truth: [project].version in pyproject.toml, read from
|
|
14
|
+
# the installed package's metadata (never duplicated in code).
|
|
15
|
+
__version__: str = _package_version(APP_NAME)
|
|
16
|
+
except PackageNotFoundError: # running from an uninstalled source tree
|
|
17
|
+
__version__ = "0.0.0+unknown"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def user_agent() -> str:
|
|
21
|
+
"""Shared User-Agent for the CLI's HTTP requests (name + version, single source)."""
|
|
22
|
+
return f"{APP_NAME}/{__version__} (HE-Arc)"
|