Browse Source

FindBib refactored

francesco 1 year ago
parent
commit
3e53721bbd

+ 0 - 5
flask_be/app.py

@@ -15,11 +15,6 @@ config(app)
 @app.route('/simple_get_query', methods=['POST'])
 def simpleQuery():
 
-    # # This is -- or WAS -- a stupid (and hopefully TEMPORARY) way of handling the JSON data, but it works;
-    # # trying to send application/json data causes Flask to complain and I can't understand why!    
-    # queryDTO = json.loads( request.form['stringifiedDTO'] )
-    # # UP TO HERE
-
     app.logger.info('Request successfully received by the Simple Get Query API')
 
     try:

+ 60 - 25
flask_be/engine/basic_queries.py

@@ -101,31 +101,66 @@ class basicQueries:
 
     # %% Ha in input findcontexts, associa i riferimenti bibliografici ad ogni contesto dal db BiblioTLIO.
     def findbib(self, contexts):
-        infobib = pd.DataFrame()
-        rif_org = pd.DataFrame()
-        for ind, row in contexts.iterrows():
-            queryData = {'queryType': 'bib', 'row': row}
-            bib = self.queryHandler.query(queryData, pandas=True, dbFile='bibliografia/BiblioTLIO.db')
-            infobib = pd.concat([infobib, bib])
-            queryData = {'queryType': 'rif', 'row': row}
-            rif = self.queryHandler.query(queryData, pandas=True)
-            rif_org = pd.concat([rif_org, rif])
-        annoiniz = list(infobib['Anno iniziale'])
-        annofin = list(infobib['Anno finale'])
-        datacod = list(infobib['Data codificata'])
-        datadesc = list(infobib['Data descrittiva'])
-        titoloabb = list(infobib['Titolo Abbreviato'])
-        autore = list(infobib['Autore'])
-        titolo = list(infobib['Titolo'])
-        curatore = list(infobib['Curatore'])
-        areagen = list(infobib['Area generica'])
-        areaspec = list(infobib['Area specifica'])
-        genere = list(infobib['Genere'])
-        forma = list(infobib['Forma'])
-        tipo = list(infobib['Tipo'])
-        iq = list(infobib['IQ'])
-        rif1 = list(rif_org['Rif_organico'])
-        rif2 = list(rif_org['Rif_completo'])
+        # Old, deprecated
+        # infobib = pd.DataFrame()
+        # rif_org = pd.DataFrame()
+        # for ind, row in contexts.iterrows():
+        #     queryData = {'queryType': 'bib', 'row': row}
+        #     bib = self.queryHandler.query(queryData, pandas=True, dbFile='bibliografia/BiblioTLIO.db')
+        #     infobib = pd.concat([infobib, bib])
+        #     queryData = {'queryType': 'rif', 'row': row}
+        #     rif = self.queryHandler.query(queryData, pandas=True)
+        #     rif_org = pd.concat([rif_org, rif])
+        # annoiniz = list(infobib['Anno iniziale'])
+        # annofin = list(infobib['Anno finale'])
+        # datacod = list(infobib['Data codificata'])
+        # datadesc = list(infobib['Data descrittiva'])
+        # titoloabb = list(infobib['Titolo Abbreviato'])
+        # autore = list(infobib['Autore'])
+        # titolo = list(infobib['Titolo'])
+        # curatore = list(infobib['Curatore'])
+        # areagen = list(infobib['Area generica'])
+        # areaspec = list(infobib['Area specifica'])
+        # genere = list(infobib['Genere'])
+        # forma = list(infobib['Forma'])
+        # tipo = list(infobib['Tipo'])
+        # iq = list(infobib['IQ'])
+
+        siglaList = list(contexts['sigla'])
+        siglaSet = set(siglaList)
+        queryData = {'queryType': 'bibAlt', 'siglaSet': siglaSet}
+        infobib = self.queryHandler.query(queryData, pandas=True, dbFile='bibliografia/BiblioTLIO.db')
+        infobib = infobib.set_index('Sigla')
+        infobib2 = {sigla: infobib.loc[sigla].to_dict() for sigla in siglaSet}
+        infobib = [infobib2[sigla] for sigla in siglaList]
+        #
+        annoiniz = [el['Anno iniziale'] for el in infobib]
+        annofin = [el['Anno finale'] for el in infobib]
+        datacod = [el['Data codificata'] for el in infobib]
+        datadesc = [el['Data descrittiva'] for el in infobib]
+        titoloabb = [el['Titolo Abbreviato'] for el in infobib]
+        autore = [el['Autore'] for el in infobib]
+        titolo = [el['Titolo'] for el in infobib]
+        curatore = [el['Curatore'] for el in infobib]
+        areagen = [el['Area generica'] for el in infobib]
+        areaspec = [el['Area specifica'] for el in infobib]
+        genere = [el['Genere'] for el in infobib]
+        forma = [el['Forma'] for el in infobib]
+        tipo = [el['Tipo'] for el in infobib]
+        iq = [el['IQ'] for el in infobib]
+
+        ntxList = list(contexts['ntx'])
+        numOrgList = list(contexts['numorg'])
+        coordsList = [(numorg, ntxList[ind]) for ind, numorg in enumerate(numOrgList)]
+        coordsSet = set(coordsList)
+        queryData = {'queryType': 'rifAlt', 'coordsSet': coordsSet}
+        rif_org = self.queryHandler.query(queryData, pandas=True)
+        rif_org = rif_org.set_index( ['numorg', 'ntx'] )
+        rif_org2 = {coord: rif_org.loc[coord] for coord in coordsSet}
+        rif_org = [rif_org2[coord] for coord in coordsList]
+        rif1 = [rif['Rif_organico'] for rif in rif_org]
+        rif2 = [rif['Rif_completo'] for rif in rif_org]
+        
         contexts['Anno iniziale'] = annoiniz
         contexts['Anno finale'] = annofin
         contexts['Data codificata'] = datacod

+ 27 - 0
flask_be/interface_sqlite3/actual_queries.py

@@ -92,6 +92,15 @@ def prepareQuery(queryData):
             raise KeyError('Missing required data for query type ' + type + ': ' + str(err))
         return f"SELECT [Anno iniziale], [Anno finale], [Data codificata], [Titolo Abbreviato], [Autore], [Titolo], [Curatore], [Data descrittiva], [Area generica], [Area specifica], [Genere], [Forma], [Tipo], IQ FROM datibib WHERE Sigla='{sigla}'"
     
+    #################
+    elif type=='bibAlt':
+        try:
+            siglaSet = queryData['siglaSet']
+        except KeyError as err:
+            raise KeyError('Missing required data for query type ' + type + ': ' + str(err))
+        siglaStr = "'" + "','".join(siglaSet) + "'"
+        return f"SELECT Sigla, [Anno iniziale], [Anno finale], [Data codificata], [Titolo Abbreviato], [Autore], [Titolo], [Curatore], [Data descrittiva], [Area generica], [Area specifica], [Genere], [Forma], [Tipo], IQ FROM datibib WHERE Sigla IN ({siglaStr})"
+
     #################
     elif type=='rif':
         try:
@@ -102,6 +111,24 @@ def prepareQuery(queryData):
             return None
         return f"SELECT head AS Rif_organico, full AS Rif_completo FROM org WHERE (indice='{numorg}' AND ntx='{ntx}')"
     
+    #################
+    elif type=='rifAlt':
+        try:
+            coordsSet = queryData['coordsSet']
+        except KeyError as err:
+            raise KeyError('Missing required data for query type ' + type + ': ' + str(err))
+        
+        subQueries = []
+        for coords in coordsSet:
+            try:
+                numorg = coords[0]
+                ntx = coords[1]
+            except IndexError as err:
+                raise KeyError('Incomplete required data for query type ' + type + ': ' + str(err))
+            subQueries.append( f"SELECT indice AS numorg, ntx, head AS Rif_organico, full AS Rif_completo FROM org WHERE (indice='{numorg}' AND ntx='{ntx}')" )
+                
+        return ' UNION ALL '.join(subQueries)
+
     #################
     elif type=='highlight':
         try:

+ 3 - 3
test_suite/tests_kora_misc/Query_speed/queries_2.py

@@ -288,17 +288,17 @@ print(timestamp1 - timestamp0)
 # %%
 timestamp0 = time.time()
 
-infobib = pd.DataFrame()
 siglaList = list(res['sigla'])
 siglaSet = set(siglaList)
 queryData = {'queryType': 'bibAlt', 'siglaSet': siglaList}
 queryStringBib = reducedQueryString(queryData)
 dbFileBib='bibliografia/BiblioTLIO.db'
 with sqlite3.connect(f"file:{dbFileBib}?mode=ro", uri=True) as connection:    
-    bib = pd.read_sql(queryStringBib, connection, index_col='Sigla')
+    bib = pd.read_sql(queryStringBib, connection)
+
+bib = bib.set_index('Sigla')
 
 timestamp1 = time.time()
-# %%
 
 
 annoiniz = [bib.loc[sigla, 'Anno iniziale'] for sigla in siglaList]