maintenance.graphdb
Interface avec la partie de la base de données en graphe reflétant le dépôt.
Modifié le 30/03/23 @author: remy
- Définit des outils utiles pour tous les dépôts
- Importe le sous-module
bdg_xxxxspécifique au dépôt sous le nomspecific. - Définit la classe
Maquis.
La maintenance de la base est réalisée par des requêtes cypher définies
dans specific et exécutés lors de l'instanciation de la classe Maquis
par l'appel specific.exec().
Les sous-modules spécifiques sont bdg_mathCours, bdg_mathExos et bdg_mathPbs
1# -*- coding: utf-8 -*- 2""" 3Interface avec la partie de la base de données en graphe reflétant le dépôt. 4 5Modifié le 30/03/23 @author: remy 6 7- Définit des outils utiles pour tous les dépôts 8- Importe le sous-module `bdg_xxxx` spécifique au dépôt sous le nom `specific`. 9- Définit la classe `Maquis`. 10 11La maintenance de la base est réalisée par des requêtes cypher définies 12 dans `specific` et exécutés lors de l'instanciation de la classe `Maquis` 13 par l'appel `specific.exec()`. 14 15Les sous-modules spécifiques sont [`bdg_mathCours`](bdg_mathCours.html), [`bdg_mathExos`](bdg_mathExos.html) et [`bdg_mathPbs`](bdg_mathPbs.html) 16 17""" 18import importlib 19# import neo4j 20 21 22class Maquis: 23 """ 24 Classe Maquis. Interface la base de données neo4j. 25 - exécute les requêtes de mise à jour de la partie de la base associée au dépôt. 26 - présente dans la propriété `.log` le journal de l'exécution des requêtes. 27 28 """ 29 30 def __init__(self, data, specific_results): 31 """ 32 Instancie la classe 33 34 #### Paramètres 35 - data : dictionnaire `manifeste['context']` du module d'Initialisation. 36 37 - specific_results : dictionnaire de données de contextalisation extraites du dépôt par le module d'exécution locale spécifique. 38 39 #### Propriétés 40 - `.log` : journal 41 - `.connect_data` : `manifeste['context']` données de connexion. 42 - `.specific_results` : données extraites du dépot par l'exécution locale spécifique 43 44 #### Renvoie 45 46 None. 47 48 """ 49 self.connect_data = data 50 self.specific_results = specific_results 51 self.log = "\t Initialisation de la classe Maquis \n" 52 53 print("coucou du module graphdb") 54 55 lineprefix = "\n \t \t" 56 57 # Importation du module spécifique 58 module = data['modulespec'] 59 if module: 60 try: 61 specific = importlib.import_module(module) 62 self.log += lineprefix 63 self.log += "Importation du module spécifique " + module 64 # exécution des scripts de contextualisation 65 self.log += specific.exec(self) 66 except ImportError as error: 67 self.log += lineprefix + "Module " + error.name + " pas trouvé" 68 69 70 def format_cypher_RETURN(self, param): 71 """ 72 Renvoie une requête cypher de type `RETURN`. 73 74 Dans la chaîne modèle 75 76 "MATCH (n: {label} {propsF}) RETURN {propsR}" 77 78 remplace les variables entre accolades par les valeurs dans `param`. 79 Utilise la méthode `.format()` d'une chaine. 80 81 #### Parametres 82 83 param : TYPE dictionnaire 84 DESCRIPTION exemple: 85 86 {'label': "Document", 87 'propsF':" {typeDoc:'problème'}", 88 'propsR': "n.titre, n.description"}. 89 90 #### Renvoie 91 92 TYPE chaine de caractères 93 DESCRIPTION requête cypher. 94 95 """ 96 req = "MATCH (n: {label} {propsF}) RETURN {propsR}" 97 req = req.format(**param) 98 return req 99 100 def format_cypher_DELETE(self, param): 101 """ 102 Renvoie une requête cypher de type `DETACH DELETE`. 103 104 ATTENTION ! Ce type de requte est à manier avec précaution. 105 Toujours vérifier ce qui sera détruit. 106 107 Dans la chaîne modèle 108 109 "MATCH (n: {label} {propsF}) DETACH DELETE n" 110 111 remplace les variables entre accolades par les valeurs dans `param`. 112 Utilise la méthode `.format()` d'une chaine. 113 114 #### Parametres 115 116 param : TYPE dictionnaire 117 DESCRIPTION exemple pour supprimer le problème de titre 'grpe2' 118 dans la base: 119 120 {'label' : "Document", 121 'propsF' :"{typeDoc:'problème' titre:'grpe2'}"} 122 123 #### Renvoie 124 125 TYPE chaine de caractères 126 DESCRIPTION requête cypher. 127 128 """ 129 req = "MATCH (n: {label} {propsF}) DETACH DELETE n" 130 req = req.format(**param) 131 return req 132 133 def format_cypher_SET(self, param): 134 """ 135 Renvoie une requête cypher de type `SET`. 136 137 Dans la chaîne modèle 138 139 "MATCH (n: {label} {propsF}) SET {propsV}" 140 141 remplace les variables entre accolades par les valeurs dans `param`. 142 Utilise la méthode `.format()` d'une chaine. 143 144 #### Parametres 145 146 param : TYPE dictionnaire 147 DESCRIPTION exemple: 148 149 {'label' : "Document", 150 'propsF' :"{typeDoc:'problème'}", 151 'propsV' : "n.description = tagada"}. 152 153 #### Renvoie 154 155 TYPE chaine de caractères 156 DESCRIPTION requête cypher. 157 158 """ 159 req = "MATCH (n: {label} {propsF}) SET {propsV}" 160 req = req.format(**param) 161 return req 162 163 def format_cypher_CREATE(self, param): 164 """ 165 Renvoie une requête cypher de type `CREATE`. 166 167 Dans la chaîne modèle 168 169 "CREATE (n: {label} {propsF})" 170 171 remplace les variables entre accolades par les valeurs dans `param`. 172 Utilise la méthode `.format()` d'une chaine. 173 174 #### Parametres 175 176 param : TYPE dictionnaire 177 DESCRIPTION exemple: 178 179 {'label' : "Document", 180 'propsF' :"{typeDoc:'exercice', 181 titre:'co01' 182 discipline: 'mathématique}"}. 183 184 #### Renvoie 185 186 TYPE chaine de caractères 187 DESCRIPTION requête cypher. 188 189 """ 190 req = "CREATE (n: {label} {propsF})" 191 req = req.format(**param) 192 return req 193 194 def do_cypher_tx(self, tx, cypher): 195 """ 196 Exécute une requête cypher et renvoie les valeurs retournées. 197 198 #### Parametres 199 200 tx: TYPE transaction neo4j DESCRIPTION lié à la session neo4j 201 *pas clair!* 202 203 cypher: TYPE chaine de caractères DESCRIPTION requête cypher 204 205 #### Renvoie 206 207 TYPE liste 208 209 DESCRIPTION valeurs retournées par la requête 210 """ 211 result = tx.run(cypher) 212 values = [record.values() for record in result] 213 return values
23class Maquis: 24 """ 25 Classe Maquis. Interface la base de données neo4j. 26 - exécute les requêtes de mise à jour de la partie de la base associée au dépôt. 27 - présente dans la propriété `.log` le journal de l'exécution des requêtes. 28 29 """ 30 31 def __init__(self, data, specific_results): 32 """ 33 Instancie la classe 34 35 #### Paramètres 36 - data : dictionnaire `manifeste['context']` du module d'Initialisation. 37 38 - specific_results : dictionnaire de données de contextalisation extraites du dépôt par le module d'exécution locale spécifique. 39 40 #### Propriétés 41 - `.log` : journal 42 - `.connect_data` : `manifeste['context']` données de connexion. 43 - `.specific_results` : données extraites du dépot par l'exécution locale spécifique 44 45 #### Renvoie 46 47 None. 48 49 """ 50 self.connect_data = data 51 self.specific_results = specific_results 52 self.log = "\t Initialisation de la classe Maquis \n" 53 54 print("coucou du module graphdb") 55 56 lineprefix = "\n \t \t" 57 58 # Importation du module spécifique 59 module = data['modulespec'] 60 if module: 61 try: 62 specific = importlib.import_module(module) 63 self.log += lineprefix 64 self.log += "Importation du module spécifique " + module 65 # exécution des scripts de contextualisation 66 self.log += specific.exec(self) 67 except ImportError as error: 68 self.log += lineprefix + "Module " + error.name + " pas trouvé" 69 70 71 def format_cypher_RETURN(self, param): 72 """ 73 Renvoie une requête cypher de type `RETURN`. 74 75 Dans la chaîne modèle 76 77 "MATCH (n: {label} {propsF}) RETURN {propsR}" 78 79 remplace les variables entre accolades par les valeurs dans `param`. 80 Utilise la méthode `.format()` d'une chaine. 81 82 #### Parametres 83 84 param : TYPE dictionnaire 85 DESCRIPTION exemple: 86 87 {'label': "Document", 88 'propsF':" {typeDoc:'problème'}", 89 'propsR': "n.titre, n.description"}. 90 91 #### Renvoie 92 93 TYPE chaine de caractères 94 DESCRIPTION requête cypher. 95 96 """ 97 req = "MATCH (n: {label} {propsF}) RETURN {propsR}" 98 req = req.format(**param) 99 return req 100 101 def format_cypher_DELETE(self, param): 102 """ 103 Renvoie une requête cypher de type `DETACH DELETE`. 104 105 ATTENTION ! Ce type de requte est à manier avec précaution. 106 Toujours vérifier ce qui sera détruit. 107 108 Dans la chaîne modèle 109 110 "MATCH (n: {label} {propsF}) DETACH DELETE n" 111 112 remplace les variables entre accolades par les valeurs dans `param`. 113 Utilise la méthode `.format()` d'une chaine. 114 115 #### Parametres 116 117 param : TYPE dictionnaire 118 DESCRIPTION exemple pour supprimer le problème de titre 'grpe2' 119 dans la base: 120 121 {'label' : "Document", 122 'propsF' :"{typeDoc:'problème' titre:'grpe2'}"} 123 124 #### Renvoie 125 126 TYPE chaine de caractères 127 DESCRIPTION requête cypher. 128 129 """ 130 req = "MATCH (n: {label} {propsF}) DETACH DELETE n" 131 req = req.format(**param) 132 return req 133 134 def format_cypher_SET(self, param): 135 """ 136 Renvoie une requête cypher de type `SET`. 137 138 Dans la chaîne modèle 139 140 "MATCH (n: {label} {propsF}) SET {propsV}" 141 142 remplace les variables entre accolades par les valeurs dans `param`. 143 Utilise la méthode `.format()` d'une chaine. 144 145 #### Parametres 146 147 param : TYPE dictionnaire 148 DESCRIPTION exemple: 149 150 {'label' : "Document", 151 'propsF' :"{typeDoc:'problème'}", 152 'propsV' : "n.description = tagada"}. 153 154 #### Renvoie 155 156 TYPE chaine de caractères 157 DESCRIPTION requête cypher. 158 159 """ 160 req = "MATCH (n: {label} {propsF}) SET {propsV}" 161 req = req.format(**param) 162 return req 163 164 def format_cypher_CREATE(self, param): 165 """ 166 Renvoie une requête cypher de type `CREATE`. 167 168 Dans la chaîne modèle 169 170 "CREATE (n: {label} {propsF})" 171 172 remplace les variables entre accolades par les valeurs dans `param`. 173 Utilise la méthode `.format()` d'une chaine. 174 175 #### Parametres 176 177 param : TYPE dictionnaire 178 DESCRIPTION exemple: 179 180 {'label' : "Document", 181 'propsF' :"{typeDoc:'exercice', 182 titre:'co01' 183 discipline: 'mathématique}"}. 184 185 #### Renvoie 186 187 TYPE chaine de caractères 188 DESCRIPTION requête cypher. 189 190 """ 191 req = "CREATE (n: {label} {propsF})" 192 req = req.format(**param) 193 return req 194 195 def do_cypher_tx(self, tx, cypher): 196 """ 197 Exécute une requête cypher et renvoie les valeurs retournées. 198 199 #### Parametres 200 201 tx: TYPE transaction neo4j DESCRIPTION lié à la session neo4j 202 *pas clair!* 203 204 cypher: TYPE chaine de caractères DESCRIPTION requête cypher 205 206 #### Renvoie 207 208 TYPE liste 209 210 DESCRIPTION valeurs retournées par la requête 211 """ 212 result = tx.run(cypher) 213 values = [record.values() for record in result] 214 return values
Classe Maquis. Interface la base de données neo4j.
- exécute les requêtes de mise à jour de la partie de la base associée au dépôt.
- présente dans la propriété
.logle journal de l'exécution des requêtes.
31 def __init__(self, data, specific_results): 32 """ 33 Instancie la classe 34 35 #### Paramètres 36 - data : dictionnaire `manifeste['context']` du module d'Initialisation. 37 38 - specific_results : dictionnaire de données de contextalisation extraites du dépôt par le module d'exécution locale spécifique. 39 40 #### Propriétés 41 - `.log` : journal 42 - `.connect_data` : `manifeste['context']` données de connexion. 43 - `.specific_results` : données extraites du dépot par l'exécution locale spécifique 44 45 #### Renvoie 46 47 None. 48 49 """ 50 self.connect_data = data 51 self.specific_results = specific_results 52 self.log = "\t Initialisation de la classe Maquis \n" 53 54 print("coucou du module graphdb") 55 56 lineprefix = "\n \t \t" 57 58 # Importation du module spécifique 59 module = data['modulespec'] 60 if module: 61 try: 62 specific = importlib.import_module(module) 63 self.log += lineprefix 64 self.log += "Importation du module spécifique " + module 65 # exécution des scripts de contextualisation 66 self.log += specific.exec(self) 67 except ImportError as error: 68 self.log += lineprefix + "Module " + error.name + " pas trouvé"
Instancie la classe
Paramètres
data : dictionnaire
manifeste['context']du module d'Initialisation.specific_results : dictionnaire de données de contextalisation extraites du dépôt par le module d'exécution locale spécifique.
Propriétés
.log: journal.connect_data:manifeste['context']données de connexion..specific_results: données extraites du dépot par l'exécution locale spécifique
Renvoie
None.
71 def format_cypher_RETURN(self, param): 72 """ 73 Renvoie une requête cypher de type `RETURN`. 74 75 Dans la chaîne modèle 76 77 "MATCH (n: {label} {propsF}) RETURN {propsR}" 78 79 remplace les variables entre accolades par les valeurs dans `param`. 80 Utilise la méthode `.format()` d'une chaine. 81 82 #### Parametres 83 84 param : TYPE dictionnaire 85 DESCRIPTION exemple: 86 87 {'label': "Document", 88 'propsF':" {typeDoc:'problème'}", 89 'propsR': "n.titre, n.description"}. 90 91 #### Renvoie 92 93 TYPE chaine de caractères 94 DESCRIPTION requête cypher. 95 96 """ 97 req = "MATCH (n: {label} {propsF}) RETURN {propsR}" 98 req = req.format(**param) 99 return req
Renvoie une requête cypher de type RETURN.
Dans la chaîne modèle
"MATCH (n: {label} {propsF}) RETURN {propsR}"
remplace les variables entre accolades par les valeurs dans param.
Utilise la méthode .format() d'une chaine.
Parametres
param : TYPE dictionnaire DESCRIPTION exemple:
{'label': "Document",
'propsF':" {typeDoc:'problème'}",
'propsR': "n.titre, n.description"}.
Renvoie
TYPE chaine de caractères DESCRIPTION requête cypher.
101 def format_cypher_DELETE(self, param): 102 """ 103 Renvoie une requête cypher de type `DETACH DELETE`. 104 105 ATTENTION ! Ce type de requte est à manier avec précaution. 106 Toujours vérifier ce qui sera détruit. 107 108 Dans la chaîne modèle 109 110 "MATCH (n: {label} {propsF}) DETACH DELETE n" 111 112 remplace les variables entre accolades par les valeurs dans `param`. 113 Utilise la méthode `.format()` d'une chaine. 114 115 #### Parametres 116 117 param : TYPE dictionnaire 118 DESCRIPTION exemple pour supprimer le problème de titre 'grpe2' 119 dans la base: 120 121 {'label' : "Document", 122 'propsF' :"{typeDoc:'problème' titre:'grpe2'}"} 123 124 #### Renvoie 125 126 TYPE chaine de caractères 127 DESCRIPTION requête cypher. 128 129 """ 130 req = "MATCH (n: {label} {propsF}) DETACH DELETE n" 131 req = req.format(**param) 132 return req
Renvoie une requête cypher de type DETACH DELETE.
ATTENTION ! Ce type de requte est à manier avec précaution. Toujours vérifier ce qui sera détruit.
Dans la chaîne modèle
"MATCH (n: {label} {propsF}) DETACH DELETE n"
remplace les variables entre accolades par les valeurs dans param.
Utilise la méthode .format() d'une chaine.
Parametres
param : TYPE dictionnaire DESCRIPTION exemple pour supprimer le problème de titre 'grpe2' dans la base:
{'label' : "Document",
'propsF' :"{typeDoc:'problème' titre:'grpe2'}"}
Renvoie
TYPE chaine de caractères DESCRIPTION requête cypher.
134 def format_cypher_SET(self, param): 135 """ 136 Renvoie une requête cypher de type `SET`. 137 138 Dans la chaîne modèle 139 140 "MATCH (n: {label} {propsF}) SET {propsV}" 141 142 remplace les variables entre accolades par les valeurs dans `param`. 143 Utilise la méthode `.format()` d'une chaine. 144 145 #### Parametres 146 147 param : TYPE dictionnaire 148 DESCRIPTION exemple: 149 150 {'label' : "Document", 151 'propsF' :"{typeDoc:'problème'}", 152 'propsV' : "n.description = tagada"}. 153 154 #### Renvoie 155 156 TYPE chaine de caractères 157 DESCRIPTION requête cypher. 158 159 """ 160 req = "MATCH (n: {label} {propsF}) SET {propsV}" 161 req = req.format(**param) 162 return req
Renvoie une requête cypher de type SET.
Dans la chaîne modèle
"MATCH (n: {label} {propsF}) SET {propsV}"
remplace les variables entre accolades par les valeurs dans param.
Utilise la méthode .format() d'une chaine.
Parametres
param : TYPE dictionnaire DESCRIPTION exemple:
{'label' : "Document",
'propsF' :"{typeDoc:'problème'}",
'propsV' : "n.description = tagada"}.
Renvoie
TYPE chaine de caractères DESCRIPTION requête cypher.
164 def format_cypher_CREATE(self, param): 165 """ 166 Renvoie une requête cypher de type `CREATE`. 167 168 Dans la chaîne modèle 169 170 "CREATE (n: {label} {propsF})" 171 172 remplace les variables entre accolades par les valeurs dans `param`. 173 Utilise la méthode `.format()` d'une chaine. 174 175 #### Parametres 176 177 param : TYPE dictionnaire 178 DESCRIPTION exemple: 179 180 {'label' : "Document", 181 'propsF' :"{typeDoc:'exercice', 182 titre:'co01' 183 discipline: 'mathématique}"}. 184 185 #### Renvoie 186 187 TYPE chaine de caractères 188 DESCRIPTION requête cypher. 189 190 """ 191 req = "CREATE (n: {label} {propsF})" 192 req = req.format(**param) 193 return req
Renvoie une requête cypher de type CREATE.
Dans la chaîne modèle
"CREATE (n: {label} {propsF})"
remplace les variables entre accolades par les valeurs dans param.
Utilise la méthode .format() d'une chaine.
Parametres
param : TYPE dictionnaire DESCRIPTION exemple:
{'label' : "Document",
'propsF' :"{typeDoc:'exercice',
titre:'co01'
discipline: 'mathématique}"}.
Renvoie
TYPE chaine de caractères DESCRIPTION requête cypher.
195 def do_cypher_tx(self, tx, cypher): 196 """ 197 Exécute une requête cypher et renvoie les valeurs retournées. 198 199 #### Parametres 200 201 tx: TYPE transaction neo4j DESCRIPTION lié à la session neo4j 202 *pas clair!* 203 204 cypher: TYPE chaine de caractères DESCRIPTION requête cypher 205 206 #### Renvoie 207 208 TYPE liste 209 210 DESCRIPTION valeurs retournées par la requête 211 """ 212 result = tx.run(cypher) 213 values = [record.values() for record in result] 214 return values
Exécute une requête cypher et renvoie les valeurs retournées.
Parametres
tx: TYPE transaction neo4j DESCRIPTION lié à la session neo4j pas clair!
cypher: TYPE chaine de caractères DESCRIPTION requête cypher
Renvoie
TYPE liste
DESCRIPTION valeurs retournées par la requête