/
web.py
105 lines (87 loc) · 3.13 KB
/
web.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import yaml
import cmislib
from cmislib import CmisClient
import os
import json
from flask import Flask
from flask import send_from_directory
from flask import redirect, request
# xlsxwriter is good but can only create new sheets with formatting, cannot edit
# import xlsxwriter
from openpyxl import Workbook, load_workbook
import logging
import logging.config
import sys
from flow import OCRFlow
flaskapp = Flask(__name__)
def update_cmis(doc_id, repo_name, text):
repo = CmisClient(flow.settings["cmis_url"], flow.settings["cmis_username"], flow.settings["cmis_password"]).defaultRepository
document = repo.getObject(doc_id)
logging.debug(document)
update_dict = {}
update_dict[repo_name] = text
logging.debug(update_dict)
document.updateProperties(update_dict)
def update_excel(doc_id, repo_name, text):
row = long(doc_id) + 2
column = repo_name
workbook = load_workbook(flow.settings["excel_file"])
worksheet = workbook.active
worksheet["{}{}".format(column, row)] = text
workbook.save(flow.settings["excel_file"])
@flaskapp.route('/')
def homepage():
return redirect("/static/index.html", code=302)
# return flaskapp.send_static_file('index.html')
@flaskapp.route('/static/data/<path:filename>')
def custom_static(filename):
return send_from_directory(flow.settings["datadir"], filename)
@flaskapp.route("/api/regions/<frame_start>/<frame_end>")
def get_regions(frame_start, frame_end):
logging.info("getting frame {} to {}".format(frame_start, frame_end))
flow.extract_fields(int(frame_start), int(frame_end))
with open(flow.settings["datadir"] + "/field_zones.json") as fh:
region_text = fh.read()
LOGGER.debug(region_text)
return region_text
@flaskapp.route("/api/<verb>", methods=["GET", "POST"])
def update(verb):
params = request.get_json()
logging.info(params)
if "cmis_url" in flow.settings:
update_cmis(params["doc_id"], params["repo_name"], params["text"])
if "excel_file" in flow.settings:
update_excel(params["doc_id"], params["repo_name"], params["text"])
params["status"] = "Success"
return json.dumps(params)
def serve_gevent():
from gevent.wsgi import WSGIServer
http_server = WSGIServer(('', 5000), flaskapp)
http_server.serve_forever()
def serve_flask():
flaskapp.run(
host="0.0.0.0",
port=5000)
if __name__ == "__main__":
try:
config_filename = sys.argv[1]
except:
config_filename = "test/excel_demo.yaml"
# config_filename = "test/multipage.yaml"
# config_filename = "test/advanced.yaml"
with open("logging.yaml") as fh:
log_settings = yaml.load(fh)
logging.config.dictConfig(log_settings)
LOGGER = logging.getLogger(__name__)
LOGGER.info("Logging enabled")
flaskapp.secret_key = 'super secret key'
flow = OCRFlow(config_filename)
# flow.upload_sample_documents()
if "excel_file" in flow.settings:
flow.download_from_excel()
if "cmis_url" in flow.settings:
flow.download_from_cmis()
flow.transform_documents()
flow.extract_fields()
serve_gevent()
LOGGER.info("Web server started")