netron-docker / proxy.py
brian-xetdata's picture
Debugging URL options
a84d412
raw
history blame
2.86 kB
import os
#
from flask import Flask, request, Response
import requests # pip package requests
app = Flask(__name__)
API_HOST = "http://127.0.0.1:8080/"
# @app.route('/', defaults={'path': ''}, methods=["GET", "POST"]) # ref. https://medium.com/@zwork101/making-a-flask-proxy-server-online-in-10-lines-of-code-44b8721bca6
@app.route('/<path>', methods=["GET", "POST"]) # NOTE: better to specify which methods to be accepted. Otherwise, only GET will be accepted. Ref: https://flask.palletsprojects.com/en/3.0.x/quickstart/#http-methods
def redirect_to_API_HOST(path): #NOTE var :path will be unused as all path we need will be read from :request ie from flask import request
forward = ''
if path == 'netron':
url = request.args.get('url')
forward = f'{API_HOST}/?url={url}'
else:
forward = request.url.replace(request.host_url, f'{API_HOST}/')
res = requests.request( # ref. https://stackoverflow.com/a/36601467/248616
method = request.method,
url = forward,
headers = {k:v for k,v in request.headers if k.lower() != 'host'}, # exclude 'host' header
data = request.get_data(),
cookies = request.cookies,
allow_redirects = False,
)
#region exlcude some keys in :res response
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection'] #NOTE we here exclude all "hop-by-hop headers" defined by RFC 2616 section 13.5.1 ref. https://www.rfc-editor.org/rfc/rfc2616#section-13.5.1
headers = [
(k,v) for k,v in res.raw.headers.items()
if k.lower() not in excluded_headers
]
#endregion exlcude some keys in :res response
response = Response(res.content, res.status_code, headers)
return response
@app.get("/")
def chooser():
return """
<html>
<head>
<title>Netron</title>
<script type="text/javascript">
function setFile() {
console.log("Query params", window.location.search);
if (!window.location.search) {
return;
}
const urlParams = new URLSearchParams(window.location.search);
const url = urlParams.get('url');
var iframe = document.getElementById('netron');
iframe.src = '/netron?url=' + url;
}
console.log("Top level URL", window.top.location);
window.onload(setFile());
</script>
</head>
<body style="padding: 0; margin: 0; display: flex; flex-direction: row; align-items: center;">
<iframe id="netron" src="/netron?url=https://huggingface.co/brianronan/chessbot-test/resolve/main/chessbot.pb" style="width: 100%; height: calc(100% - 30px); border: none;"></iframe>
</body>
</html>
"""