zephir.backend.aaf

Package zephir :: Package backend :: Module aaf |
[frames] | no frames]

# Source Code for Module zephir.backend.aaf

      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  # aaf_rpc.py
      9  #
     10  # fonctions xmlrpc pour la gestion des fichier d'import AAF
     11  #
     12  ###########################################################################
     13  """module de gestion des fichiers d'import AAF
     14  """
     15
     16  from zephir.backend.config import AAF_DIR
     17  from zephir.backend.lib_backend import cx_pool
     18  from twisted.internet.utils import getProcessValue
     19  from twisted.internet import defer
     20  import os
     21
     22 -class AAF:
     23      """gestion des fichiers d'import AAF
     24      """
     25
     26 -    def __init__(self):
     27          if not os.path.isdir(AAF_DIR):
     28              os.makedirs(AAF_DIR)
     29
     30 -    def add_file(self, nom_fichier, id_serveur):
     31          """ajoute un fichier à surveiller
     32          """
     33          query = """insert into import_aaf (id_serveur,fichier) values (%s,%s)"""
     34          cursor = cx_pool.create()
     35          cursor.execute(query, (id_serveur, nom_fichier))
     36          cx_pool.commit(cursor)
     37
     38 -    def del_file(self, nom_fichier):
     39          """supprime un fichier de la liste des fichiers à surveiller
     40          """
     41          query = """delete from import_aaf where fichier=%s"""
     42          cursor = cx_pool.create()
     43          cursor.execute(query, (nom_fichier,))
     44          cx_pool.commit(cursor)
     45          # si le fichier existe dans le répertoire, on le supprime
     46          if os.path.isfile(os.path.join(AAF_DIR, nom_fichier)):
     47              os.unlink(os.path.join(AAF_DIR, nom_fichier))
     48          if os.path.isfile(os.path.join(AAF_DIR, '%s.sha256' % nom_fichier)):
     49              os.unlink(os.path.join(AAF_DIR, '%s.sha256' % nom_fichier))
     50
     51 -    def get_serveur(self, nom_fichier):
     52          """indique à quel serveur un fichier est attribué
     53          """
     54          query = """select id_serveur from import_aaf where fichier=%s"""
     55          cursor = cx_pool.create()
     56          cursor.execute(query, (nom_fichier,))
     57          serveur = cursor.fetchone()
     58          cx_pool.close(cursor)
     59          if serveur is not None:
     60              return serveur[0]
     61          raise ValueError, """pas de serveur associé à ce fichier"""
     62
     63 -    def list_files(self, id_serveur):
     64          """renvoie la liste des fichiers surveillés
     65          """
     66          query = """select fichier from import_aaf where id_serveur=%s"""
     67          cursor = cx_pool.create()
     68          cursor.execute(query, (id_serveur,))
     69          fichiers = cursor.fetchall()
     70          cx_pool.close(cursor)
     71          return [fichier[0] for fichier in fichiers]
     72
     73 -    def update_hash(self, nom_fichier, hash_data):
     74          """met à jour le hash d'un fichier
     75          """
     76          # stockage de la somme md5
     77          query = """update import_aaf set hash=%s where fichier=%s"""
     78          cursor = cx_pool.create()
     79          cursor.execute(query, (hash_data, nom_fichier))
     80          cx_pool.commit(cursor)
     81
     82 -    def check_hash(self, nom_fichier):
     83          """vérifie si un fichier a été modifié
     84          renvoie True si le fichier est modifié, False sinon
     85          """
     86          # récupération du dernier hash enregistré
     87          query = """select hash from import_aaf where fichier = %s"""
     88          cursor = cx_pool.create()
     89          cursor.execute(query, (nom_fichier,))
     90          hash_data = cursor.fetchone()
     91          cx_pool.close(cursor)
     92          if hash_data and hash_data[0] is not None:
     93              # valeur trouvée, on compare avec le fichier actuel
     94              f_hash = open(os.path.join(AAF_DIR, '%s.sha256' % nom_fichier), 'w')
     95              f_hash.write("%s *%s" % (hash_data[0].strip(), nom_fichier))
     96              f_hash.close()
     97              cmd_sha = getProcessValue("/usr/bin/sha256sum",
     98                                        args = ['-c', '%s.sha256' % nom_fichier],
     99                                        path = AAF_DIR,
    100                                        env = {'LC_ALL': 'C'})
    101              return cmd_sha.addBoth(self._check_sha_verify)
    102          # pas encore de md5 enregistré, on considère le fichier modifié
    103          return defer.succeed(True)
    104
    105 -    def _check_sha_verify(self, result):
    106          """traitement du retour de la vérification de checksum
    107          """
    108          if result == 0:
    109              # pas de changement
    110              return False
    111          else:
    112              return True
    113