VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/testmanager/webui/wuiadmin.py@ 83415

Last change on this file since 83415 was 83415, checked in by vboxsync, 5 years ago

TestManager/webui: Hooked up the partial database dumper to the WUI so it isn't necessary to have SSH access to the server to get at the data.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 64.6 KB
Line 
1# -*- coding: utf-8 -*-
2# $Id: wuiadmin.py 83415 2020-03-25 16:27:11Z vboxsync $
3
4"""
5Test Manager Core - WUI - Admin Main page.
6"""
7
8__copyright__ = \
9"""
10Copyright (C) 2012-2020 Oracle Corporation
11
12This file is part of VirtualBox Open Source Edition (OSE), as
13available from http://www.virtualbox.org. This file is free software;
14you can redistribute it and/or modify it under the terms of the GNU
15General Public License (GPL) as published by the Free Software
16Foundation, in version 2 as it comes in the "COPYING" file of the
17VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19
20The contents of this file may alternatively be used under the terms
21of the Common Development and Distribution License Version 1.0
22(CDDL) only, as it comes in the "COPYING.CDDL" file of the
23VirtualBox OSE distribution, in which case the provisions of the
24CDDL are applicable instead of those of the GPL.
25
26You may elect to license modified versions of this file under the
27terms and conditions of either the GPL or the CDDL or both.
28"""
29__version__ = "$Revision: 83415 $"
30
31
32# Standard python imports.
33import cgitb;
34import sys;
35
36# Validation Kit imports.
37from common import utils, webutils;
38from testmanager import config;
39from testmanager.webui.wuibase import WuiDispatcherBase, WuiException
40
41
42class WuiAdmin(WuiDispatcherBase):
43 """
44 WUI Admin main page.
45 """
46
47 ## The name of the script.
48 ksScriptName = 'admin.py'
49
50 ## Number of days back.
51 ksParamDaysBack = 'cDaysBack';
52
53 ## @name Actions
54 ## @{
55 ksActionSystemLogList = 'SystemLogList'
56 ksActionSystemChangelogList = 'SystemChangelogList'
57 ksActionSystemDbDump = 'SystemDbDump'
58 ksActionSystemDbDumpDownload = 'SystemDbDumpDownload'
59
60 ksActionUserList = 'UserList'
61 ksActionUserAdd = 'UserAdd'
62 ksActionUserAddPost = 'UserAddPost'
63 ksActionUserEdit = 'UserEdit'
64 ksActionUserEditPost = 'UserEditPost'
65 ksActionUserDelPost = 'UserDelPost'
66 ksActionUserDetails = 'UserDetails'
67
68 ksActionTestBoxList = 'TestBoxList'
69 ksActionTestBoxListPost = 'TestBoxListPost'
70 ksActionTestBoxAdd = 'TestBoxAdd'
71 ksActionTestBoxAddPost = 'TestBoxAddPost'
72 ksActionTestBoxEdit = 'TestBoxEdit'
73 ksActionTestBoxEditPost = 'TestBoxEditPost'
74 ksActionTestBoxDetails = 'TestBoxDetails'
75 ksActionTestBoxRemovePost = 'TestBoxRemove'
76 ksActionTestBoxesRegenQueues = 'TestBoxesRegenQueues';
77
78 ksActionTestCaseList = 'TestCaseList'
79 ksActionTestCaseAdd = 'TestCaseAdd'
80 ksActionTestCaseAddPost = 'TestCaseAddPost'
81 ksActionTestCaseClone = 'TestCaseClone'
82 ksActionTestCaseDetails = 'TestCaseDetails'
83 ksActionTestCaseEdit = 'TestCaseEdit'
84 ksActionTestCaseEditPost = 'TestCaseEditPost'
85 ksActionTestCaseDoRemove = 'TestCaseDoRemove'
86
87 ksActionGlobalRsrcShowAll = 'GlobalRsrcShowAll'
88 ksActionGlobalRsrcShowAdd = 'GlobalRsrcShowAdd'
89 ksActionGlobalRsrcShowEdit = 'GlobalRsrcShowEdit'
90 ksActionGlobalRsrcAdd = 'GlobalRsrcAddPost'
91 ksActionGlobalRsrcEdit = 'GlobalRsrcEditPost'
92 ksActionGlobalRsrcDel = 'GlobalRsrcDelPost'
93
94 ksActionBuildList = 'BuildList'
95 ksActionBuildAdd = 'BuildAdd'
96 ksActionBuildAddPost = 'BuildAddPost'
97 ksActionBuildClone = 'BuildClone'
98 ksActionBuildDetails = 'BuildDetails'
99 ksActionBuildDoRemove = 'BuildDoRemove'
100 ksActionBuildEdit = 'BuildEdit'
101 ksActionBuildEditPost = 'BuildEditPost'
102
103 ksActionBuildBlacklist = 'BuildBlacklist';
104 ksActionBuildBlacklistAdd = 'BuildBlacklistAdd';
105 ksActionBuildBlacklistAddPost = 'BuildBlacklistAddPost';
106 ksActionBuildBlacklistClone = 'BuildBlacklistClone';
107 ksActionBuildBlacklistDetails = 'BuildBlacklistDetails';
108 ksActionBuildBlacklistDoRemove = 'BuildBlacklistDoRemove';
109 ksActionBuildBlacklistEdit = 'BuildBlacklistEdit';
110 ksActionBuildBlacklistEditPost = 'BuildBlacklistEditPost';
111
112 ksActionFailureCategoryList = 'FailureCategoryList';
113 ksActionFailureCategoryAdd = 'FailureCategoryAdd';
114 ksActionFailureCategoryAddPost = 'FailureCategoryAddPost';
115 ksActionFailureCategoryDetails = 'FailureCategoryDetails';
116 ksActionFailureCategoryDoRemove = 'FailureCategoryDoRemove';
117 ksActionFailureCategoryEdit = 'FailureCategoryEdit';
118 ksActionFailureCategoryEditPost = 'FailureCategoryEditPost';
119
120 ksActionFailureReasonList = 'FailureReasonList'
121 ksActionFailureReasonAdd = 'FailureReasonAdd'
122 ksActionFailureReasonAddPost = 'FailureReasonAddPost'
123 ksActionFailureReasonDetails = 'FailureReasonDetails'
124 ksActionFailureReasonDoRemove = 'FailureReasonDoRemove'
125 ksActionFailureReasonEdit = 'FailureReasonEdit'
126 ksActionFailureReasonEditPost = 'FailureReasonEditPost'
127
128 ksActionBuildSrcList = 'BuildSrcList'
129 ksActionBuildSrcAdd = 'BuildSrcAdd'
130 ksActionBuildSrcAddPost = 'BuildSrcAddPost'
131 ksActionBuildSrcClone = 'BuildSrcClone'
132 ksActionBuildSrcDetails = 'BuildSrcDetails'
133 ksActionBuildSrcEdit = 'BuildSrcEdit'
134 ksActionBuildSrcEditPost = 'BuildSrcEditPost'
135 ksActionBuildSrcDoRemove = 'BuildSrcDoRemove'
136
137 ksActionBuildCategoryList = 'BuildCategoryList'
138 ksActionBuildCategoryAdd = 'BuildCategoryAdd'
139 ksActionBuildCategoryAddPost = 'BuildCategoryAddPost'
140 ksActionBuildCategoryClone = 'BuildCategoryClone';
141 ksActionBuildCategoryDetails = 'BuildCategoryDetails';
142 ksActionBuildCategoryDoRemove = 'BuildCategoryDoRemove';
143
144 ksActionTestGroupList = 'TestGroupList'
145 ksActionTestGroupAdd = 'TestGroupAdd'
146 ksActionTestGroupAddPost = 'TestGroupAddPost'
147 ksActionTestGroupClone = 'TestGroupClone'
148 ksActionTestGroupDetails = 'TestGroupDetails'
149 ksActionTestGroupDoRemove = 'TestGroupDoRemove'
150 ksActionTestGroupEdit = 'TestGroupEdit'
151 ksActionTestGroupEditPost = 'TestGroupEditPost'
152 ksActionTestCfgRegenQueues = 'TestCfgRegenQueues'
153
154 ksActionSchedGroupList = 'SchedGroupList'
155 ksActionSchedGroupAdd = 'SchedGroupAdd';
156 ksActionSchedGroupAddPost = 'SchedGroupAddPost';
157 ksActionSchedGroupClone = 'SchedGroupClone';
158 ksActionSchedGroupDetails = 'SchedGroupDetails';
159 ksActionSchedGroupDoRemove = 'SchedGroupDel';
160 ksActionSchedGroupEdit = 'SchedGroupEdit';
161 ksActionSchedGroupEditPost = 'SchedGroupEditPost';
162 ksActionSchedQueueList = 'SchedQueueList';
163 ## @}
164
165 def __init__(self, oSrvGlue): # pylint: disable=too-many-locals,too-many-statements
166 WuiDispatcherBase.__init__(self, oSrvGlue, self.ksScriptName);
167 self._sTemplate = 'template.html';
168
169
170 #
171 # System actions.
172 #
173 self._dDispatch[self.ksActionSystemChangelogList] = self._actionSystemChangelogList;
174 self._dDispatch[self.ksActionSystemLogList] = self._actionSystemLogList;
175 self._dDispatch[self.ksActionSystemDbDump] = self._actionSystemDbDump;
176 self._dDispatch[self.ksActionSystemDbDumpDownload] = self._actionSystemDbDumpDownload;
177
178 #
179 # User Account actions.
180 #
181 self._dDispatch[self.ksActionUserList] = self._actionUserList;
182 self._dDispatch[self.ksActionUserAdd] = self._actionUserAdd;
183 self._dDispatch[self.ksActionUserEdit] = self._actionUserEdit;
184 self._dDispatch[self.ksActionUserAddPost] = self._actionUserAddPost;
185 self._dDispatch[self.ksActionUserEditPost] = self._actionUserEditPost;
186 self._dDispatch[self.ksActionUserDetails] = self._actionUserDetails;
187 self._dDispatch[self.ksActionUserDelPost] = self._actionUserDelPost;
188
189 #
190 # TestBox actions.
191 #
192 self._dDispatch[self.ksActionTestBoxList] = self._actionTestBoxList;
193 self._dDispatch[self.ksActionTestBoxListPost] = self._actionTestBoxListPost;
194 self._dDispatch[self.ksActionTestBoxAdd] = self._actionTestBoxAdd;
195 self._dDispatch[self.ksActionTestBoxAddPost] = self._actionTestBoxAddPost;
196 self._dDispatch[self.ksActionTestBoxDetails] = self._actionTestBoxDetails;
197 self._dDispatch[self.ksActionTestBoxEdit] = self._actionTestBoxEdit;
198 self._dDispatch[self.ksActionTestBoxEditPost] = self._actionTestBoxEditPost;
199 self._dDispatch[self.ksActionTestBoxRemovePost] = self._actionTestBoxRemovePost;
200 self._dDispatch[self.ksActionTestBoxesRegenQueues] = self._actionRegenQueuesCommon;
201
202 #
203 # Test Case actions.
204 #
205 self._dDispatch[self.ksActionTestCaseList] = self._actionTestCaseList;
206 self._dDispatch[self.ksActionTestCaseAdd] = self._actionTestCaseAdd;
207 self._dDispatch[self.ksActionTestCaseAddPost] = self._actionTestCaseAddPost;
208 self._dDispatch[self.ksActionTestCaseClone] = self._actionTestCaseClone;
209 self._dDispatch[self.ksActionTestCaseDetails] = self._actionTestCaseDetails;
210 self._dDispatch[self.ksActionTestCaseEdit] = self._actionTestCaseEdit;
211 self._dDispatch[self.ksActionTestCaseEditPost] = self._actionTestCaseEditPost;
212 self._dDispatch[self.ksActionTestCaseDoRemove] = self._actionTestCaseDoRemove;
213
214 #
215 # Global Resource actions
216 #
217 self._dDispatch[self.ksActionGlobalRsrcShowAll] = self._actionGlobalRsrcShowAll;
218 self._dDispatch[self.ksActionGlobalRsrcShowAdd] = self._actionGlobalRsrcShowAdd;
219 self._dDispatch[self.ksActionGlobalRsrcShowEdit] = self._actionGlobalRsrcShowEdit;
220 self._dDispatch[self.ksActionGlobalRsrcAdd] = self._actionGlobalRsrcAdd;
221 self._dDispatch[self.ksActionGlobalRsrcEdit] = self._actionGlobalRsrcEdit;
222 self._dDispatch[self.ksActionGlobalRsrcDel] = self._actionGlobalRsrcDel;
223
224 #
225 # Build Source actions
226 #
227 self._dDispatch[self.ksActionBuildSrcList] = self._actionBuildSrcList;
228 self._dDispatch[self.ksActionBuildSrcAdd] = self._actionBuildSrcAdd;
229 self._dDispatch[self.ksActionBuildSrcAddPost] = self._actionBuildSrcAddPost;
230 self._dDispatch[self.ksActionBuildSrcClone] = self._actionBuildSrcClone;
231 self._dDispatch[self.ksActionBuildSrcDetails] = self._actionBuildSrcDetails;
232 self._dDispatch[self.ksActionBuildSrcDoRemove] = self._actionBuildSrcDoRemove;
233 self._dDispatch[self.ksActionBuildSrcEdit] = self._actionBuildSrcEdit;
234 self._dDispatch[self.ksActionBuildSrcEditPost] = self._actionBuildSrcEditPost;
235
236 #
237 # Build actions
238 #
239 self._dDispatch[self.ksActionBuildList] = self._actionBuildList;
240 self._dDispatch[self.ksActionBuildAdd] = self._actionBuildAdd;
241 self._dDispatch[self.ksActionBuildAddPost] = self._actionBuildAddPost;
242 self._dDispatch[self.ksActionBuildClone] = self._actionBuildClone;
243 self._dDispatch[self.ksActionBuildDetails] = self._actionBuildDetails;
244 self._dDispatch[self.ksActionBuildDoRemove] = self._actionBuildDoRemove;
245 self._dDispatch[self.ksActionBuildEdit] = self._actionBuildEdit;
246 self._dDispatch[self.ksActionBuildEditPost] = self._actionBuildEditPost;
247
248 #
249 # Build Black List actions
250 #
251 self._dDispatch[self.ksActionBuildBlacklist] = self._actionBuildBlacklist;
252 self._dDispatch[self.ksActionBuildBlacklistAdd] = self._actionBuildBlacklistAdd;
253 self._dDispatch[self.ksActionBuildBlacklistAddPost] = self._actionBuildBlacklistAddPost;
254 self._dDispatch[self.ksActionBuildBlacklistClone] = self._actionBuildBlacklistClone;
255 self._dDispatch[self.ksActionBuildBlacklistDetails] = self._actionBuildBlacklistDetails;
256 self._dDispatch[self.ksActionBuildBlacklistDoRemove] = self._actionBuildBlacklistDoRemove;
257 self._dDispatch[self.ksActionBuildBlacklistEdit] = self._actionBuildBlacklistEdit;
258 self._dDispatch[self.ksActionBuildBlacklistEditPost] = self._actionBuildBlacklistEditPost;
259
260 #
261 # Failure Category actions
262 #
263 self._dDispatch[self.ksActionFailureCategoryList] = self._actionFailureCategoryList;
264 self._dDispatch[self.ksActionFailureCategoryAdd] = self._actionFailureCategoryAdd;
265 self._dDispatch[self.ksActionFailureCategoryAddPost] = self._actionFailureCategoryAddPost;
266 self._dDispatch[self.ksActionFailureCategoryDetails] = self._actionFailureCategoryDetails;
267 self._dDispatch[self.ksActionFailureCategoryDoRemove] = self._actionFailureCategoryDoRemove;
268 self._dDispatch[self.ksActionFailureCategoryEdit] = self._actionFailureCategoryEdit;
269 self._dDispatch[self.ksActionFailureCategoryEditPost] = self._actionFailureCategoryEditPost;
270
271 #
272 # Failure Reason actions
273 #
274 self._dDispatch[self.ksActionFailureReasonList] = self._actionFailureReasonList;
275 self._dDispatch[self.ksActionFailureReasonAdd] = self._actionFailureReasonAdd;
276 self._dDispatch[self.ksActionFailureReasonAddPost] = self._actionFailureReasonAddPost;
277 self._dDispatch[self.ksActionFailureReasonDetails] = self._actionFailureReasonDetails;
278 self._dDispatch[self.ksActionFailureReasonDoRemove] = self._actionFailureReasonDoRemove;
279 self._dDispatch[self.ksActionFailureReasonEdit] = self._actionFailureReasonEdit;
280 self._dDispatch[self.ksActionFailureReasonEditPost] = self._actionFailureReasonEditPost;
281
282 #
283 # Build Category actions
284 #
285 self._dDispatch[self.ksActionBuildCategoryList] = self._actionBuildCategoryList;
286 self._dDispatch[self.ksActionBuildCategoryAdd] = self._actionBuildCategoryAdd;
287 self._dDispatch[self.ksActionBuildCategoryAddPost] = self._actionBuildCategoryAddPost;
288 self._dDispatch[self.ksActionBuildCategoryClone] = self._actionBuildCategoryClone;
289 self._dDispatch[self.ksActionBuildCategoryDetails] = self._actionBuildCategoryDetails;
290 self._dDispatch[self.ksActionBuildCategoryDoRemove] = self._actionBuildCategoryDoRemove;
291
292 #
293 # Test Group actions
294 #
295 self._dDispatch[self.ksActionTestGroupList] = self._actionTestGroupList;
296 self._dDispatch[self.ksActionTestGroupAdd] = self._actionTestGroupAdd;
297 self._dDispatch[self.ksActionTestGroupAddPost] = self._actionTestGroupAddPost;
298 self._dDispatch[self.ksActionTestGroupClone] = self._actionTestGroupClone;
299 self._dDispatch[self.ksActionTestGroupDetails] = self._actionTestGroupDetails;
300 self._dDispatch[self.ksActionTestGroupEdit] = self._actionTestGroupEdit;
301 self._dDispatch[self.ksActionTestGroupEditPost] = self._actionTestGroupEditPost;
302 self._dDispatch[self.ksActionTestGroupDoRemove] = self._actionTestGroupDoRemove;
303 self._dDispatch[self.ksActionTestCfgRegenQueues] = self._actionRegenQueuesCommon;
304
305 #
306 # Scheduling Group and Queue actions
307 #
308 self._dDispatch[self.ksActionSchedGroupList] = self._actionSchedGroupList;
309 self._dDispatch[self.ksActionSchedGroupAdd] = self._actionSchedGroupAdd;
310 self._dDispatch[self.ksActionSchedGroupClone] = self._actionSchedGroupClone;
311 self._dDispatch[self.ksActionSchedGroupDetails] = self._actionSchedGroupDetails;
312 self._dDispatch[self.ksActionSchedGroupEdit] = self._actionSchedGroupEdit;
313 self._dDispatch[self.ksActionSchedGroupAddPost] = self._actionSchedGroupAddPost;
314 self._dDispatch[self.ksActionSchedGroupEditPost] = self._actionSchedGroupEditPost;
315 self._dDispatch[self.ksActionSchedGroupDoRemove] = self._actionSchedGroupDoRemove;
316 self._dDispatch[self.ksActionSchedQueueList] = self._actionSchedQueueList;
317
318
319 #
320 # Menus
321 #
322 self._aaoMenus = \
323 [
324 [
325 'Builds', self._sActionUrlBase + self.ksActionBuildList,
326 [
327 [ 'Builds', self._sActionUrlBase + self.ksActionBuildList, False ],
328 [ 'Blacklist', self._sActionUrlBase + self.ksActionBuildBlacklist, False ],
329 [ 'Build sources', self._sActionUrlBase + self.ksActionBuildSrcList, False ],
330 [ 'Build categories', self._sActionUrlBase + self.ksActionBuildCategoryList, False ],
331 [ 'New build', self._sActionUrlBase + self.ksActionBuildAdd, True ],
332 [ 'New blacklisting', self._sActionUrlBase + self.ksActionBuildBlacklistAdd, True ],
333 [ 'New build source', self._sActionUrlBase + self.ksActionBuildSrcAdd, True ],
334 [ 'New build category', self._sActionUrlBase + self.ksActionBuildCategoryAdd, True ],
335 ]
336 ],
337 [
338 'Failure Reasons', self._sActionUrlBase + self.ksActionFailureReasonList,
339 [
340 [ 'Failure categories', self._sActionUrlBase + self.ksActionFailureCategoryList, False ],
341 [ 'Failure reasons', self._sActionUrlBase + self.ksActionFailureReasonList, False ],
342 [ 'New failure category', self._sActionUrlBase + self.ksActionFailureCategoryAdd, True ],
343 [ 'New failure reason', self._sActionUrlBase + self.ksActionFailureReasonAdd, True ],
344 ]
345 ],
346 [
347 'System', self._sActionUrlBase + self.ksActionSystemChangelogList,
348 [
349 [ 'Changelog', self._sActionUrlBase + self.ksActionSystemChangelogList, False ],
350 [ 'System log', self._sActionUrlBase + self.ksActionSystemLogList, False ],
351 [ 'Partial DB Dump', self._sActionUrlBase + self.ksActionSystemDbDump, False ],
352 [ 'User accounts', self._sActionUrlBase + self.ksActionUserList, False ],
353 [ 'New user', self._sActionUrlBase + self.ksActionUserAdd, True ],
354 ]
355 ],
356 [
357 'Testboxes', self._sActionUrlBase + self.ksActionTestBoxList,
358 [
359 [ 'Testboxes', self._sActionUrlBase + self.ksActionTestBoxList, False ],
360 [ 'Scheduling groups', self._sActionUrlBase + self.ksActionSchedGroupList, False ],
361 [ 'New testbox', self._sActionUrlBase + self.ksActionTestBoxAdd, True ],
362 [ 'New scheduling group', self._sActionUrlBase + self.ksActionSchedGroupAdd, True ],
363 [ 'View scheduling queues', self._sActionUrlBase + self.ksActionSchedQueueList, False ],
364 [ 'Regenerate all scheduling queues', self._sActionUrlBase + self.ksActionTestBoxesRegenQueues, True ],
365 ]
366 ],
367 [
368 'Test Config', self._sActionUrlBase + self.ksActionTestGroupList,
369 [
370 [ 'Test cases', self._sActionUrlBase + self.ksActionTestCaseList, False ],
371 [ 'Test groups', self._sActionUrlBase + self.ksActionTestGroupList, False ],
372 [ 'Global resources', self._sActionUrlBase + self.ksActionGlobalRsrcShowAll, False ],
373 [ 'New test case', self._sActionUrlBase + self.ksActionTestCaseAdd, True ],
374 [ 'New test group', self._sActionUrlBase + self.ksActionTestGroupAdd, True ],
375 [ 'New global resource', self._sActionUrlBase + self.ksActionGlobalRsrcShowAdd, True ],
376 [ 'Regenerate all scheduling queues', self._sActionUrlBase + self.ksActionTestCfgRegenQueues, True ],
377 ]
378 ],
379 [
380 '> Test Results', 'index.py?' + webutils.encodeUrlParams(self._dDbgParams), []
381 ],
382 ];
383
384
385 def _actionDefault(self):
386 """Show the default admin page."""
387 self._sAction = self.ksActionTestBoxList;
388 from testmanager.core.testbox import TestBoxLogic;
389 from testmanager.webui.wuiadmintestbox import WuiTestBoxList;
390 return self._actionGenericListing(TestBoxLogic, WuiTestBoxList);
391
392 def _actionGenericDoDelOld(self, oCoreObjectLogic, sCoreObjectIdFieldName, sRedirectAction):
393 """
394 Delete entry (using oLogicType.remove).
395
396 @param oCoreObjectLogic A *Logic class
397
398 @param sCoreObjectIdFieldName Name of HTTP POST variable that
399 contains object ID information
400
401 @param sRedirectAction An action for redirect user to
402 in case of operation success
403 """
404 iCoreDataObjectId = self.getStringParam(sCoreObjectIdFieldName) # STRING?!?!
405 self._checkForUnknownParameters()
406
407 try:
408 self._sPageTitle = None
409 self._sPageBody = None
410 self._sRedirectTo = self._sActionUrlBase + sRedirectAction
411 return oCoreObjectLogic(self._oDb).remove(self._oCurUser.uid, iCoreDataObjectId)
412 except Exception as oXcpt:
413 self._oDb.rollback();
414 self._sPageTitle = 'Unable to delete record'
415 self._sPageBody = str(oXcpt);
416 if config.g_kfDebugDbXcpt:
417 self._sPageBody += cgitb.html(sys.exc_info());
418 self._sRedirectTo = None
419
420 return False
421
422
423 #
424 # System Category.
425 #
426
427 # System wide changelog actions.
428
429 def _actionSystemChangelogList(self):
430 """ Action handler. """
431 from testmanager.core.systemchangelog import SystemChangelogLogic;
432 from testmanager.webui.wuiadminsystemchangelog import WuiAdminSystemChangelogList;
433
434 tsEffective = self.getEffectiveDateParam();
435 cItemsPerPage = self.getIntParam(self.ksParamItemsPerPage, iMin = 2, iMax = 9999, iDefault = 384);
436 iPage = self.getIntParam(self.ksParamPageNo, iMin = 0, iMax = 999999, iDefault = 0);
437 cDaysBack = self.getIntParam(self.ksParamDaysBack, iMin = 1, iMax = 366, iDefault = 14);
438 self._checkForUnknownParameters();
439
440 aoEntries = SystemChangelogLogic(self._oDb).fetchForListingEx(iPage * cItemsPerPage, cItemsPerPage + 1,
441 tsEffective, cDaysBack);
442 oContent = WuiAdminSystemChangelogList(aoEntries, iPage, cItemsPerPage, tsEffective,
443 cDaysBack = cDaysBack, fnDPrint = self._oSrvGlue.dprint, oDisp = self);
444 (self._sPageTitle, self._sPageBody) = oContent.show();
445 return True;
446
447 # System Log actions.
448
449 def _actionSystemLogList(self):
450 """ Action wrapper. """
451 from testmanager.core.systemlog import SystemLogLogic;
452 from testmanager.webui.wuiadminsystemlog import WuiAdminSystemLogList;
453 return self._actionGenericListing(SystemLogLogic, WuiAdminSystemLogList)
454
455 def _actionSystemDbDump(self):
456 """ Action handler. """
457 from testmanager.webui.wuiadminsystemdbdump import WuiAdminSystemDbDumpForm;
458
459 cDaysBack = self.getIntParam(self.ksParamDaysBack, iMin = config.g_kcTmDbDumpMinDays,
460 iMax = config.g_kcTmDbDumpMaxDays, iDefault = config.g_kcTmDbDumpDefaultDays);
461 self._checkForUnknownParameters();
462
463 oContent = WuiAdminSystemDbDumpForm(cDaysBack, oDisp = self);
464 (self._sPageTitle, self._sPageBody) = oContent.showForm();
465 return True;
466
467 def _actionSystemDbDumpDownload(self):
468 """ Action handler. """
469 import datetime;
470 import os;
471
472 cDaysBack = self.getIntParam(self.ksParamDaysBack, iMin = config.g_kcTmDbDumpMinDays,
473 iMax = config.g_kcTmDbDumpMaxDays, iDefault = config.g_kcTmDbDumpDefaultDays);
474 self._checkForUnknownParameters();
475
476 #
477 # Generate the dump.
478 #
479 # We generate a file name that's unique to a user is smart enough to only
480 # issue one of these requests at the time. This also makes sure we won't
481 # waste too much space should this code get interrupted and rerun.
482 #
483 oFile = None;
484 oNow = datetime.datetime.utcnow();
485 sTmpFile = config.g_ksTmDbDumpFileTemplate % (self._oCurUser.uid,);
486 sScript = os.path.join(config.g_ksTestManagerDir, 'db', 'partial-db-dump.py');
487 try:
488 (iExitCode, sStdOut, sStdErr) = utils.processOutputUnchecked([sScript, '--days-to-dump', str(cDaysBack),
489 '-f', sTmpFile,]);
490 if iExitCode != 0:
491 raise Exception('iExitCode=%s\n--- stderr ---\n%s\n--- stdout ---\n%s' % (iExitCode, sStdOut, sStdErr,));
492
493 #
494 # Open and send the dump.
495 #
496 oFile = open(sTmpFile, 'rb');
497 cbFile = os.fstat(oFile.fileno()).st_size;
498
499 self._oSrvGlue.setHeaderField('Content-Type', 'application/zip');
500 self._oSrvGlue.setHeaderField('Content-Disposition',
501 oNow.strftime('attachment; filename="partial-db-dump-%Y-%m-%dT%H-%M-%S.zip"'));
502 self._oSrvGlue.setHeaderField('Content-Length', str(cbFile));
503
504 while True:
505 abChunk = oFile.read(262144);
506 if not abChunk:
507 break;
508 self._oSrvGlue.writeRaw(abChunk);
509
510 finally:
511 # Delete the file to save space.
512 if oFile:
513 try: oFile.close();
514 except: pass;
515 utils.noxcptDeleteFile(sTmpFile);
516 return self.ksDispatchRcAllDone;
517
518
519 # User Account actions.
520
521 def _actionUserList(self):
522 """ Action wrapper. """
523 from testmanager.core.useraccount import UserAccountLogic;
524 from testmanager.webui.wuiadminuseraccount import WuiUserAccountList;
525 return self._actionGenericListing(UserAccountLogic, WuiUserAccountList)
526
527 def _actionUserAdd(self):
528 """ Action wrapper. """
529 from testmanager.core.useraccount import UserAccountData;
530 from testmanager.webui.wuiadminuseraccount import WuiUserAccount;
531 return self._actionGenericFormAdd(UserAccountData, WuiUserAccount)
532
533 def _actionUserDetails(self):
534 """ Action wrapper. """
535 from testmanager.core.useraccount import UserAccountData, UserAccountLogic;
536 from testmanager.webui.wuiadminuseraccount import WuiUserAccount;
537 return self._actionGenericFormDetails(UserAccountData, UserAccountLogic, WuiUserAccount, 'uid');
538
539 def _actionUserEdit(self):
540 """ Action wrapper. """
541 from testmanager.core.useraccount import UserAccountData;
542 from testmanager.webui.wuiadminuseraccount import WuiUserAccount;
543 return self._actionGenericFormEdit(UserAccountData, WuiUserAccount, UserAccountData.ksParam_uid);
544
545 def _actionUserAddPost(self):
546 """ Action wrapper. """
547 from testmanager.core.useraccount import UserAccountData, UserAccountLogic;
548 from testmanager.webui.wuiadminuseraccount import WuiUserAccount;
549 return self._actionGenericFormAddPost(UserAccountData, UserAccountLogic, WuiUserAccount, self.ksActionUserList)
550
551 def _actionUserEditPost(self):
552 """ Action wrapper. """
553 from testmanager.core.useraccount import UserAccountData, UserAccountLogic;
554 from testmanager.webui.wuiadminuseraccount import WuiUserAccount;
555 return self._actionGenericFormEditPost(UserAccountData, UserAccountLogic, WuiUserAccount, self.ksActionUserList)
556
557 def _actionUserDelPost(self):
558 """ Action wrapper. """
559 from testmanager.core.useraccount import UserAccountData, UserAccountLogic;
560 return self._actionGenericDoRemove(UserAccountLogic, UserAccountData.ksParam_uid, self.ksActionUserList)
561
562
563 #
564 # TestBox & Scheduling Category.
565 #
566
567 def _actionTestBoxList(self):
568 """ Action wrapper. """
569 from testmanager.core.testbox import TestBoxLogic
570 from testmanager.webui.wuiadmintestbox import WuiTestBoxList;
571 return self._actionGenericListing(TestBoxLogic, WuiTestBoxList);
572
573 def _actionTestBoxListPost(self):
574 """Actions on a list of testboxes."""
575 from testmanager.core.testbox import TestBoxData, TestBoxLogic
576 from testmanager.webui.wuiadmintestbox import WuiTestBoxList;
577
578 # Parameters.
579 aidTestBoxes = self.getListOfIntParams(TestBoxData.ksParam_idTestBox, iMin = 1, aiDefaults = []);
580 sListAction = self.getStringParam(self.ksParamListAction);
581 if sListAction in [asDesc[0] for asDesc in WuiTestBoxList.kasTestBoxActionDescs]:
582 idAction = None;
583 else:
584 asActionPrefixes = [ 'setgroup-', ];
585 i = 0;
586 while i < len(asActionPrefixes) and not sListAction.startswith(asActionPrefixes[i]):
587 i += 1;
588 if i >= len(asActionPrefixes):
589 raise WuiException('Parameter "%s" has an invalid value: "%s"' % (self.ksParamListAction, sListAction,));
590 idAction = sListAction[len(asActionPrefixes[i]):];
591 if not idAction.isdigit():
592 raise WuiException('Parameter "%s" has an invalid value: "%s"' % (self.ksParamListAction, sListAction,));
593 idAction = int(idAction);
594 sListAction = sListAction[:len(asActionPrefixes[i]) - 1];
595 self._checkForUnknownParameters();
596
597
598 # Take action.
599 if sListAction == 'none':
600 pass;
601 else:
602 oLogic = TestBoxLogic(self._oDb);
603 aoTestBoxes = []
604 for idTestBox in aidTestBoxes:
605 aoTestBoxes.append(TestBoxData().initFromDbWithId(self._oDb, idTestBox));
606
607 if sListAction in [ 'enable', 'disable' ]:
608 fEnable = sListAction == 'enable';
609 for oTestBox in aoTestBoxes:
610 if oTestBox.fEnabled != fEnable:
611 oTestBox.fEnabled = fEnable;
612 oLogic.editEntry(oTestBox, self._oCurUser.uid, fCommit = False);
613 else:
614 for oTestBox in aoTestBoxes:
615 if oTestBox.enmPendingCmd != sListAction:
616 oLogic.setCommand(oTestBox.idTestBox, oTestBox.enmPendingCmd, sListAction, self._oCurUser.uid,
617 fCommit = False);
618 self._oDb.commit();
619
620 # Re-display the list.
621 self._sPageTitle = None;
622 self._sPageBody = None;
623 self._sRedirectTo = self._sActionUrlBase + self.ksActionTestBoxList;
624 return True;
625
626 def _actionTestBoxAdd(self):
627 """ Action wrapper. """
628 from testmanager.core.testbox import TestBoxDataEx;
629 from testmanager.webui.wuiadmintestbox import WuiTestBox;
630 return self._actionGenericFormAdd(TestBoxDataEx, WuiTestBox);
631
632 def _actionTestBoxAddPost(self):
633 """ Action wrapper. """
634 from testmanager.core.testbox import TestBoxDataEx, TestBoxLogic;
635 from testmanager.webui.wuiadmintestbox import WuiTestBox;
636 return self._actionGenericFormAddPost(TestBoxDataEx, TestBoxLogic, WuiTestBox, self.ksActionTestBoxList);
637
638 def _actionTestBoxDetails(self):
639 """ Action wrapper. """
640 from testmanager.core.testbox import TestBoxDataEx, TestBoxLogic;
641 from testmanager.webui.wuiadmintestbox import WuiTestBox;
642 return self._actionGenericFormDetails(TestBoxDataEx, TestBoxLogic, WuiTestBox, 'idTestBox', 'idGenTestBox');
643
644 def _actionTestBoxEdit(self):
645 """ Action wrapper. """
646 from testmanager.core.testbox import TestBoxDataEx;
647 from testmanager.webui.wuiadmintestbox import WuiTestBox;
648 return self._actionGenericFormEdit(TestBoxDataEx, WuiTestBox, TestBoxDataEx.ksParam_idTestBox);
649
650 def _actionTestBoxEditPost(self):
651 """ Action wrapper. """
652 from testmanager.core.testbox import TestBoxDataEx, TestBoxLogic;
653 from testmanager.webui.wuiadmintestbox import WuiTestBox;
654 return self._actionGenericFormEditPost(TestBoxDataEx, TestBoxLogic,WuiTestBox, self.ksActionTestBoxList);
655
656 def _actionTestBoxRemovePost(self):
657 """ Action wrapper. """
658 from testmanager.core.testbox import TestBoxData, TestBoxLogic;
659 return self._actionGenericDoRemove(TestBoxLogic, TestBoxData.ksParam_idTestBox, self.ksActionTestBoxList);
660
661
662 # Scheduling Group actions
663
664 def _actionSchedGroupList(self):
665 """ Action wrapper. """
666 from testmanager.core.schedgroup import SchedGroupLogic;
667 from testmanager.webui.wuiadminschedgroup import WuiAdminSchedGroupList;
668 return self._actionGenericListing(SchedGroupLogic, WuiAdminSchedGroupList);
669
670 def _actionSchedGroupAdd(self):
671 """ Action wrapper. """
672 from testmanager.core.schedgroup import SchedGroupDataEx;
673 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
674 return self._actionGenericFormAdd(SchedGroupDataEx, WuiSchedGroup);
675
676 def _actionSchedGroupClone(self):
677 """ Action wrapper. """
678 from testmanager.core.schedgroup import SchedGroupDataEx;
679 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
680 return self._actionGenericFormClone( SchedGroupDataEx, WuiSchedGroup, 'idSchedGroup');
681
682 def _actionSchedGroupDetails(self):
683 """ Action wrapper. """
684 from testmanager.core.schedgroup import SchedGroupDataEx, SchedGroupLogic;
685 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
686 return self._actionGenericFormDetails(SchedGroupDataEx, SchedGroupLogic, WuiSchedGroup, 'idSchedGroup');
687
688 def _actionSchedGroupEdit(self):
689 """ Action wrapper. """
690 from testmanager.core.schedgroup import SchedGroupDataEx;
691 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
692 return self._actionGenericFormEdit(SchedGroupDataEx, WuiSchedGroup, SchedGroupDataEx.ksParam_idSchedGroup);
693
694 def _actionSchedGroupAddPost(self):
695 """ Action wrapper. """
696 from testmanager.core.schedgroup import SchedGroupDataEx, SchedGroupLogic;
697 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
698 return self._actionGenericFormAddPost(SchedGroupDataEx, SchedGroupLogic, WuiSchedGroup, self.ksActionSchedGroupList);
699
700 def _actionSchedGroupEditPost(self):
701 """ Action wrapper. """
702 from testmanager.core.schedgroup import SchedGroupDataEx, SchedGroupLogic;
703 from testmanager.webui.wuiadminschedgroup import WuiSchedGroup;
704 return self._actionGenericFormEditPost(SchedGroupDataEx, SchedGroupLogic, WuiSchedGroup, self.ksActionSchedGroupList);
705
706 def _actionSchedGroupDoRemove(self):
707 """ Action wrapper. """
708 from testmanager.core.schedgroup import SchedGroupData, SchedGroupLogic;
709 return self._actionGenericDoRemove(SchedGroupLogic, SchedGroupData.ksParam_idSchedGroup, self.ksActionSchedGroupList)
710
711 def _actionSchedQueueList(self):
712 """ Action wrapper. """
713 from testmanager.core.schedqueue import SchedQueueLogic;
714 from testmanager.webui.wuiadminschedqueue import WuiAdminSchedQueueList;
715 return self._actionGenericListing(SchedQueueLogic, WuiAdminSchedQueueList);
716
717 def _actionRegenQueuesCommon(self):
718 """
719 Common code for ksActionTestBoxesRegenQueues and ksActionTestCfgRegenQueues.
720
721 Too lazy to put this in some separate place right now.
722 """
723 from testmanager.core.schedgroup import SchedGroupLogic;
724 from testmanager.core.schedulerbase import SchedulerBase;
725
726 self._checkForUnknownParameters();
727 ## @todo should also be changed to a POST with a confirmation dialog preceeding it.
728
729 self._sPageTitle = 'Regenerate All Scheduling Queues';
730 if not self.isReadOnlyUser():
731 self._sPageBody = '';
732 aoGroups = SchedGroupLogic(self._oDb).getAll();
733 for oGroup in aoGroups:
734 self._sPageBody += '<h3>%s (ID %#d)</h3>' % (webutils.escapeElem(oGroup.sName), oGroup.idSchedGroup);
735 try:
736 (aoErrors, asMessages) = SchedulerBase.recreateQueue(self._oDb, self._oCurUser.uid, oGroup.idSchedGroup, 2);
737 except Exception as oXcpt:
738 self._oDb.rollback();
739 self._sPageBody += '<p>SchedulerBase.recreateQueue threw an exception: %s</p>' \
740 % (webutils.escapeElem(str(oXcpt)),);
741 self._sPageBody += cgitb.html(sys.exc_info());
742 else:
743 if not aoErrors:
744 self._sPageBody += '<p>Successfully regenerated.</p>';
745 else:
746 for oError in aoErrors:
747 if oError[1] is None:
748 self._sPageBody += '<p>%s.</p>' % (webutils.escapeElem(oError[0]),);
749 ## @todo links.
750 #elif isinstance(oError[1], TestGroupData):
751 # self._sPageBody += '<p>%s.</p>' % (webutils.escapeElem(oError[0]),);
752 #elif isinstance(oError[1], TestGroupCase):
753 # self._sPageBody += '<p>%s.</p>' % (webutils.escapeElem(oError[0]),);
754 else:
755 self._sPageBody += '<p>%s. [Cannot link to %s]</p>' \
756 % (webutils.escapeElem(oError[0]), webutils.escapeElem(str(oError[1])),);
757 for sMsg in asMessages:
758 self._sPageBody += '<p>%s<p>\n' % (webutils.escapeElem(sMsg),);
759
760 # Remove leftovers from deleted scheduling groups.
761 self._sPageBody += '<h3>Cleanups</h3>\n';
762 cOrphans = SchedulerBase.cleanUpOrphanedQueues(self._oDb);
763 self._sPageBody += '<p>Removed %s orphaned (deleted) queue%s.<p>\n' % (cOrphans, '' if cOrphans == 1 else 's', );
764 else:
765 self._sPageBody = webutils.escapeElem('%s is a read only user and may not regenerate the scheduling queues!'
766 % (self._oCurUser.sUsername,));
767 return True;
768
769
770
771 #
772 # Test Config Category.
773 #
774
775 # Test Cases
776
777 def _actionTestCaseList(self):
778 """ Action wrapper. """
779 from testmanager.core.testcase import TestCaseLogic;
780 from testmanager.webui.wuiadmintestcase import WuiTestCaseList;
781 return self._actionGenericListing(TestCaseLogic, WuiTestCaseList);
782
783 def _actionTestCaseAdd(self):
784 """ Action wrapper. """
785 from testmanager.core.testcase import TestCaseDataEx;
786 from testmanager.webui.wuiadmintestcase import WuiTestCase;
787 return self._actionGenericFormAdd(TestCaseDataEx, WuiTestCase);
788
789 def _actionTestCaseAddPost(self):
790 """ Action wrapper. """
791 from testmanager.core.testcase import TestCaseDataEx, TestCaseLogic;
792 from testmanager.webui.wuiadmintestcase import WuiTestCase;
793 return self._actionGenericFormAddPost(TestCaseDataEx, TestCaseLogic, WuiTestCase, self.ksActionTestCaseList);
794
795 def _actionTestCaseClone(self):
796 """ Action wrapper. """
797 from testmanager.core.testcase import TestCaseDataEx;
798 from testmanager.webui.wuiadmintestcase import WuiTestCase;
799 return self._actionGenericFormClone( TestCaseDataEx, WuiTestCase, 'idTestCase', 'idGenTestCase');
800
801 def _actionTestCaseDetails(self):
802 """ Action wrapper. """
803 from testmanager.core.testcase import TestCaseDataEx, TestCaseLogic;
804 from testmanager.webui.wuiadmintestcase import WuiTestCase;
805 return self._actionGenericFormDetails(TestCaseDataEx, TestCaseLogic, WuiTestCase, 'idTestCase', 'idGenTestCase');
806
807 def _actionTestCaseEdit(self):
808 """ Action wrapper. """
809 from testmanager.core.testcase import TestCaseDataEx;
810 from testmanager.webui.wuiadmintestcase import WuiTestCase;
811 return self._actionGenericFormEdit(TestCaseDataEx, WuiTestCase, TestCaseDataEx.ksParam_idTestCase);
812
813 def _actionTestCaseEditPost(self):
814 """ Action wrapper. """
815 from testmanager.core.testcase import TestCaseDataEx, TestCaseLogic;
816 from testmanager.webui.wuiadmintestcase import WuiTestCase;
817 return self._actionGenericFormEditPost(TestCaseDataEx, TestCaseLogic, WuiTestCase, self.ksActionTestCaseList);
818
819 def _actionTestCaseDoRemove(self):
820 """ Action wrapper. """
821 from testmanager.core.testcase import TestCaseData, TestCaseLogic;
822 return self._actionGenericDoRemove(TestCaseLogic, TestCaseData.ksParam_idTestCase, self.ksActionTestCaseList);
823
824 # Test Group actions
825
826 def _actionTestGroupList(self):
827 """ Action wrapper. """
828 from testmanager.core.testgroup import TestGroupLogic;
829 from testmanager.webui.wuiadmintestgroup import WuiTestGroupList;
830 return self._actionGenericListing(TestGroupLogic, WuiTestGroupList);
831 def _actionTestGroupAdd(self):
832 """ Action wrapper. """
833 from testmanager.core.testgroup import TestGroupDataEx;
834 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
835 return self._actionGenericFormAdd(TestGroupDataEx, WuiTestGroup);
836 def _actionTestGroupAddPost(self):
837 """ Action wrapper. """
838 from testmanager.core.testgroup import TestGroupDataEx, TestGroupLogic;
839 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
840 return self._actionGenericFormAddPost(TestGroupDataEx, TestGroupLogic, WuiTestGroup, self.ksActionTestGroupList);
841 def _actionTestGroupClone(self):
842 """ Action wrapper. """
843 from testmanager.core.testgroup import TestGroupDataEx;
844 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
845 return self._actionGenericFormClone(TestGroupDataEx, WuiTestGroup, 'idTestGroup');
846 def _actionTestGroupDetails(self):
847 """ Action wrapper. """
848 from testmanager.core.testgroup import TestGroupDataEx, TestGroupLogic;
849 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
850 return self._actionGenericFormDetails(TestGroupDataEx, TestGroupLogic, WuiTestGroup, 'idTestGroup');
851 def _actionTestGroupEdit(self):
852 """ Action wrapper. """
853 from testmanager.core.testgroup import TestGroupDataEx;
854 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
855 return self._actionGenericFormEdit(TestGroupDataEx, WuiTestGroup, TestGroupDataEx.ksParam_idTestGroup);
856 def _actionTestGroupEditPost(self):
857 """ Action wrapper. """
858 from testmanager.core.testgroup import TestGroupDataEx, TestGroupLogic;
859 from testmanager.webui.wuiadmintestgroup import WuiTestGroup;
860 return self._actionGenericFormEditPost(TestGroupDataEx, TestGroupLogic, WuiTestGroup, self.ksActionTestGroupList);
861 def _actionTestGroupDoRemove(self):
862 """ Action wrapper. """
863 from testmanager.core.testgroup import TestGroupDataEx, TestGroupLogic;
864 return self._actionGenericDoRemove(TestGroupLogic, TestGroupDataEx.ksParam_idTestGroup, self.ksActionTestGroupList)
865
866
867 # Global Resources
868
869 def _actionGlobalRsrcShowAll(self):
870 """ Action wrapper. """
871 from testmanager.core.globalresource import GlobalResourceLogic;
872 from testmanager.webui.wuiadminglobalrsrc import WuiGlobalResourceList;
873 return self._actionGenericListing(GlobalResourceLogic, WuiGlobalResourceList);
874
875 def _actionGlobalRsrcShowAdd(self):
876 """ Action wrapper. """
877 return self._actionGlobalRsrcShowAddEdit(WuiAdmin.ksActionGlobalRsrcAdd);
878
879 def _actionGlobalRsrcShowEdit(self):
880 """ Action wrapper. """
881 return self._actionGlobalRsrcShowAddEdit(WuiAdmin.ksActionGlobalRsrcEdit);
882
883 def _actionGlobalRsrcAdd(self):
884 """ Action wrapper. """
885 return self._actionGlobalRsrcAddEdit(WuiAdmin.ksActionGlobalRsrcAdd);
886
887 def _actionGlobalRsrcEdit(self):
888 """ Action wrapper. """
889 return self._actionGlobalRsrcAddEdit(WuiAdmin.ksActionGlobalRsrcEdit);
890
891 def _actionGlobalRsrcDel(self):
892 """ Action wrapper. """
893 from testmanager.core.globalresource import GlobalResourceData, GlobalResourceLogic;
894 return self._actionGenericDoDelOld(GlobalResourceLogic, GlobalResourceData.ksParam_idGlobalRsrc,
895 self.ksActionGlobalRsrcShowAll);
896
897 def _actionGlobalRsrcShowAddEdit(self, sAction): # pylint: disable=invalid-name
898 """Show Global Resource creation or edit dialog"""
899 from testmanager.core.globalresource import GlobalResourceLogic, GlobalResourceData;
900 from testmanager.webui.wuiadminglobalrsrc import WuiGlobalResource;
901
902 oGlobalResourceLogic = GlobalResourceLogic(self._oDb)
903 if sAction == WuiAdmin.ksActionGlobalRsrcEdit:
904 idGlobalRsrc = self.getIntParam(GlobalResourceData.ksParam_idGlobalRsrc, iDefault = -1)
905 oData = oGlobalResourceLogic.getById(idGlobalRsrc)
906 else:
907 oData = GlobalResourceData()
908 oData.convertToParamNull()
909
910 self._checkForUnknownParameters()
911
912 oContent = WuiGlobalResource(oData)
913 (self._sPageTitle, self._sPageBody) = oContent.showAddModifyPage(sAction)
914
915 return True
916
917 def _actionGlobalRsrcAddEdit(self, sAction):
918 """Add or modify Global Resource record"""
919 from testmanager.core.globalresource import GlobalResourceLogic, GlobalResourceData;
920 from testmanager.webui.wuiadminglobalrsrc import WuiGlobalResource;
921
922 oData = GlobalResourceData()
923 oData.initFromParams(self, fStrict=True)
924
925 self._checkForUnknownParameters()
926
927 if self._oSrvGlue.getMethod() != 'POST':
928 raise WuiException('Expected "POST" request, got "%s"' % (self._oSrvGlue.getMethod(),))
929
930 oGlobalResourceLogic = GlobalResourceLogic(self._oDb)
931 dErrors = oData.validateAndConvert(self._oDb);
932 if not dErrors:
933 if sAction == WuiAdmin.ksActionGlobalRsrcAdd:
934 oGlobalResourceLogic.addGlobalResource(self._oCurUser.uid, oData)
935 elif sAction == WuiAdmin.ksActionGlobalRsrcEdit:
936 idGlobalRsrc = self.getStringParam(GlobalResourceData.ksParam_idGlobalRsrc)
937 oGlobalResourceLogic.editGlobalResource(self._oCurUser.uid, idGlobalRsrc, oData)
938 else:
939 raise WuiException('Invalid parameter.')
940 self._sPageTitle = None;
941 self._sPageBody = None;
942 self._sRedirectTo = self._sActionUrlBase + self.ksActionGlobalRsrcShowAll;
943 else:
944 oContent = WuiGlobalResource(oData)
945 (self._sPageTitle, self._sPageBody) = oContent.showAddModifyPage(sAction, dErrors=dErrors)
946
947 return True
948
949
950 #
951 # Build Source actions
952 #
953
954 def _actionBuildSrcList(self):
955 """ Action wrapper. """
956 from testmanager.core.buildsource import BuildSourceLogic;
957 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrcList;
958 return self._actionGenericListing(BuildSourceLogic, WuiAdminBuildSrcList);
959
960 def _actionBuildSrcAdd(self):
961 """ Action wrapper. """
962 from testmanager.core.buildsource import BuildSourceData;
963 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
964 return self._actionGenericFormAdd(BuildSourceData, WuiAdminBuildSrc);
965
966 def _actionBuildSrcAddPost(self):
967 """ Action wrapper. """
968 from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
969 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
970 return self._actionGenericFormAddPost(BuildSourceData, BuildSourceLogic, WuiAdminBuildSrc, self.ksActionBuildSrcList);
971
972 def _actionBuildSrcClone(self):
973 """ Action wrapper. """
974 from testmanager.core.buildsource import BuildSourceData;
975 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
976 return self._actionGenericFormClone( BuildSourceData, WuiAdminBuildSrc, 'idBuildSrc');
977
978 def _actionBuildSrcDetails(self):
979 """ Action wrapper. """
980 from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
981 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
982 return self._actionGenericFormDetails(BuildSourceData, BuildSourceLogic, WuiAdminBuildSrc, 'idBuildSrc');
983
984 def _actionBuildSrcDoRemove(self):
985 """ Action wrapper. """
986 from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
987 return self._actionGenericDoRemove(BuildSourceLogic, BuildSourceData.ksParam_idBuildSrc, self.ksActionBuildSrcList);
988
989 def _actionBuildSrcEdit(self):
990 """ Action wrapper. """
991 from testmanager.core.buildsource import BuildSourceData;
992 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
993 return self._actionGenericFormEdit(BuildSourceData, WuiAdminBuildSrc, BuildSourceData.ksParam_idBuildSrc);
994
995 def _actionBuildSrcEditPost(self):
996 """ Action wrapper. """
997 from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
998 from testmanager.webui.wuiadminbuildsource import WuiAdminBuildSrc;
999 return self._actionGenericFormEditPost(BuildSourceData, BuildSourceLogic, WuiAdminBuildSrc, self.ksActionBuildSrcList);
1000
1001
1002 #
1003 # Build actions
1004 #
1005 def _actionBuildList(self):
1006 """ Action wrapper. """
1007 from testmanager.core.build import BuildLogic;
1008 from testmanager.webui.wuiadminbuild import WuiAdminBuildList;
1009 return self._actionGenericListing(BuildLogic, WuiAdminBuildList);
1010
1011 def _actionBuildAdd(self):
1012 """ Action wrapper. """
1013 from testmanager.core.build import BuildData;
1014 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1015 return self._actionGenericFormAdd(BuildData, WuiAdminBuild);
1016
1017 def _actionBuildAddPost(self):
1018 """ Action wrapper. """
1019 from testmanager.core.build import BuildData, BuildLogic;
1020 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1021 return self._actionGenericFormAddPost(BuildData, BuildLogic, WuiAdminBuild, self.ksActionBuildList);
1022
1023 def _actionBuildClone(self):
1024 """ Action wrapper. """
1025 from testmanager.core.build import BuildData;
1026 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1027 return self._actionGenericFormClone( BuildData, WuiAdminBuild, 'idBuild');
1028
1029 def _actionBuildDetails(self):
1030 """ Action wrapper. """
1031 from testmanager.core.build import BuildData, BuildLogic;
1032 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1033 return self._actionGenericFormDetails(BuildData, BuildLogic, WuiAdminBuild, 'idBuild');
1034
1035 def _actionBuildDoRemove(self):
1036 """ Action wrapper. """
1037 from testmanager.core.build import BuildData, BuildLogic;
1038 return self._actionGenericDoRemove(BuildLogic, BuildData.ksParam_idBuild, self.ksActionBuildList);
1039
1040 def _actionBuildEdit(self):
1041 """ Action wrapper. """
1042 from testmanager.core.build import BuildData;
1043 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1044 return self._actionGenericFormEdit(BuildData, WuiAdminBuild, BuildData.ksParam_idBuild);
1045
1046 def _actionBuildEditPost(self):
1047 """ Action wrapper. """
1048 from testmanager.core.build import BuildData, BuildLogic;
1049 from testmanager.webui.wuiadminbuild import WuiAdminBuild;
1050 return self._actionGenericFormEditPost(BuildData, BuildLogic, WuiAdminBuild, self.ksActionBuildList)
1051
1052
1053 #
1054 # Build Category actions
1055 #
1056 def _actionBuildCategoryList(self):
1057 """ Action wrapper. """
1058 from testmanager.core.build import BuildCategoryLogic;
1059 from testmanager.webui.wuiadminbuildcategory import WuiAdminBuildCatList;
1060 return self._actionGenericListing(BuildCategoryLogic, WuiAdminBuildCatList);
1061
1062 def _actionBuildCategoryAdd(self):
1063 """ Action wrapper. """
1064 from testmanager.core.build import BuildCategoryData;
1065 from testmanager.webui.wuiadminbuildcategory import WuiAdminBuildCat;
1066 return self._actionGenericFormAdd(BuildCategoryData, WuiAdminBuildCat);
1067
1068 def _actionBuildCategoryAddPost(self):
1069 """ Action wrapper. """
1070 from testmanager.core.build import BuildCategoryData, BuildCategoryLogic;
1071 from testmanager.webui.wuiadminbuildcategory import WuiAdminBuildCat;
1072 return self._actionGenericFormAddPost(BuildCategoryData, BuildCategoryLogic, WuiAdminBuildCat,
1073 self.ksActionBuildCategoryList);
1074
1075 def _actionBuildCategoryClone(self):
1076 """ Action wrapper. """
1077 from testmanager.core.build import BuildCategoryData;
1078 from testmanager.webui.wuiadminbuildcategory import WuiAdminBuildCat;
1079 return self._actionGenericFormClone(BuildCategoryData, WuiAdminBuildCat, 'idBuildCategory');
1080
1081 def _actionBuildCategoryDetails(self):
1082 """ Action wrapper. """
1083 from testmanager.core.build import BuildCategoryData, BuildCategoryLogic;
1084 from testmanager.webui.wuiadminbuildcategory import WuiAdminBuildCat;
1085 return self._actionGenericFormDetails(BuildCategoryData, BuildCategoryLogic, WuiAdminBuildCat, 'idBuildCategory');
1086
1087 def _actionBuildCategoryDoRemove(self):
1088 """ Action wrapper. """
1089 from testmanager.core.build import BuildCategoryData, BuildCategoryLogic;
1090 return self._actionGenericDoRemove(BuildCategoryLogic, BuildCategoryData.ksParam_idBuildCategory,
1091 self.ksActionBuildCategoryList)
1092
1093
1094 #
1095 # Build Black List actions
1096 #
1097 def _actionBuildBlacklist(self):
1098 """ Action wrapper. """
1099 from testmanager.core.buildblacklist import BuildBlacklistLogic;
1100 from testmanager.webui.wuiadminbuildblacklist import WuiAdminListOfBlacklistItems;
1101 return self._actionGenericListing(BuildBlacklistLogic, WuiAdminListOfBlacklistItems);
1102
1103 def _actionBuildBlacklistAdd(self):
1104 """ Action wrapper. """
1105 from testmanager.core.buildblacklist import BuildBlacklistData;
1106 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1107 return self._actionGenericFormAdd(BuildBlacklistData, WuiAdminBuildBlacklist);
1108
1109 def _actionBuildBlacklistAddPost(self):
1110 """ Action wrapper. """
1111 from testmanager.core.buildblacklist import BuildBlacklistData, BuildBlacklistLogic;
1112 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1113 return self._actionGenericFormAddPost(BuildBlacklistData, BuildBlacklistLogic,
1114 WuiAdminBuildBlacklist, self.ksActionBuildBlacklist);
1115
1116 def _actionBuildBlacklistClone(self):
1117 """ Action wrapper. """
1118 from testmanager.core.buildblacklist import BuildBlacklistData;
1119 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1120 return self._actionGenericFormClone(BuildBlacklistData, WuiAdminBuildBlacklist, 'idBlacklisting');
1121
1122 def _actionBuildBlacklistDetails(self):
1123 """ Action wrapper. """
1124 from testmanager.core.buildblacklist import BuildBlacklistData, BuildBlacklistLogic;
1125 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1126 return self._actionGenericFormDetails(BuildBlacklistData, BuildBlacklistLogic, WuiAdminBuildBlacklist, 'idBlacklisting');
1127
1128 def _actionBuildBlacklistDoRemove(self):
1129 """ Action wrapper. """
1130 from testmanager.core.buildblacklist import BuildBlacklistData, BuildBlacklistLogic;
1131 return self._actionGenericDoRemove(BuildBlacklistLogic, BuildBlacklistData.ksParam_idBlacklisting,
1132 self.ksActionBuildBlacklist);
1133
1134 def _actionBuildBlacklistEdit(self):
1135 """ Action wrapper. """
1136 from testmanager.core.buildblacklist import BuildBlacklistData;
1137 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1138 return self._actionGenericFormEdit(BuildBlacklistData, WuiAdminBuildBlacklist, BuildBlacklistData.ksParam_idBlacklisting);
1139
1140 def _actionBuildBlacklistEditPost(self):
1141 """ Action wrapper. """
1142 from testmanager.core.buildblacklist import BuildBlacklistData, BuildBlacklistLogic;
1143 from testmanager.webui.wuiadminbuildblacklist import WuiAdminBuildBlacklist;
1144 return self._actionGenericFormEditPost(BuildBlacklistData, BuildBlacklistLogic, WuiAdminBuildBlacklist,
1145 self.ksActionBuildBlacklist)
1146
1147
1148 #
1149 # Failure Category actions
1150 #
1151 def _actionFailureCategoryList(self):
1152 """ Action wrapper. """
1153 from testmanager.core.failurecategory import FailureCategoryLogic;
1154 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategoryList;
1155 return self._actionGenericListing(FailureCategoryLogic, WuiFailureCategoryList);
1156
1157 def _actionFailureCategoryAdd(self):
1158 """ Action wrapper. """
1159 from testmanager.core.failurecategory import FailureCategoryData;
1160 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategory;
1161 return self._actionGenericFormAdd(FailureCategoryData, WuiFailureCategory);
1162
1163 def _actionFailureCategoryAddPost(self):
1164 """ Action wrapper. """
1165 from testmanager.core.failurecategory import FailureCategoryData, FailureCategoryLogic;
1166 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategory;
1167 return self._actionGenericFormAddPost(FailureCategoryData, FailureCategoryLogic, WuiFailureCategory,
1168 self.ksActionFailureCategoryList)
1169
1170 def _actionFailureCategoryDetails(self):
1171 """ Action wrapper. """
1172 from testmanager.core.failurecategory import FailureCategoryData, FailureCategoryLogic;
1173 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategory;
1174 return self._actionGenericFormDetails(FailureCategoryData, FailureCategoryLogic, WuiFailureCategory);
1175
1176
1177 def _actionFailureCategoryDoRemove(self):
1178 """ Action wrapper. """
1179 from testmanager.core.failurecategory import FailureCategoryData, FailureCategoryLogic;
1180 return self._actionGenericDoRemove(FailureCategoryLogic, FailureCategoryData.ksParam_idFailureCategory,
1181 self.ksActionFailureCategoryList);
1182
1183 def _actionFailureCategoryEdit(self):
1184 """ Action wrapper. """
1185 from testmanager.core.failurecategory import FailureCategoryData;
1186 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategory;
1187 return self._actionGenericFormEdit(FailureCategoryData, WuiFailureCategory,
1188 FailureCategoryData.ksParam_idFailureCategory);
1189
1190 def _actionFailureCategoryEditPost(self):
1191 """ Action wrapper. """
1192 from testmanager.core.failurecategory import FailureCategoryData, FailureCategoryLogic;
1193 from testmanager.webui.wuiadminfailurecategory import WuiFailureCategory;
1194 return self._actionGenericFormEditPost(FailureCategoryData, FailureCategoryLogic, WuiFailureCategory,
1195 self.ksActionFailureCategoryList);
1196
1197 #
1198 # Failure Reason actions
1199 #
1200 def _actionFailureReasonList(self):
1201 """ Action wrapper. """
1202 from testmanager.core.failurereason import FailureReasonLogic;
1203 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReasonList;
1204 return self._actionGenericListing(FailureReasonLogic, WuiAdminFailureReasonList)
1205
1206 def _actionFailureReasonAdd(self):
1207 """ Action wrapper. """
1208 from testmanager.core.failurereason import FailureReasonData;
1209 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReason;
1210 return self._actionGenericFormAdd(FailureReasonData, WuiAdminFailureReason);
1211
1212 def _actionFailureReasonAddPost(self):
1213 """ Action wrapper. """
1214 from testmanager.core.failurereason import FailureReasonData, FailureReasonLogic;
1215 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReason;
1216 return self._actionGenericFormAddPost(FailureReasonData, FailureReasonLogic, WuiAdminFailureReason,
1217 self.ksActionFailureReasonList);
1218
1219 def _actionFailureReasonDetails(self):
1220 """ Action wrapper. """
1221 from testmanager.core.failurereason import FailureReasonData, FailureReasonLogic;
1222 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReason;
1223 return self._actionGenericFormDetails(FailureReasonData, FailureReasonLogic, WuiAdminFailureReason);
1224
1225 def _actionFailureReasonDoRemove(self):
1226 """ Action wrapper. """
1227 from testmanager.core.failurereason import FailureReasonData, FailureReasonLogic;
1228 return self._actionGenericDoRemove(FailureReasonLogic, FailureReasonData.ksParam_idFailureReason,
1229 self.ksActionFailureReasonList);
1230
1231 def _actionFailureReasonEdit(self):
1232 """ Action wrapper. """
1233 from testmanager.core.failurereason import FailureReasonData;
1234 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReason;
1235 return self._actionGenericFormEdit(FailureReasonData, WuiAdminFailureReason);
1236
1237
1238 def _actionFailureReasonEditPost(self):
1239 """ Action wrapper. """
1240 from testmanager.core.failurereason import FailureReasonData, FailureReasonLogic;
1241 from testmanager.webui.wuiadminfailurereason import WuiAdminFailureReason;
1242 return self._actionGenericFormEditPost(FailureReasonData, FailureReasonLogic, WuiAdminFailureReason,
1243 self.ksActionFailureReasonList)
1244
1245
1246 #
1247 # Overrides.
1248 #
1249
1250 def _generatePage(self):
1251 """Override parent handler in order to change page titte"""
1252 if self._sPageTitle is not None:
1253 self._sPageTitle = 'Test Manager Admin - ' + self._sPageTitle
1254
1255 return WuiDispatcherBase._generatePage(self)
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette