예제 #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
예제 #2
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)