From 547acdec6baa83257d837ebcb5b0371918097fdf Mon Sep 17 00:00:00 2001 From: rmorshea Date: Fri, 4 Sep 2020 00:57:40 -0700 Subject: [PATCH] fix docs + improve doc exammple runner --- docs/source/examples/simple_dashboard.py | 6 +-- docs/source/examples/snake_game.py | 6 +-- scripts/run_doc_example.py | 53 ------------------------ scripts/run_doc_examples.py | 52 +++++++++++++++++++++++ 4 files changed, 58 insertions(+), 59 deletions(-) delete mode 100644 scripts/run_doc_example.py create mode 100644 scripts/run_doc_examples.py diff --git a/docs/source/examples/simple_dashboard.py b/docs/source/examples/simple_dashboard.py index 411dde8ee..7749ad456 100644 --- a/docs/source/examples/simple_dashboard.py +++ b/docs/source/examples/simple_dashboard.py @@ -43,7 +43,7 @@ def RandomWalkGraph(mu, sigma): interval = use_interval(0.5) data, set_data = idom.hooks.use_state([{"x": 0, "y": 0}] * 50) - @idom.hooks.use_async + @idom.hooks.use_effect async def animate(): await interval last_data_point = data[-1] @@ -75,8 +75,8 @@ def update_value(value): ) -def use_interval(rate: float) -> Awaitable[None]: - usage_time = use_ref(time.time()) +def use_interval(rate): + usage_time = idom.hooks.use_ref(time.time()) async def interval() -> None: await asyncio.sleep(rate - (time.time() - usage_time.current)) diff --git a/docs/source/examples/snake_game.py b/docs/source/examples/snake_game.py index 94c94c2ce..00bfffeea 100644 --- a/docs/source/examples/snake_game.py +++ b/docs/source/examples/snake_game.py @@ -76,7 +76,7 @@ async def on_direction_change(event): interval = use_interval(0.5) - @idom.hooks.use_async + @idom.hooks.use_effect async def animate(): if new_game_state is not None: await asyncio.sleep(1) @@ -114,8 +114,8 @@ def set_food(): return food, set_food -def use_interval(rate: float) -> Awaitable[None]: - usage_time = use_ref(time.time()) +def use_interval(rate): + usage_time = idom.hooks.use_ref(time.time()) async def interval() -> None: await asyncio.sleep(rate - (time.time() - usage_time.current)) diff --git a/scripts/run_doc_example.py b/scripts/run_doc_example.py deleted file mode 100644 index 98f8226b1..000000000 --- a/scripts/run_doc_example.py +++ /dev/null @@ -1,53 +0,0 @@ -import sys -from pathlib import Path - -from idom.widgets.utils import hotswap -from idom.server.sanic import PerClientStateServer - -here = Path(__file__).parent -examples_dir = here.parent / "docs" / "source" / "examples" -sys.path.insert(0, str(examples_dir)) - -for file in examples_dir.iterdir(): - if not file.is_file() or not file.suffix == ".py" or file.stem.startswith("_"): - continue - - -def main(): - try: - ex_name = sys.argv[1] - except IndexError: - print("No example argument given. Choose from:") - _print_available_options() - return - - example_file = examples_dir / (ex_name + ".py") - - if not example_file.exists(): - print(f"No example {ex_name!r} exists. Choose from:") - _print_available_options() - return - - mount, element = hotswap() - server = PerClientStateServer(element) - - with example_file.open() as f: - exec( - f.read(), - { - "display": mount, - "__file__": str(file), - "__name__": f"widgets.{file.stem}", - }, - ) - - server.run("127.0.0.1", 5000) - - -def _print_available_options(): - for found_example_file in examples_dir.glob("*.py"): - print("-", found_example_file.stem) - - -if __name__ == "__main__": - main() diff --git a/scripts/run_doc_examples.py b/scripts/run_doc_examples.py new file mode 100644 index 000000000..e3bf7f256 --- /dev/null +++ b/scripts/run_doc_examples.py @@ -0,0 +1,52 @@ +import sys +from pathlib import Path +from traceback import print_exc + +import idom +from idom.server.sanic import PerClientStateServer + +here = Path(__file__).parent +examples_dir = here.parent / "docs" / "source" / "examples" +sys.path.insert(0, str(examples_dir)) + +for file in examples_dir.iterdir(): + if not file.is_file() or not file.suffix == ".py" or file.stem.startswith("_"): + continue + + +def main(): + views = [] + + for example_file in examples_dir.glob("*.py"): + if not example_file.stem.startswith("_"): + with example_file.open() as f_obj: + try: + exec( + f_obj.read(), + { + "display": lambda f, *a, **kw: views.append( + (example_file.stem, f, a, kw) + ), + "__file__": str(file), + "__name__": f"widgets.{file.stem}", + }, + ) + except Exception: + print(f"Failed to load {example_file}") + print_exc() + print() + + @idom.element + def AllExamples(): + examples = [] + for title, f, a, kw in views: + examples.append(idom.html.h1(title)) + examples.append(f(*a, **kw)) + examples.append(idom.html.hr({"style": {"margin-top": "20px"}})) + return idom.html.div({"style": {"margin": "20px"}}, examples) + + PerClientStateServer(AllExamples).run("127.0.0.1", 5000) + + +if __name__ == "__main__": + main()