1
2
3
4
5
6
7
8
9
10
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
23 """gestion des fichiers d'import AAF
24 """
25
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
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
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
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
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
74 """met à jour le hash d'un fichier
75 """
76
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
83 """vérifie si un fichier a été modifié
84 renvoie True si le fichier est modifié, False sinon
85 """
86
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
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
103 return defer.succeed(True)
104
106 """traitement du retour de la vérification de checksum
107 """
108 if result == 0:
109
110 return False
111 else:
112 return True
113