def sources() -> ResponseData: method = get_method(request) session = Session() if method == 'GET': context = auth_context(request) sources = session.query(Source).all() for source in sources: source.content_preview = source.content[0:250] + '...' context.update({'sources':sources}) return render_template('sources.html', **context) if method == 'POST': s = Source() s.name = request.form['source_name'] s.description = request.form['source_description'] content = None if len(request.form['content_paste']) > 0: content = StringIO(request.form['content_paste']) elif request.files.get('content_file'): content = StringIOWrapper(request.files['content_file'].stream) if content is None: flash('Got empty content for source.') return redirect(url_for('sources')) # TODO handle error source_id = process_text(app.config['DB'], s, content) content.close() return redirect(url_for('source', source_id=source_id))
def source(source_id: str) -> ResponseData: method = request.form.get('_method', request.method) session = Session() if method == 'GET': context = auth_context(request) s = session.query(Source).filter(Source.id == source_id).one() context.update({ 'source':s, }) return render_template('source.html', **context) if method == 'PUT': s = session.query(Source).filter(Source.id == source_id).one() s.name = request.form['source_name'] s.description = request.form['source_description'] new_content = request.form['source_content'] if new_content != s.content: session.query(Phrase).filter(Phrase.source_id == s.id).delete() session.expunge(s) process_text(app.config['DB'], s, StringIO(new_content)) session.commit() return redirect(url_for('sources')) if method == 'DELETE': # TODO for love of god get on delete cascade working s = session.query(Source).filter(Source.id==source_id).one() corpus_ids = session.query(corpora_sources.c.corpus_id).filter( corpora_sources.c.source_id == source_id ).all() for c in session.query(Corpus).filter(Corpus.id.in_(corpus_ids)): c.sources.remove(s) session.query(Phrase).filter(Phrase.source_id == source_id).delete() session.query(Source).filter(Source.id == source_id).delete() session.commit() return redirect(url_for('sources'))
def source_new(self): text_file = open(self.args.path, 'r') name = self.args.source_name description = self.args.source_description source = Source(name=name, description=description) error = process_text(self.db, source, text_file) if error is not None: print('There was an error extracting phrases:') print('********') print(error) print('********') print("The source '{}' was not saved.".format(name)) text_file.close()