def _formatListEntry(self, iEntry): """ Format *show all* table entry """ from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] aoActions = [ WuiTmLink( 'Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), WuiTmLink( 'Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcClone, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink( 'Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcEdit, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc }), WuiTmLink( 'Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDoRemove, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc }, sConfirm='Are you sure you want to remove build source #%d?' % (oEntry.idBuildSrc, )) ] return [ oEntry.idBuildSrc, oEntry.sName, oEntry.sDescription, oEntry.sProduct, oEntry.sBranch, self._getSubList(oEntry.asTypes), self._getSubList(oEntry.asOsArches), oEntry.iFirstRevision, oEntry.iLastRevision, utils.formatIntervalSeconds2(oEntry.cSecMaxAge) if oEntry.cSecMaxAge is not None else None, aoActions, ]
def _formatListEntry(self, iEntry): from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry]; aoActions = []; if oEntry.sLogUrl is not None: aoActions.append(WuiBuildLogLink(oEntry.sLogUrl, 'Build Log')); dParams = { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildBlacklistAdd, BuildBlacklistData.ksParam_sProduct: oEntry.oCat.sProduct, BuildBlacklistData.ksParam_sBranch: oEntry.oCat.sBranch, BuildBlacklistData.ksParam_asTypes: oEntry.oCat.sType, BuildBlacklistData.ksParam_asOsArches: oEntry.oCat.asOsArches, BuildBlacklistData.ksParam_iFirstRevision: oEntry.iRevision, BuildBlacklistData.ksParam_iLastRevision: oEntry.iRevision } if self._oDisp is None or not self._oDisp.isReadOnlyUser(): aoActions += [ WuiTmLink('Blacklist', WuiAdmin.ksScriptName, dParams), WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDetails, BuildData.ksParam_idBuild: oEntry.idBuild, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildClone, BuildData.ksParam_idBuild: oEntry.idBuild, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ]; if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildEdit, BuildData.ksParam_idBuild: oEntry.idBuild }), WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDoRemove, BuildData.ksParam_idBuild: oEntry.idBuild }, sConfirm = 'Are you sure you want to remove build #%d?' % (oEntry.idBuild,) ), ]; return [ oEntry.idBuild, oEntry.oCat.sProduct, oEntry.oCat.sBranch, WuiSvnLinkWithTooltip(oEntry.iRevision, oEntry.oCat.sRepository, sName = '%s r%s' % (oEntry.sVersion, oEntry.iRevision,)), oEntry.oCat.sType, ' '.join(oEntry.oCat.asOsArches), 'batch' if oEntry.uidAuthor is None else oEntry.uidAuthor, self.formatTsShort(oEntry.tsCreated), oEntry.sBinaries if not oEntry.fBinariesDeleted else '<Deleted>', aoActions, ];
def _formatListEntry(self, iEntry): """ Format *show all* table entry """ from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ]; if self._oDisp is None or not self._oDisp.isReadOnlyUser(): aoActions += [ WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcClone, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ]; if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcEdit, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc } ), WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDoRemove, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc }, sConfirm = 'Are you sure you want to remove build source #%d?' % (oEntry.idBuildSrc,) ) ]; return [ oEntry.idBuildSrc, oEntry.sName, oEntry.sDescription, oEntry.sProduct, oEntry.sBranch, self._getSubList(oEntry.asTypes), self._getSubList(oEntry.asOsArches), oEntry.iFirstRevision, oEntry.iLastRevision, utils.formatIntervalSeconds2(oEntry.cSecMaxAge) if oEntry.cSecMaxAge is not None else None, aoActions, ]
def _formatListEntry(self, iEntry): oEntry = self._aoEntries[iEntry] from testmanager.webui.wuiadmin import WuiAdmin aoRet = \ [ oEntry.sName.replace('-', u'\u2011'), 'Enabled' if oEntry.fEnabled else 'Disabled', utils.formatIntervalSeconds(oEntry.cSecTimeout), ] # Base command and variations. fNoGang = True fNoSubName = True fAllDefaultTimeouts = True for oVar in oEntry.aoTestCaseArgs: if fNoSubName and oVar.sSubName is not None and len( oVar.sSubName.strip()) > 0: fNoSubName = False if oVar.cGangMembers > 1: fNoGang = False if oVar.cSecTimeout is not None: fAllDefaultTimeouts = False sHtml = ' <table class="tminnertbl" width=100%>\n' \ ' <tr>\n' \ ' ' if not fNoSubName: sHtml += '<th class="tmtcasubname">Sub-name</th>' if not fNoGang: sHtml += '<th class="tmtcagangsize">Gang Size</th>' if not fAllDefaultTimeouts: sHtml += '<th class="tmtcatimeout">Timeout</th>' sHtml += '<th>Additional Arguments</b></th>\n' \ ' </tr>\n' for oTmp in oEntry.aoTestCaseArgs: sHtml += '<tr>' if not fNoSubName: sHtml += '<td>%s</td>' % (webutils.escapeElem(oTmp.sSubName) if oTmp.sSubName is not None else '') if not fNoGang: sHtml += '<td>%d</td>' % (oTmp.cGangMembers, ) if not fAllDefaultTimeouts: sHtml += '<td>%s</td>' \ % (utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else 'Default',) sHtml += u'<td>%s</td></tr>' \ % ( webutils.escapeElem(oTmp.sArgs.replace('-', u'\u2011')) if len(oTmp.sArgs) > 0 else u'\u2011',) sHtml += '</tr>\n' sHtml += ' </table>' aoRet.append( [oEntry.sBaseCmd.replace('-', u'\u2011'), WuiRawHtml(sHtml)]) # Next. aoRet += [ oEntry.sValidationKitZips if oEntry.sValidationKitZips is not None else '', ] # Show dependency on other testcases if oEntry.aoDepTestCases not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepTestCases: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \ % (WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase, sTmp.idTestCase, sTmp.sName) sHtml += ' </ul>\n' else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)) # Show dependency on global resources if oEntry.aoDepGlobalResources not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepGlobalResources: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \ % (WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionGlobalRsrcShowEdit, GlobalResourceData.ksParam_idGlobalRsrc, sTmp.idGlobalRsrc, sTmp.sName) sHtml += ' </ul>\n' else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)) # Comment (note). aoRet.append(self._formatCommentCell(oEntry.sComment)) # Show actions that can be taken. aoActions = [ WuiTmLink( 'Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase }), ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( 'Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase: oEntry.idTestCase })) aoActions.append( WuiTmLink( 'Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase })) if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( 'Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDoRemove, TestCaseData.ksParam_idTestCase: oEntry.idTestCase }, sConfirm='Are you sure you want to remove test case #%d?' % (oEntry.idTestCase, ))) aoRet.append(aoActions) return aoRet
def _formatListEntry(self, iEntry): oEntry = self._aoEntries[iEntry] from testmanager.webui.wuiadmin import WuiAdmin # # Test case list. # sHtml = '' if len(oEntry.aoMembers) > 0: for oMember in oEntry.aoMembers: sHtml += '<dl>\n' \ ' <dd><strong>%s</strong> (priority: %d) %s %s</dd>\n' \ % ( webutils.escapeElem(oMember.oTestCase.sName), oMember.iSchedPriority, WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails, TestCaseData.ksParam_idGenTestCase: oMember.oTestCase.idGenTestCase, } ).toHtml(), WuiTmLink('Edit', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase: oMember.oTestCase.idTestCase, } ).toHtml() if isDbTimestampInfinity(oMember.oTestCase.tsExpire) else '', ) sHtml += ' <dt>\n' fNoGang = True for oVar in oMember.oTestCase.aoTestCaseArgs: if oVar.cGangMembers > 1: fNoGang = False break sHtml += ' <table class="tminnertbl" width="100%">\n' if fNoGang: sHtml += ' <tr><th>Timeout</th><th>Arguments</th></tr>\n' else: sHtml += ' <tr><th>Gang Size</th><th>Timeout</th><th style="text-align:left;">Arguments</th></tr>\n' cArgsIncluded = 0 for oVar in oMember.oTestCase.aoTestCaseArgs: if oMember.aidTestCaseArgs is None or oVar.idTestCaseArgs in oMember.aidTestCaseArgs: cArgsIncluded += 1 if fNoGang: sHtml += ' <tr>' else: sHtml += ' <tr><td>%s</td>' % ( oVar.cGangMembers, ) sHtml += '<td>%s</td><td>%s</td></tr>\n' \ % ( utils.formatIntervalSeconds(oMember.oTestCase.cSecTimeout if oVar.cSecTimeout is None else oVar.cSecTimeout), webutils.escapeElem(oVar.sArgs), ) if cArgsIncluded == 0: sHtml += ' <tr><td colspan="%u">No arguments selected.</td></tr>\n' % ( 2 if fNoGang else 3, ) sHtml += ' </table>\n' \ ' </dl>\n' oTestCases = WuiRawHtml(sHtml) # # Actions. # aoActions = [ WuiTmLink( 'Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }) ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( 'Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupEdit, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup })) aoActions.append( WuiTmLink( 'Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, })) aoActions.append( WuiTmLink( 'Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDoRemove, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup }, sConfirm='Do you really want to remove test group #%d?' % (oEntry.idTestGroup, ))) else: aoActions.append( WuiTmLink( 'Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, })) return [ oEntry.idTestGroup, oEntry.sName, oEntry.sDescription if oEntry.sDescription is not None else '', oTestCases, self._formatCommentCell(oEntry.sComment, cMaxLines=max(3, len(oEntry.aoMembers) * 2)), aoActions ]
def _formatListEntry(self, iEntry): """ Format *show all* table entry """ from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] oBuildSrc = None; if oEntry.idBuildSrc is not None: oBuildSrc = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, }); oValidationKitSrc = None; if oEntry.idBuildSrcTestSuite is not None: oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit else str(oEntry.idBuildSrcTestSuite), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, }); # Test groups aoMembers = []; for oMember in oEntry.aoMembers: aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails, TestGroupData.ksParam_idTestGroup: oMember.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) )); # Test boxes. aoTestBoxes = []; for oTestBox in oEntry.aoTestBoxes: aoTestBoxes.append(WuiTmLink(oTestBox.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails, TestBoxData.ksParam_idTestBox: oTestBox.idTestBox, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, sTitle = '#%s - %s / %s - %s.%s (%s)' % (oTestBox.idTestBox, oTestBox.ip, oTestBox.uuidSystem, oTestBox.sOs, oTestBox.sCpuArch, oTestBox.sOsVersion,))); # Actions aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),]; if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } )); aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } )); if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup }, sConfirm = 'Are you sure you want to remove scheduling group #%d?' % (oEntry.idSchedGroup,))); return [ oEntry.idSchedGroup, oEntry.sName, oEntry.fEnabled, oEntry.enmScheduler, oBuildSrc, oValidationKitSrc, aoMembers, aoTestBoxes, aoActions, ];
def _formatListEntry(self, iEntry): # pylint: disable=R0914 from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] # Lights outs managment. if oEntry.enmLomKind == TestBoxData.ksLomKind_ILOM: aoLom = [ WuiLinkBase('ILOM', 'https://%s/' % (oEntry.ipLom, ), fBracketed=False), ] elif oEntry.enmLomKind == TestBoxData.ksLomKind_ELOM: aoLom = [ WuiLinkBase('ELOM', 'http://%s/' % (oEntry.ipLom, ), fBracketed=False), ] elif oEntry.enmLomKind == TestBoxData.ksLomKind_AppleXserveLom: aoLom = ['Apple LOM'] elif oEntry.enmLomKind == TestBoxData.ksLomKind_None: aoLom = ['none'] else: aoLom = [ 'Unexpected enmLomKind value "%s"' % (oEntry.enmLomKind, ) ] if oEntry.ipLom is not None: if oEntry.enmLomKind in [ TestBoxData.ksLomKind_ILOM, TestBoxData.ksLomKind_ELOM ]: aoLom += [ WuiLinkBase('(ssh)', 'ssh://%s' % (oEntry.ipLom, ), fBracketed=False) ] aoLom += [WuiRawHtml('<br>'), '%s' % (oEntry.ipLom, )] # State and Last seen. if oEntry.oStatus is None: oSeen = WuiSpanText('tmspan-offline', 'Never') oState = '' else: oDelta = oEntry.tsCurrent - oEntry.oStatus.tsUpdated if oDelta.days <= 0 and oDelta.seconds <= self.kcSecMaxStatusDeltaAlive: oSeen = WuiSpanText( 'tmspan-online', u'%s\u00a0s\u00a0ago' % (oDelta.days * 24 * 3600 + oDelta.seconds, )) else: oSeen = WuiSpanText( 'tmspan-offline', u'%s' % (self.formatTsShort(oEntry.oStatus.tsUpdated), )) if oEntry.oStatus.idTestSet is None: oState = str(oEntry.oStatus.enmState) else: from testmanager.webui.wuimain import WuiMain oState = WuiTmLink( oEntry.oStatus.enmState, WuiMain.ksScriptName, # pylint: disable=R0204 { WuiMain.ksParamAction: WuiMain.ksActionTestResultDetails, TestSetData.ksParam_idTestSet: oEntry.oStatus.idTestSet, }, sTitle='#%u' % (oEntry.oStatus.idTestSet, ), fBracketed=False) # Comment oComment = self._formatCommentCell(oEntry.sComment) # Group links. aoGroups = [] for oInGroup in oEntry.aoInSchedGroups: oSchedGroup = oInGroup.oSchedGroup aoGroups.append( WuiTmLink(oSchedGroup.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit, SchedGroupData.ksParam_idSchedGroup: oSchedGroup.idSchedGroup, }, sTitle='#%u' % (oSchedGroup.idSchedGroup, ), fBracketed=len(oEntry.aoInSchedGroups) > 1)) # Reformat the OS version to take less space. aoOs = ['N/A'] if oEntry.sOs is not None and oEntry.sOsVersion is not None and oEntry.sCpuArch: sOsVersion = oEntry.sOsVersion if sOsVersion[0] not in [ 'v', 'V', 'r', 'R'] \ and sOsVersion[0].isdigit() \ and sOsVersion.find('.') in range(4) \ and oEntry.sOs in [ 'linux', 'solaris', 'darwin', ]: sOsVersion = 'v' + sOsVersion sVer1 = sOsVersion sVer2 = None if oEntry.sOs == 'linux' or oEntry.sOs == 'darwin': iSep = sOsVersion.find(' / ') if iSep > 0: sVer1 = sOsVersion[:iSep].strip() sVer2 = sOsVersion[iSep + 3:].strip() sVer2 = sVer2.replace('Red Hat Enterprise Linux Server', 'RHEL') sVer2 = sVer2.replace('Oracle Linux Server', 'OL') elif oEntry.sOs == 'solaris': iSep = sOsVersion.find(' (') if iSep > 0 and sOsVersion[-1] == ')': sVer1 = sOsVersion[:iSep].strip() sVer2 = sOsVersion[iSep + 2:-1].strip() elif oEntry.sOs == 'win': iSep = sOsVersion.find('build') if iSep > 0: sVer1 = sOsVersion[:iSep].strip() sVer2 = 'B' + sOsVersion[iSep + 1:].strip() aoOs = [ WuiSpanText('tmspan-osarch', u'%s.%s' % ( oEntry.sOs, oEntry.sCpuArch, )), WuiSpanText( 'tmspan-osver1', sVer1.replace('-', u'\u2011'), ), ] if sVer2 is not None: aoOs += [ WuiRawHtml('<br>'), WuiSpanText('tmspan-osver2', sVer2.replace('-', u'\u2011')), ] # Format the CPU revision. oCpu = None if oEntry.lCpuRevision is not None and oEntry.sCpuVendor is not None and oEntry.sCpuName is not None: oCpu = [ u'%s (fam:%xh\u00a0m:%xh\u00a0s:%xh)' % ( oEntry.sCpuVendor, oEntry.getCpuFamily(), oEntry.getCpuModel(), oEntry.getCpuStepping(), ), WuiRawHtml('<br>'), oEntry.sCpuName, ] else: oCpu = [] if oEntry.sCpuVendor is not None: oCpu.append(oEntry.sCpuVendor) if oEntry.lCpuRevision is not None: oCpu.append('%#x' % (oEntry.lCpuRevision, )) if oEntry.sCpuName is not None: oCpu.append(oEntry.sCpuName) # Stuff cpu vendor and cpu/box features into one field. asFeatures = [] if oEntry.fCpuHwVirt is True: asFeatures.append(u'HW\u2011Virt') if oEntry.fCpuNestedPaging is True: asFeatures.append(u'Nested\u2011Paging') if oEntry.fCpu64BitGuest is True: asFeatures.append(u'64\u2011bit\u2011Guest') if oEntry.fChipsetIoMmu is True: asFeatures.append(u'I/O\u2011MMU') sFeatures = u' '.join(asFeatures) if asFeatures else u'' # Collection applicable actions. aoActions = [ WuiTmLink( 'Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails, TestBoxData.ksParam_idTestBox: oEntry.idTestBox, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ] if self._oDisp is None or not self._oDisp.isReadOnlyUser(): if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink( 'Edit', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxEdit, TestBoxData.ksParam_idTestBox: oEntry.idTestBox, }), WuiTmLink( 'Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxRemovePost, TestBoxData.ksParam_idTestBox: oEntry.idTestBox }, sConfirm='Are you sure that you want to remove %s (%s)?' % (oEntry.sName, oEntry.ip)), ] if oEntry.sOs not in [ 'win', 'os2', ] and oEntry.ip is not None: aoActions.append( WuiLinkBase( 'ssh', 'ssh://vbox@%s' % (oEntry.ip, ), )) return [ self._getCheckBoxColumn(iEntry, oEntry.idTestBox), [ WuiSpanText('tmspan-name', oEntry.sName), WuiRawHtml('<br>'), '%s' % (oEntry.ip, ), ], aoLom, [ '' if oEntry.fEnabled else 'disabled / ', oState, WuiRawHtml('<br>'), oSeen, ], oEntry.enmPendingCmd, oComment, WuiSvnLink(oEntry.iTestBoxScriptRev), oEntry.formatPythonVersion(), aoGroups, aoOs, oCpu, sFeatures, oEntry.cCpus if oEntry.cCpus is not None else 'N/A', utils.formatNumberNbsp(oEntry.cMbMemory) + u'\u00a0MB' if oEntry.cMbMemory is not None else 'N/A', utils.formatNumberNbsp(oEntry.cMbScratch) + u'\u00a0MB' if oEntry.cMbScratch is not None else 'N/A', aoActions, ]
def _formatListEntry(self, iEntry): # pylint: disable=R0914 from testmanager.webui.wuiadmin import WuiAdmin; oEntry = self._aoEntries[iEntry]; # Lights outs managment. if oEntry.enmLomKind == TestBoxData.ksLomKind_ILOM: aoLom = [ WuiLinkBase('ILOM', 'https://%s/' % (oEntry.ipLom,), fBracketed = False), ]; elif oEntry.enmLomKind == TestBoxData.ksLomKind_ELOM: aoLom = [ WuiLinkBase('ELOM', 'http://%s/' % (oEntry.ipLom,), fBracketed = False), ]; elif oEntry.enmLomKind == TestBoxData.ksLomKind_AppleXserveLom: aoLom = [ 'Apple LOM' ]; elif oEntry.enmLomKind == TestBoxData.ksLomKind_None: aoLom = [ 'none' ]; else: aoLom = [ 'Unexpected enmLomKind value "%s"' % (oEntry.enmLomKind,) ]; if oEntry.ipLom is not None: if oEntry.enmLomKind in [ TestBoxData.ksLomKind_ILOM, TestBoxData.ksLomKind_ELOM ]: aoLom += [ WuiLinkBase('(ssh)', 'ssh://%s' % (oEntry.ipLom,), fBracketed = False) ]; aoLom += [ WuiRawHtml('<br>'), '%s' % (oEntry.ipLom,) ]; # State and Last seen. if oEntry.oStatus is None: oSeen = WuiSpanText('tmspan-offline', 'Never'); oState = ''; else: oDelta = oEntry.tsCurrent - oEntry.oStatus.tsUpdated; if oDelta.days <= 0 and oDelta.seconds <= 15*60: # 15 mins and we consider you dead. oSeen = WuiSpanText('tmspan-online', u'%s\u00a0s\u00a0ago' % (oDelta.days * 24 * 3600 + oDelta.seconds,)); else: oSeen = WuiSpanText('tmspan-offline', u'%s' % (self.formatTsShort(oEntry.oStatus.tsUpdated),)); if oEntry.oStatus.idTestSet is None: oState = str(oEntry.oStatus.enmState); else: from testmanager.webui.wuimain import WuiMain; oState = WuiTmLink(oEntry.oStatus.enmState, WuiMain.ksScriptName, # pylint: disable=R0204 { WuiMain.ksParamAction: WuiMain.ksActionTestResultDetails, TestSetData.ksParam_idTestSet: oEntry.oStatus.idTestSet, }, sTitle = '#%u' % (oEntry.oStatus.idTestSet,), fBracketed = False); # Comment oComment = self._formatCommentCell(oEntry.sComment); # Group links. aoGroups = []; for oInGroup in oEntry.aoInSchedGroups: oSchedGroup = oInGroup.oSchedGroup; aoGroups.append(WuiTmLink(oSchedGroup.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit, SchedGroupData.ksParam_idSchedGroup: oSchedGroup.idSchedGroup, }, sTitle = '#%u' % (oSchedGroup.idSchedGroup,), fBracketed = len(oEntry.aoInSchedGroups) > 1)); # Reformat the OS version to take less space. aoOs = [ 'N/A' ]; if oEntry.sOs is not None and oEntry.sOsVersion is not None and oEntry.sCpuArch: sOsVersion = oEntry.sOsVersion; if sOsVersion[0] not in [ 'v', 'V', 'r', 'R'] \ and sOsVersion[0].isdigit() \ and sOsVersion.find('.') in range(4) \ and oEntry.sOs in [ 'linux', 'solaris', 'darwin', ]: sOsVersion = 'v' + sOsVersion; sVer1 = sOsVersion; sVer2 = None; if oEntry.sOs == 'linux' or oEntry.sOs == 'darwin': iSep = sOsVersion.find(' / '); if iSep > 0: sVer1 = sOsVersion[:iSep].strip(); sVer2 = sOsVersion[iSep + 3:].strip(); sVer2 = sVer2.replace('Red Hat Enterprise Linux Server', 'RHEL'); sVer2 = sVer2.replace('Oracle Linux Server', 'OL'); elif oEntry.sOs == 'solaris': iSep = sOsVersion.find(' ('); if iSep > 0 and sOsVersion[-1] == ')': sVer1 = sOsVersion[:iSep].strip(); sVer2 = sOsVersion[iSep + 2:-1].strip(); aoOs = [ WuiSpanText('tmspan-osarch', u'%s.%s' % (oEntry.sOs, oEntry.sCpuArch,)), WuiSpanText('tmspan-osver1', sVer1.replace('-', u'\u2011'),), ]; if sVer2 is not None: aoOs += [ WuiRawHtml('<br>'), WuiSpanText('tmspan-osver2', sVer2.replace('-', u'\u2011')), ]; # Format the CPU revision. oCpu = None; if oEntry.lCpuRevision is not None and oEntry.sCpuVendor is not None and oEntry.sCpuName is not None: oCpu = [ u'%s (fam:%xh\u00a0m:%xh\u00a0s:%xh)' % (oEntry.sCpuVendor, oEntry.getCpuFamily(), oEntry.getCpuModel(), oEntry.getCpuStepping(),), WuiRawHtml('<br>'), oEntry.sCpuName, ]; else: oCpu = []; if oEntry.sCpuVendor is not None: oCpu.append(oEntry.sCpuVendor); if oEntry.lCpuRevision is not None: oCpu.append('%#x' % (oEntry.lCpuRevision,)); if oEntry.sCpuName is not None: oCpu.append(oEntry.sCpuName); # Stuff cpu vendor and cpu/box features into one field. asFeatures = [] if oEntry.fCpuHwVirt is True: asFeatures.append(u'HW\u2011Virt'); if oEntry.fCpuNestedPaging is True: asFeatures.append(u'Nested\u2011Paging'); if oEntry.fCpu64BitGuest is True: asFeatures.append(u'64\u2011bit\u2011Guest'); if oEntry.fChipsetIoMmu is True: asFeatures.append(u'I/O\u2011MMU'); sFeatures = u' '.join(asFeatures) if len(asFeatures) > 0 else u''; # Collection applicable actions. aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails, TestBoxData.ksParam_idTestBox: oEntry.idTestBox, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ), ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink('Edit', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxEdit, TestBoxData.ksParam_idTestBox: oEntry.idTestBox, } ), WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxRemovePost, TestBoxData.ksParam_idTestBox: oEntry.idTestBox }, sConfirm = 'Are you sure that you want to remove %s (%s)?' % (oEntry.sName, oEntry.ip) ), ] if oEntry.sOs not in [ 'win', 'os2', ] and oEntry.ip is not None: aoActions.append(WuiLinkBase('ssh', 'ssh://vbox@%s' % (oEntry.ip,),)); return [ self._getCheckBoxColumn(iEntry, oEntry.idTestBox), [ WuiSpanText('tmspan-name', oEntry.sName), WuiRawHtml('<br>'), '%s' % (oEntry.ip,),], aoLom, [ '' if oEntry.fEnabled else 'disabled / ', oState, WuiRawHtml('<br>'), oSeen, ], oEntry.enmPendingCmd, oComment, WuiSvnLink(oEntry.iTestBoxScriptRev), oEntry.formatPythonVersion(), aoGroups, aoOs, oCpu, sFeatures, oEntry.cCpus if oEntry.cCpus is not None else 'N/A', utils.formatNumberNbsp(oEntry.cMbMemory) + u'\u00a0MB' if oEntry.cMbMemory is not None else 'N/A', utils.formatNumberNbsp(oEntry.cMbScratch) + u'\u00a0MB' if oEntry.cMbScratch is not None else 'N/A', aoActions, ];
def _formatListEntry(self, iEntry): """ Format *show all* table entry """ from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] oBuildSrc = None if oEntry.idBuildSrc is not None: oBuildSrc = WuiTmLink( oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, }) oValidationKitSrc = None if oEntry.idBuildSrcTestSuite is not None: oValidationKitSrc = WuiTmLink( oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit else str(oEntry.idBuildSrcTestSuite), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, }) # Test groups aoMembers = [] for oMember in oEntry.aoMembers: aoMembers.append( WuiTmLink( oMember.oTestGroup.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails, TestGroupData.ksParam_idTestGroup: oMember.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, sTitle='#%s' % (oMember.idTestGroup, ) if oMember.oTestGroup.sDescription is None else '#%s - %s' % ( oMember.idTestGroup, oMember.oTestGroup.sDescription, ))) # Test boxes. aoTestBoxes = [] for oTestBox in oEntry.aoTestBoxes: aoTestBoxes.append( WuiTmLink( oTestBox.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestBoxDetails, TestBoxData.ksParam_idTestBox: oTestBox.idTestBox, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, sTitle='#%s - %s / %s - %s.%s (%s)' % ( oTestBox.idTestBox, oTestBox.ip, oTestBox.uuidSystem, oTestBox.sOs, oTestBox.sCpuArch, oTestBox.sOsVersion, ))) # Actions aoActions = [ WuiTmLink( 'Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }), ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( 'Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup })) aoActions.append( WuiTmLink( 'Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, })) if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( 'Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup }, sConfirm= 'Are you sure you want to remove scheduling group #%d?' % (oEntry.idSchedGroup, ))) return [ oEntry.idSchedGroup, oEntry.sName, oEntry.fEnabled, oEntry.enmScheduler, oBuildSrc, oValidationKitSrc, aoMembers, aoTestBoxes, aoActions, ]
def _formatListEntry(self, iEntry): oEntry = self._aoEntries[iEntry]; from testmanager.webui.wuiadmin import WuiAdmin; aoRet = \ [ oEntry.sName.replace('-', u'\u2011'), 'Enabled' if oEntry.fEnabled else 'Disabled', utils.formatIntervalSeconds(oEntry.cSecTimeout), ]; # Base command and variations. fNoGang = True; for oVar in oEntry.aoTestCaseArgs: if oVar.cGangMembers > 1: fNoGang = False; break; sHtml = ' <table class="tminnertbl" width=100%>\n' \ ' <tr>\n' \ ' <th>'; if not fNoGang: sHtml += '<th>Gang Size</th>'; sHtml += 'Timeout</th><th>Additional Arguments</b></th>\n' \ ' </tr>\n' for oTmp in oEntry.aoTestCaseArgs: sHtml += '<tr>'; if not fNoGang: sHtml += '<td>%d</td>' % (oTmp.cGangMembers,) sHtml += '<td>%s</td><td>%s</td></tr>\n' \ % ( utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else 'Default', webutils.escapeElem(oTmp.sArgs.replace('-', u'\u2011')),) sHtml += ' </table>' aoRet.append([oEntry.sBaseCmd.replace('-', u'\u2011'), WuiRawHtml(sHtml)]); # Next. aoRet += [ oEntry.sValidationKitZips if oEntry.sValidationKitZips is not None else '', ]; # Show dependency on other testcases if oEntry.aoDepTestCases not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepTestCases: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \ % (WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase, sTmp.idTestCase, sTmp.sName) sHtml += ' </ul>\n' else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)); # Show dependency on global resources if oEntry.aoDepGlobalResources not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepGlobalResources: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' \ % (WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionGlobalRsrcShowEdit, GlobalResourceData.ksParam_idGlobalRsrc, sTmp.idGlobalRsrc, sTmp.sName) sHtml += ' </ul>\n' else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)); # Show actions that can be taken. aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase }), ]; if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase: oEntry.idTestCase })); aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase })); if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDoRemove, TestCaseData.ksParam_idTestCase: oEntry.idTestCase }, sConfirm = 'Are you sure you want to remove test case #%d?' % (oEntry.idTestCase,))); aoRet.append(aoActions); return aoRet;
def _formatListEntry(self, iEntry): oEntry = self._aoEntries[iEntry]; from testmanager.webui.wuiadmin import WuiAdmin; # # Test case list. # sHtml = ''; if len(oEntry.aoMembers) > 0: for oMember in oEntry.aoMembers: sHtml += '<dl>\n' \ ' <dd><strong>%s</strong> (priority: %d) %s %s</dd>\n' \ % ( webutils.escapeElem(oMember.oTestCase.sName), oMember.iSchedPriority, WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails, TestCaseData.ksParam_idGenTestCase: oMember.oTestCase.idGenTestCase, } ).toHtml(), WuiTmLink('Edit', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase: oMember.oTestCase.idTestCase, } ).toHtml() if isDbTimestampInfinity(oMember.oTestCase.tsExpire) else '', ); sHtml += ' <dt>\n'; fNoGang = True; for oVar in oMember.oTestCase.aoTestCaseArgs: if oVar.cGangMembers > 1: fNoGang = False break; sHtml += ' <table class="tminnertbl" width="100%">\n' if fNoGang: sHtml += ' <tr><th>Timeout</th><th>Arguments</th></tr>\n'; else: sHtml += ' <tr><th>Gang Size</th><th>Timeout</th><th style="text-align:left;">Arguments</th></tr>\n'; cArgsIncluded = 0; for oVar in oMember.oTestCase.aoTestCaseArgs: if oMember.aidTestCaseArgs is None or oVar.idTestCaseArgs in oMember.aidTestCaseArgs: cArgsIncluded += 1; if fNoGang: sHtml += ' <tr>'; else: sHtml += ' <tr><td>%s</td>' % (oVar.cGangMembers,); sHtml += '<td>%s</td><td>%s</td></tr>\n' \ % ( utils.formatIntervalSeconds(oMember.oTestCase.cSecTimeout if oVar.cSecTimeout is None else oVar.cSecTimeout), webutils.escapeElem(oVar.sArgs), ); if cArgsIncluded == 0: sHtml += ' <tr><td colspan="%u">No arguments selected.</td></tr>\n' % ( 2 if fNoGang else 3, ); sHtml += ' </table>\n' \ ' </dl>\n'; oTestCases = WuiRawHtml(sHtml); # # Actions. # aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }) ]; if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupEdit, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup })); aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, })); aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDoRemove, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup }, sConfirm = 'Do you really want to remove test group #%d?' % (oEntry.idTestGroup,))); else: aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupClone, TestGroupData.ksParam_idTestGroup: oEntry.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, })); return [ oEntry.idTestGroup, oEntry.sName, oEntry.sDescription if oEntry.sDescription is not None else '', oTestCases, aoActions ];
def _formatListEntry(self, iEntry): oEntry = self._aoEntries[iEntry] from testmanager.webui.wuiadmin import WuiAdmin aoRet = [ oEntry.sName.replace("-", u"\u2011"), "Enabled" if oEntry.fEnabled else "Disabled", utils.formatIntervalSeconds(oEntry.cSecTimeout), ] # Base command and variations. fNoGang = True fNoSubName = True fAllDefaultTimeouts = True for oVar in oEntry.aoTestCaseArgs: if fNoSubName and oVar.sSubName is not None and len(oVar.sSubName.strip()) > 0: fNoSubName = False if oVar.cGangMembers > 1: fNoGang = False if oVar.cSecTimeout is not None: fAllDefaultTimeouts = False sHtml = ' <table class="tminnertbl" width=100%>\n' " <tr>\n" " " if not fNoSubName: sHtml += '<th class="tmtcasubname">Sub-name</th>' if not fNoGang: sHtml += '<th class="tmtcagangsize">Gang Size</th>' if not fAllDefaultTimeouts: sHtml += '<th class="tmtcatimeout">Timeout</th>' sHtml += "<th>Additional Arguments</b></th>\n" " </tr>\n" for oTmp in oEntry.aoTestCaseArgs: sHtml += "<tr>" if not fNoSubName: sHtml += "<td>%s</td>" % (webutils.escapeElem(oTmp.sSubName) if oTmp.sSubName is not None else "") if not fNoGang: sHtml += "<td>%d</td>" % (oTmp.cGangMembers,) if not fAllDefaultTimeouts: sHtml += "<td>%s</td>" % ( utils.formatIntervalSeconds(oTmp.cSecTimeout) if oTmp.cSecTimeout is not None else "Default", ) sHtml += u"<td>%s</td></tr>" % ( webutils.escapeElem(oTmp.sArgs.replace("-", u"\u2011")) if len(oTmp.sArgs) > 0 else u"\u2011", ) sHtml += "</tr>\n" sHtml += " </table>" aoRet.append([oEntry.sBaseCmd.replace("-", u"\u2011"), WuiRawHtml(sHtml)]) # Next. aoRet += [oEntry.sValidationKitZips if oEntry.sValidationKitZips is not None else ""] # Show dependency on other testcases if oEntry.aoDepTestCases not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepTestCases: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' % ( WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase, sTmp.idTestCase, sTmp.sName, ) sHtml += " </ul>\n" else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)) # Show dependency on global resources if oEntry.aoDepGlobalResources not in (None, []): sHtml = ' <ul class="tmshowall">\n' for sTmp in oEntry.aoDepGlobalResources: sHtml += ' <li class="tmshowall"><a href="%s?%s=%s&%s=%s">%s</a></li>\n' % ( WuiAdmin.ksScriptName, WuiAdmin.ksParamAction, WuiAdmin.ksActionGlobalRsrcShowEdit, GlobalResourceData.ksParam_idGlobalRsrc, sTmp.idGlobalRsrc, sTmp.sName, ) sHtml += " </ul>\n" else: sHtml = '<ul class="tmshowall"><li class="tmshowall">None</li></ul>\n' aoRet.append(WuiRawHtml(sHtml)) # Comment (note). aoRet.append(self._formatCommentCell(oEntry.sComment)) # Show actions that can be taken. aoActions = [ WuiTmLink( "Details", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDetails, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase, }, ) ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( "Modify", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseEdit, TestCaseData.ksParam_idTestCase: oEntry.idTestCase, }, ) ) aoActions.append( WuiTmLink( "Clone", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseClone, TestCaseData.ksParam_idGenTestCase: oEntry.idGenTestCase, }, ) ) if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append( WuiTmLink( "Remove", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestCaseDoRemove, TestCaseData.ksParam_idTestCase: oEntry.idTestCase, }, sConfirm="Are you sure you want to remove test case #%d?" % (oEntry.idTestCase,), ) ) aoRet.append(aoActions) return aoRet
def _formatListEntry(self, iEntry): """ Format *show all* table entry """ from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] # type: SchedGroupDataEx oBuildSrc = None; if oEntry.idBuildSrc is not None: oBuildSrc = WuiTmLink(oEntry.oBuildSrc.sName if oEntry.oBuildSrc else str(oEntry.idBuildSrc), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrc, }); oValidationKitSrc = None; if oEntry.idBuildSrcTestSuite is not None: oValidationKitSrc = WuiTmLink(oEntry.oBuildSrcValidationKit.sName if oEntry.oBuildSrcValidationKit else str(oEntry.idBuildSrcTestSuite), WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildSrcDetails, BuildSourceData.ksParam_idBuildSrc: oEntry.idBuildSrcTestSuite, }); # Test groups aoMembers = []; for oMember in oEntry.aoMembers: aoMembers.append(WuiTmLink(oMember.oTestGroup.sName, WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionTestGroupDetails, TestGroupData.ksParam_idTestGroup: oMember.idTestGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, sTitle = '#%s' % (oMember.idTestGroup,) if oMember.oTestGroup.sDescription is None else '#%s - %s' % (oMember.idTestGroup, oMember.oTestGroup.sDescription,) )); # Test boxes. aoTestBoxes = []; for oRelation in oEntry.aoTestBoxes: oTestBox = oRelation.oTestBox; if oTestBox: aoTestBoxes.append(WuiTestBoxDetailsLink(oTestBox, fBracketed = True, tsNow = self._tsEffectiveDate)); else: aoTestBoxes.append(WuiRawHtml('#%s' % (oRelation.idTestBox,))); # Actions aoActions = [ WuiTmLink('Details', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDetails, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } ),]; if self._oDisp is None or not self._oDisp.isReadOnlyUser(): if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Modify', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupEdit, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup } )); aoActions.append(WuiTmLink('Clone', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupClone, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, } )); if isDbTimestampInfinity(oEntry.tsExpire): aoActions.append(WuiTmLink('Remove', WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionSchedGroupDoRemove, SchedGroupData.ksParam_idSchedGroup: oEntry.idSchedGroup }, sConfirm = 'Are you sure you want to remove scheduling group #%d?' % (oEntry.idSchedGroup,))); return [ oEntry.idSchedGroup, oEntry.sName, oEntry.fEnabled, oEntry.enmScheduler, oBuildSrc, oValidationKitSrc, aoMembers, aoTestBoxes, self._formatCommentCell(oEntry.sComment), aoActions, ];
def _formatListEntry(self, iEntry): from testmanager.webui.wuiadmin import WuiAdmin oEntry = self._aoEntries[iEntry] aoActions = [] if oEntry.sLogUrl is not None: aoActions.append(WuiBuildLogLink(oEntry.sLogUrl, "Build Log")) dParams = { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildBlacklistAdd, BuildBlacklistData.ksParam_sProduct: oEntry.oCat.sProduct, BuildBlacklistData.ksParam_sBranch: oEntry.oCat.sBranch, BuildBlacklistData.ksParam_asTypes: oEntry.oCat.sType, BuildBlacklistData.ksParam_asOsArches: oEntry.oCat.asOsArches, BuildBlacklistData.ksParam_iFirstRevision: oEntry.iRevision, BuildBlacklistData.ksParam_iLastRevision: oEntry.iRevision, } aoActions += [ WuiTmLink("Blacklist", WuiAdmin.ksScriptName, dParams), WuiTmLink( "Details", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDetails, BuildData.ksParam_idBuild: oEntry.idBuild, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, ), WuiTmLink( "Clone", WuiAdmin.ksScriptName, { WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildClone, BuildData.ksParam_idBuild: oEntry.idBuild, WuiAdmin.ksParamEffectiveDate: self._tsEffectiveDate, }, ), ] if isDbTimestampInfinity(oEntry.tsExpire): aoActions += [ WuiTmLink( "Modify", WuiAdmin.ksScriptName, {WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildEdit, BuildData.ksParam_idBuild: oEntry.idBuild}, ), WuiTmLink( "Remove", WuiAdmin.ksScriptName, {WuiAdmin.ksParamAction: WuiAdmin.ksActionBuildDoRemove, BuildData.ksParam_idBuild: oEntry.idBuild}, sConfirm="Are you sure you want to remove build #%d?" % (oEntry.idBuild,), ), ] return [ oEntry.idBuild, oEntry.oCat.sProduct, oEntry.oCat.sBranch, WuiSvnLinkWithTooltip( oEntry.iRevision, oEntry.oCat.sRepository, sName="%s r%s" % (oEntry.sVersion, oEntry.iRevision) ), oEntry.oCat.sType, " ".join(oEntry.oCat.asOsArches), "batch" if oEntry.uidAuthor is None else oEntry.uidAuthor, self.formatTsShort(oEntry.tsCreated), oEntry.sBinaries if not oEntry.fBinariesDeleted else "<Deleted>", aoActions, ]