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