summaryrefslogtreecommitdiff
path: root/app/__init__.py
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2021-01-03 21:41:50 +0300
committerEvgeny Zinoviev <me@ch1p.io>2021-01-03 21:44:01 +0300
commitd05ab59b47a25432672cfe5b7ba53f3cb1a6d6cb (patch)
tree71f2f306d640a65bd92545a61b955071663976c8 /app/__init__.py
initial commit
Diffstat (limited to 'app/__init__.py')
-rw-r--r--app/__init__.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/app/__init__.py b/app/__init__.py
new file mode 100644
index 0000000..8ee21b9
--- /dev/null
+++ b/app/__init__.py
@@ -0,0 +1,91 @@
+import os
+import time
+
+from . import acmespb
+from flask import Flask, render_template
+from flask_socketio import SocketIO, emit
+
+socketio = SocketIO()
+
+
+def create_app(test_config=None):
+ app = Flask(__name__, instance_relative_config=True)
+ app.config.from_mapping(
+ SECRET_KEY='dev',
+ DATABASE=os.path.join(app.instance_path, 'app.sqlite'),
+ )
+
+ if test_config is None:
+ # load the instance config, if it exists, when not testing
+ app.config.from_pyfile('config.py', silent=True)
+ else:
+ # load the test config if passed in
+ app.config.from_mapping(test_config)
+
+ # ensure the instance folder exists
+ try:
+ os.makedirs(app.instance_path)
+ except OSError:
+ pass
+
+ socketio.init_app(app)
+
+ @app.route('/')
+ def hello():
+ return render_template('index.html')
+
+ @socketio.on('get_hints')
+ def handle_get_hints_event(q):
+ print('[get_hints] id=%d, query=%s' % (q['id'], q['query']))
+ if len(q['query']) < 3:
+ response = {
+ 'id': q['id'],
+ 'error': "query is too short"
+ }
+ emit('hints', response)
+ return
+ results = acmespb.search(q['query'])
+ response = {
+ 'id': q['id'],
+ 'response': results
+ }
+ emit('hints', response)
+
+ @socketio.on('get_offers')
+ def handle_get_offers_event(q):
+ print('[get_offers] id=%d, query=%s' % (q['id'], q['query']))
+ target_url, trade_names = acmespb.trade_names(q['query'])
+ if trade_names:
+ response = {
+ 'id': q['id'],
+ "response": trade_names
+ }
+ emit('hints', response)
+ return
+
+ page = 1
+ pages = 0
+ target_url = None
+ while pages == 0 or page <= pages:
+ target_url, pages, offers = acmespb.offers(q['query'], page=page, target_url=target_url)
+ print("[%d] pages=%d, target_url=%s" % (page, pages, target_url))
+ response = {
+ 'id': q['id'],
+ 'offers': [offer.as_dict() for offer in offers],
+ 'page': page,
+ 'pages': pages
+ }
+ emit('offers', response)
+
+ time.sleep(0.5)
+ page += 1
+
+ response = {
+ 'id': q['id'],
+ 'end': True
+ }
+ emit('offers', response)
+
+ # TODO empty response
+
+ return app