示例#1
0
def terminate(n_intervals, nav):
    OFF = '86400000'  # str(24*60*60*1000) update once per day
    ON = '500'  # str(1*1000) update every second
    nav = utils.UrlNav(*json.loads(nav))
    if qparse.Compiler(nav.test_id).running:
        log.debug('[%d], %s running, refresh ON', n_intervals, nav.test_id)
        return ON
    log.debug('[%d], %s terminated, refresh OFF', n_intervals, nav.test_id)
    return OFF
示例#2
0
def set_active_link(clicks, nav, menu_items):
    'set active classname on menuitem if its page is current'
    nav = utils.UrlNav(*json.loads(nav))
    for item in menu_items:
        prop = item['props']
        href = prop.get('href', None)
        prop['className'] = 'active' if href == nav.page_id else ''
    log.debug('returning %s', len(menu_items))
    return menu_items
示例#3
0
def update_modal(nvals, nav, kids):
    'display QueryHandler.msgs while it is running'
    nav = utils.UrlNav(*json.loads(nav))
    log.debug('[%s] update_modal', nvals)
    qh = QueryHandler.find(nav.test_id)
    if qh and qh.running:
        log.debug(' - return %s QueryHandler.msgs', len(qh.msgs))
        return html.Pre('\n'.join(qh.msgs))
    log.debug(' - returning %s kids', len(kids))
    return kids
示例#4
0
def toggle_updates(style, nvals, nav):
    'stop updating if there is no QueryHandler for nav anymore'
    ON = '500'  # once/second
    OFF = '86400000'  # once/day
    nav = utils.UrlNav(*json.loads(nav))
    qh = QueryHandler.find(nav.test_id)
    rv = ON if qh and qh.running else OFF
    msg = 'running -> ON' if qh and qh.running else 'not found -> OFF'
    log.debug('QueryHandler(%s) - %s', nav.test_id, msg)
    return rv
示例#5
0
def goto_page(nav, controls):
    'navigate to page using app nav contents'
    nav = utils.UrlNav(*json.loads(nav))  # if nav else {}
    log.debug('nav %s', nav)
    cache = [x['props'] for x in controls if x['props']['id'] == nav.controls]
    cache = cache[0].get('children', None) if len(cache) else None
    page_cache = json.loads(cache) if cache else None

    page = PAGES.get(nav.page_id, None)
    if page is None:
        return html.Div('404 - {!r} - not found'.format(nav.page_id))
    log.debug('layout(%s)', nav.page_id)
    return page.layout(nav, page_cache)
示例#6
0
def urlparms(href):
    'turn href into dict with mantra-fields'
    # Mantra uses the following scheme:
    # - url = scheme://usr:pwd@netloc:8050/path;param?query=arg#frag
    #   - parts after path are optional
    #   - param, if present, is always a unique test_id
    #   - qry=arg[;q2=arg2,..], if any, is meaningful only to app_<path>
    #   - frag, if any, is a single fragment, meaningful only to app_<path>
    # - examples:
    #   - /compile;test_id
    #   - /run;test_id?q=<nr>
    # - parsed.query := dict, repeated <param>=arg collapse into last one seen
    href = href if href else '/'
    log.debug('href %s', href)
    parsed = urllib.parse.urlparse(href)
    nav = {
        'href': href,
        'scheme': parsed.scheme,
        'netloc': parsed.netloc,
        'path': parsed.path if parsed.path else '/',
        'param': parsed.params if parsed.params else '',
        'query': dict(urllib.parse.parse_qs(parsed.query)),
        'fragments': parsed.fragment,
        'username': parsed.username,
        'password': parsed.password,
        'hostname': parsed.hostname,
        'port': parsed.port,
    }

    # mantra specifics
    test_id = parsed.params if parsed.params else ''

    nav['page_id'] = parsed.path if parsed.path else '/'
    nav['test_id'] = test_id
    nav['controls'] = utils.get_domid('controls', parsed.path)
    nav['vars'] = utils.get_domid('vars', parsed.path)
    # log.debug('nav %s', nav)
    urlnav = utils.UrlNav(href, dict(urllib.parse.parse_qs(parsed.query)),
                          parsed.fragment, parsed.path if parsed.path else '/',
                          parsed.params if parsed.params else '',
                          utils.get_domid('controls', parsed.path),
                          utils.get_domid('vars', parsed.path))
    log.debug('%s, page_id %s', href, urlnav.page_id)
    return urlnav
示例#7
0
def progress(intervals, nav, progress):
    'display compiler log file periodically'
    nav = utils.UrlNav(*json.loads(nav))
    if nav.test_id is None:
        return html.Div('No Compile target: {}?'.format(nav.test_id))
    c = qparse.Compiler(nav.test_id)
    if not c.running and intervals == 0:
        log.debug('Starting compiler for %s', nav.test_id)
        c.start(nav, cfg)  # first time around, start compiler
        time.sleep(1)  # give thread chance to start

    if c.running:
        log.debug('[%s] %s running', intervals, c.job)
        try:
            with open(c.logfile, 'r') as fh:
                rv = fh.readlines()
                progress = html.Pre(''.join(rv))
        except OSError:
            log.error('%s not found/readable', c.logfile)
            return html.Div('error reading compiler log file %s' % c.logfile)

    return html.Div(children=[progress])