You've already forked hotpocket
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user