#!python import os import sys import json import time import argparse from datetime import datetime from flask import Flask, request, render_template, jsonify from dotenv import load_dotenv load_dotenv() from util import * locations_worksheet = fetch_worksheet('paper_locations') verifications_worksheet = fetch_worksheet('verifications') paper_lookup = fetch_google_lookup('citation_lookup') addresses = AddressBook() app = Flask(__name__, static_url_path="/reports", static_folder=os.path.abspath("reports")) # static api route @app.route('/', methods=['GET']) def index(): return app.send_static_file('geocode_papers.html') @app.errorhandler(404) def page_not_found(e): return app.send_static_file('geocode_papers.html') # route to get all the manually geocoded IDs (to dedupe) # route to add a geocoding for a paper @app.route('/api/institutions', methods=['GET']) def list_locations(): return jsonify({ 'entities': addresses.entities, 'lookup': addresses.lookup, }) @app.route('/api/papers', methods=['GET']) def list_papers(): return jsonify({ 'papers': paper_lookup, }) @app.route('/api/address/', methods=['GET']) def find_address(sha256): worksheet = fetch_worksheet('paper_locations') try: cell = worksheet.find(sha256) except: return jsonify({ 'error': 'no_match' }) if cell and cell.row: keys = worksheet.row_values(1) values_list = worksheet.row_values(cell.row) lookup = {} for key, value in zip(keys, values_list): lookup[key] = value return jsonify({ 'paper': lookup, }) else: return jsonify({ 'error': 'no_match' }) @app.route('/api/address/add', methods=['POST']) def add_address(): form = request.get_json() print(form) # id, title, institution_1, institution_2, institution_3, institution_4, notes locations_worksheet.append_row([ form['paper_id'], form['title'], form['institution_1'], form['institution_1_vetting'], form['institution_2'], form['institution_2_vetting'], form['institution_3'], form['institution_3_vetting'], form['institution_4'], form['institution_4_vetting'], form['notes'], ]) return jsonify({ 'status': 'ok' }) @app.route('/api/verify/', methods=['GET']) def find_verification(sha256): worksheet = fetch_worksheet('verifications') try: cell = worksheet.find(sha256) except: return jsonify({ 'error': 'no_match' }) if cell and cell.row: keys = worksheet.row_values(1) values_list = worksheet.row_values(cell.row) lookup = {} for key, value in zip(keys, values_list): lookup[key] = value return jsonify({ 'paper': lookup, }) else: return jsonify({ 'error': 'no_match' }) @app.route('/api/verify/add', methods=['POST']) def add_verifications(): form = request.get_json() print(form) keys = verifications_worksheet.row_values(1) row = [ form[key] if key in form else '' for key in keys ] verifications_worksheet.append_row(row) return jsonify({ 'status': 'ok' }) if __name__=="__main__": app.run("0.0.0.0", port=7727, debug=False)