# Released under the MIT License. See LICENSE for details.
#
"""Small doc-ui test pages (navigation, slow loads, timed actions)."""
from __future__ import annotations # Docs-generation hack.
import time
from typing import TYPE_CHECKING
import bacommon.docui.routes.docuitest as rt
if TYPE_CHECKING:
import bacommon.docui.v2
import bacommon.docui.routes.docuitest
[docs]
def test_page_2() -> bacommon.docui.v2.Response:
"""More testing (v2 mirror of the v1 '/test2' page)."""
import bacommon.docui.v2 as dui2
from bauiv1 import _docuiv2testassets
strs = _docuiv2testassets.strings
return dui2.Response(
page=dui2.Page(
title=strs.nav.test_two_title.spec,
rows=[
dui2.ButtonRow(
title=strs.nav.more_tests.spec,
buttons=[
dui2.Button(
label=strs.nav.browse.spec,
size=(120, 80),
style=dui2.ButtonStyle.SQUARE,
action=rt.Root().browse(),
),
dui2.Button(
label=strs.nav.replace.spec,
size=(120, 80),
style=dui2.ButtonStyle.SQUARE,
action=rt.Root().replace(),
),
dui2.Button(
label=strs.nav.close.spec,
size=(120, 80),
style=dui2.ButtonStyle.SQUARE,
action=dui2.Local(close_window=True),
selected=True, # Testing this
),
],
),
],
)
)
[docs]
def test_page_long() -> bacommon.docui.v2.Response:
"""Testing a page that takes a bit of time to load (v2 mirror)."""
import bacommon.docui.v2 as dui2
from bauiv1 import _docuiv2testassets
strs = _docuiv2testassets.strings
# Simulate a slow connection or whatnot.
time.sleep(3.0)
return dui2.Response(
page=dui2.Page(
title=strs.nav.test.spec,
center_vertically=True,
rows=[
dui2.ButtonRow(
title=strs.common.that_took_a_while.spec,
center_title=True,
center_content=True,
buttons=[
dui2.Button(
label=strs.common.sure_did.spec,
size=(120, 80),
style=dui2.ButtonStyle.SQUARE,
action=rt.Root().browse(),
),
],
),
],
)
)
[docs]
def test_page_timed_actions(
route: bacommon.docui.routes.docuitest.TimedActions,
) -> bacommon.docui.v2.Response:
"""Testing timed actions (v2 mirror of '/timedactions')."""
import bacommon.docui.v2 as dui2
from bauiv1 import _docuiv2testassets
strs = _docuiv2testassets.strings
val = route.val
return dui2.Response(
page=dui2.Page(
title=strs.nav.test.spec,
center_vertically=True,
rows=[
dui2.ButtonRow(
title=strs.common.hello_there_num(num=str(val)).spec,
subtitle=strs.common.each_change.spec,
center_title=True,
center_content=True,
buttons=[
dui2.Button(
label=strs.nav.done.spec,
size=(120, 80),
style=dui2.ButtonStyle.SQUARE,
action=dui2.Local(close_window=True),
default=True,
),
],
),
],
),
# Refresh this page with a countdown until we hit zero and then
# close the window.
timed_action=(
rt.TimedActions(val=val - 1).replace()
if (val - 1) > 0
else dui2.Local(close_window=True)
),
timed_action_delay=1.0,
)
[docs]
def test_page_empty() -> bacommon.docui.v2.Response:
"""An empty page (v2 mirror of '/emptypage')."""
import bacommon.docui.v2 as dui2
from bauiv1 import _docuiv2testassets
return dui2.Response(
page=dui2.Page(
title=_docuiv2testassets.strings.layout.empty_page_title.spec,
rows=[],
)
)
# Docs-generation hack; import some stuff that we likely only forward-declared
# in our actual source code so that docs tools can find it.
from typing import (Coroutine, Any, Literal, Callable,
Generator, Awaitable, Sequence, Self, TypeIs)
import asyncio
from concurrent.futures import Future
from pathlib import Path
from enum import Enum