Revision 35cea70e
Correction Bug + Contrôle Pylint
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@291 b22e2e97-25c9-44ff-b637-2e5ceca36478
buildout.cfg | ||
---|---|---|
1 |
[buildout] |
|
2 |
extends = buildenv/buildout-base.cfg buildenv/distrib/mes-5.cfg |
|
3 |
parts += turbogears vigiboard |
|
4 |
develop += . |
|
5 |
eggs += vigiboard |
|
6 |
|
|
7 |
[vigiboard] |
|
8 |
recipe = zc.recipe.egg |
|
9 |
eggs = ${buildout:eggs} |
|
10 |
interpreter = python |
development.ini | ||
---|---|---|
36 | 36 |
# DB - sqlite fails, not postgresql ready, use mysql for now |
37 | 37 |
#sqlalchemy.url = sqlite:///%(here)s/devdata.db |
38 | 38 |
#sqlalchemy.url=mysql://vigiboard:penmdor@localhost/vigiboard |
39 |
sqlalchemy.url=postgres://vigiboard@localhost/vigiboard |
|
40 |
#sqlalchemy.url=mysql://root:tandreja@localhost:3306/vigiboard
|
|
39 |
#sqlalchemy.url=postgres://vigiboard@localhost/vigiboard
|
|
40 |
sqlalchemy.url=mysql://root:tandreja@localhost:3306/vigiboard |
|
41 | 41 |
#echo shouldn't be used together with the logging module. |
42 | 42 |
sqlalchemy.echo = false |
43 | 43 |
sqlalchemy.echo_pool = false |
pylint_vigiboard.py | ||
---|---|---|
28 | 28 |
|
29 | 29 |
# A list of messages that should not be printed by pylint. |
30 | 30 |
SUPRESSED_MESSAGES = [ |
31 |
'I0011', # Used when an inline option disable a message or a messages
|
|
32 |
'F0401', # category.
|
|
31 |
# 'I0011', # Used when an inline option disable a message or a messages category
|
|
32 |
'F0401', # Used when pylint has been unable to import a module.
|
|
33 | 33 |
# If you decided to globally switch of a certain message instead of doing so |
34 | 34 |
# in file or scope where its generated then you can just uncomment it here. |
35 | 35 |
# Or add it if its not in the list. |
... | ... | |
38 | 38 |
# 'W0232', # Used when a class has no __init__ method, neither its parent |
39 | 39 |
# # classes. |
40 | 40 |
# 'W0401', # Used when `from module import *` is detected. |
41 |
'E0611', # Used when a name cannot be found in a module. |
|
41 | 42 |
# 'W0611', # Used when an imported module or variable is not used. |
42 |
# 'R0201', # Used when a method doesn't use its bound instance, and so could |
|
43 |
# # be written as a function. |
|
44 |
# 'R0801', # Indicates that a set of similar lines has been detected among |
|
45 |
# # multiple file. |
|
43 |
'R0201', # Used when a method doesn't use its bound instance, and so could |
|
44 |
# be written as a function. |
|
45 |
# 'W0102', # Used when a mutable value as list or dictionary is detected in a default |
|
46 |
# value for an argument. |
|
47 |
'W0142', # Used when a function or method is called using *args or **kwargs to |
|
48 |
# dispatch arguments. This doesn't improve readility and should be |
|
49 |
# used with care. |
|
50 |
'R0801', # Indicates that a set of similar lines has been detected among |
|
51 |
# multiple file. |
|
46 | 52 |
] |
47 | 53 |
|
48 | 54 |
PARAMS = [ |
49 |
'--reports=n', '--include-ids=y', '--const-rgx=(([a-z_][a-z0-9_]*)|(__.*__))$', |
|
55 |
#'--reports=n', |
|
56 |
'--include-ids=y', |
|
57 |
'--const-rgx=(([a-z_][a-z0-9_]*)|(__.*__))$', |
|
50 | 58 |
'--disable-msg=%s' % ",".join(SUPRESSED_MESSAGES), |
51 | 59 |
] |
52 | 60 |
PARAMS.extend(FILES) |
vigiboard/controllers/vigiboard_ctl/vigiboard_ctl.py | ||
---|---|---|
3 | 3 |
"""Vigiboard Controller""" |
4 | 4 |
|
5 | 5 |
import tg |
6 |
|
|
6 | 7 |
from tg import expose, flash, require, request, redirect, \ |
7 | 8 |
validate, tmpl_context |
8 | 9 |
|
... | ... | |
15 | 16 |
from vigiboard.lib.base import TGController |
16 | 17 |
from vigiboard.model import DBSession |
17 | 18 |
|
18 |
from vigiboard.model.vigiboard_bdd import * |
|
19 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
|
19 |
from vigiboard.model.vigiboard_bdd import ServiceHautNiveau, HostGroups, \ |
|
20 |
Events, EventHistory |
|
21 |
|
|
20 | 22 |
from repoze.what.predicates import Any, not_anonymous |
21 | 23 |
|
22 | 24 |
from vigiboard.widgets.edit_event import edit_event_status_options |
23 | 25 |
|
24 |
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, \ |
|
25 |
VigiboardRequestPlugin |
|
26 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
|
27 |
from vigiboard.controllers.vigiboard_ctl.vigiboardrequest import \ |
|
28 |
VigiboardRequest, VigiboardRequestPlugin |
|
26 | 29 |
|
27 | 30 |
__all__ = ['VigiboardController'] |
28 | 31 |
|
... | ... | |
137 | 140 |
hist_error = False |
138 | 141 |
) |
139 | 142 |
|
140 |
@validate(validators={'id':validators.Int(not_empty=True)}, |
|
143 |
@validate(validators={'idevent':validators.Int(not_empty=True)},
|
|
141 | 144 |
error_handler=process_form_errors) |
142 | 145 |
@expose('json') |
143 | 146 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
... | ... | |
271 | 274 |
'AAClosed']) |
272 | 275 |
}, error_handler=process_form_errors) |
273 | 276 |
@require(Any(not_anonymous(), msg=_("You need to be authenticated"))) |
274 |
def update(self,*argv,**krgv):
|
|
277 |
def update(self,**krgv): |
|
275 | 278 |
|
276 | 279 |
""" |
277 | 280 |
Mise à jour d'un évènement suivant les arguments passés. |
vigiboard/controllers/vigiboard_ctl/vigiboardrequest.py | ||
---|---|---|
2 | 2 |
# vim:set expandtab tabstop=4 shiftwidth=4: |
3 | 3 |
"""Gestion de la requête, des plugins et de l'affichage du Vigiboard""" |
4 | 4 |
|
5 |
from vigiboard.model.vigiboard_bdd import * |
|
5 |
from vigiboard.model.vigiboard_bdd import Events, Host, Service, \ |
|
6 |
HostGroups, ServiceGroups, EventHistory |
|
6 | 7 |
from tg import tmpl_context, url |
7 | 8 |
from vigiboard.model import DBSession |
8 | 9 |
from sqlalchemy import not_ , and_ , asc , desc |
9 | 10 |
from tw.jquery import JQueryUIDialog |
10 |
from vigiboard.widgets.edit_event import Edit_Event_Form , Search_Form
|
|
11 |
from vigiboard.widgets.edit_event import EditEventForm , SearchForm
|
|
11 | 12 |
from vigiboard.controllers.vigiboard_ctl.userutils import get_user_groups |
12 | 13 |
from pylons.i18n import ugettext as _ |
13 | 14 |
|
... | ... | |
71 | 72 |
""" |
72 | 73 |
for i in argv : |
73 | 74 |
if isinstance(i, VigiboardRequestPlugin): |
74 |
self.add_table(*i.table) |
|
75 |
self.add_join(*i.join) |
|
76 |
self.add_outer_join(*i.outerjoin) |
|
77 |
self.add_filter(*i.filter) |
|
78 |
self.add_group_by(*i.groupby) |
|
79 |
self.add_order_by(*i.orderby) |
|
75 |
if i.table : |
|
76 |
self.add_table(*i.table) |
|
77 |
if i.join : |
|
78 |
self.add_join(*i.join) |
|
79 |
if i.outerjoin : |
|
80 |
self.add_outer_join(*i.outerjoin) |
|
81 |
if i.filter : |
|
82 |
self.add_filter(*i.filter) |
|
83 |
if i.groupby : |
|
84 |
self.add_group_by(*i.groupby) |
|
85 |
if i.orderby : |
|
86 |
self.add_order_by(*i.orderby) |
|
80 | 87 |
self.plugin.append(i) |
81 | 88 |
|
82 | 89 |
def generate_request(self): |
... | ... | |
396 | 403 |
""" |
397 | 404 |
|
398 | 405 |
# Dialogue d'édition |
399 |
tmpl_context.edit_event_form = Edit_Event_Form('edit_event_form',
|
|
406 |
tmpl_context.edit_event_form = EditEventForm('edit_event_form',
|
|
400 | 407 |
action=url('/vigiboard/update')) |
401 | 408 |
tmpl_context.edit_eventdialog = JQueryUIDialog(id='Edit_EventsDialog', |
402 | 409 |
autoOpen=False,title=_('Edit Event')) |
403 | 410 |
|
404 | 411 |
# Dialogue de recherche |
405 |
tmpl_context.search_form = Search_Form('search_form',
|
|
412 |
tmpl_context.search_form = SearchForm('search_form', |
|
406 | 413 |
action=url('/vigiboard')) |
407 | 414 |
tmpl_context.searchdialog = JQueryUIDialog(id='SearchDialog', |
408 | 415 |
autoOpen=False,title=_('Search Event')) |
... | ... | |
417 | 424 |
Classe dont les plugins utilisé dans VigiboardRequest doivent étendre. |
418 | 425 |
""" |
419 | 426 |
|
420 |
def __init__ (self, table = [], join = [], outerjoin = [], filter = [], |
|
421 |
groupby = [], orderby = [], name = '', style = {}): |
|
427 |
def __init__ (self, table = None, join = None, outerjoin = None, |
|
428 |
filters = None, groupby = None, orderby = None, name = '', |
|
429 |
style = None): |
|
430 |
|
|
422 | 431 |
self.table = table |
423 | 432 |
self.join = join |
424 | 433 |
self.outerjoin = outerjoin |
425 |
self.filter = filter |
|
434 |
self.filter = filters
|
|
426 | 435 |
self.orderby = orderby |
427 | 436 |
self.name = name |
428 | 437 |
self.groupby = groupby |
vigiboard/templates/vigiboard_event_table.html | ||
---|---|---|
66 | 66 |
|
67 | 67 |
<script type="text/javascript"> |
68 | 68 |
function vigiboard_historydialog(idd) { |
69 |
$.getJSON("${tg.url('/vigiboard/history_dialog')}",{id:idd},function(json){ |
|
69 |
$.getJSON("${tg.url('/vigiboard/history_dialog')}",{idevent:idd},function(json){
|
|
70 | 70 |
$('#HistoryDialog_initial_state').html(json.initial_state); |
71 | 71 |
$('#HistoryDialog_current_state').html(json.current_state); |
72 | 72 |
$('#HistoryDialog_detailed_event').attr('href' , '${tg.url('/vigiboard/event/')}' + json.idevent); |
vigiboard/tests/functional/test_userutils.py | ||
---|---|---|
5 | 5 |
""" |
6 | 6 |
from nose.tools import assert_true |
7 | 7 |
|
8 |
from vigiboard.model import *
|
|
8 |
from vigiboard.model import DBSession, Groups, Permission, GroupPermissions
|
|
9 | 9 |
from vigiboard.tests import TestController |
10 | 10 |
from vigiboard.controllers.vigiboard_ctl import get_user_groups |
11 | 11 |
from vigiboard.tests import setup_db, teardown_db |
... | ... | |
23 | 23 |
teardown_db() |
24 | 24 |
|
25 | 25 |
class TestUserUtils(TestController): |
26 |
"""Test de la classe User Utils""" |
|
26 | 27 |
|
27 | 28 |
def test_get_user_groups(self): |
28 | 29 |
""" |
... | ... | |
34 | 35 |
|
35 | 36 |
DBSession.add(Groups(name="hostmanagers")) |
36 | 37 |
DBSession.add(Groups(name="hosteditors", parent="hostmanagers")) |
37 |
idmanagers = DBSession.query(Permission |
|
38 |
).filter(Permission.permission_name == 'manage')[0].permission_id
|
|
38 |
idmanagers = DBSession.query(Permission).filter(
|
|
39 |
Permission.permission_name == 'manage')[0].permission_id |
|
39 | 40 |
ideditors = DBSession.query(Permission |
40 | 41 |
).filter(Permission.permission_name == 'edit')[0].permission_id |
41 | 42 |
DBSession.add(GroupPermissions(groupname = "hostmanagers", |
vigiboard/tests/functional/test_vigiboardrequest.py | ||
---|---|---|
5 | 5 |
""" |
6 | 6 |
from nose.tools import assert_true |
7 | 7 |
|
8 |
from vigiboard.model import * |
|
8 |
from vigiboard.model import DBSession, Events, EventHistory, Groups, \ |
|
9 |
Permission, GroupPermissions, Host, Service, HostGroups, ServiceGroups |
|
9 | 10 |
from vigiboard.tests import TestController |
10 | 11 |
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, \ |
11 | 12 |
VigiboardRequestPlugin |
... | ... | |
24 | 25 |
teardown_db() |
25 | 26 |
|
26 | 27 |
class TestVigiboardRequest(TestController): |
28 |
"""Test de la classe Vigiboard Request""" |
|
27 | 29 |
|
28 | 30 |
def test_creation_requete(self): |
29 | 31 |
""" |
... | ... | |
36 | 38 |
# les groups et leurs dépendances |
37 | 39 |
DBSession.add(Groups(name="hostmanagers")) |
38 | 40 |
DBSession.add(Groups(name="hosteditors", parent = "hostmanagers")) |
39 |
idmanagers = DBSession.query(Permission |
|
40 |
).filter(Permission.permission_name == 'manage')[0].permission_id
|
|
41 |
idmanagers = DBSession.query(Permission).filter(
|
|
42 |
Permission.permission_name == 'manage')[0].permission_id |
|
41 | 43 |
ideditors = DBSession.query(Permission |
42 | 44 |
).filter(Permission.permission_name == 'edit')[0].permission_id |
43 | 45 |
DBSession.add(GroupPermissions(groupname = "hostmanagers", |
... | ... | |
54 | 56 |
event1 = Events(hostname = "monhost", servicename = "monservice") |
55 | 57 |
event2 = Events(hostname = "monhostuser", servicename = "monservice") |
56 | 58 |
event3 = Events(hostname = "monhost", servicename = "monserviceuser") |
57 |
event4 = Events(hostname = "monhostuser", servicename = "monserviceuser") |
|
59 |
event4 = Events(hostname = "monhostuser", |
|
60 |
servicename = "monserviceuser") |
|
58 | 61 |
|
59 | 62 |
# Les historiques |
60 | 63 |
DBSession.add(event1) |
... | ... | |
121 | 124 |
# le plugin fonctionne correctement |
122 | 125 |
|
123 | 126 |
num_rows = vigi_req.num_rows() |
124 |
assert_true(num_rows == 2, msg = "2 historiques devrait être disponible " +\ |
|
125 |
"pour l'utilisateur 'editor' mais il y en a %d" % num_rows) |
|
127 |
assert_true(num_rows == 2, msg = "2 historiques devrait " +\ |
|
128 |
"être disponible pour l'utilisateur 'editor' mais il " +\ |
|
129 |
"y en a %d" % num_rows) |
|
126 | 130 |
vigi_req.format_events(0, 10) |
127 | 131 |
vigi_req.format_history() |
128 | 132 |
assert_true(len(vigi_req.events) == 1 + 1, |
... | ... | |
148 | 152 |
|
149 | 153 |
num_rows = vigi_req.num_rows() |
150 | 154 |
assert_true(num_rows == 8, |
151 |
msg = "8 historiques devrait être disponible " +\ |
|
152 |
"pour l'utilisateur 'manager' mais il y en a %d" % num_rows)
|
|
155 |
msg = "8 historiques devrait être disponible pour " +\
|
|
156 |
"l'utilisateur 'manager' mais il y en a %d" % num_rows) |
|
153 | 157 |
vigi_req.format_events(0, 10) |
154 | 158 |
vigi_req.format_history() |
155 | 159 |
assert_true(len(vigi_req.events) == 4 + 1, |
vigiboard/tests/models/test_vigiboard.py | ||
---|---|---|
4 | 4 |
|
5 | 5 |
from nose.tools import assert_true |
6 | 6 |
import re |
7 |
from vigiboard.model import * |
|
7 |
from vigiboard.model import DBSession, Host, Service, Events, Graph, \ |
|
8 |
GraphGroups, Groups, ServiceHautNiveau, EventHistory, GraphToGroups, \ |
|
9 |
GroupPermissions, HostGroups, PerfDataSource, ServiceGroups, ServiceTopo |
|
8 | 10 |
from vigiboard.tests.models import ModelTest |
9 | 11 |
|
10 | 12 |
|
... | ... | |
154 | 156 |
|
155 | 157 |
def do_get_dependencies(self): |
156 | 158 |
"""Generate some data for the test""" |
159 |
|
|
157 | 160 |
DBSession.add(Service(name = "monservice")) |
158 | 161 |
DBSession.flush() |
159 | 162 |
return dict(servicename = "monservice", servicename_dep = "monservice") |
... | ... | |
171 | 174 |
attrs = {} |
172 | 175 |
|
173 | 176 |
def do_get_dependencies(self): |
177 |
"""Generate some data for the test""" |
|
178 |
|
|
174 | 179 |
DBSession.add(Service(name = "monservice")) |
175 | 180 |
DBSession.add(ServiceHautNiveau(servicename = "monservice", |
176 | 181 |
servicename_dep = "monservice")) |
vigiboard/widgets/edit_event.py | ||
---|---|---|
12 | 12 |
['AAClosed',_('Change to Closed')] |
13 | 13 |
] |
14 | 14 |
|
15 |
class Edit_Event_Form(TableForm):
|
|
15 |
class EditEventForm(TableForm):
|
|
16 | 16 |
|
17 | 17 |
""" |
18 | 18 |
Formulaire d'édition d'évènement |
... | ... | |
29 | 29 |
|
30 | 30 |
submit_text = _('Apply') |
31 | 31 |
|
32 |
class Search_Form(TableForm):
|
|
32 |
class SearchForm(TableForm): |
|
33 | 33 |
|
34 | 34 |
""" |
35 | 35 |
Formulaire de recherche dans les évènements |
Also available in: Unified diff