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") |