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