Example #1
0
    def supercharge(self):
        data = (request.form or request.args).copy()

        # Ugly reverse mapping of source labels
        source = data.get('source')
        if source:
            for id, label in Source.get_form_choices():
                if source == label:
                    data['source'] = id
        form = ImportForm(data, csrf_enabled=False)
        form.source.choices = list(Source.get_form_choices())
        form.category.choices = [(-1, '')] +\
            list(Category.get_form_choices(data.get('locale') or 'en-us', True))

        errors = {}
        if form.validate():
            if form.category.data < 0:
                errors.update({'category': 'Missing category'})
            elif not form.user.data:
                errors.update({'user': '******'})
            elif not form.channel.data:
                errors.update({'channel': 'Missing channel'})
            elif form.type.data != 'video':
                errors.update({'type': 'Type should be Video'})
            elif int(form.source.data) != 1:
                errors.update({'source': 'Source should be YouTube'})
            else:
                supercharge(request.form['title'], form.category.data,
                            form.channel.data, form.user.data, form.id.data)
                return jsonify([]), 202
        return jsonify({'error': form.errors or errors}), 400
Example #2
0
 def accept_process(self):
     form = UploadAcceptForm(request.form)
     form.category.choices = list(Category.get_form_choices('en-us', True))
     if form.validate():
         metadata = dict(label=form.owner_username, **form.data)
         dst = self._move_video(form.path.data, 'video/%s/' % form.owner_username)
         metadata['path'] = dst
         ooyala.create_asset_in_background(dst, metadata)
         flash('Processing "%s"...' % form.title.data)
         return redirect(url_for('review.index'))
     return self.render('admin/upload_accept.html', form=form)
Example #3
0
    def accept_form(self):
        path = request.args['video']
        basename, filename = path.rsplit('/', 1)
        meta = dict(path=path, title=filename.rsplit('.', 1)[0].replace('_', ' '))

        manifest = self.bucket.get_key(self.path_prefix + basename + '/manifest.txt')
        if manifest:
            for line in manifest.get_contents_as_string().split('\n'):
                if line.startswith(filename):
                    fields = line[len(filename):].strip().split('\t')
                    if fields:
                        meta['title'] = fields[0]
                    break

        form = UploadAcceptForm()
        form.category.choices = [(-1, '')] +\
            list(Category.get_form_choices('en-us', True))
        for field in meta:
            if hasattr(form, field):
                getattr(form, field).data = meta[field]

        return self.render('admin/upload_accept.html', form=form)
Example #4
0
    def index(self):
        ctx = {}
        data = (request.form or request.args).copy()

        # Ugly reverse mapping of source labels
        source = data.get('source')
        if source:
            for id, label in Source.get_form_choices():
                if source == label:
                    data['source'] = id

        form = ImportForm(data, csrf_enabled=False)
        form.source.choices = list(Source.get_form_choices())
        form.category.choices = [(-1, '')] +\
            list(Category.get_form_choices(data.get('locale') or 'en-us', True))

        user_form = UserForm(data, csrf_enabled=False)
        ctx['user_form'] = user_form
        ctx['form'] = form

        # pre-populate from parameters
        if request.args.get('tag'):
            form.tags.data = ','.join(request.args.getlist('tag'))

        if request.args.get('user'):
            user = list(User.query.filter_by(username=request.args.get('user')).values('id', 'username'))
            if user:
                form.user.data = user[0][0]
            else:
                form.user.data = ""

            if request.args.get('channeltitle'):
                channel = list(Channel.query.filter_by(
                    title=request.args.get('channeltitle'),
                    owner=form.user.data).values('id', 'title'))
                if channel:
                    form.channel.data = channel[0][0]
                else:
                    form.channel.data = '_new:' + request.args.get('channeltitle')

        if request.args.get('categoryname'):
            for choice in form.category.choices:
                if choice[1] == request.args.get('categoryname'):
                    form.category.data = choice[0]

        if 'source' in data:
            if form.commit.data and not form.user.data:
                if user_form.username.data:
                    if user_form.validate():
                        # update import form with new user
                        form.user.data = self._create_user(user_form)
                    else:
                        return self.render('admin/import.html', **ctx)
                else:
                    # User and channel will be created from source data
                    assert form.channel.data == ''

            if form.validate():
                if form.commit.data:
                    count, channel = self._import_videos(form)
                    if channel and channel.id:
                        url = '%s?id=%s' % (url_for('channel.edit_view'), channel.id)
                    else:
                        url = url_for('video.index_view')
                        if form.type.data == 'playlist':
                            url += '?flt0_0=' + form.id.data
                    flash('Imported %d videos' % count)
                    return redirect(url)
                else:
                    ctx['import_preview'] = form.import_data
                    form.commit.data = 'true'

        return self.render('admin/import.html', **ctx)