source: tools/scripts/telemeta-crem-import.py @ 95ce89e4

cremcrem2crem3devdev2diademsdj1.6feature/breadcrumbsfeature/ts-0.5feature/ts-0.5.4feature/writecacheformagenericinstru_searchlamlam2mapsv3mergenlivemultiproductionrelease/1.4.4sabiodsearchsecurityserversocialstoragetelecastertestvideo
Last change on this file since 95ce89e4 was 95ce89e4, checked in by yomguy <yomguy@…>, 3 years ago

test modified item.file, add import script for new collections

  • Property mode set to 100755
File size: 4.8 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Copyright (C) 2010 Guillaume Pellerin
5# All rights reserved.
6#
7# This software is licensed as described in the file COPYING, which
8# you should have received as part of this distribution. The terms
9# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
10#
11# Author: Guillaume Pellerin <yomguy@parisson.com>
12#
13
14import os
15import sys
16import csv
17import logging
18import datetime
19from django.core.management import setup_environ
20from django.core.files.base import ContentFile
21
22class Logger:
23
24    def __init__(self, file):
25        self.logger = logging.getLogger('myapp')
26        self.hdlr = logging.FileHandler(file)
27        self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
28        self.hdlr.setFormatter(self.formatter)
29        self.logger.addHandler(self.hdlr)
30        self.logger.setLevel(logging.INFO)
31
32    def write_info(self, prefix, message):
33        self.logger.info(' ' + prefix + ' : ' + message.decode('utf8'))
34
35    def write_error(self, prefix, message):
36        self.logger.error(prefix + ' : ' + message.decode('utf8'))
37
38
39class TelemetaWavImport:
40
41    def __init__(self, source_dir, log_file, pattern):
42        self.logger = Logger(log_file)
43        self.source_dir = source_dir
44        self.collections = os.listdir(self.source_dir)
45        self.buffer_size = 0x1000
46        self.pattern = pattern
47
48    def wav_import(self):
49        from telemeta.models import MediaItem
50        for collection in self.collections:
51            collection_dir = self.source_dir + os.sep + collection
52            if not '/.' in collection_dir and self.pattern in collection_dir:
53                self.collection_name = collection.split(os.sep)[-1]
54                msg = '************************ ' + collection + ' ******************************'
55                self.logger.write_info(collection, msg[:70])
56
57                collection_files = os.listdir(collection_dir)
58                if not collection + '.csv' in collection_files:
59                    msg = 'Le fichier CSV est mal nommé ou inexistant'
60                    self.logger.write_error(collection, msg)
61                else:
62                    c = csv.reader(open(self.source_dir + os.sep + collection + os.sep + collection + '.csv'), delimiter=';')
63                    for row in c:
64                        old_ref = row[0]
65                        new_ref = row[1]
66                        print old_ref + ' : ' + new_ref
67                        filename = new_ref + '.wav'
68                        wav_file = self.source_dir + os.sep + collection + os.sep + filename
69                        items = MediaItem.objects.filter(old_code=old_ref)
70                        if len(items) != 0:
71                            item = items[0]
72                            print item.old_code + ' : id = ' + str(item.id) + " : title = " + item.title
73                            if os.path.exists(wav_file):
74                                if not item.file :
75                                    f = open(wav_file, 'r')
76                                    file_content = ContentFile(f.read())
77                                    item.file.save(filename, file_content)
78                                    f.close()
79                                    item.code = new_ref
80                                    item.save()
81                                else:
82                                    msg = old_ref + ' : fichier ' + wav_file + ' déjà ajouté !'
83                                    print msg
84                                    self.logger.write_error(collection, msg)
85                            else:
86                                msg = old_ref + ' : fichier audio ' + wav_file + ' inexistant !'
87                                print msg
88                                self.logger.write_error(collection, msg)
89                        else:
90                            msg = old_ref + ' : item inexistant dans la base de données !'
91                            print msg
92                            self.logger.write_error(collection, msg)
93
94
95def print_usage(tool_name):
96    print "Usage: "+tool_name+" <project_dir> <source_dir> <pattern> <log_file>"
97    print "  project_dir: the directory of the Django project which hosts Telemeta"
98    print "  source_dir: the directory containing the wav files to include"
99    print "  pattern: a pattern to match the collection names"
100    print "  log_file: a log file to write logs"
101
102def run():
103    if len(sys.argv) < 3:
104        print_usage(os.path.basename(sys.argv[0]))
105        sys.exit(1)
106    else:
107        project_dir = sys.argv[-4]
108        source_dir = sys.argv[-3]
109        pattern = sys.argv[-2]
110        log_file = sys.argv[-1]
111        sys.path.append(project_dir)
112        import settings
113        setup_environ(settings)
114        t = TelemetaWavImport(source_dir, log_file, pattern)
115        t.wav_import()
116
117if __name__ == '__main__':
118    run()
Note: See TracBrowser for help on using the repository browser.