changes to annotations

master
ange 7 years ago
parent 6205fc7272
commit d21cfdaafc

@ -1,38 +1,75 @@
#https://gist.github.com/mjlavin80/186a6395c5819dbe25a8a0e001d5acfd
# #https://gist.github.com/mjlavin80/186a6395c5819dbe25a8a0e001d5acfd
# import requests
# import json
# # This script demonstrates how to query annotations for a particular URL using the hypothes.is API. An API key is required.
# # The end result of this script is a Python dictionary with annotation data in it. Top save to csv or other format, further parsing would be required
# def get_annotations():
import requests
import json
# This script demonstrates how to query annotations for a particular URL using the hypothes.is API. An API key is required.
# The end result of this script is a Python dictionary with annotation data in it. Top save to csv or other format, further parsing would be required
def get_annotations():
KEY = "6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg"
KEY = "6879-n8AksBoSB7kYoQ3eEwzpEr3nFQEmSp3XN-0PcKL_Sik"
# URL = "https://monoskop.org/Monoskop"
#a dictionary containing necessary http headers
headers = {
"Host": "xppl",
"Host": "hypothes.is",
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer %s" % KEY
}
search_url = "".join("http://localhost:5000/api/search")
base_url = "https://hypothes.is/api/search?user=xpub@hypothes.is"
search_url = "".join([base_url])
r = requests.get(search_url, headers=headers)
#data is a python dictionary
data = json.loads(r.text)
return data
# extract=[]
# for item in data['rows']:
# # if 'exact' in item['target'][0]['selector'][2]:
# if 'selector' in item['target'][0]:
# if len(item['target'][0]['selector']) > 2:
# extract.append('extract:' + (item['target'][0]['selector'][2]['exact']))
# extract.append('annotation:' + item['text'])
# extract.append ('-----------')
# else:
# extract.append('annotation:' + item['text'])
# extract.append ('-----------')
# return extract
# r = requests.get(search_url, headers=headers)
# data = json.loads(r.text)
return data
def get_annot_results(annot,name):
res=[]
annot=get_annotations()
for item in annot['rows']:
if 'selector' in item['target'][0]:
if len(item['target'][0]['selector'])>2:
if name in item['text'] or name in item['target'][0]['selector'][2]['exact']:
data={'text': item['text'],'extract':item['target'][0]['selector'][2]['exact'],'title':item['document']['title']}
res.append(data)
else:
if name in item['text'] or name in item['target'][0]['selector'][1]['exact']:
data={'text': item['text'],'extract':item['target'][0]['selector'][1]['exact'],'title':item['document']['title']}
res.append(data)
return res
def get_annot_book(annot,name):
bannot=[]
annot=get_annotations()
for item in annot['rows']:
if 'selector' in item['target'][0]:
if len(item['target'][0]['selector'])>2:
if name==item['uri']:
data={'text': item['text'],'extract':item['target'][0]['selector'][2]['exact'],'title':item['document']['title']}
bannot.append(data)
else:
if name in item['uri']:
data={'text': item['text'],'extract':item['target'][0]['selector'][1]['exact'],'title':item['document']['title']}
bannot.append(data)
return bannot

@ -437,3 +437,12 @@ box-sizing: border-box;
text-decoration: none;
cursor: pointer;
}
body { font-family: "Archivo Narrow"}
nav { font-size: .7em }
@page { size: A5; margin: 1cm }
@media print {
nav { display: none }
}

@ -413,25 +413,35 @@ http://sourceforge.net/adobe/cmap/wiki/License/
</div>
</div>
<!-- <script type="application/json" class="js-hypothesis-config">
{
"openSidebar": true,
"branding": {"appBackgroundColor": "yellow"},
"services": {"authority": "http://localhost:8080/", "grantToken": "***", "icon": "https://openclipart.org/download/272629/sihouette-animaux-10.svg"}
}</script> -->
<!-- <script type="text/javascript">
<script type="text/javascript">
window.hypothesisConfig = function () {
return {
services: [{
apiUrl: 'https://hypothes.is/api/',
authority: 'partner.org',
grantToken: '***',
icon: 'https://openclipart.org/download/272629/sihouette-animaux-10.svg'
}],
openSidebar: true,
branding: {
appBackgroundColor: 'yellow',
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
ctaTextColor: '#eee',
selectionFontFamily: 'archivo narrow',
annotationFontFamily: 'archivo narrow',
accentColor: 'red'
},
// services: [{
// apiUrl: 'http://hypothes.is/api/',
// authority: 'http://hypothes.is/',
// grantToken: '6879-n8AksBoSB7kYoQ3eEwzpEr3nFQEmSp3XN-0PcKL_Sik',
// icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
// }],
onLayoutChange: {
width:50
},
sidebarAppUrl: 'http://hypothes.is/app.html'
};
};
</script> -->
</script>
<script async src= "//hypothes.is/embed.js"></script>
<!-- <script src="//localhost:5000/embed.js"></script> -->
@ -465,12 +475,15 @@ window.hypothesisConfig = function () {
</script> -->
<script type="text/javascript">
<!-- <script async src= "//localhost:5000/embed.js"></script> -->
<!-- <script type="text/javascript">
window.hypothesisConfig = function () {
return {
openSidebar: true,
showHighlights: true,
usernameUrl: 'localhost:8080/annotations',
// usernameUrl: 'localhost:8080/annotations',
branding: {
appBackgroundColor: 'yellow',
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
@ -479,12 +492,12 @@ window.hypothesisConfig = function () {
annotationFontFamily: 'archivo narrow',
accentColor: 'red'
},
services: {
apiUrl: 'http://localhost:5000/api/'
// authority: 'http://localhost:5000/',
// grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
// icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
},
// services: {
// apiUrl: 'http://localhost:5000/api/'
// // authority: 'http://localhost:5000/',
// // grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
// // icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
// },
onLayoutChange: {
width:'200',
height:'2'
@ -492,14 +505,26 @@ window.hypothesisConfig = function () {
// sidebarAppUrl: 'http://localhost:5000/app.html'
};
};
</script>
</script> -->
<script async id="location" src= "//localhost:5000/embed.js"></script>
<!-- <p id="location"></p> -->
<script >
<!-- <script>
// wait until the page has loaded (and document.body is ready)
document.addEventListener("DOMContentLoaded", function () {
var script = document.createElement("script");
script.src = "//"+window.location.hostname+":5000/embed.js";
script.setAttribute("async", "");
document.body.appendChild(script);
})
</script> -->
<!-- <script >
document.getElementById("#location").src = window.location.hostname + ":5000/embed.js";
</script>
</script> -->
<!-- <script>
document.getElementById("location").src = window.location.hostname + ":5000/embed.js";
@ -510,6 +535,8 @@ document.getElementById("demo").innerHTML =
"Page hostname is " + window.location.hostname;
</script>
-->
</body>
</html>

@ -1,57 +1,55 @@
{% extends 'base.html' %}
{% block main %}
<h1 class="header">Annotations</h1>
<!-- create pdf from the html annotations -->
<!-- <link rel=stylesheet href="{{ url_for('static', filename='style.css') }}" /> -->
<nav><a href="{{ url_for('annotations_pdf') }}">Get as PDF</a></nav><br><br>
<h1 class="header">Annotations of XPPL</h1>
<nav><a href="{{ url_for('annotations_pdf') }}">Get as PDF</a></nav><nav><a href="/search_annot">search</a></nav><br><br><br><br><br><br><br><br>
<!-- <iframe src="/static/viewer/web/viewer.html?file=%2Fuploads%2FParatexts__Thresholds_of_Interpretation_-_Gerard_Genette.pdf" style="width:718px; height:700px;" frameborder="0"></iframe>
-->
{% for row in annot.rows %}
{% if 'selector' in row.target[0] %}
{%for book in books%}
{%if book.file == row.uri%}
<a href="books/{{book.id}}"><p align="right" style="font-family:archivo narrow;font-size:12px;">{{book.title}}</p></a><br>
{% endif %}
{% endfor %}
<!-- annotations and extracts from API -->
{% for row in annot.rows %}
{% if 'selector' in row.target[0] %}
{% if row.target[0].selector|length > 2%}
<a href="{{row.uri}}"><p align="right" style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</p></a><br>
<div style="font-family:archivo narrow;font-size:18;">
<i>"{{row.target[0].selector[2].exact}}"</i></div><br>
<p style="font-family:archivo narrow;font-size:8px;">Extracts:</p>
<div style="font-family:archivo narrow;font-size:18px;"><i>"{{row.target[0].selector[2].exact}}"</i></div><br>
<p style="font-family:archivo narrow;font-size:8px;color:#ff3300;">Annotations:</p>
{%if 'https://www.youtube.com' in row.text %}
<!-- <embed src="{{row.text}}" width="50%"></embed> -->
<a style="font-family:archivo narrow;font-size:18;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
<a style="font-family:archivo narrow;font-size:18px;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
{%elif '.jpg' in row.text%}
<img src="{{row.text}}" alt="{{row.document.title}}" width="400">
{%elif '.mp3' in row.text %}
<!-- <embed src="{{row.text}}" width="50%"></embed> -->
<a style="font-family:archivo narrow;font-size:18px;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
{%else%}
<div style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</div><br>
<div style="font-family:archivo narrow;font-size:18px;color:#ff3300;">{{row.text}}</div><br>
{% endif %}
<hr>
{%else%}
<a href="{{row.uri}}"><p align="right" style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</p></a><br>
<div style="font-family:archivo narrow;font-size:18;">
<div style="font-family:archivo narrow;font-size:18px;">
<i>"{{row.target[0].selector[1].exact}}"</i></div><br>
{%if 'https://www.youtube.com'in row.text %}
<!-- <embed src="{{row.text}}" width="50%"></embed> -->
<a style="font-family:archivo narrow;font-size:18;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
<a style="font-family:archivo narrow;font-size:18px;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
{%elif '.jpg' in row.text%}
<img src="{{row.text}}" alt="{{row.document.title}}" width="400">
{%else%}
<div style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</div><br>
<div style="font-family:archivo narrow;font-size:18px;color:#ff3300;">{{row.text}}</div><br>
{% endif %}
<hr>
{% endif %}
{%else%}
<a href="{{row.uri}}"style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</a><br>
<p style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</p><br>
<p style="font-family:archivo narrow;font-size:18px;color:#ff3300;">{{row.text}}</p><br>
<hr><br>
{% endif %}
{% endfor %}
@ -60,63 +58,7 @@
<!-- dump:
<pre>
{{dump}}
</pre>
-->
<!-- <script type="application/json" class="js-hypothesis-config">
{
"openSidebar": true,
"branding": {"appBackgroundColor": "yellow"},
"enableExperimentalNewNoteButton": true
}
</script> -->
<!-- <script type="text/javascript">
window.hypothesisConfig = function () {
return {
openSidebar: true,
showHighlights: true,
usernameUrl: 'localhost:8080/annotations',
branding: {
appBackgroundColor: 'yellow',
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
ctaTextColor: '#eee',
selectionFontFamily: 'archivo narrow',
annotationFontFamily: 'archivo narrow',
accentColor: 'red'
},
services: {
apiUrl: 'http://localhost:5000/api/',
onProfileRequest: 'http://localhost:8080/',
onHelpRequest: 'http://localhost:8080/',
authority: 'http://localhost:5000/',
grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
},
onLayoutChange: {
width:200
},
// sidebarAppUrl: 'http://localhost:5000/app.html'
};
};
</script>
<script async id="location" src="http://localhost:5000/embed.js"></script> -->
<!-- <script async type="text/javascript" document.getElementById("location").src = window.location.hostname + ":5000/embed.js";></script> -->
<!-- <script async id="location" src= "//localhost:5000/embed.js"></script> -->
<!-- <p id="location"></p> -->
<!-- <script >
document.getElementById("#location").src = window.location.hostname + ":5000/embed.js";
</script>
-->
<!-- <script async src="http://localhost:5000/embed.js"></script> -->
</pre> -->

@ -5,6 +5,7 @@
<li><a href="{{ url_for('show_stacks') }}">Stacks</a></li>
<li><a href="{{ url_for('add_book') }}">Add Book</a></li>
<li><a href="{{ url_for ('add_stack') }}">Add Stack</a></li>
<li><a href="{{ url_for('annotations') }}">Annotations</a></li>
<li><a href="{{ url_for('about') }}">About</a></li>
<li><a href="{{ url_for('show_instances') }}">Instances</a></li>
</ul>

@ -0,0 +1,56 @@
{% extends 'base.html' %}
{% block main %}
<br><br><br>
<!-- <nav><a href="{{ url_for('mybook_pdf') }}">Get as PDF</a></nav> -->
<form style="float:left;" action="/search_annot" method="GET">
Browse annotations:<br>
<div style="float:left;" class="search">
<input type="text" name="query" value="{{name}}">
</div>
<input type="submit" value="Submit"></input>
</form>
<br><br><br><br><br>
<a href="/annotations" style="font-family:archivo narrow;font-size:18px; float:center;"> All</a>
<br><br><br><br>
{% for row in res %}
{%for book in books%}
{%if book.file == row.uri%}
<a href="books/{{book.id}}"><p align="right" style="font-family:archivo narrow;font-size:18px;">{{book.title}}</p></a><br>
{% endif %}
{% endfor %}
<p align="right" style="font-family:archivo narrow;font-size:14px;">{{row.title}}</p><br>
<p style="font-family:archivo narrow;font-size:8px;">Extracts:</p>
<div style="font-family:archivo narrow;font-family:archivo narrow;font-size:18px;">
<i>"{{ row.extract }}"</i></div><br>
<p style="font-family:archivo narrow;font-size:8px;color:#ff3300;">Annotations:</p>
{%if 'https://www.youtube.com'in row.text %}
<a style="font-family:archivo narrow;font-size:18px;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
<hr>
{%elif '.jpg' in row.text%}
<img src="{{row.text}}" alt="" width="400">
<hr>
{%else%}
<div style="font-family:archivo narrow;font-size:18px;color:#ff3300;">{{row.text}}</div><br>
<hr>
{% endif %}
{% endfor %}
{% endblock %}

@ -66,35 +66,6 @@
</tbody>
</table>
<<<<<<< HEAD
<<<<<<< HEAD
<a href="/viewpdf/{{ book.file }}">download {{ book.fileformat }}</a>
<link rel="stylesheet" href="/static/css/style.css">
<div id="annotindication">
--> Feel free to annotate</div>
<!-- <embed src="../uploads/{{ book.file }}" width="50%" ></embed> -->
<!--
<embed src="../uploads/web/viewer.html?file=%2F{{ book.file }}" width="50%" ></embed> -->
<br>
<br>
<a href="{{ url_for('edit_book_by_id', id=book.id )}}">edit</a>
=======
{% if book.file %}
<button id="myBtn" style= "width: 180px; font-size: 10pt;"><a> Download this {{ book.fileformat }}</a></button>
<div id="myModal" class="modal">
<div class="modal-content">
<span class="close">&times;</span>
<h3>A message from the uploading librarian:</h3>
<span style="font-style: italic;">"{{book.message or 'Happy reading.'}}" </span><br>
<h4><a href="../uploads/{{ book.file }}"> >>>> Link to file <<<<</h4></a></div>
</div>
{% else %}
{% endif %}
>>>>>>> stack_stuff
=======
<a href="../uploads/{{ book.file }}">download {{ book.fileformat }}</a>
<br>
<br>
<p>Instances:</p>
@ -124,11 +95,11 @@
<span class="close">&times;</span>
<h3>A message from the uploading librarian:</h3>
<span style="font-style: italic;">"{{book.message or 'Happy reading.'}}" </span><br>
<h4><a href="../uploads/{{ book.file }}"> >>>> Link to file <<<<</h4></a></div>
<h4><a href="/viewpdf/{{ book.file }}"> >>>> Link to file <<<<</h4></a></div>
</div>
{% else %}
{% endif %}
>>>>>>> master
<button style= "font-size: 10pt;"> <a href="{{ url_for('edit_book_by_id', id=book.id )}}">edit</a></button>
<button style= "font-size: 10pt;"> <a href="{{ url_for('remove_book_by_id', id=book.id)}}">delete</a></button>
@ -141,4 +112,32 @@
<a href="{{ url_for('show_book_by_id', id=nextbook.id )}}" style="float:right; font-size: 9pt;"> see the next book added to XPPL: &nbsp;<i>{{ nextbook.title|truncate(40,True,'...')}} </i>> </a>{% endif %}
</div>
{% for row in bannot %}
{%for book in books%}
{%if book.file == row.uri%}
<a href="books/{{book.id}}"><p align="right" style="font-family:archivo narrow;font-size:12px;">{{book.title}}</p></a><br>
{% endif %}
{% endfor %}
<p align="right" style="font-family:archivo narrow;font-size:14px;">{{row.title}}</p><br>
<p style="font-family:archivo narrow;font-size:8px;">Extracts:</p>
<div style="font-family:archivo narrow;font-family:archivo narrow;font-size:18px;">
<i>"{{ row.extract }}"</i></div><br>
<p style="font-family:archivo narrow;font-size:8px;color:#ff3300;">Annotations:</p>
{%if 'https://www.youtube.com'in row.text %}
<a style="font-family:archivo narrow;font-size:18px;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
<hr>
{%elif '.jpg' in row.text%}
<img src="{{row.text}}" alt="" width="400">
<hr>
{%else%}
<div style="font-family:archivo narrow;font-size:18px;color:#ff3300;">{{row.text}}</div><br>
<hr>
{% endif %}
{%endfor%}
{% endblock %}

@ -20,6 +20,7 @@
<img class="no_cover" id="{{ book.title }}" src="../uploads/cover/{{ book.cover }}" width="150" onerror="if (this.src != '../uploads/cover/{{ book.cover }}') this.src = '../static/img/default_cover.gif';">
<div class='widget'>
<iframe src="../uploads/{{ book.file }}" width="50%" ></iframe>
</div>
{% endfor %}</p>

@ -15,12 +15,9 @@ from sqlalchemy.sql import except_
from app.forms import UploadForm, EditForm, SearchForm, ChatForm, StackForm, AddtoStackForm, EditStackForm
from app.models import Book, BookSchema, Author, AuthorSchema, Stack, StackSchema, UserIns, Chat, ChatSchema, Instance, Potential
from app.cover import get_cover
<<<<<<< HEAD
from app.getannot import get_annotations
from app.getannot import get_annotations, get_annot_results, get_annot_book
from urllib.parse import quote as urlquote
=======
from app.extractText import extract_text
>>>>>>> master
from os import environ
from flask_socketio import SocketIO, emit
from weasyprint import HTML
@ -141,6 +138,9 @@ def show_books_grid():
books = db.session.query(Book).all() # or you could have used User.query.all()
return render_template('show_books_grid.html', books=books)
@app.route('/books/<int:id>')
def show_book_by_id(id):
book = Book.query.get(id)
@ -168,6 +168,16 @@ def show_book_by_id(id):
return render_template('show_book_detail.html', book=book, previousbook = previousbook, nextbook = nextbook, all_instances=all_instances)
@app.route('/books/<int:id>/annotations', methods=['POST', 'GET'])
def book_annot():
books = db.session.query(Book).all()
name=book.file
annot = get_annotations()
res = get_annot_book(annot,name)
return redirect(url_for('show_book_detail'), name=name, annot=annot, res=res, books=books)
@app.route('/books/<int:id>/delete', methods=['POST', 'GET'])
def remove_book_by_id(id):
book_to_edit = Book.query.filter_by(id=id).first()
@ -474,18 +484,10 @@ def remove_from_stack(bookid, stackid):
## search
view = ['1']
@app.route('/books', methods= ['POST','GET'])
def show_books():
<<<<<<< HEAD
<<<<<<< HEAD
autocomplete.load() #Train markov model once, for autocomplete in search
books = db.session.query(Book).all()
=======
books = db.session.query(Book).order_by(Book.title)
>>>>>>> stack_stuff
=======
books = db.session.query(Book).order_by(Book.title)
>>>>>>> master
search = SearchForm(request.form)
view.append('1')
viewby = '1'
@ -535,13 +537,6 @@ def search_results(searchtype, query, viewby):
if searchtype== 'Stack':
results=db.session.query(Book).join(Book.stacks).filter(Stack.stack_name.contains(query)).order_by(Book.title)
<<<<<<< HEAD
# if searchtype== 'Annotation':
# results=Book.query.filter(Book.category.contains(query)).all()
if not results:
=======
if searchtype== 'All':
# results=Book.query.whoosh_search(query)
results=Book.query.filter(Book.title.contains(query))
@ -553,7 +548,6 @@ def search_results(searchtype, query, viewby):
if results.count() == 0:
books = Book.query.filter(Book.file.like('potential.pdf'))
>>>>>>> stack_stuff
upload_form = UploadForm(title= query, author='')
return render_template('red_link.html', form=upload_form, title=query, books=books)
@ -596,72 +590,17 @@ def search_results(searchtype, query, viewby):
if viewby == '2':
return render_template('results_grid.html', form=search, books=results, books_all=books_all, searchtype=search.select.data, query=query, count = count, whole = whole, percentage = percentage)
<<<<<<< HEAD
<<<<<<< HEAD
## Search - autocomplete
autocomplete_suggestions = []
autocomplete.load() #Train markov model once, for autocomplete in search
@app.route('/autocomplete_suggestions', methods=['GET', 'POST'])
def test1():
@app.route('/search_annot', methods=['POST', 'GET'])
def search_annot():
books = db.session.query(Book).all()
if request.method=='POST':
query = request.form['search']
query_tokenized = query.lower().split()
print(query_tokenized)
word_1 = query_tokenized[-2]
word_2 = query_tokenized[-1]
#print(word_1)
autocomplete_output = autocomplete.predict(word_1 , word_2)
autocomplete_suggestions.clear()
for suggestion, score in autocomplete_output:
autocomplete_suggestions.append(suggestion)
session['autocomplete_suggestions'] = str(autocomplete_suggestions)
print(session['autocomplete_suggestions'])
return Response(json.dumps(session['autocomplete_suggestions']), mimetype='application/json')
## STACKS!
=======
=======
>>>>>>> master
return redirect (url_for('annotations'))
else:
return render_template('results.html', form=search, books=results, books_all=books_all, searchtype=search.select.data, query=query, count = count, whole = whole, percentage = percentage)
name=str(request.args.get('query'))
annot = get_annotations()
res = get_annot_results(annot,name)
return render_template('results_annot.html', name=name, annot=annot, res=res, books=books)
# ## Search - autocomplete
# autocomplete_suggestions = []
# @app.route('/autocomplete_suggestions', methods=['GET', 'POST'])
# def test1():
# if request.method == 'POST':
# autocomplete.load()
# query = request.form['search']
# query_tokenized = query.lower().split()
# print(query_tokenized)
# word_1 = query_tokenized[-2]
# word_2 = query_tokenized[-1]
# #print(word_1)
# autocomplete_output = autocomplete.predict(word_1 , word_2)
# autocomplete_suggestions.clear()
# for suggestion, score in autocomplete_output:
# autocomplete_suggestions.append(suggestion)
#
# session['autocomplete_suggestions'] = str(autocomplete_suggestions)
#
# print(session['autocomplete_suggestions'])
#
# return Response(json.dumps(session['autocomplete_suggestions']), mimetype='application/json')
<<<<<<< HEAD
# print(autocomplete_suggestions)
# return Response(json.dumps(autocomplete_suggestions), mimetype='application/json')
>>>>>>> stack_stuff
=======
## STACKS!
>>>>>>> master
@app.route('/add_to_stack/<int:id>', methods=['GET', 'POST'])
def add_to_stack(id):
@ -812,10 +751,12 @@ def send_text_file(file_name):
@app.route('/annotations')
def annotations():
"""Render annotations page."""
books = db.session.query(Book).all()
# books = db.session.query(Book).order_by(Book.title)
# id = book.id
annot = get_annotations()
print(annot)
dump = json.dumps(annot, indent=2)
return render_template('annotations.html', annot=annot, dump=dump)
return render_template('annotations.html', annot=annot, books=books)
# PDF from annotations
@app.route('/annotations.pdf')
@ -825,6 +766,12 @@ def annotations_pdf():
html = render_template(('annotations.html'), annot=annot)
return render_pdf(HTML(string=html))
@app.route('/mybook.pdf')
def mybook_pdf():
# Make a PDF straight from HTML in a string.
html = redirect(url_for('search_annot'))
return render_pdf(HTML(string=html))
@app.after_request
def add_header(response):

@ -1,13 +1,3 @@
#! /usr/bin/env python
from app import app, socketio
<<<<<<< HEAD
<<<<<<< HEAD
# socketio.run(app)
app.run(debug=True,host="0.0.0.0",port=8080)
=======
socketio.run(app, port=8080)
=======
socketio.run(app,host="0.0.0.0", port=8080)
>>>>>>> master
#app.run(debug=True,host="0.0.0.0",port=8080)
>>>>>>> stack_stuff

Loading…
Cancel
Save