Skip to content

v0.38.2 #758

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 12 commits into from
4 changes: 2 additions & 2 deletions noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def test_python_style(session: Session) -> None:
@nox.session
@apply_standard_pip_upgrades
def test_python_build(session: Session) -> None:
"""Test whether the Python package can be build for distribution"""
"""Test whether the Python package can be built for distribution"""
install_requirements_file(session, "build-pkg")
session.run("python", "-m", "build", "--sdist", "--wheel", "--outdir", "dist", ".")

Expand Down Expand Up @@ -268,7 +268,7 @@ def test_javascript_suite(session: Session) -> None:
@nox.session
@setup_client_env
def test_javascript_build(session: Session) -> None:
"""Run the Javascript-based test suite and ensure it bundles succesfully"""
"""Test whether the Javascript package can be built for distribution"""
session.run("npm", "run", "test", external=True)


Expand Down
12 changes: 6 additions & 6 deletions src/idom/backend/fastapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@


serve_development_app = starlette.serve_development_app
"""Alias for :func:`idom.server.starlette.serve_development_app`"""
"""Alias for :func:`idom.backend.starlette.serve_development_app`"""

# see: https://github.com/idom-team/flake8-idom-hooks/issues/12
use_location = starlette.use_location # noqa: ROH101
"""Alias for :func:`idom.server.starlette.use_location`"""
"""Alias for :func:`idom.backend.starlette.use_location`"""

# see: https://github.com/idom-team/flake8-idom-hooks/issues/12
use_scope = starlette.use_scope # noqa: ROH101
"""Alias for :func:`idom.server.starlette.use_scope`"""
"""Alias for :func:`idom.backend.starlette.use_scope`"""

# see: https://github.com/idom-team/flake8-idom-hooks/issues/12
use_websocket = starlette.use_websocket # noqa: ROH101
"""Alias for :func:`idom.server.starlette.use_websocket`"""
"""Alias for :func:`idom.backend.starlette.use_websocket`"""

Options = starlette.Options
"""Alias for :class:`idom.server.starlette.Options`"""
"""Alias for :class:`idom.backend.starlette.Options`"""

configure = starlette.configure
"""Alias for :class:`idom.server.starlette.configure`"""
"""Alias for :class:`idom.backend.starlette.configure`"""


def create_development_app() -> FastAPI:
Expand Down
2 changes: 0 additions & 2 deletions src/idom/backend/flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ def configure(
) -> None:
"""Return a :class:`FlaskServer` where each client has its own state.

Implements the :class:`~idom.server.proto.ServerFactory` protocol

Parameters:
constructor: A component constructor
options: Options for configuring server behavior
Expand Down
2 changes: 0 additions & 2 deletions src/idom/backend/starlette.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ def configure(
) -> None:
"""Return a :class:`StarletteServer` where each client has its own state.

Implements the :class:`~idom.server.proto.ServerFactory` protocol

Parameters:
app: An application instance
constructor: A component constructor
Expand Down
2 changes: 0 additions & 2 deletions src/idom/backend/tornado.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ def configure(
) -> None:
"""Return a :class:`TornadoServer` where each client has its own state.

Implements the :class:`~idom.server.proto.ServerFactory` protocol

Parameters:
app: A tornado ``Application`` instance.
component: A root component constructor
Expand Down
4 changes: 2 additions & 2 deletions src/idom/backend/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ def run(
implementation: BackendImplementation[Any] | None = None,
) -> None:
"""Run a component with a development server"""
logger.warn(
logger.warning(
"You are running a development server. "
"Change this before deploying in production!"
)

implementation = implementation or import_module("idom.server.default")
implementation = implementation or import_module("idom.backend.default")

app = implementation.create_development_app()
implementation.configure(app, component)
Expand Down
4 changes: 2 additions & 2 deletions src/idom/testing/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .backend import BackendFixture
from .common import HookCatcher, StaticEventHandler, clear_idom_web_modules_dir, poll
from .display import DisplayFixture
from .logs import (
Expand All @@ -6,7 +7,6 @@
assert_idom_did_not_log,
capture_idom_logs,
)
from .server import ServerFixture


__all__ = [
Expand All @@ -18,6 +18,6 @@
"HookCatcher",
"LogAssertionError",
"poll",
"ServerFixture",
"BackendFixture",
"StaticEventHandler",
]
4 changes: 2 additions & 2 deletions src/idom/testing/server.py → src/idom/testing/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from .logs import LogAssertionError, capture_idom_logs, list_logged_exceptions


class ServerFixture:
class BackendFixture:
"""A test fixture for running a server and imperatively displaying views

This fixture is typically used alongside async web drivers like ``playwight``.
Expand Down Expand Up @@ -99,7 +99,7 @@ def list_logged_exceptions(
del_log_records,
)

async def __aenter__(self) -> ServerFixture:
async def __aenter__(self) -> BackendFixture:
self._exit_stack = AsyncExitStack()
self._records = self._exit_stack.enter_context(capture_idom_logs())

Expand Down
18 changes: 9 additions & 9 deletions src/idom/testing/display.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from idom import html
from idom.types import RootComponentConstructor

from .server import ServerFixture
from .backend import BackendFixture


class DisplayFixture:
Expand All @@ -19,11 +19,11 @@ class DisplayFixture:

def __init__(
self,
server: ServerFixture | None = None,
server: BackendFixture | None = None,
driver: Browser | BrowserContext | Page | None = None,
) -> None:
if server is not None:
self.server = server
self.backend = server
if driver is not None:
if isinstance(driver, Page):
self.page = driver
Expand All @@ -37,13 +37,13 @@ async def show(
) -> None:
self._next_view_id += 1
view_id = f"display-{self._next_view_id}"
self.server.mount(lambda: html.div({"id": view_id}, component()))
self.backend.mount(lambda: html.div({"id": view_id}, component()))

await self.goto("/")
await self.page.wait_for_selector(f"#{view_id}", state="attached")

async def goto(self, path: str, query: Any | None = None) -> None:
await self.page.goto(self.server.url(path, query))
await self.page.goto(self.backend.url(path, query))

async def __aenter__(self) -> DisplayFixture:
es = self._exit_stack = AsyncExitStack()
Expand All @@ -57,9 +57,9 @@ async def __aenter__(self) -> DisplayFixture:
browser = self._browser
self.page = await browser.new_page()

if not hasattr(self, "server"):
self.server = ServerFixture()
await es.enter_async_context(self.server)
if not hasattr(self, "backend"):
self.backend = BackendFixture()
await es.enter_async_context(self.backend)

return self

Expand All @@ -69,5 +69,5 @@ async def __aexit__(
exc_value: BaseException | None,
traceback: TracebackType | None,
) -> None:
self.server.mount(None)
self.backend.mount(None)
await self._exit_stack.aclose()
2 changes: 1 addition & 1 deletion src/idom/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def use_linked_inputs(
value, set_value = idom.hooks.use_state(initial_value)

def sync_inputs(event: Dict[str, Any]) -> None:
new_value = event["value"]
new_value = event["target"]
set_value(new_value)
if not new_value and ignore_empty:
return None
Expand Down
4 changes: 2 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

from idom.config import IDOM_TESTING_DEFAULT_TIMEOUT
from idom.testing import (
BackendFixture,
DisplayFixture,
ServerFixture,
capture_idom_logs,
clear_idom_web_modules_dir,
)
Expand All @@ -34,7 +34,7 @@ async def display(server, page):

@pytest.fixture(scope="session")
async def server():
async with ServerFixture() as server:
async with BackendFixture() as server:
yield server


Expand Down
6 changes: 3 additions & 3 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from playwright.async_api import Browser

import idom
from idom.testing import DisplayFixture, ServerFixture
from idom.testing import BackendFixture, DisplayFixture


JS_DIR = Path(__file__).parent / "js"
Expand All @@ -22,7 +22,7 @@ def OldComponent():
return idom.html.p({"id": "old-component"}, "old")

async with AsyncExitStack() as exit_stack:
server = await exit_stack.enter_async_context(ServerFixture(port=8000))
server = await exit_stack.enter_async_context(BackendFixture(port=8000))
display = await exit_stack.enter_async_context(
DisplayFixture(server, driver=page)
)
Expand All @@ -43,7 +43,7 @@ def NewComponent():
return idom.html.p({"id": f"new-component-{state}"}, f"new-{state}")

async with AsyncExitStack() as exit_stack:
server = await exit_stack.enter_async_context(ServerFixture(port=8000))
server = await exit_stack.enter_async_context(BackendFixture(port=8000))
display = await exit_stack.enter_async_context(
DisplayFixture(server, driver=page)
)
Expand Down
8 changes: 4 additions & 4 deletions tests/test_server/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from idom.backend import default as default_implementation
from idom.backend.types import Location
from idom.backend.utils import all_implementations
from idom.testing import DisplayFixture, ServerFixture, poll
from idom.testing import BackendFixture, DisplayFixture, poll


@pytest.fixture(
Expand All @@ -16,7 +16,7 @@
scope="module",
)
async def display(page, request):
async with ServerFixture(implementation=request.param) as server:
async with BackendFixture(implementation=request.param) as server:
async with DisplayFixture(server=server, driver=page) as display:
yield display

Expand Down Expand Up @@ -69,7 +69,7 @@ async def test_use_scope(display: DisplayFixture):

@idom.component
def ShowScope():
scope.current = display.server.implementation.use_scope()
scope.current = display.backend.implementation.use_scope()
return html.pre({"id": "scope"}, str(scope.current))

await display.show(ShowScope)
Expand All @@ -88,7 +88,7 @@ async def poll_location():

@idom.component
def ShowRoute():
location.current = display.server.implementation.use_location()
location.current = display.backend.implementation.use_location()
return html.pre({"id": "scope"}, str(location.current))

await display.show(ShowRoute)
Expand Down
4 changes: 2 additions & 2 deletions tests/test_testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,9 @@ def test_if_app_is_given_implementation_must_be_too():
ValueError,
match=r"If an application instance its corresponding server implementation must be provided too",
):
testing.ServerFixture(app=starlette_implementation.create_development_app())
testing.BackendFixture(app=starlette_implementation.create_development_app())

testing.ServerFixture(
testing.BackendFixture(
app=starlette_implementation.create_development_app(),
implementation=starlette_implementation,
)
Expand Down
4 changes: 2 additions & 2 deletions tests/test_web/test_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import idom
from idom.backend import sanic as sanic_implementation
from idom.testing import (
BackendFixture,
DisplayFixture,
ServerFixture,
assert_idom_did_log,
assert_idom_did_not_log,
poll,
Expand Down Expand Up @@ -70,7 +70,7 @@ async def test_module_from_url(browser):
def ShowSimpleButton():
return SimpleButton({"id": "my-button"})

async with ServerFixture(app=app, implementation=sanic_implementation) as server:
async with BackendFixture(app=app, implementation=sanic_implementation) as server:
async with DisplayFixture(server, browser) as display:
await display.show(ShowSimpleButton)

Expand Down