def handle_uploaded_file(f, name, extract=True, user=None, rate=None, rescale=None): if rate is None: rate = defaults.DEFAULT_RATE if rescale is None: rescale = defaults.DEFAULT_RESCALE video = Video() if user: video.uploader = user video.name = name video.save() filename = f.name filename = filename.lower() if filename.endswith('.dva_export.zip'): video.create_directory(create_subdirs=False) with open( '{}/{}/{}.{}'.format(settings.MEDIA_ROOT, video.pk, video.pk, filename.split('.')[-1]), 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) if settings.DISABLE_NFS or settings.HEROKU_DEPLOY: fpath = '/{}/{}.{}'.format(video.pk, video.pk, filename.split('.')[-1]) fs.upload_file_to_remote(fpath) os.remove('{}/{}/{}.{}'.format(settings.MEDIA_ROOT, video.pk, video.pk, filename.split('.')[-1])) video.uploaded = True video.save() p = processing.DVAPQLProcess() query = { 'process_type': DVAPQL.PROCESS, 'tasks': [{ 'arguments': { 'source': 'LOCAL' }, 'video_id': video.pk, 'operation': 'perform_import', }] } p.create_from_json(j=query, user=user) p.launch() elif filename.endswith('.mp4') or filename.endswith( '.flv') or filename.endswith('.zip'): video.create_directory(create_subdirs=True) with open( '{}/{}/video/{}.{}'.format(settings.MEDIA_ROOT, video.pk, video.pk, filename.split('.')[-1]), 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) if settings.DISABLE_NFS or settings.HEROKU_DEPLOY: fpath = '/{}/video/{}.{}'.format(video.pk, video.pk, filename.split('.')[-1]) fs.upload_file_to_remote(fpath) os.remove('{}/{}/video/{}.{}'.format(settings.MEDIA_ROOT, video.pk, video.pk, filename.split('.')[-1])) video.uploaded = True if filename.endswith('.zip'): video.dataset = True video.save() if extract: p = processing.DVAPQLProcess() if video.dataset: query = { 'process_type': DVAPQL.PROCESS, 'tasks': [{ 'arguments': { 'rescale': rescale, 'next_tasks': defaults.DEFAULT_PROCESSING_PLAN_DATASET }, 'video_id': video.pk, 'operation': 'perform_dataset_extraction', }] } else: query = { 'process_type': DVAPQL.PROCESS, 'tasks': [{ 'arguments': { 'next_tasks': [{ 'operation': 'perform_video_decode', 'arguments': { 'segments_batch_size': defaults.DEFAULT_SEGMENTS_BATCH_SIZE, 'rate': rate, 'rescale': rescale, 'next_tasks': defaults.DEFAULT_PROCESSING_PLAN_VIDEO } }] }, 'video_id': video.pk, 'operation': 'perform_video_segmentation', }] } p.create_from_json(j=query, user=user) p.launch() else: raise ValueError, "Extension {} not allowed".format( filename.split('.')[-1]) return video
def handle_uploaded_file(f, name, user=None, rate=None): if rate is None: rate = defaults.DEFAULT_RATE filename = f.name filename = filename.lower() vuid = str(uuid.uuid1()).replace('-', '_') extension = filename.split('.')[-1] if filename.endswith('.dva_export.zip'): local_fname = '{}/ingest/{}.dva_export.zip'.format( settings.MEDIA_ROOT, vuid) fpath = '/ingest/{}.dva_export.zip'.format(vuid) with open(local_fname, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) if settings.DISABLE_NFS: fs.upload_file_to_remote(fpath) os.remove(local_fname) p = processing.DVAPQLProcess() query = { 'process_type': DVAPQL.PROCESS, 'create': [ { 'spec': { 'name': name, 'uploader_id': user.pk if user else None, 'created': '__timezone.now__' }, 'MODEL': 'Video', 'tasks': [{ 'arguments': { 'path': fpath }, 'video_id': '__pk__', 'operation': 'perform_import', }] }, ], } p.create_from_json(j=query, user=user) p.launch() elif extension in ['zip', 'gz', 'json', 'mp4']: local_fname = '{}/ingest/{}.{}'.format(settings.MEDIA_ROOT, vuid, filename.split('.')[-1]) fpath = '/ingest/{}.{}'.format(vuid, filename.split('.')[-1]) with open(local_fname, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) if settings.DISABLE_NFS: fs.upload_file_to_remote(fpath) os.remove(local_fname) p = processing.DVAPQLProcess() if extension == 'zip': query = { 'process_type': DVAPQL.PROCESS, 'create': [ { 'spec': { 'name': name, 'dataset': True, 'uploader_id': user.pk if user else None, 'created': '__timezone.now__' }, 'MODEL': 'Video', 'tasks': [{ 'arguments': { 'path': fpath, 'map': [{ 'arguments': { 'map': json.load( file( "../configs/custom_defaults/dataset_processing.json" )) }, 'operation': 'perform_dataset_extraction', }] }, 'video_id': '__pk__', 'operation': 'perform_import' }] }, ], } elif extension == 'json' or extension == 'gz': query = { 'process_type': DVAPQL.PROCESS, 'create': [ { 'spec': { 'name': name, 'dataset': True, 'uploader_id': user.pk if user else None, 'created': '__timezone.now__' }, 'MODEL': 'Video', 'tasks': [{ 'arguments': { 'path': fpath, 'map': [{ 'operation': 'perform_frame_download', 'arguments': { 'frames_batch_size': defaults.DEFAULT_FRAMES_BATCH_SIZE, 'map': json.load( file( "../configs/custom_defaults/framelist_processing.json" )) }, }] }, 'video_id': '__pk__', 'operation': 'perform_import' }] }, ], } else: query = { 'process_type': DVAPQL.PROCESS, 'create': [ { 'spec': { 'name': name, 'uploader_id': user.pk if user else None, 'created': '__timezone.now__' }, 'MODEL': 'Video', 'tasks': [{ 'arguments': { 'path': fpath, 'map': [{ 'arguments': { 'map': [{ 'operation': 'perform_video_decode', 'arguments': { 'segments_batch_size': defaults. DEFAULT_SEGMENTS_BATCH_SIZE, 'rate': rate, 'map': json.load( file( "../configs/custom_defaults/video_processing.json" )) } }] }, 'operation': 'perform_video_segmentation', }] }, 'video_id': '__pk__', 'operation': 'perform_import', }] }, ], } p.create_from_json(j=query, user=user) p.launch() else: raise ValueError, "Extension {} not allowed".format( filename.split('.')[-1]) return p.created_objects[0]