diff --git a/app/helper.py b/app/helper.py index 2239077..90ac0a8 100644 --- a/app/helper.py +++ b/app/helper.py @@ -3,6 +3,8 @@ TODO: maybe all these calculations are to be put in the db storage """ +from .dbinit import inverted_prince_bigram + def make_timeitem_from_filename(filename): """ "anj_isa_i_1441_08_05a" -> "1441_08_05a" @@ -10,6 +12,47 @@ def make_timeitem_from_filename(filename): trs_fname = filename.split('_') return "_".join(trs_fname[3:]) +def plaintext_response(search, actecol, prince_bigram): + """plain text search response + + :search: the form's result + :return: database query + """ + query = [ + { + "$match": { + "xmlcontent": { + "$regex": search, + "$options" :'i' # case-insensitive + } + } + }, + { + '$group': {'_id': {'prince_name': '$prince_name', + 'house': '$house', + 'date': '$date', + 'prince_code': '$prince_code', + 'filename': '$filename', + "place": "$place.name", + "diplo_state": "$diplo_state", + "diplo_type": "$diplo_type" + } + } + }] + results = list(actecol.aggregate(query)) + transformed_query = [pr['_id'] for pr in results] + invert_prince_bigram = {val: key for key, val in prince_bigram.items()} + + # constructing the dateitem + for trs in transformed_query: + trs['house'] = trs['house'].capitalize() + trs['dateitem'] = make_timeitem_from_filename(trs['filename']) + bigram, number = trs['prince_code'].split('_') + long_prince_bigram = inverted_prince_bigram(bigram) + '_' + number + trs['prince_url'] = prince_name=long_prince_bigram.capitalize() + return transformed_query + + #from flask import abort # #def find_one_or_404(collection, **kwargs): diff --git a/app/routes.py b/app/routes.py index c8423c5..6e650e3 100644 --- a/app/routes.py +++ b/app/routes.py @@ -27,10 +27,11 @@ from pymongo import ASCENDING from .dbinit import * -from .helper import make_timeitem_from_filename +from .helper import make_timeitem_from_filename, plaintext_response main = Blueprint("main", __name__, url_prefix="/") + # ______________________________________________________________________________ # routes @@ -39,62 +40,41 @@ def home(): """home route""" if request.method == 'POST': search = request.form['search'] - #actecol.find({key: { $regex: new RegExp(search, 'i')}}) - query = [ - { - "$match": { - "xmlcontent": { - "$regex": search, - "$options" :'i' # case-insensitive - } - } - }, - { - '$group': {'_id': {'prince_name': '$prince_name', - 'house': '$house', - 'date': '$date', - 'prince_code': '$prince_code', - 'filename': '$filename', - "place": "$place.name", - "diplo_state": "$diplo_state", - "diplo_type": "$diplo_type" - } - } - }] - results = list(actecol.aggregate(query)) - transformed_query = [pr['_id'] for pr in results] - invert_prince_bigram = {val: key for key, val in prince_bigram.items()} - - # constructing the dateitem - for trs in transformed_query: - trs['house'] = trs['house'].capitalize() - trs['dateitem'] = make_timeitem_from_filename(trs['filename']) - bigram, number = trs['prince_code'].split('_') - long_prince_bigram = inverted_prince_bigram(bigram) + '_' + number - trs['prince_url'] = prince_name=long_prince_bigram.capitalize() - return render_template("plainsearch.html", search=search, actes=transformed_query) - + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) return render_template("home.html") @main.route("/about/", methods=('GET', 'POST')) def about(): """about route""" + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) return render_template("about.html") -@main.route("/actes/") +@main.route("/actes/", methods=('GET', 'POST')) def corpora_all(): """copora all lists houses sample_house_names = ["Bourbon", "Berry", "Anjou", ...] """ + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + houses = list(housecol.find()) return render_template("corpora_all.html", houses=houses) -@main.route("/actes/") +@main.route("/actes/", methods=('GET', 'POST')) def actes(house): """*actes* route, sample route: '/actes/Bourbon' or '/actes/Berry' @@ -104,6 +84,12 @@ def actes(house): with a capital letter at the beginning example: `house = "Berry"` """ + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + # house in the store shall be in lower case, but let's force it, just in case house = house.lower() # sample result: @@ -116,12 +102,18 @@ def actes(house): return render_template("corpus.html", house=house.capitalize(), princes=princes) -@main.route("/actes//") +@main.route("/actes//", methods=('GET', 'POST')) def prince_corpus(house=None, prince=None): """copora prince, *timeline* view sample route: '/actes/Berry/je_i' or '/actes/Anjou/lo_i' """ + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + prince_code = prince.lower() house = house.lower() prince_long_name = extract_prince_in_house(house, prince_code)['prince_name'] @@ -158,7 +150,7 @@ def prince_corpus(house=None, prince=None): return render_template("prince_corpus.html", house=house, duke_name=prince_long_name, prince_name=long_prince_bigram.capitalize(), actes=transformed_query) -@main.route("/acte///") +@main.route("/acte///", methods=('GET', 'POST')) def acte(house=None, prince=None, dateitem=None): """specific prince's acte view @@ -171,6 +163,12 @@ def acte(house=None, prince=None, dateitem=None): /acte/Anjou/Isabelle_i/1441_08_05a -> anj_isa_i_1441_08_05a /acte/Bourbon/Anne_i/1388_09_15a -> brb_ann_i_1388_09_15a """ + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + filestem = make_acteid_from_route(house, prince, dateitem) result = actecol.find_one({'_id': filestem}) return render_template("acte.html", house=house, prince=result.get('prince_code'), @@ -181,8 +179,14 @@ def acte(house=None, prince=None, dateitem=None): transcribers=result.get('transcribers'), image=result.get('image')) -@main.route("/geolocalisation") +@main.route("/geolocalisation", methods=('GET', 'POST')) def geolocalisation(): + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + "global folium/leaflet map" m = folium.Map(location=[46.603354, 1.888334], zoom_start=6) for result in actecol.find(): @@ -199,19 +203,37 @@ def geolocalisation(): geolocalisation = m._repr_html_() return render_template("map.html", geolocalisation=geolocalisation) -@main.route("/contact") +@main.route("/contact", methods=('GET', 'POST')) def contact() -> t.Text: """Displays the Contact page""" + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + return render_template("contact.html", title="Contact") -@main.route("/termsofservice") +@main.route("/termsofservice", methods=('GET', 'POST')) def terms() -> t.Text: """Displaysthe T&C page.""" + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + return render_template("terms.html", title="Mentions légales") -@main.route("/privacy") +@main.route("/privacy", methods=('GET', 'POST')) def privacy() -> t.Text: """Displays the privacy policy page.""" + if request.method == 'POST': + search = request.form['search'] + return render_template("plainsearch.html", + search=search, + actes=plaintext_response(search, actecol, prince_bigram)) + return render_template("privacy.html", title="Politique de confidentialité")