Skip to main content

Site / Async

Update any page on a site from within an app using an AsyncSite instance.

from .synth import FakePercentfrom h2o_wave import Q, app, main, ui, AsyncSite
site = AsyncSite()
# Grab a reference to the /stats pagestats_page = site['/stats']
# A flag to indicate whether to pause or resume updating the page at '/stats'update_stats = False

async def update_stats_page(q, page):    f = FakePercent()    card = page['example']    while update_stats:        await q.sleep(1)        price, percent = f.next()        card.data.price = price        card.data.percent = percent        card.progress = percent        await page.save()

@app('/demo')async def serve(q: Q):    if not q.client.initialized:        # Set up up the page at /stats        stats_page.drop()  # Clear any existing page        stats_page['example'] = ui.wide_gauge_stat_card(            box='1 1 2 1',            title='Stats',            value='=${{intl price minimum_fraction_digits=2 maximum_fraction_digits=2}}',            aux_value='={{intl percent style="percent" minimum_fraction_digits=2 maximum_fraction_digits=2}}',            plot_color='$red',            progress=0,            data=dict(price=0, percent=0),        )        await stats_page.save()
        # Set up this app's UI        q.page['form'] = ui.form_card(box='1 1 12 10', items=[            ui.frame(path='/stats', height='110px'),            ui.button(name='toggle', label='Start updates', primary=True),        ])        await q.page.save()
        q.client.initialized = True
    if q.args.toggle:        global update_stats        update_stats = not update_stats        q.page['form'].items[1].button.label = 'Stop updates' if update_stats else 'Start updates'        await q.page.save()        await update_stats_page(q, stats_page)

Tags: โ€‚site