Source code for cfme.web_ui.jstimelines

"""
A Timelines object represents the Timelines widget in CFME using JS integration
instead of relying on WebElements

Args:
    loc: A locator for the Timelines element, usually the div with
        id miq_timeline.
"""
import os
import re

import cfme.fixtures.pytest_selenium as sel
from cfme.utils.pretty import Pretty


[docs]class Object(Pretty): """ A generic timelines object. Args: element: A WebElement for the event. """ pretty_attrs = ['element'] def __init__(self, element): self.element = element
[docs] def locate(self): return self.element
[docs]class Event(Object): """ An event object. """ window_loc = '//div[@class="timeline-event-bubble-title"]/../..' close_button = "{}/div[contains(@style, 'close-button')]".format(window_loc) data_block = '{}//div[@class="timeline-event-bubble-body"]'.format(window_loc) @property def image(self): """ Returns the image name of an event. """ icon = self.element['_icon'] return os.path.split(icon)[1]
[docs] def block_info(self): """ Attempts to return a dict with the information from the popup. """ data = {} elem = self.element['_description'].replace("<br />", "\n") elem = elem.replace("<br/>", "\n") elem = re.sub('<.*?>', '', elem) text_elements = elem.split("\n") for line in text_elements: line += " " kv = line.split(": ") if len(kv) == 1: if ':' not in kv[0]: data['title'] = kv[0].strip() else: data[kv[0]] = None else: data[kv[0]] = kv[1].strip() return data
def _list_events(): try: soutput = sel.execute_script('return tl._bands[0]._eventSource._events._events._a') return soutput except sel.WebDriverException: return []
[docs]def find_visible_events_for_vm(vm_name): """ Finds all events for a given vm. Args: vm_name: The vm name. """ events_list = [] for event in events(): info = event.block_info() if info.get('title') == vm_name: events_list.append(event) return events_list
[docs]def events(): """ A generator yielding all events. """ for el in _list_events(): yield Event(el)