web/ldt/ldt_utils/views.py
changeset 62 39b2dab4f939
parent 60 a8ad7ebf5902
child 67 90fd14c649bb
equal deleted inserted replaced
61:cb1b83039bc1 62:39b2dab4f939
     7 from django.conf import settings
     7 from django.conf import settings
     8 from django.core import serializers
     8 from django.core import serializers
     9 from django.utils import simplejson
     9 from django.utils import simplejson
    10 from django.utils.html import escape
    10 from django.utils.html import escape
    11 from fileimport import *
    11 from fileimport import *
    12 from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm
    12 from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm, MediaForm
    13 from ldt.core.models import Owner
    13 from ldt.core.models import Owner
    14 from models import *
    14 from models import *
    15 from utils import *
    15 from utils import *
    16 from contentindexer import *
    16 from contentindexer import *
    17 from projectserializer import *
    17 from projectserializer import *
    22 import base64
    22 import base64
    23 import lucene
    23 import lucene
    24 import xml.dom
    24 import xml.dom
    25 import xml.dom.ext
    25 import xml.dom.ext
    26 import xml.dom.minidom
    26 import xml.dom.minidom
       
    27 import tempfile
       
    28 import urllib2
       
    29 from urllib2 import urlparse
       
    30 from jogging import logging
    27 
    31 
    28 
    32 
    29     
    33     
    30 def searchForm(request):
    34 def searchForm(request):
    31     form = SearchForm()
    35     form = SearchForm()
   365     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
   369     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
   366 
   370 
   367 
   371 
   368 def write_content_base(request):
   372 def write_content_base(request):
   369     
   373     
       
   374     logging.debug("write_content_base")
   370     form_status= 'none'        
   375     form_status= 'none'        
   371     if request.method =="POST":
   376     if request.method =="POST":
       
   377         logging.debug("write_content_base : POST")
   372         content_form = ContentForm(request.POST, prefix="content")
   378         content_form = ContentForm(request.POST, prefix="content")
   373         media_form = MediaForm(request.POST, prefix="media")
   379         media_form = MediaForm(request.POST, request.FILES, prefix="media")
   374         media_valid = media_form.is_valid()
   380         media_valid = media_form.is_valid()
   375         content_valid = content_form.is_valid()
   381         content_valid = content_form.is_valid()
   376         if media_valid and content_valid :
   382         if media_valid and content_valid :
   377             media, created = Media.objects.get_or_create(src=media_form.cleaned_data['src'], defaults=media_form.cleaned_data)
   383             
   378             if not created:
   384             # see if media must be created
   379                 for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'):
   385             cleaned_data = {}
   380                     setattr(media, attribute, media_form.cleaned_data.get(attribute))
   386             cleaned_data.update(media_form.cleaned_data)
   381             media.save()
   387 
   382             
   388             media_input_type = content_form.cleaned_data["media_input_type"]
   383             content_defaults = {'media': media }
   389             
   384             content_defaults.update(content_form.cleaned_data)
   390             logging.debug("write_content_base : POST media_input_type:" + media_input_type)
   385             content, created = Content.objects.get_or_create(iri_id = content_form.cleaned_data['iri_id'], defaults = content_defaults)
   391             
   386             if not created:
   392             if media_input_type == "none":
   387                 for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media'):
   393                 media = None
   388                     setattr(content, attribute, content_defaults[attribute])
   394             elif media_input_type == "link":
   389             content.save()
   395                 media = content_form.cleaned_data["media_obj"]
   390             form_status = 'saved'
   396             elif media_input_type == "url" or  media_input_type == "upload" or  media_input_type == "create":                
   391             media_form = MediaForm(instance=media, prefix="media")
   397                 # copy file
   392             content_form = ContentForm(instance=content, prefix="content")
   398                 #complet src
       
   399                 destination_file = None
       
   400                 source_file = None
       
   401                 destination_file_path = None
       
   402                 if media_input_type != "create":
       
   403                     try:
       
   404                         if media_input_type == "url":
       
   405                             url = cleaned_data["external_src_url"]
       
   406                             source_file = urllib2.urlopen(url)
       
   407                             source_filename = source_file.info().get('Content-Disposition', None)
       
   408                             if not source_filename:
       
   409                                 source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1]
       
   410                         elif media_input_type == "upload":
       
   411                             source_file = request.FILES['media-media_file']
       
   412                             source_filename = source_file.name
       
   413                             
       
   414     
       
   415                         destination_filepath = os.path.join(settings.STREAM_PATH, source_filename)
       
   416                         base_source_filename = source_filename
       
   417                         i = 0
       
   418                         while os.path.exists(destination_filepath):
       
   419                             base_source_filename = source_filename+"(%d)" % (i)
       
   420                             destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
       
   421                             i += 1
       
   422                             
       
   423                         destination_file = open(destination_filepath, "w")
       
   424                         src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
       
   425                         if len(src_prefix) > 0:
       
   426                             cleaned_data["src"] = src_prefix + "/" + base_source_filename
       
   427                         else:
       
   428                             cleaned_data["src"] =  base_source_filename
       
   429                         
       
   430                         chunck = source_file.read(2048)
       
   431                         while chunck:
       
   432                             destination_file.write(chunck)
       
   433                             chunck = source_file.read(2048)
       
   434             
       
   435                     except Exception as inst:
       
   436                         logging.debug("write_content_base : POST error when processing file:" + str(inst))
       
   437                         form_status = "error"
       
   438                     finally:
       
   439                         if destination_file:
       
   440                             destination_file.close()
       
   441                         if source_file:
       
   442                             source_file.close()
       
   443                         
       
   444                 if form_status != "error":
       
   445                     #try:
       
   446                     del cleaned_data["media_file"]
       
   447                     if not cleaned_data['videopath']:
       
   448                         cleaned_data['videopath'] = settings.STREAM_URL
       
   449                     media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data)
       
   450                     if not created:                        
       
   451                         for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'):
       
   452                             setattr(media, attribute, cleaned_data.get(attribute))
       
   453                     media.save()
       
   454                     #except Exception as inst:
       
   455 #                        logging.debug("write_content_base : POST error when saving media:" + str(inst))
       
   456  #                       form_status = "error"
       
   457                         #TODO: set error message
       
   458                         #media_form.errors = _("Error when saving the media : " + e.message)
       
   459 
       
   460             #if needed preparetemp file and copy temp file to destination
       
   461             
       
   462             
       
   463             if form_status != "error":
       
   464                 #try:
       
   465                 content_defaults = {}
       
   466                 content_defaults.update(content_form.cleaned_data)
       
   467                 content_defaults['media_obj'] = media
       
   468                 del content_defaults["media_input_type"]
       
   469                 content, created = Content.objects.get_or_create(iri_id = content_form.cleaned_data['iri_id'], defaults = content_defaults)
       
   470                 if not created:
       
   471                     
       
   472                     for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
       
   473                         setattr(content, attribute, content_defaults[attribute])
       
   474                 content.save()
       
   475                 form_status = 'saved'
       
   476                 media_form = MediaForm(instance=media, prefix="media")
       
   477                 content_form = ContentForm(instance=content, prefix="content")
       
   478                 #except:
       
   479                     #logging.debug("write_content_base : POST error when saving content:" + str(inst))
       
   480                     #form_status = "error"
       
   481                     #TODO : set error on content form
   393         else:
   482         else:
   394             form_status = 'error'
   483             form_status = 'error'
   395     else:
   484     else:
   396         form_status = 'empty'
   485         form_status = 'empty'
   397         content_form = ContentForm(prefix="content")
   486         content_form = ContentForm(prefix="content")