Skip to content

Commit

Permalink
Fix idom.run and more renaming of server to backend (#763)
Browse files Browse the repository at this point in the history
* fix missed server->backend renaming

* add changelog

* add one more item to pr
  • Loading branch information
rmorshea committed Jun 17, 2022
1 parent 009617d commit d157e10
Show file tree
Hide file tree
Showing 15 changed files with 59 additions and 53 deletions.
3 changes: 2 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ A summary of the changes.

Please update this checklist as you complete each item:

- [ ] Tests have been included for all bug fixes or new functionality.
- [ ] Tests have been included for all bug fixes or added functionality.
- [ ] The `changelog.rst` has been updated with any significant changes.
- [ ] GitHub Issues which may be closed by this Pull Request have been linked.
- [ ] I have left irrelevant checklist items unchecked instead of removing them.
13 changes: 12 additions & 1 deletion docs/source/about/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,18 @@ more info, see the :ref:`Contributor Guide <Creating a Changelog Entry>`.
Unreleased
----------

No changes.
**Fixed**

- :pull:`763` - ``No module named 'idom.server'`` from ``idom.run``
- :pull:`749` - Setting appropriate MIME type for web modules in `sanic` server implementation

**Changed**

- :pull:`763` - renamed various:

- ``idom.testing.server -> idom.testing.backend``
- ``ServerFixture -> BackendFixture``
- ``DisplayFixture.server -> DisplayFixture.backend``


v0.38.1
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
8 changes: 3 additions & 5 deletions src/idom/backend/flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,12 @@
def configure(
app: Flask, component: RootComponentConstructor, options: Options | None = None
) -> None:
"""Return a :class:`FlaskServer` where each client has its own state.
Implements the :class:`~idom.server.proto.ServerFactory` protocol
"""Configure the necessary IDOM routes on the given app.
Parameters:
constructor: A component constructor
app: An application instance
component: A component constructor
options: Options for configuring server behavior
app: An application instance (otherwise a default instance is created)
"""
options = options or Options()
blueprint = Blueprint("idom", __name__, url_prefix=options.url_prefix)
Expand Down
6 changes: 2 additions & 4 deletions src/idom/backend/starlette.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,11 @@ def configure(
constructor: RootComponentConstructor,
options: Options | None = None,
) -> None:
"""Return a :class:`StarletteServer` where each client has its own state.
Implements the :class:`~idom.server.proto.ServerFactory` protocol
"""Configure the necessary IDOM routes on the given app.
Parameters:
app: An application instance
constructor: A component constructor
component: A component constructor
options: Options for configuring server behavior
"""
options = options or Options()
Expand Down
10 changes: 4 additions & 6 deletions src/idom/backend/tornado.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,12 @@ def configure(
component: ComponentConstructor,
options: Options | None = None,
) -> None:
"""Return a :class:`TornadoServer` where each client has its own state.
Implements the :class:`~idom.server.proto.ServerFactory` protocol
"""Configure the necessary IDOM routes on the given app.
Parameters:
app: A tornado ``Application`` instance.
component: A root component constructor
options: Options for configuring how the component is mounted to the server.
app: An application instance
component: A component constructor
options: Options for configuring server behavior
"""
options = options or Options()
_add_handler(
Expand Down
2 changes: 1 addition & 1 deletion src/idom/backend/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def run(
"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",
]
6 changes: 3 additions & 3 deletions src/idom/testing/server.py → src/idom/testing/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
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``.
Example:
.. code-block::
async with ServerFixture() as server:
async with BackendFixture() as server:
server.mount(MyComponent)
"""

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
20 changes: 10 additions & 10 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,
backend: BackendFixture | None = None,
driver: Browser | BrowserContext | Page | None = None,
) -> None:
if server is not None:
self.server = server
if backend is not None:
self.backend = backend
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()
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
10 changes: 5 additions & 5 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,8 +16,8 @@
scope="module",
)
async def display(page, request):
async with ServerFixture(implementation=request.param) as server:
async with DisplayFixture(server=server, driver=page) as display:
async with BackendFixture(implementation=request.param) as server:
async with DisplayFixture(backend=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

0 comments on commit d157e10

Please sign in to comment.