From 7408e658a811a5431c1916d07836fbe29adeea96 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Tue, 21 Jan 2025 03:45:05 -0500 Subject: Move Area to Omni/App.py This matches Omni/App.hs, and I'll use it in future projects. --- Biz/Storybook.py | 51 ++++++++++++++------------------------------------- Omni/App.py | 26 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 Omni/App.py diff --git a/Biz/Storybook.py b/Biz/Storybook.py index f151394..253cf3b 100755 --- a/Biz/Storybook.py +++ b/Biz/Storybook.py @@ -19,7 +19,6 @@ this single file. # : dep sqids # : dep requests # : dep types-requests -import enum import json import logging import ludic @@ -31,6 +30,7 @@ import ludic.catalog.loaders as loaders import ludic.catalog.pages as pages import ludic.catalog.typography as typography import ludic.web +import Omni.App as App import Omni.Log as Log import openai import os @@ -53,55 +53,32 @@ DATA_DIR = pathlib.Path( PORT = int(os.environ.get("PORT", "3000")) -class Area(enum.Enum): - """The area we are running.""" - - Test = "Test" - Live = "Live" - - -def from_env() -> Area: - """Load AREA from environment variable. - - Raises: - ValueError: if AREA is not defined - """ - var = os.getenv("AREA", "Test") - if var == "Test": - return Area.Test - if var == "Live": - return Area.Live - msg = "AREA not defined" - raise ValueError(msg) - - -area = from_env() -app = ludic.web.LudicApp(debug=area == Area.Test) +area = App.from_env() +app = ludic.web.LudicApp(debug=area == App.Area.Test) Sqids = sqids.Sqids() def main() -> None: """Run the Ludic application.""" - area = from_env() if "test" in sys.argv: test(area) else: move(area) -def move(area: Area) -> None: +def move(area: App.Area) -> None: """Run the application.""" - Log.setup(logging.DEBUG if area == Area.Test else logging.ERROR) + Log.setup(logging.DEBUG if area == App.Area.Test else logging.ERROR) logging.info("area: %s", area) # during test, bind to beryllium's VPN address, else localhost - host = "100.127.197.132" if area == Area.Test else "127.0.0.1" + host = "100.127.197.132" if area == App.Area.Test else "127.0.0.1" uvicorn.run(app, host=host, port=PORT) -def test(area: Area = Area.Test) -> None: +def test(area: App.Area = App.Area.Test) -> None: """Run the unittest suite manually.""" - Log.setup(logging.DEBUG if area == Area.Test else logging.ERROR) + Log.setup(logging.DEBUG if area == App.Area.Test else logging.ERROR) suite = unittest.TestSuite() tests = [IndexTest, StoryTest] suite.addTests([ @@ -281,7 +258,7 @@ def generate_pages(inputs: StoryInputs) -> OpenAIStoryResponse: ValueError: when openAI response is bad """ # when developing, don't run up the OpenAI tab - if area == Area.Test: + if area == App.Area.Test: name = inputs["character"] ret = example_openai_story_response.copy() ret["pages"] = [ @@ -311,7 +288,7 @@ def generate_pages(inputs: StoryInputs) -> OpenAIStoryResponse: def generate_image( - area: Area, + area: App.Area, image_prompt: str, story_id: str, page: int, @@ -323,7 +300,7 @@ def generate_image( """ logging.info("generating image %s.%s", story_id, page) url = None - if area == Area.Test: + if area == App.Area.Test: time.sleep(1) url = "https://placehold.co/1024.png" else: @@ -362,7 +339,7 @@ class Job(ludic.attrs.Attrs): def generate_story_in_background( - area: Area, + area: App.Area, story_id: str, inputs: StoryInputs, ) -> Story: @@ -387,7 +364,7 @@ def generate_story_in_background( def generate_story_pages( - area: Area, + area: App.Area, story_id: str, inputs: StoryInputs, ) -> list[Page]: @@ -423,7 +400,7 @@ class StoryTest(unittest.TestCase): def test_story_creation(self) -> None: """Creates a story with 10 pages.""" story_id = "Uk" - story = generate_story_pages(Area.Test, story_id, example_story) + story = generate_story_pages(App.Area.Test, story_id, example_story) pages = db["pages"][story_id] self.assertIsNotNone(story) self.assertEqual(len(pages), 10) diff --git a/Omni/App.py b/Omni/App.py new file mode 100644 index 0000000..0c6776c --- /dev/null +++ b/Omni/App.py @@ -0,0 +1,26 @@ +"""General utilities for apps.""" + +import enum +import os + + +class Area(enum.Enum): + """The area we are running.""" + + Test = "Test" + Live = "Live" + + +def from_env() -> Area: + """Load AREA from environment variable. + + Raises: + ValueError: if AREA is not defined + """ + var = os.getenv("AREA", "Test") + if var == "Test": + return Area.Test + if var == "Live": + return Area.Live + msg = "AREA not defined" + raise ValueError(msg) -- cgit v1.2.3