vigiboard / vigiboard / controllers / plugins / state.py @ c94dc931
History | View | Annotate | Download (2 KB)
1 | ce8fee78 | Francois POIROTTE | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | # vim:set expandtab tabstop=4 shiftwidth=4:
|
||
3 | c94dc931 | Francois POIROTTE | # Copyright (C) 2007-2020 CS-SI
|
4 | 9b8d9497 | Francois POIROTTE | # License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
5 | ce8fee78 | Francois POIROTTE | |
6 | """
|
||
7 | Un plugin pour VigiBoard qui ajoute une colonne avec l'état de l'alerte.
|
||
8 | """
|
||
9 | import urllib |
||
10 | import tg |
||
11 | import tw.forms as twf |
||
12 | 02c4a1e7 | Francois POIROTTE | from tg.i18n import lazy_ugettext as l_ |
13 | ce8fee78 | Francois POIROTTE | |
14 | from vigilo.models.tables import CorrEvent, Event, StateName |
||
15 | from vigilo.models.session import DBSession |
||
16 | from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS |
||
17 | |||
18 | class PluginState(VigiboardRequestPlugin): |
||
19 | """
|
||
20 | Ajoute des colonnes permettant de voir le statut d'acquittement
|
||
21 | d'un événement corrélé et de modifier certaines de ses propriétés.
|
||
22 | """
|
||
23 | |||
24 | def get_search_fields(self): |
||
25 | states = DBSession.query(StateName.idstatename, StateName.statename |
||
26 | ).order_by(StateName.order.asc()).all() |
||
27 | options = [('', u'')] + \ |
||
28 | [( str(s.idstatename), s.statename ) for s in states] |
||
29 | return [
|
||
30 | twf.SingleSelectField( |
||
31 | 'state',
|
||
32 | label_text=l_('Current state'),
|
||
33 | options=options, |
||
34 | validator=twf.validators.OneOf( |
||
35 | dict(options).keys(),
|
||
36 | if_invalid=None,
|
||
37 | if_missing=None,
|
||
38 | ), |
||
39 | ), |
||
40 | ] |
||
41 | |||
42 | def handle_search_fields(self, query, search, state, subqueries): |
||
43 | if state != ITEMS:
|
||
44 | return
|
||
45 | |||
46 | if search.get('state'): |
||
47 | try:
|
||
48 | query.add_filter(Event.current_state == int(search['state'])) |
||
49 | except (ValueError, TypeError): |
||
50 | # On ignore silencieusement le critère de recherche erroné.
|
||
51 | pass
|
||
52 | |||
53 | def get_data(self, event): |
||
54 | cause = event[0].cause
|
||
55 | state = StateName.value_to_statename(cause.current_state) |
||
56 | return {'state': state} |
||
57 | |||
58 | def get_sort_criterion(self, query, column): |
||
59 | 0921ffe3 | Francois POIROTTE | if column == 'state': |
60 | return Event.current_state
|
||
61 | return None |