Skip to content

Commit 7f3c3d6

Browse files
committed
update
1 parent 876b6ee commit 7f3c3d6

File tree

4 files changed

+310
-4
lines changed

4 files changed

+310
-4
lines changed

docs/.vuepress/config.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,15 @@ theme: defaultTheme({
3535
'validation',
3636
'formulaire'
3737
]
38-
}
38+
},
39+
{
40+
text: 'Importation',
41+
prefix: '/import',
42+
children: [
43+
'configuration',
44+
'configyml'
45+
]
46+
}
3947
],
4048
},
4149
}),

docs/configuration/validation.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,11 @@ properties:
266266
description: "Quota messagerie"
267267
sogxdisableflag:
268268
type: "number"
269-
integer: true
270-
min: 0
271-
max: 1
272269
description: "Disable/enable"
270+
proxyaddress:
271+
type: "array"
272+
items:
273+
type: string
273274

274275
```
275276

docs/import/configuration.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Import des données
2+
3+
## Principe
4+
L'import des données est réalisée par **sesame-crawler**. Il est installé automatiquement vec le script d'installation.
5+
6+
Pour importer les données le *crawler** a besoin d'un fichier de configuration pour mapper les champs entre votre
7+
fichier et sesame.
8+
9+
une fois le fichier de configuration fait il suffit de génerer un fichier json avec les données dedans.
10+
11+
## Arborescence
12+
13+
Lors de l installation un répertoire **import** a été créé avec un repertoire cache, data et un fichier .env
14+
15+
```
16+
import-├--cache
17+
├--data
18+
├config.yml
19+
├.env
20+
```
21+
22+
* cache : les données à importer seront mise dans ce repertoire
23+
* data : *pour diagnostic* le fichier json represente les données envoyées à l API après avoir été traitées par le preprocesseur de l'import
24+
* .env : Fichier de paramètre
25+
* config.yml : Fichier de configuration
26+
27+
28+
# Configuration
29+
30+
## Fichier .env
31+
Il contient l'authentification et l'adresse du serveur sesame
32+
33+
```
34+
SESAME_API_BASEURL=http://sesame-orchestrator:4000
35+
SESAME_IMPORT_PARALLELS_FILES=1
36+
SESAME_IMPORT_PARALLELS_ENTRIES=5
37+
SESAME_API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6eyJfaWQiOi
38+
I2NjY4MDg1MzlkMGJhZTk2NDE2MTE4ZmYiLCJ1c2VybmFtZSI6ImltcG9ydCIsImRpc3BsYXlOYW1lIj
39+
oiaW1wb3J0IiwidG9rZW4iOiI3ODcxMmIyYmY0ZGM5M2YwZjg1NzkzODNiY2EzYmViMWYzMjRkNmE4Yj
40+
A5MWIwMGIyYzJhNjhjYmZkMzdhZjQ5YjkxMTUwYjcyOTFhMTY5MmJiNDNjZTI3ZGJjNTZhNDRiZTI3ZD
41+
YxMDY5NjVmM2U4NTYzMzMzZDYxYzY4ZjNkZiJ9LCJzY29wZXMiOlsic2VzYW1lIiwiYXBpIl0sImlhdC
42+
I6MTcxODA5MzkwNywiZXhwIjoyMDMzNjY5OTA3LCJzdWIiOiI2NjY4MDg1MzlkMGJhZTk2NDE2MTE4Zm
43+
YiLCJqdGkiOiI2NjY4MDg1MzlkMGJhZTk2NDE2MTE4ZmZfNDNmYzAzZDAyMDdjYTk0YTU1MmU1NjQ4MD
44+
RkZWE1ZjEifQ.iL3aA_mG11IZg5N8i72CCMnPwgI2YVSzNH4B8M3MpeY
45+
```
46+
* SESAME_API_BASEURL : Url du serveur (dans le cadre de docker sur le meme socle l adresse du container)
47+
* SESAME_IMPORT_PARALLELS_FILES : Traitement en parallele des fichiers
48+
* SESAME_IMPORT_PARALLELS_ENTRIES : Traitement en parallèle des entrées
49+
* SESAME_API_TOKEN : Jeton d'autehntification (obtenu avec la commande **make sesame-create-keyring**
50+

docs/import/configyml.md

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
# Configuration de l'import
2+
3+
Le fichier config.yml sert à configurer l'import. Il decrit les champs qui seront presents dans le fichier de données json déposé dans cache.
4+
5+
## Structure
6+
Le fichier config.yml comporte un bloc par nom de fichier qui sera présent dans cache.
7+
8+
Il est au format yml
9+
10+
```
11+
[NOM_DU_FICHIER]:
12+
mapping:
13+
[nom_champs_sesame]: "[nom_champs_json]"
14+
...
15+
additionalFields:
16+
additionalFields.objectClasses:
17+
- [SCHEMA_DE_VALIDATION_SESAME_SUPPLEMENTAIRE]
18+
- ...
19+
[nom_champs_sesame]: "CONSTANTE"
20+
...
21+
transforms:
22+
[nom_champs_sesame]:
23+
- "ACTION1"
24+
- ...
25+
[AUTRE_FICHER]:
26+
mapping ...
27+
28+
```
29+
30+
Le fichier de data doit avoir cette structure :
31+
* Une clé data qui comportera un tableau des identités à dréer ou à modifier
32+
33+
```
34+
{
35+
"data": [
36+
{
37+
...
38+
}
39+
...
40+
]
41+
}
42+
```
43+
44+
Par defaut l'existence de l'identité est cherchée par le couple **"inetOrgPerson.employeeType"** et **"inetOrgPerson.employeeNumber"**
45+
46+
Ces deux clés doivent être présente dans le fichier de data si la clé de recherche n'a pas été changée
47+
48+
#### Exemple de fichier config.yml
49+
```
50+
import.json:
51+
mapping:
52+
inetOrgPerson.employeeNumber: "employeeNumber"
53+
inetOrgPerson.title: "title"
54+
additionalFields:
55+
inetOrgPerson.employeeType: "TAIGA"
56+
```
57+
58+
Fichier de données associée (dans cache/import.json
59+
60+
```
61+
{
62+
"data": [
63+
{
64+
"employeeNumber":"183493",
65+
"employeeType":"TAIGA",
66+
"title":"ETUDIANT"
67+
}
68+
]
69+
}
70+
```
71+
72+
### Section mapping
73+
74+
Ce paragraphe, dans le fichier config.yml sert à definir qui va où.
75+
Il associe les champs standards de sesame et les champs additionnels avec la valeur du fichier de data
76+
77+
#### champs standards
78+
Les champs standards (voir documentation [/configuration/validation](/configuration/validation). Ces champs sont préfixés avec le inetOrgPerson ex :interOrgPerson.title. Sa valeur est le nom de la clé dans le fichier data
79+
80+
```
81+
inetOrgPerson.title: "title"
82+
```
83+
Les champs peuvent être combinés ex: Imagnons que nous avons, dans notre fichier data un champ nom et un champ prenom :
84+
85+
```
86+
inetOrgPerson.title:
87+
- "nom"
88+
- "prenom"
89+
90+
```
91+
Ce champs pourra être transformé par la suite dans la section **transforms**
92+
93+
#### champs additionnels
94+
95+
Si vous avez défini des schemas de validations supplémentaires vous pouvez dans cette section les mapper aussi
96+
97+
La syntaxe est :
98+
99+
* additionalFields.attributes.[SCHEMA].[ATTRIBUT] : [CLE]
100+
101+
Exemple : si vous avez un schema de validation sogxuser avec proxyaddress comme attribut :
102+
103+
```
104+
additionalFields.attributes.sogxuser.proxyaddress: "proxyaddress"
105+
```
106+
#### Controle à l'insertion et de l'update
107+
Si l'identité n est pas trouvée elle sera créée.
108+
109+
Par defaut, lors de l update chaque champs present dans la source sera remplacé. Ce comportement peut être modifié et indiquer que le champs ne sera écrit que lors de l insertion et non durant l'update. Pour ce faire il suffit d'ajouter le mot clé **$setOnInsert**
110+
111+
Exemple : nous ne voulons pas que le champs uid soit ecrasé lors d'un update :
112+
113+
```
114+
$setOnInsert.inetOrgPerson.uid:
115+
- "prenom"
116+
- "nom"
117+
```
118+
119+
### Section additionalFields
120+
121+
Cette section premet de preciser quels schemas de validation seront (autre que inetOrgPerson).
122+
123+
Elle permet aussi de fixer des valeurs par champs
124+
125+
#### Declaration des schemas supplementaires
126+
127+
Les schemas supplementaires se declarent dans la clé **additionalFields.objectClasses** en forme de liste
128+
129+
```
130+
additionalFields.objectClasses:
131+
- sogxuser
132+
```
133+
134+
### Section transforms
135+
136+
Cette section permet de faire une transformation sur un champ avant qu'il soit envoyé
137+
138+
Plusieurs actions sont disponibles
139+
140+
141+
142+
La syntaxe génerale est :
143+
144+
```
145+
146+
[nom_champs_sesame] :
147+
- "ACTION1"
148+
149+
```
150+
Si plusieurs méthodes sont précisées, elles seront exécutées dans l'ordre, chacune travaillant sur le résultat de la méthode précedente.
151+
152+
nom_champs_sesame doit être décrit aussi dans la section mapping
153+
154+
Exemple :
155+
156+
```
157+
mapping:
158+
inetOrgPerson.employeeNumber: employeeNumber
159+
$setOnInsert.inetOrgPerson.uid:
160+
- "prenom"
161+
- "nom"
162+
additionalFields:
163+
inetOrgPerson.employeeType: "TAIGA"
164+
transforms:
165+
$setOnInsert.inetOrgPerson.uid:
166+
- "join(delimiter='.')"
167+
- "remove_accents"
168+
- "lower"
169+
```
170+
171+
Si notre fichier de données et le suivant :
172+
173+
```
174+
{
175+
"data": [
176+
{
177+
"employeeNumber":"101661",
178+
"employeeType":"TAIGA",
179+
"nom":"ETUDIANTTEST1",
180+
"prenom": "éLoise",
181+
"nom" : "DUPONT"
182+
}
183+
]
184+
}
185+
```
186+
* la premiere action va joindre les deux champs. Le resultat sera "éloise.DUPONT"
187+
* la deuxième action va oter les accents "eloise.DUPONT"
188+
* et enfin la troisieme action va mettre le tout en minuscule "eloise.dupont"
189+
190+
#### Les différentes transformations disponibles
191+
192+
| Nom de l'action| Description |
193+
| --- | --- |
194+
| `capitalize` | Convertit la première lettre en majuscule et le reste en minuscule |
195+
| `lower` | Convertit tous les caractères en minuscule |
196+
| `upper` | Convertit tous les caractères en majuscule |
197+
| `title` | Convertit tous le premier caractère en Majuscule de chaque mot et le reste en minuscule |
198+
| `remove_accents` | Enlève les accents de la chaine de caractères |
199+
| `join(delimiter=' ')` | contactaine les élements avec le séparateur indiqué |
200+
| `prefix(string='prefix-')` | Ajoute la chaine definie au debut de la chaine |
201+
| `suffix(string='-suffix')` | Ajoute la chaine definie à la fin de la chaine |
202+
| `split(delimiter=' ')` | Eclate la chaine de caractère en un tableau |
203+
| `replace(old, new)` | Replace une valeur dans la chaine par une autre |
204+
| `regex(pattern, replace)` | Applique une expression réguliere et remplace les élements trouvés |
205+
206+
207+
Exemple de regex utile :
208+
209+
On veut un uid de la forme premiere lettre du prenom et nom
210+
Eloise Dupont doit donner edupont
211+
212+
```
213+
$setOnInsert.inetOrgPerson.uid:
214+
- "join(delimiter='.')"
215+
- "remove_accents"
216+
- "lower"
217+
- "regex(pattern='(?<=\\b\\w)([a-zA-Z0-9_\\-]+\\.)', replace='')"
218+
```
219+
220+
Exemple :
221+
On veut definir une adresse email qui soit prenom.nom@mondomaine.com. On veut aussi que les espace soitent remplacés par un "-"
222+
223+
```
224+
```
225+
mapping:
226+
inetOrgPerson.employeeNumber: employeeNumber
227+
$setOnInsert.inetOrgPerson.uid:
228+
- "prenom"
229+
- "nom"
230+
inetOrgPerson.mail:
231+
- "prenom"
232+
- "nom"
233+
additionalFields:
234+
inetOrgPerson.employeeType: "TAIGA"
235+
transforms:
236+
$setOnInsert.inetOrgPerson.uid:
237+
- "join(delimiter='.')"
238+
- "remove_accents"
239+
- "lower"
240+
inetOrgPerson.mail:
241+
- "join(delimiter='.')"
242+
- "remove_accents"
243+
- "lower"
244+
- "replace(old=' ',new='-')"
245+
- "suffix(string='@mondomaine.com')"
246+
247+
```

0 commit comments

Comments
 (0)