-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocessing-config-schema.json
More file actions
159 lines (159 loc) · 6.35 KB
/
Copy pathprocessing-config-schema.json
File metadata and controls
159 lines (159 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
{
"type": "object",
"x-display": "tabs",
"required": ["dataset", "url"],
"allOf": [
{
"title": "Jeu de données",
"properties": {
"dataset": {
"type": "object",
"title": "Jeu de données (éditable uniquement)",
"x-fromUrl": "{context.dataFairUrl}/api/v1/datasets?q={q}&select=id,title&rest=true&{context.ownerFilter}",
"x-itemsProp": "results",
"x-itemTitle": "title",
"x-itemKey": "id",
"properties": {
"id": { "type": "string", "title": "Identifiant" },
"title": { "type": "string", "title": "Titre" }
}
},
"drop": {
"type": "boolean",
"title": "Supprimer les données avant import",
"description": "Supprime toutes les lignes du jeu de données éditable avant d'y importer les nouvelles. Si décoché, les lignes seront ajoutées à la suite / éditées selon la clé primaire du jeu de données.",
"default": false
}
}
},
{
"title": "Source des données",
"properties": {
"url": {
"title": "URL source",
"type": "string",
"pattern": "^(https?|s?ftp|ftps)://",
"description": "L'URL doit commencer par `http://`, `https://`, `ftp://`, `ftps://` ou `sftp://`.\n\n- **URL vers un dossier** (se terminant par `/`) : importe tous les fichiers correspondant au format choisi (onglet « Champs à récupérer ») dans le dossier (extension insensible à la casse, `.json` comme `.JSON`, `.csv` comme `.CSV`).\n- **URL vers un fichier** (se terminant par `.json` ou `.csv` selon le format choisi) : importe ce fichier uniquement.\n\nSi l'URL ne se termine ni par `/` ni par l'extension attendue, le comportement par défaut tente de télécharger un fichier unique."
},
"username": {
"title": "Utilisateur",
"type": "string",
"layout": {
"props": {
"autocomplete": "suppress"
}
}
},
"password": {
"title": "Mot de passe",
"type": "string",
"layout": {
"props": {
"type": "password",
"autocomplete": "suppress"
}
}
},
"format": {
"type": "string",
"title": "Format des fichiers sources",
"default": "json",
"oneOf": [
{ "const": "json", "title": "JSON" },
{ "const": "csv", "title": "CSV" }
]
},
"sourceAction": {
"type": "string",
"title": "Action sur les fichiers sources après import",
"description": "Que faire des fichiers sur le serveur distant une fois qu'ils ont été importés avec succès.\n\n- **Ne rien faire** : les fichiers sont laissés tels quels sur le serveur.\n- **Supprimer** : chaque fichier importé est supprimé du serveur distant.\n- **Déplacer** : chaque fichier importé est déplacé dans le dossier d'archive configuré ci-dessous, ce qui permet d'en conserver une copie hors de son emplacement d'origine.\n\nEn mode « Supprimer » ou « Déplacer », si aucun fichier n'est trouvé sur le serveur, l'exécution est ignorée : elle se termine sans erreur et n'apparaît pas dans la liste des exécutions.",
"default": "none",
"layout": {
"if": "parent.data.url && (parent.data.url.toLowerCase().startsWith('ftp') || parent.data.url.toLowerCase().startsWith('sftp'))"
},
"oneOf": [
{ "const": "delete", "title": "Supprimer" },
{ "const": "move", "title": "Déplacer" },
{ "const": "none", "title": "Ne rien faire" }
]
},
"backupDir": {
"type": "string",
"title": "Dossier d'archive (chemin absolu sur le serveur)",
"description": "Chemin absolu du dossier où déplacer les fichiers sources après import (par exemple `/archives/mon-jeu-de-donnees`).\n\n- Le dossier est créé automatiquement s'il n'existe pas.\n- Si un fichier du même nom existe déjà dans le dossier d'archive, il est écrasé lors du déplacement.\n- Laissé vide, les fichiers sont déplacés dans un sous-dossier `backup` créé à côté du fichier (ou à l'intérieur du dossier importé).",
"layout": {
"if": "parent.data.sourceAction === 'move'"
}
}
}
},
{
"layout": { "if": "!parent.data.format || parent.data.format === 'json'" },
"title": "Champs à récupérer",
"properties": {
"resultsPath": {
"type": "string",
"title": "Chemin des résultats",
"description": "Chemin d'accès du tableau de résultats dans le json",
"default": ""
},
"block": { "$ref": "#/definitions/block" },
"separator": {
"type": "string",
"title": "Séparateur pour les tableaux",
"default": ";"
}
}
}
],
"definitions": {
"block": {
"type": "object",
"properties": {
"mapping": {
"type": "array",
"title": "Champs à récupérer",
"description": "Les colonnes qui seront récupérées depuis ce niveau",
"x-itemTitle": "key",
"items": {
"type": "object",
"required": ["key", "path"],
"properties": {
"key": {
"type": "string",
"title": "Identifiant de la colonne",
"description": "Clé de la colonne"
},
"path": {
"type": "string",
"title": "Chemin de la colonne",
"description": "Chemin d'accès dans le json à partir de cette position"
}
}
}
},
"expand": {
"title": "Données en profondeur d'un tableau",
"type": "object",
"layout": "card",
"properties": {
"path": {
"type": "string",
"title": "Chemin de la colonne",
"description": "Chemin d'accès dans le json à partir de cette position"
}
},
"dependencies": {
"path": {
"properties": {
"block": {
"$ref": "#/definitions/block"
}
}
}
}
}
}
}
}
}