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_xxxx
spé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é
.log
le 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