From 856645b29c21594bae4ed217b0ab0a4e7a179bc0 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 22 Jan 2014 14:14:25 +0100 Subject: [PATCH] add import script without copying, add processor release after streaming --- .../telemeta-import-items-without-copy.py | 44 +++++++++++++++++++ telemeta/views/core.py | 3 ++ 2 files changed, 47 insertions(+) create mode 100644 telemeta/management/commands/telemeta-import-items-without-copy.py diff --git a/telemeta/management/commands/telemeta-import-items-without-copy.py b/telemeta/management/commands/telemeta-import-items-without-copy.py new file mode 100644 index 00000000..f95a91fe --- /dev/null +++ b/telemeta/management/commands/telemeta-import-items-without-copy.py @@ -0,0 +1,44 @@ +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.files.base import ContentFile +from telemeta.models import * +from telemeta.util.unaccent import unaccent +import os, sys + + +class Command(BaseCommand): + help = "import media files from a directory in the media directory into a collection (no file copy)" + args = "collection_code media_dir" + + def handle(self, *args, **options): + collection_code = args[-2] + media_dir = args[-1] + + if not media_dir in settings.MEDIA_ROOT: + sys.exit('This directory is not in the MEDIA_ROOT directory') + + collections = MediaCollection.objects.filter(code=collection_code) + if not collections: + collection = MediaCollection(code=collection_code, title=collection_code) + collection.public_access = 'full' + collection.save() + print 'collection created: ' + collection_code + else: + collection = collections[0] + print 'using collection: ' + collection.code + + for root, dirs, files in os.walk(media_dir): + for filename in files: + path = root + os.sep + filename + name, ext = os.path.splitext(filename) + items = MediaItem.objects.filter(code=name) + if not items: + item = MediaItem(collection=collection, code=name) + item.title = name + item.file.path = path + item.public_access = 'full' + item.save() + print 'item created: ' + item.code + else: + print 'item already exists: ' + items[0].code diff --git a/telemeta/views/core.py b/telemeta/views/core.py index 8f51b1ee..f0821fe6 100644 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@ -71,6 +71,7 @@ from django.contrib.syndication.views import Feed from django.core.servers.basehttp import FileWrapper from django.core.urlresolvers import reverse, reverse_lazy from django.contrib.contenttypes.models import ContentType +from django.views.decorators.http import condition from telemeta.models import * import telemeta.models @@ -130,6 +131,8 @@ def stream_from_processor(decoder, proc, flag, metadata=None): yield proc.chunk flag.value = True flag.save() + decoder.release() + proc.release() def stream_from_file(file): chunk_size = 0x100000 -- 2.39.5