Package zephir :: Package backend :: Module services_rpc
[hide private]
[frames] | no frames]

Source Code for Module zephir.backend.services_rpc

  1  # -*- coding: UTF-8 -*- 
  2  ########################################################################### 
  3  # Eole NG - 2007   
  4  # Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon) 
  5  # Licence CeCill  cf /root/LicenceEole.txt 
  6  # eole@ac-dijon.fr  
  7  #   
  8  # services_rpc.py 
  9  #   
 10  # fonctions xmlrpc pour la gestion des services dans Zephir 
 11  #        
 12  ########################################################################### 
 13  """module de gestion des services 
 14  """ 
 15  from twisted.python import log 
 16  from zephir.backend.db_utils import * 
 17  from zephir.backend import config 
 18  from zephir.backend.config import u 
 19  from zephir.backend.xmlrpceole import XMLRPCEole as XMLRPC 
 20   
 21  from twisted.enterprise import adbapi 
 22   
 23  import sys,os,shutil 
 24   
25 -class RPCServices(XMLRPC):
26 """serveur XMLRPC zephir pour la gestion des bases de données 27 """ 28
29 - def __init__(self,parent,bdd='zephir-parc'):
30 self.dbpool = db_connect() 31 self.dbpool.noisy = 0 32 XMLRPC.__init__(self) 33 self.parent = parent
34 35
36 - def _got_service(self, services):
37 """Récupération des services du backend 38 """ 39 l=[] 40 for service in services: 41 l.append({'id' : service[0], 'module' : service[1], 'libelle' : service[2]}) 42 return 1,u(l)
43
44 - def _got_service_installe(self, services_installes):
45 """Récupération des services du backend 46 """ 47 l=[] 48 for service in services_installes: 49 l.append({'id_serveur' : service[0], 'id_service' : service[1]}) 50 return 1,u(l)
51
52 - def xmlrpc_add_service(self,cred_user, module, libelle):
53 """ajoute un service à un module""" 54 # on vérifie qu'on a bien récupéré un serveur 55 if (libelle and module): 56 query = """insert into services (module,libelle) values (%s,'%s')""" % (module,libelle.replace("'","\\\'")) 57 # on effectue l'insertion (l'existence est à tester dans l'application cliente) 58 return self.dbpool.runOperation(query).addCallbacks(self._add_service,db_client_failed,callbackArgs=[module,libelle]) 59 else: 60 # des attributs manquent 61 return 0,u("""donnez un id de module et un libellé""")
62
63 - def _add_service(self,resultat,module,libelle):
64 """récupère l'id attribué au service créé""" 65 # on retourne l'id du service créé 66 query = """select id from services where module=%s and libelle='%s'""" % (module,libelle.replace("'","\\\'")) 67 return self.dbpool.runQuery(query).addCallbacks(lambda x:(1,x[0][0]),db_client_failed)
68
69 - def xmlrpc_del_service(self,cred_user,id_service):
70 """suppression d'un service""" 71 if id_service: 72 query = """delete from services where id=%s""" % id_service 73 # suppression du service dans la base de données 74 return self.dbpool.runOperation(query).addCallbacks(lambda x:(1,'ok'), db_client_failed) 75 else: 76 return 0,u("""donnez un id de service""")
77
78 - def xmlrpc_get_service(self,cred_user,id_service=None):
79 """liste d'un service particulier (de tous les services)""" 80 if id_service : 81 query= """select * from services where id = %s""" % id_service 82 return self.dbpool.runQuery(query).addCallbacks(self._got_service,db_client_failed) 83 else : 84 query= """select * from services""" 85 return self.dbpool.runQuery(query).addCallbacks(self._got_service,db_client_failed)
86
87 - def xmlrpc_get_service_module(self,cred_user,id_module=None):
88 """liste des services d'un module (de tous les services)""" 89 if id_module : 90 query= """select * from services where module = %s""" % id_module 91 return self.dbpool.runQuery(query).addCallbacks(self._got_service,db_client_failed) 92 else : 93 query= """select * from services""" 94 return self.dbpool.runQuery(query).addCallbacks(self._got_service,db_client_failed)
95 96
97 - def xmlrpc_edit_service(self,cred_user,id_service,dico_modifs):
98 """modification d'un service 99 cette fonction prend en compte un dictionnaire qui indique les 100 champs à modifier et leur nouvelle valeur. l'application cliente 101 doit s'assurer que ces champs existent dans la base""" 102 # on vérifie que l'identifiant n'est pas modifié 103 if dico_modifs == {}: 104 return 1,u("""aucune modification demandée""") 105 if ('id' in dico_modifs.keys()) or ('module' in dico_modifs.keys()): 106 return 0,u("""l'identifiant et le module ne peuvent pas être modifiés""") 107 # construction de la requête SQL de modification 108 requete=["update services set "] 109 for cle in dico_modifs.keys(): 110 requete.append(str(cle)) 111 requete.append("='") 112 requete.append(str(dico_modifs[cle]).replace("'","\\\'")) 113 requete.append("', ") 114 string_fin=""" where id=%s""" % id_service 115 query="".join(requete)[:-2] 116 query += string_fin 117 return self.dbpool.runOperation(query).addCallbacks(lambda x:(1,'ok'), db_client_failed)
118 119 120 #################################################### 121 ## gestion des services **installes** sur un serveur 122 #################################################### 123
124 - def xmlrpc_add_service_installe(self,cred_user, id_service=None, id_serveur=None):
125 """ajout d'un serveur a un établissement""" 126 # on vérifie qu'on a bien récupéré un serveur et un service 127 if id_service and id_serveur: 128 query = """insert into services_installes (id_service,id_serveur) values (%s,%s)""" % (id_service,id_serveur) 129 # on effectue l'insertion (l'existence est à tester dans l'application cliente) 130 return self.dbpool.runOperation(query).addCallbacks(lambda x:(1,'ok'), db_client_failed) 131 else: 132 # des attributs manquent 133 return 0,u("""donnez un id de service et un id de serveur""")
134
135 - def xmlrpc_del_service_installe(self,cred_user,id_service=None,id_serveur=None):
136 """suppression d'un service""" 137 if id_service and id_serveur: 138 query = """delete from services_installes where id_serveur = %s and id_service = %s""" % (id_serveur,id_service) 139 # on récupère les services de ce serveur 140 return self.dbpool.runOperation(query).addCallbacks(lambda x:(1,'ok'), db_client_failed) 141 else: 142 # paramètres manquants 143 return 0,u("""donnez un id de service et un id de serveur""")
144 145
146 - def xmlrpc_get_service_installe(self,cred_user,id_serveur=None):
147 """liste des services installés sur un serveur""" 148 if id_serveur: 149 query = """select * from services_installes where id_serveur = %s""" % id_serveur 150 return self.dbpool.runQuery(query).addCallbacks(self._got_service_installe,db_client_failed) 151 else : 152 query = """select * from services_installes""" 153 return self.dbpool.runQuery(query).addCallbacks(self._got_service_installe,db_client_failed)
154