BTHLABS-58: Tweaks and fixes

* Use explicit values to populate access token's platform in apps.
* Fix View Association layout.
* Web Extension popup layout rework.
This commit is contained in:
2025-10-04 08:06:18 +02:00
parent efcce32b50
commit 6332a9cef9
13 changed files with 293 additions and 29 deletions

View File

@@ -4,9 +4,14 @@
from __future__ import annotations
import json
import os
import typing
from invoke import Context, task
from invoke.exceptions import UnexpectedExit
import jinja2
import werkzeug
import werkzeug.routing
from hotpocket_workspace_tools import get_workspace_mode
from hotpocket_workspace_tools.tasks import * # noqa: F401,F403
@@ -14,6 +19,61 @@ from hotpocket_workspace_tools.tasks import * # noqa: F401,F403
WORKSPACE_MODE = get_workspace_mode()
class PreviewApp:
ROUTES = werkzeug.routing.Map([
werkzeug.routing.Rule('/preview/popup.html', endpoint='preview_popup'),
])
def __init__(self):
here = os.path.dirname(__file__)
self.jinja_env = jinja2.Environment(
loader=jinja2.FileSystemLoader(
[
os.path.join(here, 'src/content/templates'),
],
),
auto_reload=True,
autoescape=True,
)
@classmethod
def create_app(cls) -> typing.Self:
return cls()
def render_template(self,
template_name: str,
**context,
) -> werkzeug.Response:
template = self.jinja_env.get_template(template_name)
return werkzeug.Response(
template.render(context), mimetype='text/html',
)
def dispatch_request(self,
request: werkzeug.Request,
) -> werkzeug.Response | Exception:
adapter = self.ROUTES.bind_to_environ(request.environ)
try:
endpoint, values = adapter.match()
return getattr(self, f'on_{endpoint}')(request, **values)
except werkzeug.exceptions.HTTPException as exception:
return exception
def on_preview_popup(self, request: werkzeug.Request) -> werkzeug.Response:
return self.render_template('popup_preview.html')
def wsgi_app(self,
environ: werkzeug.wsgi.WSGIEnvironment,
start_response: typing.Any,
) -> werkzeug.Response:
request = werkzeug.Request(environ)
response = self.dispatch_request(request)
return response(environ, start_response)
def __call__(self, environ, start_response):
return self.wsgi_app(environ, start_response)
@task
def clean(ctx: Context):
ctx.run('rm -rf dist/')
@@ -107,7 +167,12 @@ def setup(ctx: Context):
@task
def start_web(ctx: Context):
raise NotImplementedError()
from werkzeug.serving import run_simple
app = PreviewApp.create_app()
bind = os.getenv('HOTPOCKET_EXTENSION_PREVIEW_BIND', '127.0.0.1:6524')
host, port = bind.split(':', maxsplit=1)
run_simple(host, int(port), app, use_debugger=True, use_reloader=True)
@task