--- 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: