From 1eb6b2944efc5c068a88786f6ad002aeff927275 Mon Sep 17 00:00:00 2001 From: yomguy Date: Fri, 18 Nov 2011 13:15:23 +0100 Subject: [PATCH] collection edit: fix null doc_type import crem: add special cases, simplify --- telemeta/models/media.py | 2 + tools/scripts/telemeta-crem-import.py | 129 +++++++++++++++----------- 2 files changed, 75 insertions(+), 56 deletions(-) diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 29ef049e..83b223ec 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -217,6 +217,8 @@ class MediaCollection(MediaResource): class MediaCollectionForm(ModelForm): class Meta: model = MediaCollection + def clean_doctype_code(self): + return self.cleaned_data['doctype_code'] or 0 item_published_code_regex = '[A-Za-z0-9._-]*' diff --git a/tools/scripts/telemeta-crem-import.py b/tools/scripts/telemeta-crem-import.py index 8cb6c903..3af6868f 100755 --- a/tools/scripts/telemeta-crem-import.py +++ b/tools/scripts/telemeta-crem-import.py @@ -68,10 +68,11 @@ class TelemetaWavImport: for collection in self.collections: collection_dir = self.source_dir + os.sep + collection - collection_files = os.listdir(collection_dir) + collections = [] if not '/.' in collection_dir and self.pattern in collection_dir: collection_name = collection.split(os.sep)[-1] + collections.append(collection_name) c = MediaCollection.objects.filter(code=collection_name) if not c and collection + '.csv' in collection_files: @@ -88,71 +89,87 @@ class TelemetaWavImport: msg = 'collection présente dans la base de données' self.logger.info(collection, msg) - for collection in self.collections: + for collection in collections: collection_dir = self.source_dir + os.sep + collection + collection_name = collection + collection_files = os.listdir(collection_dir) + msg = '************************ ' + collection + ' ******************************' + self.logger.info(collection, msg[:70]) + overwrite = True + csv_file = '' + rows = {} - if not '/.' in collection_dir and self.pattern in collection_dir: - collection_name = collection.split(os.sep)[-1] - msg = '************************ ' + collection + ' ******************************' + if collection + '.csv' in collection_files: + csv_file = self.source_dir + os.sep + collection + os.sep + collection + '.csv' + csv_data = csv.reader(open(csv_file), delimiter=';') + for row in csv_data: + rows[row[1]] = row[0] + msg = collection + ' import du fichier CSV de la collection' self.logger.info(collection, msg[:70]) - collection_files = os.listdir(collection_dir) + else: + msg = collection + ' pas de fichier CSV dans la collection' + self.logger.info(collection, msg[:70]) + + c = MediaCollection.objects.filter(code=collection_name) + if not c: + c = MediaCollection(code=collection_name) + c.save() + msg = ' collection NON présente dans la BDD, CREATION ' + self.logger.info(c.code, msg) + else: + c = c[0] + msg = ' id = '+str(c.id) + self.logger.info(c.code, msg) + + audio_files = [] + for file in collection_files: + ext = ['WAV', 'wav'] + if file.split('.')[-1] in ext: + audio_files.append(file) + + audio_files.sort() + nb_items = c.items.count() + counter = 0 + + for file in audio_files: + code = file.split('.')[0] + wav_file = self.source_dir + os.sep + collection + os.sep + file - if not collection + '.csv' in collection_files: - overwrite = False - msg = collection + ' pas de fichier CSV dans la collection' - self.logger.info(collection, msg[:70]) - c = MediaCollection.objects.filter(code=collection_name) + if len(audio_files) <= nb_items: + items = MediaItem.objects.filter(code=code) - if not c: - c = MediaCollection(code=collection_name) - c.save() - msg = ' collection NON présente dans la BDD, CREATION ' - self.logger.info(c.code, msg) + if code in rows and not items: + old_ref = rows[code] + items = MediaItem.objects.filter(old_code=old_ref) + if items: + item = items[0] + msg = item.old_code + ' : Cas 1 ou 2 : id = ' + str(item.id) + self.logger.info('item', msg) + item.code = code + item.save() else: - c = c[0] - msg = ' id = '+str(c.id) - self.logger.info(c.code, msg) - - for filename in collection_files: - wav_file = self.source_dir + os.sep + collection + os.sep + filename - code = filename.split('.')[0] - items = MediaItem.objects.filter(code=code) - - if len(items) != 0: - item = items[0] - msg = item.code + ' : id = '+str(item.id) - self.logger.info('item', msg) - else: - item = MediaItem(code=code, collection=c) - msg = item.code + ' : item NON présent dans la base de données, CREATION' - self.logger.info('item', msg) - - self.write_file(item, wav_file, overwrite) - - else: - overwrite = False - csv_file = self.source_dir + os.sep + collection + os.sep + collection + '.csv' - c = csv.reader(open(csv_file), delimiter=';') + item = MediaItem(code=code, collection=c) + msg = item.code + ' : Cas 1 ou 2 : item NON présent dans la base de données, CREATION' + self.logger.info('item', msg) - for row in c: - old_ref = row[0] - new_ref = row[1] - filename = new_ref + '.wav' - wav_file = self.source_dir + os.sep + collection + os.sep + filename - items = MediaItem.objects.filter(old_code=old_ref) + self.write_file(item, wav_file, overwrite) + + elif nb_items == 1 and len(audio_files) > 1: + if counter == 0: + msg = code + ' : Cas 3a : item n°01 présent dans la base de données, PASSE' + self.logger.info('item', msg) + else: + item = MediaItem(code=code, collection=c) + msg = item.code + ' : Cas 3a : item NON présent dans la base de données, CREATION' + self.logger.info('item', msg) + self.write_file(item, wav_file, overwrite) - if items: - item = items[0] - msg = item.old_code + ' : id = ' + str(item.id) - self.logger.info('item', msg) - self.write_file(item, wav_file, overwrite) - item.code = new_ref - item.save() - else: - msg = old_ref + ' : item inexistant dans la base de données !' - self.logger.error('item', msg) + elif nb_items > 1 and nb_items < len(audio_files): + msg = code + ' : Cas 3b : nb items < nb de fichiers audio, PAS de creation' + self.logger.info('item', msg) + counter += 1 def print_usage(tool_name): print "Usage: "+tool_name+" " -- 2.39.5