playtender_service.py 4.55 KB
from robot.libraries.BuiltIn import BuiltIn
from iso8601 import parse_date


def get_library():
    return BuiltIn().get_library_instance('Selenium2Library')


def get_webdriver_instance():
    return get_library()._current_browser()


# return of variable is None
def get_variable_is_none(variable):
    if variable is None:
        return True
    return False


# check if condition is not none type and run specified keyword
def run_keyword_if_condition_is_not_none(condition, name, *args):
    if get_variable_is_none(condition) == False:
        BuiltIn().run_keyword(name, *args)


# return value for *keys (nested) in `element` (dict).
def get_from_dictionary_by_keys(element, *keys):
    if not isinstance(element, dict):
        raise AttributeError('keys_exists() expects dict as first argument.')
    if len(keys) == 0:
        raise AttributeError('keys_exists() expects at least two arguments, one given.')

    _element = element
    for key in keys:
        try:
            _element = _element[key]
        except KeyError:
            return None
    return _element


# set scroll to element in view
def set_element_scroll_into_view(locator):
    element = get_library()._element_find(locator, None, True)
    get_webdriver_instance().execute_script(
        'var $el = jQuery(arguments[0]); if($el.length) $el.get(0).scrollIntoView();',
        element
    )


# return text from hidden element
def get_invisible_text(locator):
    element = get_library()._element_find(locator, None, True)
    text = get_webdriver_instance().execute_script(
        'return jQuery(arguments[0]).text();',
        element
    )
    return text


# input text to hidden input
def input_text_to_hidden_input(locator, text):
    element = get_library()._element_find(locator, None, True)
    get_webdriver_instance().execute_script(
        'jQuery(arguments[0]).val("' + text.replace('"', '\\"') + '");',
        element
    )


# select option by label for hidden select
def select_from_hidden_list_by_label(locator, label):
    element = get_library()._element_find(locator, None, True)
    get_webdriver_instance().execute_script(
        'var $option = jQuery("option:contains(' + label.replace('"', '\\"') + ')", arguments[0]);' +
        'if($option.length) jQuery(arguments[0]).val($option.attr("value"));',
        element
    )


# trigger change event for input by locator
def trigger_input_change_event(locator):
    element = get_library()._element_find(locator, None, True)
    get_webdriver_instance().execute_script(
        'var $el = jQuery(arguments[0]); if($el.length) $el.trigger("change");',
        element
    )


# convert all numners to string
def convert_float_to_string(number):
    return repr(float(number))


# prepare isodate in needed format
def isodate_format(isodate, format):
    iso_dt = parse_date(isodate)
    return iso_dt.strftime(format)


#Percentage conversion
def multiply_hundred(number):
    return number*100


# prepares data for filling form in easiest way
def prepare_tender_data(data):
    # check if data is for multilot
    if 'lots' not in data:
        return data

    # moves features to its related items
    if 'features' in data:
        for i, feature in enumerate(data['features']):
            if feature['featureOf'] == 'lot':
                for lot in data['lots']:
                    if lot['id'] == feature['relatedItem']:
                        if 'features' not in lot:
                            lot['features'] = []
                        lot['features'].append(data['features'].pop(i))
            if feature['featureOf'] == 'item':
                for item in data['items']:
                    if item['id'] == feature['relatedItem']:
                        if 'features' not in item:
                            item['features'] = []
                        item['features'].append(data['features'].pop(i))

    if len(data['features']) == 0:
        del data['features']

    # moves items to its related lots
    for i, item in enumerate(data['items']):
        for lot in data['lots']:
            if lot['id'] == item['relatedLot']:
                if 'items' not in lot:
                    lot['items'] = []
                lot['items'].append(data['items'].pop(i))

    del data['items']

    # moves milestones to its related lots
    for i, milestone in enumerate(data['milestones']):
        for lot in data['lots']:
            if lot['id'] == milestone['relatedLot']:
                if 'milestones' not in lot:
                    lot['milestones'] = []
                lot['milestones'].append(data['milestones'].pop(i))

    del data['milestones']

    return data