From d7f6997e81473a11cc617e5eadf1cf1be31e4cee Mon Sep 17 00:00:00 2001 From: Ladislas de Toldi Date: Fri, 9 Feb 2024 16:04:54 +0100 Subject: [PATCH] :technologist: (tools): Add skills.yml check, hook --- .pre-commit-config.yaml | 12 + .../Resources/Content/skills/skills.yml | 497 +++++++++--------- Specs/jtd/skills.jtd.json | 12 +- Tools/Hooks/check_yaml_data_skills.py | 61 +++ 4 files changed, 327 insertions(+), 255 deletions(-) create mode 100755 Tools/Hooks/check_yaml_data_skills.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 11b16f05a2..21f1173f00 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -78,3 +78,15 @@ repos: language: python additional_dependencies: ["ruamel.yaml"] files: authors.yml + + - id: check_yaml_data_skills + name: Check skills.yml + description: | + This hook checks skills.yml for: + - non unique ids + - jtd schema validation + It also formats the file and sorts the entries + entry: python3 Tools/Hooks/check_yaml_data_skills.py + language: python + additional_dependencies: ["ruamel.yaml"] + files: skills.yml diff --git a/Modules/ContentKit/Resources/Content/skills/skills.yml b/Modules/ContentKit/Resources/Content/skills/skills.yml index 2266c7e1d1..4aaa7f099e 100644 --- a/Modules/ContentKit/Resources/Content/skills/skills.yml +++ b/Modules/ContentKit/Resources/Content/skills/skills.yml @@ -3,44 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 version: 1.0.0 -skills: - - id: spatial_understanding - l10n: - - locale: en_US - name: Spatial understanding - description: > - Understanding and knowing how to position oneself in a place, see - where things are around, and how to move or navigate in that space. - - locale: fr_FR - name: Apprehension de l'espace - description: > - Comprendre et savoir comment se situer dans un lieu, voir où les - choses se trouvent autour de soi, et comment bouger ou se déplacer - dans cet espace. - subskills: [] - - - id: time_and_temporality_understanding - l10n: - - locale: en_US - name: Time and temporality understanding - description: > - Understanding time and knowing when things happen (For example, - breakfast is in the morning and dinner is in the evening). This also - means knowing how long things last (For example, a minute is shorter - than an hour) and understanding the order of events (For example, - today is after yesterday and before tomorrow, spring is after winter - and before summer). - - locale: fr_FR - name: Apprehension du temps et de la temporalité - description: > - Comprendre le temps et savoir quand les choses arrivent (par exemple, - le petit-déjeuner a lieu le matin et le diner a lieu le soir). Cela - signifie aussi savoir combien de temps durent les choses (par exemple, - une minute est plus courte qu'une heure) et connaître l'ordre des - événements (par exemple, aujourd'hui est après hier et avant demain, - le printemps est après l'hiver et avant l'été). - subskills: [] - +list: - id: association l10n: - locale: en_US @@ -98,101 +61,6 @@ skills: alphabétique). subskills: [] - - id: relationship_tablet_robot - l10n: - - locale: en_US - name: Relationship between tablet and robot - description: > - Understanding the causal link between tablet and robot. Understanding - that touching the tablet makes the Leka robot move and change. - - locale: fr_FR - name: Relation entre tablette et robot - description: > - Comprendre le lien de causalité entre tablette et robot. Comprendre - qu'en touchant la tablette, cela fait bouger ou changer le robot Leka. - subskills: [] - - - id: discrimination - l10n: - - locale: en_US - name: Discrimination - description: > - Ability to see the difference between things (for example, knowing the - difference between an apple and an orange by looking at them or - hearing the difference between sounds, like the sound of a piano and a - guitar). - - locale: fr_FR - name: Discrimination - description: > - Capacité à voir la différence entre des choses (par exemple, savoir - quelle est la différence entre une pomme et une orange en les - regardant ou entendre la différence entre des sons, comme le son d'un - piano et celui d'une guitare). - subskills: [] - - - id: generalization - l10n: - - locale: en_US - name: Generalization - description: > - Learning something in one situation and knowing how to apply it in - different situations (for example, learning that a pen is used for - writing and then knowing that all pens are used for writing, even if - they are different colors shapes). - - locale: fr_FR - name: Généralisation - description: > - Apprendre quelque chose dans une situation et savoir l'utiliser dans - d'autres situations différentes (par exemple, apprendre qu'un stylo - sert à écrire, et ensuite savoir que tous les stylos servent à écrire, - même s'ils sont de différentes couleurs ou formes). - subskills: [] - - - id: memory - l10n: - - locale: en_US - name: Memory - description: > - Ability to store, retain, and remember information. - - locale: fr_FR - name: Mémoire - description: > - Capacité de stocker, garder et se souvenir des informations. - subskills: - - id: memory/short_term_memory - l10n: - - locale: en_US - name: Short-term memory - description: > - Ability to hold and process a limited amount of information for a - short period, usually from a few seconds to a minute (for example, - remembering the order of a sequence of colors just observed). - - locale: fr_FR - name: Mémoire court-terme - description: > - Capacité de retenir et de traiter une quantité limitée - d'informations pour une courte période, généralement de quelques - secondes à une minute (par exemple, garder en tête l'ordre d'une - séquence de couleurs que l'on vient d'observer). - subskills: [] - - - id: memory/long_term_memory - l10n: - - locale: en_US - name: Long-term memory - description: > - Ability to store and retrieve information over a long period, - ranging from a few minutes to a lifetime. It includes personal - memories, acquired knowledge, skills, and experiences. - - locale: fr_FR - name: Mémoire long terme - description: > - Capacité de stocker et de récupérer des informations sur une - longue période, allant de quelques minutes à toute une vie. Elle - inclut des souvenirs personnels, des connaissances acquises, des - compétences, et des expériences. - subskills: [] - - id: attention l10n: - locale: en_US @@ -249,74 +117,6 @@ skills: une histoire ensemble). subskills: [] - - id: inhibition - l10n: - - locale: en_US - name: Inhibition - description: > - Ability to refrain from doing something, even if tempted to do so (for - example, not touching the Leka robot when it's not my turn, even if I - really want to). - - locale: fr_FR - name: Inhibition - description: > - Capacité à se retenir de faire quelque chose, même si on a envie de le - faire (par exemple, ne pas toucher le robot Leka quand ce n'est pas - mon tour, même si j'en ai très envie). - subskills: [] - - - id: self_regulation - l10n: - - locale: en_US - name: Self-regulation - description: > - Ability to control reactions in response to emotions. Learning to calm - down after a strong emotion or not react impulsively. - - locale: fr_FR - name: Autorégulation - description: > - Capacité à contrôler ses réactions en réponse à ses émotions. - Apprendre à se calmer après une émotion forte ou à ne pas réagir de - manière impulsive. - subskills: [] - - - id: empathy - l10n: - - locale: en_US - name: Empathy - description: > - Understanding and feeling what others feel (for example, if someone is - sad, empathy allows understanding why they are sad and being able to - put oneself in their place). - - locale: fr_FR - name: Empathie - description: > - Comprendre et ressentir ce que les autres personnes ressentent (par - exemple, si quelqu'un est triste, l'empathie permet de comprendre - pourquoi il est triste et d'être capable de se mettre à sa place). - subskills: [] - - - id: social_interactions - l10n: - - locale: en_US - name: Social interactions - description: > - Social interactions occur when people interact and mutually influence - each other's behaviors. When a person speaks, uses gestures, or - expresses emotions, it elicits a response from another person. This - response, in turn, can influence the initial action or reaction of the - first person. - - locale: fr_FR - name: Interactions sociales - description: > - Les interactions sociales se déroulent lorsque les personnes - interagissent et influencent mutuellement leurs comportements. - Lorsqu'une personne parle, utilise des gestes ou exprime des émotions, - cela provoque une réponse chez une autre personne. Cette réponse, à - son tour, peut influencer l'action ou la réaction initiale de la - première personne. - subskills: [] - - id: communication l10n: - locale: en_US @@ -365,6 +165,7 @@ skills: description: > Comprendre les mots que les gens disent. subskills: [] + - id: >- communication/verbal_communication/receptive_language/written_comprehension l10n: @@ -377,6 +178,7 @@ skills: description: > Comprendre les mots écrits dans les livres ou ailleurs. subskills: [] + - id: communication/verbal_communication/expressive_language l10n: - locale: en_US @@ -400,6 +202,7 @@ skills: description: > Utiliser des mots pour s'exprimer. subskills: [] + - id: >- communication/verbal_communication/expressive_language/written_expression l10n: @@ -441,6 +244,7 @@ skills: Cela implique de faire des signes avec les mains et d'utiliser des expressions faciales pour exprimer des idées sans parler. subskills: [] + - id: communication/augmentative_alternative_communication/makaton l10n: - locale: en_US @@ -457,6 +261,7 @@ skills: parole est bien présente et est complétée par des signes et des symboles pour renforcer la communication. subskills: [] + - id: communication/augmentative_alternative_communication/pecs l10n: - locale: en_US @@ -499,6 +304,7 @@ skills: Bouger les mains et les bras pour montrer des choses sans parler. subskills: [] + - id: communication/non_verbal_communication/pointing l10n: - locale: en_US @@ -512,6 +318,7 @@ skills: Utiliser un doigt pour montrer quelque chose ou quelqu'un sans utiliser de mots. subskills: [] + - id: communication/non_verbal_communication/gaze l10n: - locale: en_US @@ -525,6 +332,7 @@ skills: Regarder des choses ou des personnes avec les yeux pour montrer ce qu'on pense ou ce qu'on ressent sans dire des mots. subskills: [] + - id: communication/non_verbal_communication/facial_expressions l10n: - locale: en_US @@ -538,6 +346,7 @@ skills: Faire des expressions différentes avec son visage pour montrer comment on se sent, comme sourire quand on est content. subskills: [] + - id: communication/non_verbal_communication/vocalizations l10n: - locale: en_US @@ -549,6 +358,7 @@ skills: description: > Faire des sons qui ne sont pas de vrais mots. subskills: [] + - id: communication/non_verbal_communication/smiles l10n: - locale: en_US @@ -563,34 +373,67 @@ skills: l'approbation ou toute sorte d'émotion agréable subskills: [] - - id: turn_taking + - id: counting l10n: - locale: en_US - name: Turn taking + name: Counting description: > - Ability to know when to speak, listen, or act in a social interaction, - respecting a predetermined order or sequence. + Knowing how to say numbers in order (1,2,3, and so on) and being able + to count things to determine quantity (for example, counting how many + apples are in a basket). - locale: fr_FR - name: Tour de rôle + name: Comptage numérique description: > - Capacité de savoir quand parler, écouter ou agir dans une interaction - sociale, en respectant un ordre ou une séquence préétablie. + Savoir dire les nombres dans l'ordre (1,2,3 et ainsi de suite) et + pouvoir compter des choses pour déterminer la quantité. (par exemple, + compter combien de pommes sont dans un panier). subskills: [] - - - id: gross_motor_skills + - id: discrimination l10n: - locale: en_US - name: Gross motor skills + name: Discrimination description: > - Ability to use large muscles for movements such as walking, running, - jumping, and throwing things. + Ability to see the difference between things (for example, knowing the + difference between an apple and an orange by looking at them or + hearing the difference between sounds, like the sound of a piano and a + guitar). - locale: fr_FR - name: Motricité globale + name: Discrimination description: > - Capacité à utiliser les grands muscles pour faire des mouvements tels - que marcher, courir, sauter et lancer des choses. + Capacité à voir la différence entre des choses (par exemple, savoir + quelle est la différence entre une pomme et une orange en les + regardant ou entendre la différence entre des sons, comme le son d'un + piano et celui d'une guitare). + subskills: [] + - id: empathy + l10n: + - locale: en_US + name: Empathy + description: > + Understanding and feeling what others feel (for example, if someone is + sad, empathy allows understanding why they are sad and being able to + put oneself in their place). + - locale: fr_FR + name: Empathie + description: > + Comprendre et ressentir ce que les autres personnes ressentent (par + exemple, si quelqu'un est triste, l'empathie permet de comprendre + pourquoi il est triste et d'être capable de se mettre à sa place). + subskills: [] + - id: familiarization_with_leka + l10n: + - locale: en_US + name: Familiarization with Leka + description: > + The skill of "familiarization with Leka" involves helping the + care receiver feel comfortable and confident with the Leka robot. + - locale: fr_FR + name: Familiarisation avec Leka + description: > + La compétence "familiarisation avec Leka" consiste à aider + la personne accompagnée à se sentir à l'aise et en confiance avec le robot + Leka. subskills: [] - - id: fine_motor_skills l10n: - locale: en_US @@ -610,54 +453,95 @@ skills: écrire, dessiner, boutonner une chemise, manipuler de petits objets, ou utiliser des outils comme des ciseaux ou des crayons. subskills: [] - - - id: familiarization_with_leka + - id: generalization l10n: - locale: en_US - name: Familiarization with Leka + name: Generalization description: > - The skill of "familiarization with Leka" involves helping the - care receiver feel comfortable and confident with the Leka robot. + Learning something in one situation and knowing how to apply it in + different situations (for example, learning that a pen is used for + writing and then knowing that all pens are used for writing, even if + they are different colors shapes). - locale: fr_FR - name: Familiarisation avec Leka + name: Généralisation description: > - La compétence "familiarisation avec Leka" consiste à aider - la personne accompagnée à se sentir à l'aise et en confiance avec le robot Leka. + Apprendre quelque chose dans une situation et savoir l'utiliser dans + d'autres situations différentes (par exemple, apprendre qu'un stylo + sert à écrire, et ensuite savoir que tous les stylos servent à écrire, + même s'ils sont de différentes couleurs ou formes). subskills: [] - - - id: sensory_interaction + - id: gross_motor_skills l10n: - locale: en_US - name: Sensory interaction + name: Gross motor skills description: > - Manifests when a care receiver plays with the robot and uses their senses to - interact. This includes watching Leka's changing colors and lights, - listening to the sounds or music it produces, and touching and feeling - Leka by manipulating or playing with it. + Ability to use large muscles for movements such as walking, running, + jumping, and throwing things. - locale: fr_FR - name: Sensorialité + name: Motricité globale description: > - Se manifeste quand une personne accompagnée joue avec le robot et utilise ses sens - pour interagir. Cela inclut regarder les couleurs et lumières - changeantes de Leka, écouter les sons ou musiques qu'il émet, et - toucher et ressentir Leka en le manipulant ou en jouant avec lui. + Capacité à utiliser les grands muscles pour faire des mouvements tels + que marcher, courir, sauter et lancer des choses. subskills: [] - - - id: counting + - id: inhibition l10n: - locale: en_US - name: Counting + name: Inhibition description: > - Knowing how to say numbers in order (1,2,3, and so on) and being able - to count things to determine quantity (for example, counting how many - apples are in a basket). + Ability to refrain from doing something, even if tempted to do so (for + example, not touching the Leka robot when it's not my turn, even if I + really want to). - locale: fr_FR - name: Comptage numérique + name: Inhibition description: > - Savoir dire les nombres dans l'ordre (1,2,3 et ainsi de suite) et - pouvoir compter des choses pour déterminer la quantité. (par exemple, - compter combien de pommes sont dans un panier). + Capacité à se retenir de faire quelque chose, même si on a envie de le + faire (par exemple, ne pas toucher le robot Leka quand ce n'est pas + mon tour, même si j'en ai très envie). subskills: [] + - id: memory + l10n: + - locale: en_US + name: Memory + description: > + Ability to store, retain, and remember information. + - locale: fr_FR + name: Mémoire + description: > + Capacité de stocker, garder et se souvenir des informations. + subskills: + - id: memory/short_term_memory + l10n: + - locale: en_US + name: Short-term memory + description: > + Ability to hold and process a limited amount of information for a + short period, usually from a few seconds to a minute (for example, + remembering the order of a sequence of colors just observed). + - locale: fr_FR + name: Mémoire court-terme + description: > + Capacité de retenir et de traiter une quantité limitée + d'informations pour une courte période, généralement de quelques + secondes à une minute (par exemple, garder en tête l'ordre d'une + séquence de couleurs que l'on vient d'observer). + subskills: [] + + - id: memory/long_term_memory + l10n: + - locale: en_US + name: Long-term memory + description: > + Ability to store and retrieve information over a long period, + ranging from a few minutes to a lifetime. It includes personal + memories, acquired knowledge, skills, and experiences. + - locale: fr_FR + name: Mémoire long terme + description: > + Capacité de stocker et de récupérer des informations sur une + longue période, allant de quelques minutes à toute une vie. Elle + inclut des souvenirs personnels, des connaissances acquises, des + compétences, et des expériences. + subskills: [] - id: recognition l10n: @@ -791,8 +675,8 @@ skills: - locale: fr_FR name: Reconnaissance des éléments de la météo description: > - La reconnaissance des éléments de la météo est la capacité à voir et à - identifier les éléments de la météo (soleil, pluie, nuages, neige, + La reconnaissance des éléments de la météo est la capacité à voir et + à identifier les éléments de la météo (soleil, pluie, nuages, neige, etc.). subskills: [] @@ -824,3 +708,118 @@ skills: identifier les émotions de base (joie, peur, colère, tristesse, dégoût). subskills: [] + + - id: relationship_tablet_robot + l10n: + - locale: en_US + name: Relationship between tablet and robot + description: > + Understanding the causal link between tablet and robot. Understanding + that touching the tablet makes the Leka robot move and change. + - locale: fr_FR + name: Relation entre tablette et robot + description: > + Comprendre le lien de causalité entre tablette et robot. Comprendre + qu'en touchant la tablette, cela fait bouger ou changer le robot Leka. + subskills: [] + - id: self_regulation + l10n: + - locale: en_US + name: Self-regulation + description: > + Ability to control reactions in response to emotions. Learning to calm + down after a strong emotion or not react impulsively. + - locale: fr_FR + name: Autorégulation + description: > + Capacité à contrôler ses réactions en réponse à ses émotions. + Apprendre à se calmer après une émotion forte ou à ne pas réagir de + manière impulsive. + subskills: [] + - id: sensory_interaction + l10n: + - locale: en_US + name: Sensory interaction + description: > + Manifests when a care receiver plays with the robot and uses their senses + to + interact. This includes watching Leka's changing colors and lights, + listening to the sounds or music it produces, and touching and feeling + Leka by manipulating or playing with it. + - locale: fr_FR + name: Sensorialité + description: > + Se manifeste quand une personne accompagnée joue avec le robot et utilise + ses sens + pour interagir. Cela inclut regarder les couleurs et lumières + changeantes de Leka, écouter les sons ou musiques qu'il émet, et + toucher et ressentir Leka en le manipulant ou en jouant avec lui. + subskills: [] + - id: social_interactions + l10n: + - locale: en_US + name: Social interactions + description: > + Social interactions occur when people interact and mutually influence + each other's behaviors. When a person speaks, uses gestures, or + expresses emotions, it elicits a response from another person. This + response, in turn, can influence the initial action or reaction of the + first person. + - locale: fr_FR + name: Interactions sociales + description: > + Les interactions sociales se déroulent lorsque les personnes + interagissent et influencent mutuellement leurs comportements. + Lorsqu'une personne parle, utilise des gestes ou exprime des émotions, + cela provoque une réponse chez une autre personne. Cette réponse, à + son tour, peut influencer l'action ou la réaction initiale de la + première personne. + subskills: [] + - id: spatial_understanding + l10n: + - locale: en_US + name: Spatial understanding + description: > + Understanding and knowing how to position oneself in a place, see + where things are around, and how to move or navigate in that space. + - locale: fr_FR + name: Apprehension de l'espace + description: > + Comprendre et savoir comment se situer dans un lieu, voir où les + choses se trouvent autour de soi, et comment bouger ou se déplacer + dans cet espace. + subskills: [] + - id: time_and_temporality_understanding + l10n: + - locale: en_US + name: Time and temporality understanding + description: > + Understanding time and knowing when things happen (For example, + breakfast is in the morning and dinner is in the evening). This also + means knowing how long things last (For example, a minute is shorter + than an hour) and understanding the order of events (For example, + today is after yesterday and before tomorrow, spring is after winter + and before summer). + - locale: fr_FR + name: Apprehension du temps et de la temporalité + description: > + Comprendre le temps et savoir quand les choses arrivent (par exemple, + le petit-déjeuner a lieu le matin et le diner a lieu le soir). Cela + signifie aussi savoir combien de temps durent les choses (par exemple, + une minute est plus courte qu'une heure) et connaître l'ordre des + événements (par exemple, aujourd'hui est après hier et avant demain, + le printemps est après l'hiver et avant l'été). + subskills: [] + - id: turn_taking + l10n: + - locale: en_US + name: Turn taking + description: > + Ability to know when to speak, listen, or act in a social interaction, + respecting a predetermined order or sequence. + - locale: fr_FR + name: Tour de rôle + description: > + Capacité de savoir quand parler, écouter ou agir dans une interaction + sociale, en respectant un ordre ou une séquence préétablie. + subskills: [] diff --git a/Specs/jtd/skills.jtd.json b/Specs/jtd/skills.jtd.json index 2bc23d4c4c..a0a3966dd7 100644 --- a/Specs/jtd/skills.jtd.json +++ b/Specs/jtd/skills.jtd.json @@ -1,6 +1,9 @@ { "properties": { - "skills": { + "version": { + "type": "string" + }, + "list": { "elements": { "ref": "$skill" } @@ -8,10 +11,7 @@ }, "definitions": { "$locale": { - "enum": [ - "en_US", - "fr_FR" - ] + "enum": ["en_US", "fr_FR"] }, "$l10n": { "properties": { @@ -44,4 +44,4 @@ } } } -} \ No newline at end of file +} diff --git a/Tools/Hooks/check_yaml_data_skills.py b/Tools/Hooks/check_yaml_data_skills.py new file mode 100755 index 0000000000..870885f238 --- /dev/null +++ b/Tools/Hooks/check_yaml_data_skills.py @@ -0,0 +1,61 @@ +#!/usr/bin/python3 + +# Leka - LekaOS +# Copyright 2020 APF France handicap +# SPDX-License-Identifier: Apache-2.0 + +import os +import ruamel.yaml +import subprocess +import sys + +JTD_SCHEMA = "Specs/jtd/skills.jtd.json" + +# ? Check if a file was specified +if len(sys.argv) > 1: + FILENAME = sys.argv[1] +else: + print("❌ No file specified") + exit(1) + +# ? Create a YAML object +yaml = ruamel.yaml.YAML(typ='rt') +yaml.indent(mapping=2, sequence=4, offset=2) + +# ? Load the YAML file +with open(FILENAME, 'r') as file: + data = yaml.load(file) + +# ? Sort the list by id +data['list'] = sorted(data['list'], key=lambda item: item['id']) + +# ? Write the sorted data back to the file +with open(FILENAME, 'w') as file: + yaml.dump(data, file) + +# ? Extract the ids +ids = [item['id'] for item in data['list']] + +# ? Check if all ids are unique +if len(set(ids)) != len(ids): + print(f"❌ There are duplicate ids in {FILENAME}") + seen = set() + duplicate = set() + for id in ids: + if id in seen: + duplicate.add(id) + else: + seen.add(id) + print(f"Duplicate ids: {duplicate}") + exit(1) + +# Check schema validation with ajv +os.environ['SYSTEMD_COLORS'] = '1' +cmd = f"ajv --spec=jtd -s {JTD_SCHEMA} -d {FILENAME}" +result = subprocess.run(cmd, shell=True) + +if result.returncode != 0: + print(f"❌ {FILENAME} is invalid") + exit(1) + +exit(0)