Exemplo n.º 1
0
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
Exemplo n.º 2
0
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]