]> git.parisson.com Git - telemeta.git/commitdiff
fix regex codes, add another media import script
authorGuillaume Pellerin <yomguy@parisson.com>
Mon, 8 Nov 2010 23:51:55 +0000 (00:51 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Mon, 8 Nov 2010 23:51:55 +0000 (00:51 +0100)
telemeta/bin/telemeta-media-import.py [new file with mode: 0755]
telemeta/models/media.py
telemeta/urls.py

diff --git a/telemeta/bin/telemeta-media-import.py b/telemeta/bin/telemeta-media-import.py
new file mode 100755 (executable)
index 0000000..229fa9e
--- /dev/null
@@ -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 <yomguy@parisson.com>
+#
+
+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()
index ad984a259da038b314d4f1fa25ef1d5aea5d4ae3..6038f42df8de559eb29ba55b66814d0f9e336b28 100644 (file)
@@ -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):
index 16ccd79596c6f32a5abec7423479a26b6abc51d3..a9603b1014b4e9a8cae6258345dc8e829758195e 100644 (file)
@@ -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<public_id>[A-Za-z0-9.]+)/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Za-z0-9._]+)/$', web_view.item_detail, 
         name="telemeta-item-detail"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9.]+)/dc/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Za-z0-9._]+)/dc/$', web_view.item_detail, 
         {'template': 'telemeta/mediaitem_detail_dc.html'},
         name="telemeta-item-dublincore"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9.]+)/dc/xml/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Za-z0-9._]+)/dc/xml/$', web_view.item_detail, 
         {'format': 'dublin_core_xml'},
         name="telemeta-item-dublincore-xml"),
-    url(r'^items/download/(?P<public_id>[A-Za-z0-9.]+)\.(?P<extension>' 
+    url(r'^items/download/(?P<public_id>[A-Za-z0-9._]+)\.(?P<extension>' 
             + export_extensions + ')$', 
         web_view.item_export,
         name="telemeta-item-export"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9.]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', 
+    url(r'^items/(?P<public_id>[A-Za-z0-9._]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', 
         web_view.item_visualize,
         name="telemeta-item-visualize"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9.]+)/analyze/(?P<analyzer_id>[0-9a-z_]+)/$', 
+    url(r'^items/(?P<public_id>[A-Za-z0-9._]+)/analyze/(?P<analyzer_id>[0-9a-z_]+)/$', 
         web_view.item_analyze,
         name="telemeta-item-analyze"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9.]+)/item_xspf.xml$', 
+    url(r'^items/(?P<public_id>[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<page>[0-9]+)$', 
         'django.views.generic.list_detail.object_list',
         dict(all_collections, paginate_by=20)),
-    url(r'^collections/(?P<public_id>[A-Za-z0-9.]+)/$', web_view.collection_detail,
+    url(r'^collections/(?P<public_id>[A-Za-z0-9._]+)/$', web_view.collection_detail,
         dict(template="telemeta/collection_detail.html"), name="telemeta-collection-detail"),
-    url(r'^collections/(?P<public_id>[A-Za-z0-9.]+)/dc/$', web_view.collection_detail,
+    url(r'^collections/(?P<public_id>[A-Za-z0-9._]+)/dc/$', web_view.collection_detail,
         dict(template="telemeta/collection_detail_dc.html"), name="telemeta-collection-dublincore"),
-    url(r'^collections/(?P<public_id>[A-Za-z0-9.]+)/collection_xspf.xml$', 
+    url(r'^collections/(?P<public_id>[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<public_id>[A-Za-z0-9.]+)/collection.m3u$',
+    url(r'^collections/(?P<public_id>[A-Za-z0-9._]+)/collection.m3u$',
         web_view.collection_playlist, 
         dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"),
         name="telemeta-collection-m3u"),