Example #1
0
def _wnd_filter(wlist, single=False, negative=False, none=False, number=None, attributes={}, _assert=False, attr_dict=None):
    """
        Wnd Filter | <list> | params and attributes

    Filters windows from a list by attributes.

    :return List (or a single window if "single" is given).
    """
    li = list(wlist)
    attr_filters = attributes.get('wait', [])

    for attr, params in attr_filters:
        li = [item for item in li if attr_dict.action(item, attr, 'wait', params)]

    if negative:
        li = filter(lambda v: v not in li, wlist)

    ok, res, msg = result_modifier(li, src_list=wlist, none=none, single=single, number=number)
    #logging.warning("FILTERING: %s" % repr((ok, res, msg, wlist)))
    if ok:
        return res
    if _assert:
        raise IronbotException('Wnd Filter failed: %s' % msg)

    logging.warning('Wnd Filter failed: %s' % msg)

    return res
Example #2
0
def proc_filter(pli, none=False, number=None, single=False, _assert=False, negative=False, attributes={}, attr_dict=None):
    """
    Proc Filter | <list> | named params & attributes

    Filters a process list using attributes. The only action is "wait" (defaut).

    :return: A list of processes or False (e.g. in case of "none" flag) if "single" flag is not specified.
             A single process object or False otherwise.
             If "assert" flag is present, False is never returned, the keyword fails instead.
    """


    li = list(pli)
    attr_filters = attributes.get('wait', [])
    for attr, params in attr_filters:
        li = [item for item in li if attr_dict.action(item, attr, 'wait', params)]

    if negative:
        li = filter(lambda v: v not in li, pli)
    ok, li, msg = result_modifier(li, none=none, single=single, number=number)

    if not isinstance(pli, list) and isinstance(li, list):
        if len(li):
            li = li[0]
        else:
            li = None

    if not ok:
        if _assert:
            logging.error('Proc Filter failed: %s' % msg)
            raise IronbotException('Proc Filter failed: %s' % msg)
        logging.warning('Proc Filter failed: %s' % msg)

    return li
Example #3
0
def ctl_get(c_type, parent=None, src_li=None, timeout=Delay('0s'), number=None, negative=False, single=False, none=False, _assert=False, index=None, attributes={}, attr_dict=None):
    ct = CONTROL_TYPES.get(c_type)
    if ct:
        criteria = SearchCriteria.ByControlType(CONTROL_TYPES.get(c_type))
    else:
        criteria = SearchCriteria.All
    attr_filters = attributes.get('wait', [])
    for _ in waiting_iterator(timeout):
        if parent:
            #logging.warning(repr(parent) + repr(dir(parent)))

            if isinstance(parent, list):
                raise IronbotException("Ctl Get: 'parent' should contain a single window, not a list (check if there is a 'single' or 'index' parameter when searching for that window).")
            mult = parent.GetMultiple(criteria)
            li = [elem for elem in mult]
        elif src_li:
            li = list(src_li)

        for attr, params in attr_filters:
            li = [item for item in li if attr_dict.action(item, attr, 'wait', params)]

        if negative:
            li = filter(lambda v: v not in li, src_li)

        ok, res, msg = result_modifier(li, src_list=src_li, single=single, none=none, number=number, index=index)
        if ok:
            return res
    if _assert:
        logging.error('Ctl Get failed: %s' % msg)
        raise IronbotException('Ctl Get failed: %s' % msg)
    logging.warning('Ctl Get failed: %s' % msg)
    return res
Example #4
0
def ctl_get(c_type, parent=None, src_li=None, timeout=Delay('0s'), number=None, negative=False, single=False, none=False, _assert=False, index=None, attributes={}, attr_dict=None):
    """
    Ctl Get | <c_type> [| <parent>/<src_li> ] | attributes & paramsa
    :param c_type: control type name (all, button, edit, menu, list, listitem, radio, radiobutton,
            checkbox, tab, tree, treenode, toolbar)
    :param parent: an optional named parameter, parent window. Incompatible with src_li
    :param src_li: an optional named parameter, a list of controls to filter.
    :param negative: inverts filtering
    :return:
    """
    ct = CONTROL_TYPES.get(c_type)
    if ct:
        criteria = SearchCriteria.ByControlType(CONTROL_TYPES.get(c_type))
    else:
        criteria = SearchCriteria.All
    attr_filters = attributes.get('wait', [])
    for _ in waiting_iterator(timeout):
        if parent:
            #logging.warning(repr(parent) + repr(dir(parent)))

            if isinstance(parent, list):
                raise IronbotException("Ctl Get: 'parent' should contain a single window, not a list (check if there is a 'single' or 'index' parameter when searching for that window).")
            mult = parent.GetMultiple(criteria)
            li = [elem for elem in mult]
        elif src_li:
            li = list(src_li)

        for attr, params in attr_filters:
            li = [item for item in li if attr_dict.action(item, attr, 'wait', params)]

        if negative:
            li = filter(lambda v: v not in li, src_li)

        ok, res, msg = result_modifier(li, src_list=src_li, single=single, none=none, number=number, index=index)
        if ok:
            return res
    if _assert:
        logging.error('Ctl Get failed: %s' % msg)
        raise IronbotException('Ctl Get failed: %s' % msg)
    logging.warning('Ctl Get failed: %s' % msg)
    return res
Example #5
0
def app_state(app, running=True, timeout=Delay('0s'), any=False, all=False, single=False, none=False, _assert=False, number=None):
    """
    App State | <app> | params
    :param app: required, positional -- an application object;
    :param running: an optional flag -- the result is True if the app is running;
    :param not_running: an optional flag -- the result is True if the app is not running;
    :param kill: an optional flag -- same as not_running plus kills the app after waiting;
    :param assert: an optional flag -- fail keyword on failure;
    :param timeout: optional, followed by a delay value, e.g. *10s -- wait for the desired state.
    :return: True if the app state at the end of waiting is as desired, otherwise False
    """
    src_app = app
    if not isinstance(src_app, list):
        app = [app]

    kill = running is None
    running = bool(running)

    prefer_bool = all or any or single or none or not isinstance(src_app, list)

    for _ in waiting_iterator(timeout):
        res_list = []
        for a in app:
            res_list.append(bool(a.HasExited) != bool(running))
        ok, res, msg = result_modifier(res_list, src_list=src_app, any=any, all=all, single=single, none=none, number=number, prefer_bool=prefer_bool)
        if ok:
            break

    if kill:
        for a in app:
            if not a.HasExited:
                logging.warning('Killing an application')
                a.Dispose()
    if ok:
        return res
    if _assert:
        logging.error('App State failed: %s' % msg)
        raise IronbotTimeoutException('App State failed: %s' % msg)
    logging.warning('App State failed: %s' % msg)
    return res
Example #6
0
def proc_filter(pli, none=False, number=None, single=False, _assert=False, negative=False, attributes={}, attr_dict=None):
    li = list(pli)
    attr_filters = attributes.get('wait', [])
    for attr, params in attr_filters:
        li = [item for item in li if attr_dict.action(item, attr, 'wait', params)]

    if negative:
        li = filter(lambda v: v not in li, pli)
    ok, li, msg = result_modifier(li, none=none, single=single, number=number)

    if not isinstance(pli, list) and isinstance(li, list):
        if len(li):
            li = li[0]
        else:
            li = None

    if not ok:
        if _assert:
            logging.error('Proc Filter failed: %s' % msg)
            raise IronbotException('Proc Filter failed: %s' % msg)
        logging.warning('Proc Filter failed: %s' % msg)

    return li