#!/usr/bin/env python3 import sys import time import threading import socket from pathlib import Path from flask import Flask, render_template, request, redirect, jsonify app = Flask(__name__) class Args: def __init__(self, name, port='', wsport=''): if '.' in name: # when called with service argument %i posargs = f'{name}..'.split('.') name, port, wsport = posargs[:3] if not port: port = '8050' if not wsport: wsport = str(int(port) + 1) args = dict( html = 'common.html', svg = 'common.svg', css = 'common.css', js = 'secop.js', ) common, _, variant = name.partition('_') names = [common, name] if variant else [name] for name in names: for key in list(args): print(f'{name}.{key}') if (Path('templates') / f'{name}.{key}').is_file(): print(f'--- {name}.{key}') args[key] = f'{name}.{key}' hostname = socket.gethostname() if '.' not in hostname: hostname += '.psi.ch' self.hostname = hostname self.wsport = wsport self.port = int(port) self.html = args.pop('html') args['name'] = name self.args = args args = Args(*sys.argv[1:]) print(args) @app.route('/') def index(): if request.args.get('tunneled'): wsaddr = f'127.0.0.1:{args.wsport}' else: wsaddr = f'{args.hostname}:{args.wsport}' print(wsaddr, args.port, args.html, args.args) return render_template(f'{args.html}', wsaddr=wsaddr, **args.args) if __name__ == '__main__': app.run(host="0.0.0.0", port=args.port, debug=True)