1
2
3
4
5
6
7
8
9
10
11
12
13 """module de gestion des dictionnaires Creole
14 """
15 from zephir.backend.db_utils import *
16 from zephir.backend import config
17 from zephir.backend.config import u, log
18 from zephir.backend.xmlrpceole import XMLRPCEole as XMLRPC
19 import traceback
20
22 """serveur XMLRPC zephir pour la gestion des dictionnaires Creole
23 """
24
26 self.parent = parent
27 XMLRPC.__init__(self)
28
29
30
31
33 """vérifie qu'on a l'autorisation de modifier les ressources utilisant un dictionnaire local
34 """
35 dict_resources = self.parent.dictpool.get_dict_resources(eole_version, 'local', dict_name)
36
37
38 if dict_resources['module']:
39 for id_mod in dict_resources['module']:
40 self.parent.s_pool.check_mod_credential(cred_user, id_mod)
41 elif dict_resources['variante']:
42 for id_var in dict_resources['variante']:
43 self.parent.s_pool.check_var_credential(cred_user, id_var)
44
45 elif dict_resources['serveur']:
46 allowed_s = set([int(serv) for serv in self.parent.s_pool.get_allowed_servers(cred_user)])
47
48 assert set(dict_resources['serveur']).issubset(allowed_s), "Ce dictionnaire affecte un serveur auquel vous n'avez pas accès"
49
50 - def xmlrpc_get_dict(self, cred_user, eole_version, type_dict, dict_name, paq_name=""):
51 """renvoie le contenu d'un dictionnaire du pool
52 paq_name: nom du paquet pour les dictionnaires non isolés
53 """
54 try:
55 result = self.parent.dictpool.get_dict(eole_version, type_dict, dict_name, paq_name)
56 except Exception, e:
57 return 0, u(str(e))
58 return 1, u(result)
59
60 - def xmlrpc_add_dict(self, cred_user, eole_version, dict_name, content, paq_name=""):
61 """ajoute ou met à jour un dictionnaire dans le dépot.
62 paq_name: met le dictionnaire dans un répertoire de paquet
63 """
64 try:
65 self._check_resource_perms(cred_user, eole_version, paq_name or dict_name)
66
67 result = self.parent.dictpool.add_dict(eole_version, dict_name, content, paq_name)
68 except Exception, e:
69 return 0, u(str(e))
70 return 1, u(result)
71
73 """supprime un dictionnaire/paquet du dépot (et les liens associés)
74 """
75 try:
76 self._check_resource_perms(cred_user, eole_version, paq_name or dict_name)
77
78 result = self.parent.dictpool.remove_dict(eole_version, dict_name, paq_name)
79 except Exception, e:
80 return 0, u(str(e))
81 return 1, u(result)
82
84 """renvoie l'ensemble des ressources utilisant un dictionnaire ou paquet
85 """
86 try:
87 resources = self.parent.dictpool.get_dict_resources(eole_version, dict_type, dict_name)
88 except Exception, e:
89 return 0, u(str(e))
90 return 1, u(resources)
91
93 """renvoie l'ensemble des liens pointant sur un dictionnaire ou paquet
94 """
95 try:
96 liste_dicts = self.parent.dictpool.get_dict_links(eole_version, dict_type, dict_name)
97 except Exception, e:
98 return 0, u(str(e))
99 return 1, u(liste_dicts)
100
102 """renvoie la liste des dictionnaires d'un paquet
103 """
104 try:
105 liste_dicts = self.parent.dictpool.get_paq_dict(eole_version, liste_paqs)
106 except Exception, e:
107 return 0, u(str(e))
108 return 1, u(liste_dicts)
109
111 """renvoie la liste des dictionnaires disponibles dans le pool pour une distribution eole
112 type_paq : permet de limiter le résultat aux paquets eole ou locaux
113 """
114
115 types_paq = ('eole', 'local')
116 if type_paq and type_paq in types_paq:
117 types_paq = [type_paq]
118 dict_res = {}
119 for type_paq in types_paq:
120 dict_res[type_paq] = {}
121 dict_res[type_paq]['dicos'] = self.parent.dictpool.dicos.get(eole_version,{}).get(type_paq, {})
122 dict_res[type_paq]['paqs'] = self.parent.dictpool.paqs.get(eole_version,{}).get(type_paq, {})
123 return 1, u(dict_res)
124
126 """force une vérification des dictionnaires disponibles pour une distribution
127 module_version : version de la distribution à vérifier
128 dict_type: dictionnaires 'eole' ou 'locaux'
129 """
130 try:
131 assert int(module_version) in self.parent.dictpool.eole_versions
132 except:
133 return 0, u("version de distribution non gérée")
134 if dict_type not in ('eole', 'local'):
135 return 0, u("le type de dictionnaire doit être 'eole' ou 'local'")
136 try:
137 self.parent.dictpool.update_dicts(int(module_version), dict_type)
138 except Exception, e:
139 traceback.print_exc()
140 return 0, False
141 return 1, True
142
143
144
145
147 """renvoie la liste des version de distribution comportant
148 des modules gérés avec le pool (et les ids des modules en question)
149 """
150 res = {}
151 for id_mod, data in self.parent.dictpool.modules.items():
152 libelle, version = data
153 if version not in res:
154 res[str(version)] = []
155 res[str(version)].append(id_mod)
156 return 1, res
157
159 """renvoie True si un module est géré par le pool de dictionnaire, False sinon
160 """
161 try:
162 mod_ok = self.parent.dictpool.check_module(int(id_module))
163 except Exception, e:
164 return 0, u(str(e))
165 return 1, mod_ok
166
168 """liste les dictionnaires associés à un module
169 """
170 try:
171 self.parent.s_pool.check_mod_credential(cred_user, int(id_module))
172 list_dicts = self.parent.dictpool.list_module(id_module, full_path)
173 except Exception, e:
174 return 0, u(str(e))
175 return 1, u(list_dicts)
176
178 """associe un dictionnaire/paquet à un module
179 """
180 try:
181 self.parent.s_pool.check_mod_credential(cred_user, int(id_module))
182 self.parent.dictpool.add_module_dict(id_module, dict_type, dict_path)
183 except Exception, e:
184 return 0, u(str(e))
185 return 1, "OK"
186
188 """supprime l'association entre un module et un dictionnaire/paquet
189 """
190 try:
191 self.parent.s_pool.check_mod_credential(cred_user, int(id_module))
192 self.parent.dictpool.del_module_dict(id_module, dict_type, dict_path)
193 except Exception, e:
194 return 0, u(str(e))
195 return 1, "OK"
196
198 """renvoie la liste des paquets par défaut d'un module
199 (basé sur le fichier de description du module)
200 """
201 try:
202 self.parent.s_pool.check_mod_credential(cred_user, int(id_module))
203 liste_dicts = self.parent.dictpool.get_module_defaults(id_module, full_path)
204 except Exception, e:
205 return 0, u(str(e))
206 return 1, u(liste_dicts)
207
208
209
210
220
221
232
244
245
246
247
257
267
277
288
289
290
291
292
293
294
295
296
297
298
299
300