]> git.parisson.com Git - telemeta-data.git/commitdiff
Many fixed bugs, first working version on caruso.lam.jussieu.fr
authoryomguy <yomguy@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Thu, 21 Jan 2010 14:50:34 +0000 (14:50 +0000)
committeryomguy <yomguy@3bf09e05-f825-4182-b9bc-eedd7160adf0>
Thu, 21 Jan 2010 14:50:34 +0000 (14:50 +0000)
git-svn-id: http://svn.parisson.org/svn/crem@140 3bf09e05-f825-4182-b9bc-eedd7160adf0

trunk/import/audio_import/crem_checker.py

index 28a0536aea07c789cb2416bdb82c2446147cbbf9..f1f9f3f4cbb7b9d192da7cca8aa7f65c99aee98b 100755 (executable)
@@ -38,13 +38,48 @@ import xlrd
 import logging
 import scikits.audiolab as audiolab
 
+ITEM_OLD_PATTERN = [
+        { 'format': 'BM.aaa.nnn.mmm',           'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})$'}, 
+        { 'format': 'BM.aaaa.nnn.mmm/pp',       'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/[0-9]{2}$'},
+        { 'format': 'BM.aaaa.nnn.mmm',          'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})$'},
+        { 'format': 'BM.aaaa.nnn.mmm/',         'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/$'}, 
+        { 'format': 'BM.aaaa.nnn.mmm/ppp',      'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/[0-9]{3}$'}, 
+        { 'format': 'BM.aaaa.nnn.mm/pp',        'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{2})/[0-9]{2}$'}, 
+        { 'format': 'BM.aaaa.nnn',              'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})$'}, 
+        { 'format': 'BM.aaa.nnn.mmm/pp',        'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})/[0-9]{2}$'}, 
+        { 'format': 'BM.aaa.nnn FANTOME',       'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3}) FANTOME$'}, 
+        { 'format': 'BM.aaa.nnn',               'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})$'}, 
+        { 'format': 'BM.aaa.nnnBISoo/pp',       'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})BIS([0-9]{2})/[0-9]{2}$'}, 
+        { 'format': 'BM.aaa.nnn.mmm.ppp',       'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.[0-9]{3}$'}, 
+        { 'format': 'BM.aaa.nnn.mmm/ppp',       'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})/[0-9]{3}$'}, 
+        { 'format': 'BM.aaa.nnn/pp',            'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})/[0-9]{2}$'}, 
+        { 'format': 'BM.aaa.nnn-BIS.ooo/pp',    'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})-BIS\.([0-9]{3})/[0-9]{2}$'}, 
+        { 'format': 'BM.aaaa.nnn.mmm/NN',       'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/NN$'}, 
+        { 'format': 'BM.aaa.nnn.mmm/pp-DEPOT',  'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})/[0-9]{2}-DEPOT$'}, 
+        { 'format': 'BM.aaa.nnn.mmm-o>p',       'regex': r'^(BM)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})-[0-9]>[0-9]$'}, 
+        { 'format': 'CY.aaaa.nnn',              'regex': r'^(CY)\.([0-9]{4})\.([0-9]{3})$'}, 
+        { 'format': 'DI.aaaa.nnn.mmm',          'regex': r'^(DI)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})$'}, 
+        { 'format': 'DI.aaaa.nnn.mmm/pp',       'regex': r'^(DI)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/[0-9]{2}$'}, 
+        { 'format': 'DI.aaa.nnn.mmm',           'regex': r'^(DI)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})$'}, 
+        { 'format': 'DI.aaa.nnn.mmm/pp',        'regex': r'^(DI)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})/[0-9]{2}$'}, 
+        { 'format': 'DI.aaa.nnn.mmm-o/p',       'regex': r'^(DI)\.([0-9]{3})\.([0-9]{3})\.([0-9]{3})-[0-9]/[0-9]$'}, 
+        { 'format': 'FANTOME 2*',               'regex': r'FANTOME 2\*$'},
+
+        # yomguy
+        { 'format': 'BM.aaaa.nnn.mmm.pp',       'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})\.[0-9]{2}$'},
+        { 'format': 'BM.aaaa.nnn.mmm/pp:ii-jj', 'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3})/([0-9]{2})\:([0-9]{2})\-([0-9]{2})$'},
+        { 'format': 'BM.aaaa.nnn.mmm:ii-jj',    'regex': r'^(BM)\.([0-9]{4})\.([0-9]{3})\.([0-9]{3}):([0-9]{2})\-([0-9]{2})$'},
+        ]
 
-ITEM_PATTERN = [
+ITEM_NEW_PATTERN = [
         { 'format': 'CNRSMH_I_aaaa_nnn_mmm',           'regex': r'^(CNRSMH)_I_([0-9]{4})_([0-9]{3})_([0-9]{3})$'},
         { 'format': 'CNRSMH_I_aaaa_nnn_mmm_tt',        'regex': r'^(CNRSMH)_I_([0-9]{4})_([0-9]{3})_([0-9]{3})_([0-9]{2})$'},
         { 'format': 'CNRSMH_I_aaaa_nnn_mmm_tt_pp',     'regex': r'^(CNRSMH)_I_([0-9]{4})_([0-9]{3})_([0-9]{3})_([0-9]{2})_([0-9]{2})$'},
         { 'format': 'CNRSMH_E_aaaa_nnn_mmm_tt',        'regex': r'^(CNRSMH)_E_([0-9]{4})_([0-9]{3})_([0-9]{3})_([0-9]{2})$'},
         { 'format': 'CNRSMH_E_aaaa_nnn_mmm_tt_pp',     'regex': r'^(CNRSMH)_E_([0-9]{4})_([0-9]{3})_([0-9]{3})_([0-9]{2})_([0-9]{2})$'},
+
+        # yomguy
+        { 'format': 'CNRSMH_I_aaaa_nnn_mm',           'regex': r'^(CNRSMH)_I_([0-9]{4})_([0-9]{3})_([0-9]{2})$'},
         ]
 
 COLLECTION_PATTERN = [
@@ -52,6 +87,7 @@ COLLECTION_PATTERN = [
         { 'format': 'CNRSMH_E_aaaa_nnn_mmm',        'regex': r'^(CNRSMH)_E_([0-9]{4})_([0-9]{3})_([0-9]{3})$'},
         ]
 
+
 def check_name(patterns, name):
     match = False
     for pattern in patterns:
@@ -112,7 +148,7 @@ class CremCSV:
 class CremXLS:
 
     def __init__(self, file):
-        self.first_row = 7
+        self.first_row = 8
         self.original_col = 0
         self.new_col = 1
         self.book = xlrd.open_workbook(file)
@@ -120,6 +156,19 @@ class CremXLS:
         self.original_refs = self.original_refs()
         self.new_refs = self.new_refs()
 
+        print file
+        print len(self.new_refs)
+        while not check_name(ITEM_OLD_PATTERN, self.original_refs[0].encode('utf8')) \
+          and not check_name(ITEM_NEW_PATTERN, self.new_refs[0].encode('utf8')):
+
+            print self.new_refs[0].encode('utf8')
+            print self.original_refs[0].encode('utf8')
+            
+            self.original_refs = self.original_refs[1:]
+            self.new_refs = self.new_refs[1:]
+            
+        self.size = max(len(self.new_refs), len(self.original_refs))
+        
     def original_refs(self):
         col = self.sheet.col(self.original_col)
         list = []
@@ -166,7 +215,13 @@ class CremCheck:
     def __init__(self, root_dir, log_file):
         self.root_dir = root_dir
         self.logger = Logger(log_file)
-        self.dir_list = os.listdir(self.root_dir)
+        dir_list = os.listdir(self.root_dir)
+        list = []
+        for dir in dir_list:
+           if not dir[0] == '.':
+               list.append(dir)
+        self.dir_list = list
+
 
     def check_wav(self):
         pass
@@ -178,51 +233,80 @@ class CremCheck:
     def check(self):
         for dir in self.dir_list:
             collection = CremCollection(self.root_dir + dir)
-            self.logger.write_info(collection.dir, '************************ VERIFICATION ***********************')
+            msg = '************************ ' + collection.dir_name + ' ******************************'
+            self.logger.write_info(collection.dir, msg[:70])
             xls_list = collection.xls_list()
             wav_list = collection.wav_list()
 
             if not check_name(COLLECTION_PATTERN, dir):
-                self.logger.write_error(collection.dir, 'Dossier mal nommé')
-            if len(xls_list) == 0:
-                self.logger.write_error(collection.dir, 'PAS de fichier XLS dans le dossier collection')
+                self.logger.write_error(collection.dir, 'Le dossier de la collection est mal nommé -> SORTIE')
+            elif len(xls_list) == 0:
+                self.logger.write_error(collection.dir, 'PAS de fichier XLS dans le dossier collection -> SORTIE')
             elif len(xls_list) > 1:
-                self.logger.write_error(collection.dir, 'Plusieurs fichiers XLS dans le dossier collection')
+                self.logger.write_error(collection.dir, 'Plusieurs fichiers XLS dans le dossier collection -> SORTIE')
             else:
                 xls = CremXLS(self.root_dir + os.sep + dir + os.sep + xls_list[0])
-                self.logger.write_info(collection.dir, 'Nombre de références du fichier XLS : ' + str(len(xls.new_refs)))
+                self.logger.write_info(collection.dir, 'Nombre de références du fichier XLS : ' + str(xls.size))
 
-                if len(wav_list) != len(xls.new_refs):
+                if len(wav_list) != xls.size:
                     self.logger.write_error(collection.dir, \
-                    'Le nombre de références du fichier XLS (' + str(len(xls.new_refs)) + ') diffère du nombre de fichiers (' + str(len(wav_list)) + ')')
+                    'Le nombre de références du fichier XLS (' + str(xls.size) + ') diffère du nombre de fichiers (' + str(len(wav_list)) + ')')
 
                 temp_list = []
                 item_file = CremItemFile()
 
-                for item in xls.new_refs:
+                for i in range(0,xls.size):
+                    
+                    try:
+                        item_old = xls.original_refs[i]
+                        #self.logger.write_error(collection.dir, item_old)
+                    except:
+                        item_old = ''
+                        msg = 'Ligne ' + str(i) + ' : l\'ancienne référence d\'item est inexistante'
+                        self.logger.write_error(collection.dir, msg)
+                        continue
+
+                    try:
+                        item = xls.new_refs[i]
+                        #self.logger.write_error(collection.dir, item)
+                    except:
+                        item = ''
+                        msg = 'Ligne ' + str(i) + ' : la nouvelle référence d\'item est inexistante'
+                        self.logger.write_error(collection.dir, msg)
+                        continue
+
+                    if not item in temp_list:
+                        temp_list.append(item)
+                    else:
+                        msg =  'Ligne ' + str(i) + ' : la référence d\'item ' + item.encode('utf8') + ' est multiple'
+                        self.logger.write_error(collection.dir, msg)
+
+                    if not check_name(ITEM_OLD_PATTERN, item_old):
+                        msg = 'Ligne ' + str(i) + ' : l\'ancienne référence d\'item ' + item_old.encode('utf8') + ' est mal formatée'
+                        self.logger.write_error(collection.dir, msg)
+                    
+                    if not check_name(ITEM_NEW_PATTERN, item):
+                        msg = 'Ligne ' + str(i) + ' : la nouvelle référence d\'item ' + item.encode('utf8') + ' est mal formatée'
+                        self.logger.write_error(collection.dir, msg)
 
-                    if not check_name(ITEM_PATTERN, item):
-                        self.logger.write_error(collection.dir, 'La référence ' + str(item) + ' est mal formatée')
                     if item[0:17] != collection.dir_name :
-                        self.logger.write_error(collection.dir, 'La référence ' + str(item) + ' ne correspond pas à la collection')
+                        msg = 'Ligne ' + str(i) + ' : la référence d\'item ' + item.encode('utf8') + ' ne correspond pas à celle de la collection'
+                        self.logger.write_error(collection.dir, msg)
 
-                    name_wav = str(item) + '.wav'
+                    name_wav = item.encode('utf8') + '.wav'
                     if not name_wav in wav_list:
-                        self.logger.write_error(collection.dir, 'Le fichier ' + str(item) + '.wav n\'existe pas')
+                        self.logger.write_error(collection.dir, 'Le fichier ' + item.encode('utf8') + '.wav n\'existe pas')
                     else:
                         item_file.set_media(collection.dir + os.sep + name_wav)
                         if not item_file.is_wav():
-                            self.logger.write_error(collection.dir, 'Le fichier ' + str(item) + '.wav n\'est pas valide')
-
-                    if not item in temp_list:
-                        temp_list.append(item)
-                    else:
-                        self.logger.write_error(collection.dir, 'La référence ' + str(item) + ' est multiple')
+                            self.logger.write_error(collection.dir, 'Le fichier ' + item.encode('utf8') + '.wav n\'est pas valide')
 
                 for filename in wav_list:
-                    if not check_name(ITEM_PATTERN, os.path.splitext(filename)[0]):
-                        self.logger.write_error(collection.dir, 'Le nom du fichier ' + str(filename) + ' est mal formaté')
-            self.logger.write_info(collection.dir, '**************************** FIN ****************************')
+                    if not check_name(ITEM_NEW_PATTERN, os.path.splitext(filename)[0]):
+                        self.logger.write_error(collection.dir, 'Le nom du fichier ' + str(os.path.splitext(filename)[0]) + ' est mal formaté')
+
+            msg = '********************************************************************************'
+            self.logger.write_info(collection.dir, msg[:70])
 
 
 def main():
@@ -231,3 +315,4 @@ def main():
 
 if __name__ == '__main__':
     main()
+