diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3ed2dda --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: python +python: "3.5" +install: pip install -r besoins.txt +script: python verifie.py diff --git a/README.md b/README.md index b840a17..dbaaa57 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Clavardage sur Gitter](https://img.shields.io/badge/clavarder-avec%20nous-brightgreen.svg)](https://gitter.im/soulaklabs/bitoduc.fr) +[![Clavardage sur Gitter](https://img.shields.io/badge/clavarder-avec%20nous-brightgreen.svg)](https://gitter.im/soulaklabs/bitoduc.fr) [![Dispositif d'intégration continue](https://img.shields.io/travis/soulaklabs/bitoduc.fr.svg)](https://gitter.im/soulaklabs/bitoduc.fr) bitoduc.fr diff --git a/besoins.txt b/besoins.txt new file mode 100644 index 0000000..88a2bfd --- /dev/null +++ b/besoins.txt @@ -0,0 +1 @@ +jsonschema==2.5.1 diff --git a/schema.json b/schema.json new file mode 100644 index 0000000..6ce96da --- /dev/null +++ b/schema.json @@ -0,0 +1,38 @@ +{ "type": "object", + "properties": { + "faux mots": { + "type": "array", + "items": {"$ref": "#/definitions/mot"} + }, + "vrais mots": { + "type": "array", + "items": {"$ref": "#/definitions/mot"} + } + }, + "definitions": { + "mot": { + "type": "object", + "properties": + { + "anglais": {"type": "string"}, + "français": {"type": "string"}, + "classe": { + "type": "string", + "enum": [ + "adjectif", + "groupe nominal", + "groupe verbal", + "proposition", + "verbe" + ] + }, + "genre": { + "type": "string", + "enum": ["f", "m"] + }, + "pluriel": {"type": "boolean"} + }, + "required": ["anglais", "français", "classe"] + } + } +} diff --git a/traductions.json b/traductions.json index f059ebf..9c16030 100644 --- a/traductions.json +++ b/traductions.json @@ -1,31 +1,17 @@ { "vrais mots": [ - {"anglais": "ASLR", "français": "Disposition Stochastique de l’espace d’addressage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "BBS (Bulletin Board System)", "français": "Babillard électronique", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "BYOD (Bring Your Own Device)", "français": "AVEC (Apportez Votre Equipement personnel de Communication)", "classe": "proposition"}, - {"anglais": "CDROM", "français": "Cédérom", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Cascading Style Sheets (CSS)", "français": "Feuilles de style en cascade", "genre": "f", "classe": "groupe nominal", "pluriel": true}, - {"anglais": "Computer Science (CS)", "français": "Science informatique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "FPGA (Field-Programmable Gate Array)", "français": "CIPP (Circuit Intégré Prédiffusé Programmable)", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "GC", "français": "Ramasse-miettes, glaneur de cellule", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "ROM (Read-Only Memory)", "français": "Mémoire morte", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "SoC (System-on-Chip)", "français": "Puce-système", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "TL;DR (Too Long; Didn't Read)" , "français": "TL;PL (Trop Long; Pas Lu)", "classe": "proposition"}, - {"anglais": "URL", "français": "Adresse réticulaire", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "USB key", "français": "Mémorette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Web cache", "français": "Cache-toile", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Web", "français": "Toile", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "XSS (Cross Site Scripting)", "français": "ICID (Injection de Code Indirect à Distance)", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Ampersand", "français": "Esperluette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Angle brackets", "français": "Chevrons", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Anti-pattern", "français": "Anti-patron", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Applet", "français": "Appliquette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "ASLR", "français": "Disposition Stochastique de l’espace d’addressage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Back office", "français": "Arrière-guichet", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Back-end services", "français": "Services dorsaux", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Backdoor", "français": "Porte dérobée", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Backport", "français": "Rétroportage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Backslash", "français": "Barre oblique inversée", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "BBS (Bulletin Board System)", "français": "Babillard électronique", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Benchmark", "français": "Banc d’essai", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Big data", "français": "Mégadonnées", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Big-endian", "français": "Grand boutien", "genre": "m", "classe": "adjectif", "pluriel": false}, @@ -33,14 +19,18 @@ {"anglais": "Boot", "français": "Amorçage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Browser", "français": "Navigateur", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Bug", "français": "Bogue", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "BYOD (Bring Your Own Device)", "français": "AVEC (Apportez Votre Equipement personnel de Communication)", "classe": "proposition"}, {"anglais": "Byte", "français": "Octet", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cache memory", "français": "Antémémoire", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Callback function", "français": "Fonction de rappel", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Capitalization", "français": "Majusculation", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Cascading Style Sheets (CSS)", "français": "Feuilles de style en cascade", "genre": "f", "classe": "groupe nominal", "pluriel": true}, + {"anglais": "CDROM", "français": "Cédérom", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Checksum", "français": "Somme de contrôle", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Chipset", "français": "Jeu de puces", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cloud computing", "français": "Infonuagique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cluster", "français": "Grappe", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Computer Science (CS)", "français": "Science informatique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cookie", "français": "Témoin de connexion", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Core dump", "français": "Vidage de mémoire", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Dangling pointer", "français": "Pointeur fou", "genre": "m", "classe": "groupe nominal", "pluriel": false}, @@ -60,17 +50,19 @@ {"anglais": "Flame", "français": "Propos incendiaire", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Flood", "français": "Matraquage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Fork", "français": "Scission", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "FPGA (Field-Programmable Gate Array)", "français": "CIPP (Circuit Intégré Prédiffusé Programmable)", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Framework", "français": "Cadriciel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Freeware", "français": "Gratuiciel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Front office", "français": "Guichet", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Fuzzer", "français": "Générateur d’anomalies", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Fuzzing", "français": "Frelatage en masse", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "GC", "français": "Ramasse-miettes, glaneur de cellule", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Glue code", "français": "Code ciment", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "God object", "français": "Objet omniscient", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Hacked", "français": "Intrusé", "genre": "m", "classe": "adjectif", "pluriel": false}, {"anglais": "Hacker", "français": "Fouineur", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Hash table", "français": "Tableau à adressage dispersé", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Hash", "français": "Condensat", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Hash table", "français": "Tableau à adressage dispersé", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Hashtag", "français": "Mot-croisillon", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Heap spray", "français": "Pulvérisation du tas", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Home row", "français": "Touche de repos", "genre": "f", "classe": "groupe nominal", "pluriel": false}, @@ -78,6 +70,8 @@ {"anglais": "Hyperlink", "français": "Hyperlien", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Instruction pipeline", "français": "Instruoduc", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Lazy evaluation", "français": "Évaluation paresseuse", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Lexing", "français": "Analyse lexicale", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Library", "français": "Bibliothèque", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Little-endian", "français": "Petit boutien", "genre": "m", "classe": "adjectif", "pluriel": false}, {"anglais": "Lurker", "français": "Fureteur", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Malware", "français": "Maliciel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, @@ -89,11 +83,13 @@ {"anglais": "Obfuscation", "français": "Noircissement de code", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Online chat", "français": "Clavardage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Overclocking", "français": "Surcadençage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Parsing", "français": "Analyse syntaxique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Patch", "français": "Rustine logicielle", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Pharming", "français": "Devoiement", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Phishing attack", "français": "Attaque par filoutage", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Phishing", "français": "Hameçonnage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Phishing attack", "français": "Attaque par filoutage", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Pipeline", "français": "Bitoduc", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Placeholder", "français": "Marque substitutive", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Plugin", "français": "Greffon", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Podcasting", "français": "Balladodiffusion", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Polling", "français": "Attente active", "genre": "f", "classe": "groupe nominal", "pluriel": false}, @@ -105,12 +101,14 @@ {"anglais": "Reverse proxy", "français": "Mandataire inverse", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Reverse-engineering", "français": "Ingénierie à rebours", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Rolling release", "français": "Publication continue", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "ROM (Read-Only Memory)", "français": "Mémoire morte", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Scale", "français": "Passe à l’échelle", "classe": "groupe verbal"}, {"anglais": "Scaling", "français": "Passage à l’échelle", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Shareware", "français": "Partagiciel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Shell code", "français": "Code encoquillé", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Slash", "français": "Barre oblique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Smart grids", "français": "Grilles malignes", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "SoC (System-on-Chip)", "français": "Puce-système", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Spam", "français": "Polluriel, pourriel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Spammer", "français": "Arroseur publicitaire", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Spinlock", "français": "Tourniquet", "genre": "m", "classe": "groupe nominal", "pluriel": false}, @@ -120,45 +118,47 @@ {"anglais": "Switch", "français": "Commutateur", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Tag", "français": "Étiquette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Thumbnail", "français": "Imagette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "TL;DR (Too Long; Didn't Read)" , "français": "TL;PL (Trop Long; Pas Lu)", "classe": "proposition"}, {"anglais": "To deface", "français": "Défigurer", "classe": "groupe verbal"}, {"anglais": "To reverse", "français": "Détricoter", "classe": "groupe verbal"}, {"anglais": "Tuning", "français": "Bolidage", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Tutorial", "français": "Didacticiel", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Upload", "français": "Téléversement", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Version control system", "français": "Logiciel de gestion de versions", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "URL", "français": "Adresse réticulaire", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "USB key", "français": "Mémorette", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Verbose", "français": "Volubile", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Version control system", "français": "Logiciel de gestion de versions", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Watchdog", "français": "Chien de garde", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Web", "français": "Toile", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "Web cache", "français": "Cache-toile", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Webcam", "français": "Cybercaméra", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Webmaster", "français": "Webmestre", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Library", "français": "Bibliothèque", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Wildcard", "français": "Joker", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Placeholder", "français": "Marque substitutive", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Parsing", "français": "Analyse syntaxique", "genre": "f", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Lexing", "français": "Analyse lexicale", "genre": "f", "classe": "groupe nominal", "pluriel": false} + {"anglais": "XSS (Cross Site Scripting)", "français": "ICID (Injection de Code Indirect à Distance)", "genre": "f", "classe": "groupe nominal", "pluriel": false} ], "faux mots": [ - {"anglais": "DRY (Don't Repeat Yourself)", "français": "NTRP (Ne Te Répète Pas)", "classe": "proposition"}, - {"anglais": "NIH (Not Invented Here)", "français": "PII (Pas Inventé Ici)", "classe": "proposition"}, - {"anglais": "RTFM (Read The Fucking Manual)", "français": "LPDM (Lis le Putain De Manuel)", "classe": "proposition"}, + {"anglais": "Bot", "français": "Robot", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Branch merging", "français": "Fusion de branches", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Buzzword", "français": "Mot à la mode", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Commit", "français": "Atome de code", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cryptocoin", "français": "Cybersou", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Cryptoparty", "français": "Chiffrofête", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "DRY (Don't Repeat Yourself)", "français": "NTRP (Ne Te Répète Pas)", "classe": "proposition"}, {"anglais": "Empowerment", "français": "Empouvoirement", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Favicon", "français": "Favorimage", "genre": "f", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Laptop", "français": "Ordinateur de giron", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Lolcat", "français": "Chatmusant", "genre": "m", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "NIH (Not Invented Here)", "français": "PII (Pas Inventé Ici)", "classe": "proposition"}, {"anglais": "Pull-request", "français": "Fusiodemande", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "RTFM (Read The Fucking Manual)", "français": "LPDM (Lis le Putain De Manuel)", "classe": "proposition"}, {"anglais": "Smartphone", "français": "Malinphone", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Stand-up meeting", "français": "Réunion debout", "genre": "f", "classe": "groupe nominal", "pluriel": false}, + {"anglais": "TIL (Today I Learnt)", "français": "AJA (Aujourd’hui J’ai Appris)", "classe": "proposition"}, {"anglais": "To spoil", "français": "Divulgâcher", "classe": "verbe"}, {"anglais": "Tweet", "français": "Gazouillis", "genre": "m", "classe": "groupe nominal", "pluriel": false}, {"anglais": "Walled garden", "français": "Jardin secret, communauté prison", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Wrapper", "français": "Métascript", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "Bot", "français": "Robot", "genre": "m", "classe": "groupe nominal", "pluriel": false}, - {"anglais": "TIL (Today I Learnt)", "français": "AJA (Aujourd’hui J’ai Appris)", "classe": "proposition"} + {"anglais": "Wrapper", "français": "Métascript", "genre": "m", "classe": "groupe nominal", "pluriel": false} ] } diff --git a/verifie.py b/verifie.py new file mode 100644 index 0000000..e8f7621 --- /dev/null +++ b/verifie.py @@ -0,0 +1,24 @@ +import json +from jsonschema import validate as valide + + +def verifie_ordre(mots): + for (a, b) in zip(mots, mots[1:]): + mot_a = a['anglais'].lower() + mot_b = b['anglais'].lower() + msg = "%s et %s ne sont pas dans le bon ordre" % (mot_a, mot_b) + assert mot_a < mot_b, msg + + +def principal(): + with open('traductions.json') as f: + d = json.load(f) + with open('schema.json') as f: + schema = json.load(f) + valide(d, schema) + verifie_ordre(d['faux mots']) + verifie_ordre(d['vrais mots']) + + +if __name__ == '__main__': + principal()