@ -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/<house> " ) # 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/<house>/<prince> " ) # 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/<house>/<prince>/<dateitem> " ) # 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_05 a )
: url location sample : / acte / Anjou / Isabelle_i / 1441_08_05 a
url transcription samples :
/ acte / Anjou / Isabelle_i / 1441_08_05 a - > anj_isa_i_1441_08_05a
/ acte / Bourbon / Anne_i / 1388_09_15 a - > 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/<prince>/<acte_id> " ) # 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 :