From d34cb275dc49254036f63544db550816753ec6ae Mon Sep 17 00:00:00 2001 From: gwen Date: Sun, 17 Sep 2023 10:57:27 +0200 Subject: [PATCH] acte/house/prince/dateitem route working --- app/routes.py | 81 ++++++++++++++++++++++++++++++++++------- app/templates/acte.html | 11 +++++- requirements.txt | 3 +- 3 files changed, 78 insertions(+), 17 deletions(-) diff --git a/app/routes.py b/app/routes.py index 9460cc7..8799011 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,5 +1,6 @@ import typing as t import urllib.parse +from unidecode import unidecode from flask import Blueprint, abort, render_template, request, send_from_directory from pymongo import MongoClient @@ -10,13 +11,51 @@ from .helper import find_one_or_404 main = Blueprint("main", __name__, url_prefix="/") +# FIXME : put the mongodb connector in the flask app object # database connexion username = urllib.parse.quote_plus(dbadmin) password = urllib.parse.quote_plus(dbpassword) dbclient = MongoClient(f'mongodb://{username}:{password}@{server_ip}:27017') actesdb = dbclient["actesdb"] +# housecol = actesdb["house"] - +actecol = actesdb["acte"] +helpers = actesdb["helpers"] +# + +helpers_dicts = helpers.find_one() +house_trigram = helpers_dicts["house_trigram"] +prince_bigram = helpers_dicts["prince_bigram"] + +def normalize_trigrams(trigram): + """noramlizes names like Alençon -> Alencon + + or Orléans -> Orleans for the url routes to be clean + """ + return {unidecode(value):key for key, value in trigram.items()} + +# normalized_trigrams +house_trigram = normalize_trigrams(house_trigram) +prince_bigram = normalize_trigrams(prince_bigram) + +def bigram_prince(prince): + "Translates Charles_i -> ch_i" + name, number = prince.split("_") + return prince_bigram[name] + "_" + number + +def trigram_house(house): + return house_trigram[house] + +# TODO: write tests in the datascience project +#print(bigram_prince("Agnes")) +#print(bigram_prince("Arthur")) +#print(bigram_prince("Bernard")) +#print(trigram_house("Anjou")) +#print(trigram_house("Orleans")) + +def make_acteid_from_route(house=None, prince=None, date_and_item=None): + "/acte/Anjou/Isabelle_i/1441_08_05a -> anj_isa_i_1441_08_05a" + return "_".join([trigram_house(house), bigram_prince(prince), date_and_item]) @main.route("/") def home(): @@ -43,30 +82,46 @@ def corpora_all(): @main.route("/actes/") # dont put a slash at the end def actes(house): - """actes route""" + """actes route + + shows the princes in the selected house + """ #house = "Berry" # FIXME faire des princes correspondant à la maison (house) sélectionnée - # FIXME : supprimer ces ids # Corpus > Bourbon princes = [("Charles Ier de Bourbon", 36), ("Agnès de Bourgogne", 38), ("Marie de Berry", 39)] return render_template("corpus.html", house=house, princes=princes) -# FIXME SLUGGIFY the house -# FIXME supprimer cet id de prince et remplacer par le slug du prince @main.route("/actes//") # don't put a slash at the end def prince_corpus(house=None, prince=None): """copora prince, **timeline view**""" - return "FIXME" - + # FIXME + return "FIXME" # make_acteid_from_route(house, prince) + + +@main.route("/acte///") # don't put a slash at the end +def acte(house=None, prince=None, dateitem=None): + """specific prince's acte view + + :params: - house + - prince + - date + item (sample: 1441_08_05a) + :url location sample: /acte/Anjou/Isabelle_i/1441_08_05a + + url transcription samples: + /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 + """ + filestem = make_acteid_from_route(house, prince, dateitem) + result = actecol.find_one({'_id': filestem}) + return render_template("acte.html", house=house, prince=prince, + #infos=None, place=None, doc=None, arch=None, + #diplo=diplo_t[0].replace("_", " "), state=state[0], + output_doc=result.get('xmlcontent'), name_prince=result.get("prince_name"), + transcribers=result.get('transcribers')) -# FIXME : slugigy this route (remove acte_id) (prince and acte) -# FIXME: isn't it /acte/house/prince/slug instead of /acte/prince/slug ? -@main.route("/acte//") # don't put a slash at the end -def acte(house=None, prince=None, acte_id=None): - """specific prince's acte""" - return "FIXME" @main.route("/contact") def contact() -> t.Text: diff --git a/app/templates/acte.html b/app/templates/acte.html index 8346a1f..43735bf 100644 --- a/app/templates/acte.html +++ b/app/templates/acte.html @@ -19,8 +19,15 @@ {{output_doc|safe}}

- Transcription : {% for name in transcribers %}{% if name == transcribers[0] %}{{name}}{% elif name == transcribers[-1] %} et {{name}}{% else %}, {{name}}{% endif %}{% endfor %}. + Transcription : + {% for name in transcribers %} + {% if name == transcribers[0] %}{{name}} + {% elif name == transcribers[-1] %} + et {{name}} + {% else %}, {{name}} + {% endif %} + {% endfor %}.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/requirements.txt b/requirements.txt index 4bf6eef..d1e0e3e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,3 @@ -#beautifulsoup4==4.11.1 -#bs4==0.0.1 click==8.1.3 dnspython==2.4.2 email-validator==2.0.0.post2 @@ -22,4 +20,5 @@ Flask-WTF==1.1.1 WTForms==3.0.1 zipp==3.9.0 pyyaml==6.0.1 +Unidecode==1.3.6