Skip to content

Commit

Permalink
Replace host field by Qt.UserRole for events Items
Browse files Browse the repository at this point in the history
Ref #278
  • Loading branch information
algorys committed Mar 22, 2018
1 parent afaa2dc commit 9211c29
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 32 deletions.
21 changes: 9 additions & 12 deletions alignak_app/qobjects/events/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,11 @@ def send_datamanager_events(self):
event['event_type'],
event['message'],
timer=False,
spied_on=True,
host=event['host']
)

# pylint: disable=too-many-arguments
def add_event(self, event_type, msg, timer=False, spied_on=False, host=None):
def add_event(self, event_type, msg, timer=False, host=None):
"""
Add event to events list
Expand All @@ -108,18 +107,17 @@ def add_event(self, event_type, msg, timer=False, spied_on=False, host=None):
:param msg: message of event
:type msg: str
:param timer: timer to hide event at end of time
:param spied_on: make event spy able
:type spied_on: bool
:type timer: bool
:param host: data of host. Only necessary if "be_spied" is True
:type host: None | str
"""

if not self.event_exist(msg):
logger.debug(
'Add Event: msg: %s, timer: %s, spied_on: %s, host: %s', msg, timer, spied_on, host
'Add Event: msg: %s, timer: %s, host: %s', msg, timer, host
)
event = EventItem()
event.initialize(event_type, msg, timer=timer, spied_on=spied_on, host=host)
event.initialize(event_type, msg, timer=timer, host=host)

self.events_list.insertItem(0, event)
if timer:
Expand Down Expand Up @@ -148,7 +146,7 @@ def event_exist(self, msg):

for i in range(0, self.events_list.count()):
if self.events_list.item(i).data(Qt.DisplayRole) == msg:
if self.events_list.item(i).spied_on:
if self.events_list.item(i).data(Qt.UserRole):
item = self.events_list.takeItem(i)
msg_to_send = '%s. (Send at %s)' % (msg, get_current_time())
item.setToolTip(msg_to_send)
Expand Down Expand Up @@ -211,10 +209,10 @@ def get_events_widget():
return events_widget


def send_event(event_type, msg, timer=False, spied_on=False, host=None):
def send_event(event_type, msg, timer=False, host=None):
"""
Add event to Events QWidget (access function to make event sendable in whole application. Event
type define icon and color of :class:`EventItem <alignak_app.qobjects.events.item.EventItem>`.
type define icon color of :class:`EventItem <alignak_app.qobjects.events.item.EventItem>`.
* **green**: [``OK``, ``UP``]
* **blue**: [``UNKNOWN``, ``INFO``, ``SPY``]
Expand All @@ -228,10 +226,9 @@ def send_event(event_type, msg, timer=False, spied_on=False, host=None):
:param msg: message of event
:type msg: str
:param timer: timer to hide event at end of time
:param spied_on: make event spy able
:type spied_on: bool
:type timer: bool
:param host: _id of host. Only necessary if "spied_on" is True
:type host: None | str
"""

events_widget.add_event(event_type, msg, timer=timer, spied_on=spied_on, host=host)
events_widget.add_event(event_type, msg, timer=timer, host=host)
17 changes: 8 additions & 9 deletions alignak_app/qobjects/events/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
Event item manage creation of ``QListWidgetItem`` for events
"""

from PyQt5.Qt import QTimer, QListWidgetItem, QIcon
from PyQt5.Qt import QTimer, QListWidgetItem, QIcon, Qt

from alignak_app.utils.config import settings
from alignak_app.utils.time import get_current_time
Expand All @@ -39,11 +39,10 @@ class EventItem(QListWidgetItem):
def __init__(self):
super(EventItem, self).__init__()
self.timer = None
self.spied_on = False
self.host = ''
self.host = None

# pylint: disable=too-many-arguments
def initialize(self, event_type, msg, timer=False, spied_on=False, host=None):
def initialize(self, event_type, msg, timer=False, host=None):
"""
Initialize QListWidgetItem
Expand All @@ -52,23 +51,23 @@ def initialize(self, event_type, msg, timer=False, spied_on=False, host=None):
:param msg: message of event
:type msg: str
:param timer: timer to hide event at end of time
:param spied_on: make event spy able
:type spied_on: bool
:type timer: bool
:param host: _id of host. Only necessary if "be_spied" is True
:type host: None | str
"""

self.spied_on = spied_on
self.host = host
if host:
self.setData(Qt.UserRole, host)

if timer:
self.timer = QTimer()

self.setText("%s" % msg)
self.setData(Qt.DisplayRole, "%s" % msg)
msg_to_send = '%s. (Send at %s)' % (msg, get_current_time())
self.setToolTip(msg_to_send)

self.setIcon(
self.setData(Qt.DecorationRole,
QIcon(
settings.get_image(self.get_icon(event_type))
)
Expand Down
20 changes: 11 additions & 9 deletions alignak_app/qobjects/events/spy.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ def add_spy_host(self, host_id):
item = EventItem()
item.initialize(
'SPY',
_('Host %s is spied by Alignak-app !') % host.name.capitalize()
_('Host %s is spied by Alignak-app !') % host.name.capitalize(),
host=host.item_id
)
item.host = host.item_id
self.insertItem(0, item)

logger.info('Spy a new host: %s', host.name)
Expand All @@ -86,15 +86,17 @@ def add_spy_host(self, host_id):
def dragMoveEvent(self, event): # pragma: no cover - not testable
"""
Override dragMoveEvent.
Only accept EventItem() objects who are "spied_on" and not already spied
Only accept EventItem() objects who have a ``Qt.UserRole`` and not already in "spied_hosts"
:param event: event triggered when something move
"""

if isinstance(event.source().currentItem(), EventItem):
if event.source().currentItem().spied_on and \
(event.source().currentItem().host not in self.spied_hosts):
event.accept()
if event.source().currentItem().data(Qt.UserRole):
if event.source().currentItem().data(Qt.UserRole) not in self.spied_hosts:
event.accept()
else:
event.ignore()
else:
event.ignore()
else:
Expand All @@ -108,7 +110,7 @@ def dropEvent(self, event): # pragma: no cover - not testable
:param event: event triggered when something is dropped
"""

self.add_spy_host(event.source().currentItem().host)
self.add_spy_host(event.source().currentItem().data(Qt.UserRole))

# Remove the item dropped and original, to let only new one created
row = self.row(event.source().currentItem())
Expand Down Expand Up @@ -183,7 +185,6 @@ def send_spy_events(self):
msg_and_event_type['event_type'],
msg_and_event_type['message'],
timer=False,
spied_on=True,
host=host_and_services['host'].item_id
)

Expand All @@ -194,7 +195,8 @@ def remove_event(self):
"""

item = self.spy_list_widget.currentItem()
self.spy_list_widget.spied_hosts.remove(item.host)
print(item.data(Qt.UserRole))
self.spy_list_widget.spied_hosts.remove(item.data(Qt.UserRole))
self.spy_list_widget.takeItem(self.spy_list_widget.currentRow())

self.update_parent_spytab()
Expand Down
5 changes: 3 additions & 2 deletions alignak_app/qobjects/panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,8 @@ def dragMoveEvent(self, event): # pragma: no cover
"""

if isinstance(event.source().currentItem(), EventItem):
if event.source().currentItem().spied_on:
# TODO see if isinstance item Host
if event.source().currentItem().data(Qt.UserRole):
event.accept()
else:
event.ignore()
Expand All @@ -341,7 +342,7 @@ def dropEvent(self, event): # pragma: no cover
:param event: event triggered when something is dropped
"""

host = data_manager.get_item('host', '_id', event.source().currentItem().host)
host = data_manager.get_item('host', '_id', event.source().currentItem().data(Qt.UserRole))

logger.debug('Drag and drop host in Panel: %s', host.name)
logger.debug('... with current item: %s', event.source().currentItem())
Expand Down

0 comments on commit 9211c29

Please sign in to comment.