| # bazel build polygerrit-ui/app:gr-app |
| # mitmdump -s "serve-app-locally.py ~/gerrit/bazel-bin/polygerrit-ui/app" |
| from mitmproxy import http |
| import argparse |
| import os |
| import zipfile |
| |
| class Server: |
| def __init__(self, bundle): |
| self.bundle = bundle |
| self.bundlemtime = 0 |
| self.files = { |
| 'polygerrit_ui/elements/gr-app.js': '', |
| 'polygerrit_ui/elements/gr-app.html': '', |
| 'polygerrit_ui/styles/main.css': '', |
| } |
| self.read_files() |
| |
| def read_files(self): |
| if not os.path.isfile(self.bundle): |
| print("bundle not found!") |
| return |
| mtime = os.stat(self.bundle).st_mtime |
| if mtime <= self.bundlemtime: |
| return |
| self.bundlemtime = mtime |
| with zipfile.ZipFile(self.bundle) as z: |
| for fname in self.files: |
| print('Reading new content for ' + fname) |
| with z.open(fname, 'r') as content_file: |
| self.files[fname] = content_file.read() |
| |
| def response(self, flow: http.HTTPFlow) -> None: |
| self.read_files() |
| for name in self.files: |
| if name.rsplit('/', 1)[1] in flow.request.pretty_url: |
| flow.response.content = self.files[name] |
| |
| def expandpath(path): |
| return os.path.expanduser(path) |
| |
| def start(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument("bundle", type=str) |
| args = parser.parse_args() |
| return Server(expandpath(args.bundle)) |