Buckets:
| '''Module server: used to run the Flask web server.''' | |
| import json | |
| from threading import Thread | |
| from queue import Queue | |
| from time import sleep | |
| import os.path as op | |
| from typing import Tuple | |
| from flask import Flask, request, render_template, make_response, Response | |
| from .module_manager import ModuleManager | |
| WATCH_PERIOD = 0.3 | |
| SSE_MESSAGE_TEMPLATE = 'event: file_update\ndata: %s\n\n' | |
| app = Flask(__name__, static_url_path='/static') | |
| def run(port: int, module_manager: ModuleManager, ui_options: dict, is_dead: bool=False) -> None: | |
| '''Run the Flask web server.''' | |
| def _root() -> str: | |
| if module_manager.target_is_dir: | |
| module_manager.module_name = request.args.get('m') | |
| return render_template( | |
| 'viewer.html', | |
| options=ui_options, | |
| modules_name=list(module_manager.available_modules.keys()), | |
| data=module_manager.get_data() | |
| ) | |
| def _html() -> str: | |
| # pylint: disable=import-outside-toplevel | |
| from .exporter import Exporter | |
| if module_manager.target_is_dir: | |
| module_manager.module_name = request.args.get('m') | |
| exporter = Exporter(module_manager) | |
| return exporter.get_html(ui_options) | |
| def _json() -> Tuple[str, int]: | |
| if module_manager.target_is_dir: | |
| module_manager.module_name = request.args.get('m') | |
| data = module_manager.get_data() | |
| return data, (400 if 'error' in data else 200) | |
| def _events() -> Response: | |
| def stream(): | |
| while True: | |
| data = events_queue.get() | |
| print(f'Sending Server Sent Event: { data[:100] }...') | |
| yield data | |
| response = make_response(stream()) | |
| response.mimetype = 'text/event-stream' | |
| response.headers['Cache-Control'] = 'no-store, must-revalidate' | |
| response.headers['Expires'] = 0 | |
| return response | |
| def watchdog() -> None: | |
| while True: | |
| last_updated_file = module_manager.get_last_updated_file() | |
| if last_updated_file: | |
| module_manager.module_name = op.basename(last_updated_file)[:-3] | |
| data = module_manager.get_data() | |
| events_queue.put(SSE_MESSAGE_TEMPLATE % json.dumps(data)) | |
| sleep(WATCH_PERIOD) | |
| events_queue = Queue(maxsize = 3) | |
| module_manager.init() | |
| if not is_dead: | |
| watchdog_thread = Thread(target=watchdog, daemon=True) | |
| watchdog_thread.start() | |
| app.run(host='0.0.0.0', port=port, debug=False) | |
Xet Storage Details
- Size:
- 2.72 kB
- Xet hash:
- f5968ef3da888dca21a2bc4090b66b061138b9e154e2155edc3ab0485ec957f0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.