zephir.backend.services_rpc

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