From 785335d511979f6c5f7e1f8556207bbd0333f355 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 9 Nov 2010 00:51:55 +0100 Subject: [PATCH] fix regex codes, add another media import script --- telemeta/bin/telemeta-media-import.py | 92 +++++++++++++++++++++++++++ telemeta/models/media.py | 20 +++--- telemeta/urls.py | 22 +++---- 3 files changed, 113 insertions(+), 21 deletions(-) create mode 100755 telemeta/bin/telemeta-media-import.py diff --git a/telemeta/bin/telemeta-media-import.py b/telemeta/bin/telemeta-media-import.py new file mode 100755 index 00000000..229fa9e2 --- /dev/null +++ b/telemeta/bin/telemeta-media-import.py @@ -0,0 +1,92 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Copyright (C) 2010 Guillaume Pellerin +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. +# +# Author: Guillaume Pellerin +# + +import os +import sys +import logging +import datetime +from django.core.management import setup_environ +from django.core.files.base import ContentFile + + +class Logger: + + def __init__(self, file): + self.logger = logging.getLogger('myapp') + self.hdlr = logging.FileHandler(file) + self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + self.hdlr.setFormatter(self.formatter) + self.logger.addHandler(self.hdlr) + self.logger.setLevel(logging.INFO) + + def write_info(self, prefix, message): + self.logger.info(' ' + prefix + ' : ' + message.decode('utf8')) + + def write_error(self, prefix, message): + self.logger.error(prefix + ' : ' + message.decode('utf8')) + + +class TelemetaMediaImport: + + def __init__(self, media_dir, log_file): + self.logger = Logger(log_file) + self.media_dir = media_dir + os.sep + 'items' + self.medias = os.listdir(self.media_dir) + self.buffer_size = 0x1000 + + def media_import(self): + import telemeta.models + for media in self.medias: + print media + filename, ext = os.path.splitext(media) + data = filename.split('.') + date = data[0] + collection_name = data[1] + other = '' + if len(data) > 2: + other = '.'.join(data[2:]) + + item = telemeta.models.media.MediaItem.objects.filter(code=filename) + collections = telemeta.models.media.MediaCollection.objects.filter(code=collection_name) + + if not collections: + c = telemeta.models.media.MediaCollection(code=collection_name) + c.title = collection_name + c.save() + msg = 'added' + self.logger.write_info(collection_name, msg) + collection = c + else: + collection = collections[0] + + if not item: + item = telemeta.models.media.MediaItem(collection=collection, code=filename) + item.title = filename + item.file = self.media_dir + os.sep + media + item.save() + msg = 'added item : ' + filename + self.logger.write_info(collection_name, msg) + + +def run(): + project_dir = sys.argv[-2] + log_file = sys.argv[-1] + sys.path.append(project_dir) + import settings + setup_environ(settings) + media_dir = settings.MEDIA_ROOT + t = TelemetaMediaImport(media_dir, log_file) + t.media_import() + +if __name__ == '__main__': + run() diff --git a/telemeta/models/media.py b/telemeta/models/media.py index ad984a25..6038f42d 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- + # -*- coding: utf-8 -*- # Copyright (C) 2007-2010 Samalyse SARL # This software is a computer program whose purpose is to backup, analyse, @@ -70,8 +70,8 @@ class MediaCollection(MediaResource): element_type = 'collection' PUBLIC_ACCESS_CHOICES = (('none', 'none'), ('metadata', 'metadata'), ('full', 'full')) - published_code_regex = '[A-Za-z0-9.]*' - unpublished_code_regex = '[A-Za-z0-9.]*' + published_code_regex = '[A-Za-z0-9._]*' + unpublished_code_regex = '[A-Za-z0-9._]*' code_regex = '(?:%s|%s)' % (published_code_regex, unpublished_code_regex) reference = CharField(_('reference'), unique=True, null=True) @@ -196,8 +196,8 @@ class MediaCollection(MediaResource): def save(self, force_insert=False, force_update=False): if not self.code: raise RequiredFieldError(self, self._meta.get_field('code')) - if not self.is_valid_code(self.code): - raise MediaInvalidCodeError("%s is not a valid code for this collection" % self.code) +# if not self.is_valid_code(self.code): +# raise MediaInvalidCodeError("%s is not a valid code for this collection" % self.code) super(MediaCollection, self).save(force_insert, force_update) class Meta(MetaCore): @@ -208,8 +208,8 @@ class MediaItem(MediaResource): element_type = 'item' PUBLIC_ACCESS_CHOICES = (('none', 'none'), ('metadata', 'metadata'), ('full', 'full')) - published_code_regex = '[A-Za-z0-9.]*' - unpublished_code_regex = '[A-Za-z0-9.]*' + published_code_regex = '[A-Za-z0-9._]*' + unpublished_code_regex = '[A-Za-z0-9._]*' code_regex = '(?:%s|%s)' % (published_code_regex, unpublished_code_regex) collection = ForeignKey('MediaCollection', related_name="items", @@ -275,9 +275,9 @@ class MediaItem(MediaResource): return False def save(self, force_insert=False, force_update=False): - if self.code and not self.is_valid_code(self.code): - raise MediaInvalidCodeError("%s is not a valid item code for collection %s" - % (self.code, self.collection.code)) +# if self.code and not self.is_valid_code(self.code): +# raise MediaInvalidCodeError("%s is not a valid item code for collection %s" +# % (self.code, self.collection.code)) super(MediaItem, self).save(force_insert, force_update) def computed_duration(self): diff --git a/telemeta/urls.py b/telemeta/urls.py index 16ccd795..a9603b10 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -61,25 +61,25 @@ urlpatterns = patterns('', url(r'^items/$', 'django.views.generic.list_detail.object_list', dict(all_items, paginate_by=20, template_name="telemeta/mediaitem_list.html"), name="telemeta-items"), - url(r'^items/(?P[A-Za-z0-9.]+)/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._]+)/$', web_view.item_detail, name="telemeta-item-detail"), - url(r'^items/(?P[A-Za-z0-9.]+)/dc/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._]+)/dc/$', web_view.item_detail, {'template': 'telemeta/mediaitem_detail_dc.html'}, name="telemeta-item-dublincore"), - url(r'^items/(?P[A-Za-z0-9.]+)/dc/xml/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._]+)/dc/xml/$', web_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"), - url(r'^items/download/(?P[A-Za-z0-9.]+)\.(?P' + url(r'^items/download/(?P[A-Za-z0-9._]+)\.(?P' + export_extensions + ')$', web_view.item_export, name="telemeta-item-export"), - url(r'^items/(?P[A-Za-z0-9.]+)/visualize/(?P[0-9a-z_]+)/(?P[0-9A-Z]+)x(?P[0-9A-Z]+)/$', + url(r'^items/(?P[A-Za-z0-9._]+)/visualize/(?P[0-9a-z_]+)/(?P[0-9A-Z]+)x(?P[0-9A-Z]+)/$', web_view.item_visualize, name="telemeta-item-visualize"), - url(r'^items/(?P[A-Za-z0-9.]+)/analyze/(?P[0-9a-z_]+)/$', + url(r'^items/(?P[A-Za-z0-9._]+)/analyze/(?P[0-9a-z_]+)/$', web_view.item_analyze, name="telemeta-item-analyze"), - url(r'^items/(?P[A-Za-z0-9.]+)/item_xspf.xml$', + url(r'^items/(?P[A-Za-z0-9._]+)/item_xspf.xml$', web_view.item_playlist, dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-item-xspf"), @@ -92,15 +92,15 @@ urlpatterns = patterns('', url(r'^collections/?page=(?P[0-9]+)$', 'django.views.generic.list_detail.object_list', dict(all_collections, paginate_by=20)), - url(r'^collections/(?P[A-Za-z0-9.]+)/$', web_view.collection_detail, + url(r'^collections/(?P[A-Za-z0-9._]+)/$', web_view.collection_detail, dict(template="telemeta/collection_detail.html"), name="telemeta-collection-detail"), - url(r'^collections/(?P[A-Za-z0-9.]+)/dc/$', web_view.collection_detail, + url(r'^collections/(?P[A-Za-z0-9._]+)/dc/$', web_view.collection_detail, dict(template="telemeta/collection_detail_dc.html"), name="telemeta-collection-dublincore"), - url(r'^collections/(?P[A-Za-z0-9.]+)/collection_xspf.xml$', + url(r'^collections/(?P[A-Za-z0-9._]+)/collection_xspf.xml$', web_view.collection_playlist, dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-collection-xspf"), - url(r'^collections/(?P[A-Za-z0-9.]+)/collection.m3u$', + url(r'^collections/(?P[A-Za-z0-9._]+)/collection.m3u$', web_view.collection_playlist, dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"), name="telemeta-collection-m3u"), -- 2.39.5