VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/testmanager/webui/wuiadminschedgroup.py

Last change on this file was 106061, checked in by vboxsync, 2 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.2 KB
Line 
1# -*- coding: utf-8 -*-
2# $Id: wuiadminschedgroup.py 106061 2024-09-16 14:03:52Z vboxsync $
3
4"""
5Test Manager WUI - Scheduling groups.
6"""
7
8__copyright__ = \
9"""
10Copyright (C) 2012-2024 Oracle and/or its affiliates.
11
12This file is part of VirtualBox base platform packages, as
13available from https://www.virtualbox.org.
14
15This program is free software; you can redistribute it and/or
16modify it under the terms of the GNU General Public License
17as published by the Free Software Foundation, in version 3 of the
18License.
19
20This program is distributed in the hope that it will be useful, but
21WITHOUT ANY WARRANTY; without even the implied warranty of
22MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23General Public License for more details.
24
25You should have received a copy of the GNU General Public License
26along with this program; if not, see <https://www.gnu.org/licenses>.
27
28The contents of this file may alternatively be used under the terms
29of the Common Development and Distribution License Version 1.0
30(CDDL), a copy of it is provided in the "COPYING.CDDL" file included
31in the VirtualBox distribution, in which case the provisions of the
32CDDL are applicable instead of those of the GPL.
33
34You may elect to license modified versions of this file under the
35terms and conditions of either the GPL or the CDDL or both.
36
37SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
38"""
39__version__ = "$Revision: 106061 $"
40
41
42# Validation Kit imports.
43from testmanager.core.buildsource import BuildSourceData, BuildSourceLogic;
44from testmanager.core.db import isDbTimestampInfinity;
45from testmanager.core.schedgroup import SchedGroupData, SchedGroupDataEx;
46from testmanager.core.testgroup import TestGroupData, TestGroupLogic;
47from testmanager.core.testbox import TestBoxLogic;
48from testmanager.webui.wuicontentbase import WuiFormContentBase, WuiListContentBase, WuiTmLink, WuiRawHtml;
49from testmanager.webui.wuiadmintestbox import WuiTestBoxDetailsLink;
50
51
52class WuiSchedGroup(WuiFormContentBase):
53 """
54 WUI Scheduling Groups HTML content generator.
55 """
56
57 def __init__(self, oData, sMode, oDisp):
58 assert isinstance(oData, SchedGroupData);
59 if sMode == WuiFormContentBase.ksMode_Add:
60 sTitle = 'New Scheduling Group';
61 elif sMode == WuiFormContentBase.ksMode_Edit:
62 sTitle = 'Edit Scheduling Group'
63 else:
64 assert sMode == WuiFormContentBase.ksMode_Show;
65 sTitle = 'Scheduling Group';
66 WuiFormContentBase.__init__(self, oData, sMode, 'SchedGroup', oDisp, sTitle);
67
68 # Read additional bits form the DB, unless we're in
69 if sMode != WuiFormContentBase.ksMode_Show:
70 self._aoAllRelevantTestGroups = TestGroupLogic(oDisp.getDb()).getAll();
71 self._aoAllRelevantTestBoxes = TestBoxLogic(oDisp.getDb()).getAll();
72 else:
73 self._aoAllRelevantTestGroups = [oMember.oTestGroup for oMember in oData.aoMembers];
74 self._aoAllRelevantTestBoxes = [oMember.oTestBox for oMember in oData.aoTestBoxes];
75
76 def _populateForm(self, oForm, oData): # type: (WuiHlpForm, SchedGroupDataEx) -> bool
77 """
78 Construct an HTML form
79 """
80
81 oForm.addIntRO( SchedGroupData.ksParam_idSchedGroup, oData.idSchedGroup, 'ID')
82 oForm.addTimestampRO(SchedGroupData.ksParam_tsEffective, oData.tsEffective, 'Last changed')
83 oForm.addTimestampRO(SchedGroupData.ksParam_tsExpire, oData.tsExpire, 'Expires (excl)')
84 oForm.addIntRO( SchedGroupData.ksParam_uidAuthor, oData.uidAuthor, 'Changed by UID')
85 oForm.addText( SchedGroupData.ksParam_sName, oData.sName, 'Name')
86 oForm.addText( SchedGroupData.ksParam_sDescription, oData.sDescription, 'Description')
87 oForm.addCheckBox( SchedGroupData.ksParam_fEnabled, oData.fEnabled, 'Enabled')
88
89 oForm.addComboBox( SchedGroupData.ksParam_enmScheduler, oData.enmScheduler, 'Scheduler type',
90 SchedGroupData.kasSchedulerDesc)
91
92 aoBuildSrcIds = BuildSourceLogic(self._oDisp.getDb()).fetchForCombo();
93 oForm.addComboBox( SchedGroupData.ksParam_idBuildSrc, oData.idBuildSrc, 'Build source', aoBuildSrcIds);
94 oForm.addComboBox( SchedGroupData.ksParam_idBuildSrcTestSuite,
95 oData.idBuildSrcTestSuite, 'Test suite', aoBuildSrcIds);
96
97 oForm.addListOfSchedGroupMembers(SchedGroupDataEx.ksParam_aoMembers,
98 oData.aoMembers, self._aoAllRelevantTestGroups, 'Test groups',
99 oData.idSchedGroup, fReadOnly = self._sMode == WuiFormContentBase.ksMode_Show);
100
101 oForm.addListOfSchedGroupBoxes(SchedGroupDataEx.ksParam_aoTestBoxes,
102 oData.aoTestBoxes, self._aoAllRelevantTestBoxes, 'Test boxes',
103 oData.idSchedGroup, fReadOnly = self._sMode == WuiFormContentBase.ksMode_Show);
104
105 oForm.addMultilineText(SchedGroupData.ksParam_sComment, oData.sComment, 'Comment');
106 oForm.addSubmit()
107
108 return True;
109
110class WuiAdminSchedGroupList(WuiListContentBase):
111 """
112 Content generator for the schedule group listing.
113 """
114
115 def __init__(self, aoEntries, iPage, cItemsPerPage, tsEffective, fnDPrint, oDisp, aiSelectedSortColumns = None):
116 WuiListContentBase.__init__(self, aoEntries, iPage, cItemsPerPage, tsEffective,
117 sTitle = 'Registered Scheduling Groups', sId = 'schedgroups',
118 fnDPrint = fnDPrint, oDisp = oDisp, aiSelectedSortColumns = aiSelectedSortColumns);
119
120 self._asColumnHeaders = [
121 'ID', 'Name', 'Enabled', 'Scheduler Type',
122 'Build Source', 'Validation Kit Source', 'Test Groups', 'TestBoxes', 'Note', 'Actions',
123 ];
124
125 self._asColumnAttribs = [
126 'align="right"', 'align="center"', 'align="center"', 'align="center"',
127 'align="center"', 'align="center"', '', '', 'align="center"', 'align="center"',
128 ];
129
130 def _formatListEntry(self, iEntry):
131 """
132 Format *show all* table entry
133 """
134 from testmanager.webui.wuiadmin import WuiAdmin
135 oEntry = self._aoEntries[iEntry] # type: SchedGroupDataEx
136
137 oBuildSrc = None;
138 if oEntry.idBuildSrc is not None:
139 oBuildSrc = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc),
140 WuiAdmin.ksScriptName,
141 { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
142 BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, });
143
144 oValidationKitSrc = None;
145 if oEntry.idBuildSrcTestSuite is not None:
146 oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit
147 else str(oEntry.idBuildSrcTestSuite),
148 WuiAdmin.ksScriptName,
149 { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails,
150 BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, });
151
152 # Test groups
153 aoMembers = [];
154 for oMember in oEntry.aoMembers:
155 aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName,
156 { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails,
157 TestGroupData.ksParam_idTestGroup: oMember.idTestGroup,
158 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, },
159 sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None
160 else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) ));
161
162 # Test boxes.
163 aoTestBoxes = [];
164 for oRelation in oEntry.aoTestBoxes:
165 oTestBox = oRelation.oTestBox;
166 if oTestBox:
167 aoTestBoxes.append(WuiTestBoxDetailsLink(oTestBox, fBracketed = True, tsNow = self._tsEffectiveDate));
168 else:
169 aoTestBoxes.append(WuiRawHtml('#%s' % (oRelation.idTestBox,)));
170
171 # Actions
172 aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName,
173 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails,
174 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
175 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),];
176 if self._oDisp is None or not self._oDisp.isReadOnlyUser():
177
178 if isDbTimestampInfinity(oEntry.tsExpire):
179 aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName,
180 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit,
181 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } ));
182 aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName,
183 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone,
184 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup,
185 WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ));
186 if isDbTimestampInfinity(oEntry.tsExpire):
187 aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName,
188 { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove,
189 SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup },
190 sConfirm = 'Are you sure you want to remove scheduling group #%d?'
191 % (oEntry.idSchedGroup,)));
192
193 return [
194 oEntry.idSchedGroup,
195 oEntry.sName,
196 oEntry.fEnabled,
197 oEntry.enmScheduler,
198 oBuildSrc,
199 oValidationKitSrc,
200 aoMembers,
201 aoTestBoxes,
202 self._formatCommentCell(oEntry.sComment),
203 aoActions,
204 ];
205
Note: See TracBrowser for help on using the repository browser.

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