From 051e886d8907dd4546369356336c8524a5de4ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20Luginb=C3=BChl?= Date: Fri, 26 Apr 2024 22:41:58 +0200 Subject: [PATCH] make displaying images from widgets work with flask --- README.md | 15 +++++++++++- happyMirror/__init__.py | 1 + happyMirror/render.py | 6 +++++ .../widgets/simple_image/images/01.jpg | 0 .../widgets/simple_image/images/01.png | 0 .../simple_image/images/640px-Youngkitten.jpg | Bin 0 -> 67307 bytes .../widgets/simple_image/simple_image.py | 22 +++++++++++------- 7 files changed, 35 insertions(+), 9 deletions(-) delete mode 100644 happyMirror/widgets/simple_image/images/01.jpg delete mode 100644 happyMirror/widgets/simple_image/images/01.png create mode 100644 happyMirror/widgets/simple_image/images/640px-Youngkitten.jpg diff --git a/README.md b/README.md index 5e3629f..279f8a5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +> *_Note_* +> This project is in a very early development stage. While it will be used by me in a smart mirror project, +> it is also my learning ground for Python. + # Developing widgets There a few sample widgets already included. On each page reload, each widgets `render()` method is called and a dictionary of type`RenderResult` is expected. Structure your module like so: @@ -19,10 +23,19 @@ class Renderer(BaseRenderer): } ``` +## Custom Routes +If your widget uses custom routes, eg. to display an image, you can do so by implementing `render.BaseRenderer.register_custom_routes` +An example of how to do that can be found in the example widget 'simple_image'. + # How to run -## Development mode +## Development mode Windows Get all you need by typing `pip install -e .`, then run the application directly from VSCode. +To run, either start directly from your preferred editor, or, if you have Flask installed, type +```shell +flask --app happyMirror run --debug +``` + ## Production mode Make sure, waitress is installed. On Linux, you can do so by typing `sudo apt install python3-waitress` Then run `waitress-serve --call 'HappyMirror:create_app'` diff --git a/happyMirror/__init__.py b/happyMirror/__init__.py index 47df9af..bd78bca 100644 --- a/happyMirror/__init__.py +++ b/happyMirror/__init__.py @@ -26,6 +26,7 @@ def create_app(widgets=None, test_config=None): for widget in widgets: widget['instance'] = widget['module'].Renderer() + widget['instance'].register_custom_routes(app) try: os.makedirs(app.instance_path) diff --git a/happyMirror/render.py b/happyMirror/render.py index c983b2c..0aa78ba 100644 --- a/happyMirror/render.py +++ b/happyMirror/render.py @@ -1,6 +1,9 @@ from abc import ABC, abstractmethod from typing import TypedDict +from flask import Flask + + class RenderResult(TypedDict, total=False): script: str view: str @@ -8,6 +11,9 @@ class RenderResult(TypedDict, total=False): class BaseRenderer(ABC): + def register_custom_routes(self, app: Flask): + pass + @abstractmethod def render(self) -> RenderResult: pass diff --git a/happyMirror/widgets/simple_image/images/01.jpg b/happyMirror/widgets/simple_image/images/01.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/happyMirror/widgets/simple_image/images/01.png b/happyMirror/widgets/simple_image/images/01.png deleted file mode 100644 index e69de29..0000000 diff --git a/happyMirror/widgets/simple_image/images/640px-Youngkitten.jpg b/happyMirror/widgets/simple_image/images/640px-Youngkitten.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c044a81254959fedc0feb8b987d159faf6c6cb7d GIT binary patch literal 67307 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 z%0A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%0Dnd>tdOR|DZOXF~ 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 W!*8+STx20Xg}=Qzdrpo@ng7`_k;W?k literal 0 HcmV?d00001 diff --git a/happyMirror/widgets/simple_image/simple_image.py b/happyMirror/widgets/simple_image/simple_image.py index 00d5a00..d175d50 100644 --- a/happyMirror/widgets/simple_image/simple_image.py +++ b/happyMirror/widgets/simple_image/simple_image.py @@ -1,18 +1,24 @@ -import base64 import os -from flask import render_template_string +from flask import Flask, render_template_string, send_from_directory from happyMirror.render import BaseRenderer, RenderResult class Renderer(BaseRenderer): - def render(self) -> RenderResult: - image = '/' + os.path.dirname(os.path.relpath(__file__)) + '/images/01.png' - print(image) - return { - 'view': render_template_string('', image=image) - } + def register_custom_routes(self, app: Flask): + print(f"Widget '{__name__}' is registering custom routes...") + app.add_url_rule( + '/widgets/simple_image/images/', view_func=self.send_image + ) + def send_image(self, image_file): + image_dir = os.path.dirname(os.path.relpath(__file__)) + '/images' + return send_from_directory(image_dir, image_file) + def render(self) -> RenderResult: + image = '/' + os.path.dirname(os.path.relpath(__file__)) + '/images/640px-Youngkitten.jpg' + return { + 'view': render_template_string('', image=image) + }