diff -r cb1b83039bc1 -r 39b2dab4f939 web/ldt/ldt_utils/views.py --- a/web/ldt/ldt_utils/views.py Wed Sep 15 15:20:26 2010 +0200 +++ b/web/ldt/ldt_utils/views.py Tue Sep 21 04:27:08 2010 +0200 @@ -9,7 +9,7 @@ from django.utils import simplejson from django.utils.html import escape from fileimport import * -from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm +from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm, MediaForm from ldt.core.models import Owner from models import * from utils import * @@ -24,6 +24,10 @@ import xml.dom import xml.dom.ext import xml.dom.minidom +import tempfile +import urllib2 +from urllib2 import urlparse +from jogging import logging @@ -367,29 +371,114 @@ def write_content_base(request): + logging.debug("write_content_base") form_status= 'none' if request.method =="POST": + logging.debug("write_content_base : POST") content_form = ContentForm(request.POST, prefix="content") - media_form = MediaForm(request.POST, prefix="media") + media_form = MediaForm(request.POST, request.FILES, prefix="media") media_valid = media_form.is_valid() content_valid = content_form.is_valid() if media_valid and content_valid : - media, created = Media.objects.get_or_create(src=media_form.cleaned_data['src'], defaults=media_form.cleaned_data) - if not created: - for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'): - setattr(media, attribute, media_form.cleaned_data.get(attribute)) - media.save() + + # see if media must be created + cleaned_data = {} + cleaned_data.update(media_form.cleaned_data) + + media_input_type = content_form.cleaned_data["media_input_type"] + + logging.debug("write_content_base : POST media_input_type:" + media_input_type) - content_defaults = {'media': media } - content_defaults.update(content_form.cleaned_data) - content, created = Content.objects.get_or_create(iri_id = content_form.cleaned_data['iri_id'], defaults = content_defaults) - if not created: - for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media'): - setattr(content, attribute, content_defaults[attribute]) - content.save() - form_status = 'saved' - media_form = MediaForm(instance=media, prefix="media") - content_form = ContentForm(instance=content, prefix="content") + if media_input_type == "none": + media = None + elif media_input_type == "link": + media = content_form.cleaned_data["media_obj"] + elif media_input_type == "url" or media_input_type == "upload" or media_input_type == "create": + # copy file + #complet src + destination_file = None + source_file = None + destination_file_path = None + if media_input_type != "create": + try: + if media_input_type == "url": + url = cleaned_data["external_src_url"] + source_file = urllib2.urlopen(url) + source_filename = source_file.info().get('Content-Disposition', None) + if not source_filename: + source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1] + elif media_input_type == "upload": + source_file = request.FILES['media-media_file'] + source_filename = source_file.name + + + destination_filepath = os.path.join(settings.STREAM_PATH, source_filename) + base_source_filename = source_filename + i = 0 + while os.path.exists(destination_filepath): + base_source_filename = source_filename+"(%d)" % (i) + destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename) + i += 1 + + destination_file = open(destination_filepath, "w") + src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/") + if len(src_prefix) > 0: + cleaned_data["src"] = src_prefix + "/" + base_source_filename + else: + cleaned_data["src"] = base_source_filename + + chunck = source_file.read(2048) + while chunck: + destination_file.write(chunck) + chunck = source_file.read(2048) + + except Exception as inst: + logging.debug("write_content_base : POST error when processing file:" + str(inst)) + form_status = "error" + finally: + if destination_file: + destination_file.close() + if source_file: + source_file.close() + + if form_status != "error": + #try: + del cleaned_data["media_file"] + if not cleaned_data['videopath']: + cleaned_data['videopath'] = settings.STREAM_URL + media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data) + if not created: + for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'): + setattr(media, attribute, cleaned_data.get(attribute)) + media.save() + #except Exception as inst: +# logging.debug("write_content_base : POST error when saving media:" + str(inst)) + # form_status = "error" + #TODO: set error message + #media_form.errors = _("Error when saving the media : " + e.message) + + #if needed preparetemp file and copy temp file to destination + + + if form_status != "error": + #try: + content_defaults = {} + content_defaults.update(content_form.cleaned_data) + content_defaults['media_obj'] = media + del content_defaults["media_input_type"] + content, created = Content.objects.get_or_create(iri_id = content_form.cleaned_data['iri_id'], defaults = content_defaults) + if not created: + + for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'): + setattr(content, attribute, content_defaults[attribute]) + content.save() + form_status = 'saved' + media_form = MediaForm(instance=media, prefix="media") + content_form = ContentForm(instance=content, prefix="content") + #except: + #logging.debug("write_content_base : POST error when saving content:" + str(inst)) + #form_status = "error" + #TODO : set error on content form else: form_status = 'error' else: