def colData_run(self, ds): if ds.runResult == runexamples.models.Example.RunResult.PASSED: icon = '<span class="text-success">' + octicon("check") + '</span>' text = "passed" elif ds.runResult == runexamples.models.Example.RunResult.TIMEDOUT: icon = '<span class="text-danger">' + octicon("stop") + '</span>' text = "timed out" elif ds.runResult == runexamples.models.Example.RunResult.FAILED: icon = '<span class="text-danger">' + octicon("stop") + '</span>' text = "failed" else: icon = "" text = "" url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "Example", ds.id, "runOutput"]) ret = '%s <a href="%s">%s</a>' % (icon, url, text) # valgrind if ds.valgrinds.filter(programType__startswith="example_").count() > 0: ret += '''<div class="dropdown"> <button class="btn btn-secondary btn-xs" type="button" data-toggle="dropdown">valgrind {}</button> <div class="dropdown-menu">'''.format(octicon("triangle-down")) for vg in ds.valgrinds.filter(programType__startswith="example_"): valgrindNrErrors = runexamples.models.Valgrind.objects.get( id=vg.id).errors.all().count() ret+='<a class="dropdown-item text-{}" href="{}">{}{}</a>'.\ format("success" if valgrindNrErrors==0 else "danger", django.urls.reverse('runexamples:valgrind', args=[vg.id]), vg.programType[len("example_"):], ' <span class="badge badge-danger">%d</span> errors'%(valgrindNrErrors) if valgrindNrErrors>0 else "") ret += '</div></div>' return ret
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["navbar"] = { "home": False, "download": False, "videos": False, "sourcecode": False, "buildsystem": False, } if not self.request.user.is_authenticated: # nobody is logged in -> use dummy avatar userAvatarEle = octicon("person", height="21") else: import allauth # someone is logged in try: # get avatar from social account (github) avatarUrl = allauth.socialaccount.models.SocialAccount.objects.get( user=self.request.user).get_avatar_url() userAvatarEle = '<img height="21em" src="' + avatarUrl + '"/>' except allauth.socialaccount.models.SocialAccount.DoesNotExist: # its not a social account (github) -> use dummy avatar userAvatarEle = octicon("person", height="21") context['userAvatarEle'] = userAvatarEle return context
def colData_dataset(self, ds): if ds.result == runexamples.models.CompareResult.Result.FILENOTINCUR: return '<span class="text-danger">' + octicon( "stop") + '</span> [file not in cur]' if ds.result == runexamples.models.CompareResult.Result.FILENOTINREF: return '<span class="text-danger">' + octicon( "stop") + '</span> [file not in ref]' return ds.dataset
def colData_result(self, ds): url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "XMLOutput", ds.id, "resultOutput"]) if ds.resultOK: return '<span class="text-success">' + octicon( "check") + '</span> <a href="%s">passed</a>' % (url) else: return '<span class="text-danger">' + octicon( "stop") + '</span> <a href="%s">failed</a>' % (url)
def colData_dep(self, ds): if ds.deprecatedNr is not None and ds.deprecatedNr > 0: url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "Example", ds.id, "runOutput"]) return octicon("alert")+' <a href="%s"><span class="badge badge-secondary">%d</span> found</a></td>'%\ (url, ds.deprecatedNr) else: return '<span class="text-success">' + octicon( "check") + '</span> none'
def colData_doc(self, ds): if ds.docOK is None: return "" url = django.urls.reverse('base:textFieldFromDB', args=["builds", "Tool", ds.id, "docOutput"]) if ds.docOK: return '<span class="text-success">' + octicon( "check") + '</span> <a href="%s">passed</a>' % (url) else: return '<span class="text-danger">' + octicon( "stop") + '</span> <a href="%s">failed</a>' % (url)
def colData_xmlOut(self, ds): nrAll = ds.xmlOutputs.count() if nrAll == 0: return "" nrFailed = ds.xmlOutputs.filterFailed().count() if nrFailed == 0: icon = '<span class="text-success">' + octicon("check") + '</span>' text = "valid" nr = nrAll else: icon = '<span class="text-danger">' + octicon("stop") + '</span>' text = "failed" nr = nrFailed url = django.urls.reverse('runexamples:xmloutput', args=[ds.id]) return '%s <a href="%s">%s<span class="badge badge-secondary">%d</span></a>' % ( icon, url, text, nr)
def colData_kind(self, ds): return base.helper.tooltip( '''<span class="dropdown"> <button class="btn btn-secondary btn-xs" type="button" data-toggle="dropdown"> supp {} </button> <pre class="dropdown-menu" style="padding-left: 0.5em; padding-right: 0.5em;">{}</pre> </span><br/>'''.format(octicon("triangle-down"), ds.suppressionRawText)+\ self.vertText(ds.kind, True, 24), "runexamples/ValgrindError: id=%s"%(ds.id))
def colData_ref(self, ds): refUrl = django.urls.reverse('runexamples:compareresult', args=[ds.id]) updateUrl = django.urls.reverse( 'runexamples:ref_update', args=[urllib.parse.quote(ds.exampleName, safe="")]) dsStatic = self.getStaticDS(ds) checked = 'checked="checked"' if dsStatic is not None and dsStatic.update else "" refCheckbox='<span class="float-right">[<input type="checkbox" onClick="changeRefUpdate($(this), \'%s\', \'%s\');" %s/>]</span>'%\ (updateUrl, ds.exampleName, checked) \ if self.isCurrent and self.allowedUser and self.run.buildType=="linux64-dailydebug" else "" if ds.resultFiles.count() == 0: ret='<span class="float-left"><span class="text-warning">%s</span> no reference</span>%s'%\ (octicon("alert"), refCheckbox) elif ds.resultsFailed == 0: ret='<span class="float-left"><span class="text-success">%s</span> <a href="%s">passed '\ '</a></span>'%(octicon("check"), refUrl) else: ret='<span class="float-left"><span class="text-danger">%s</span> <a href="%s">failed '\ '<span class="badge badge-secondary">%d</span></a></span>%s'%\ (octicon("stop"), refUrl, ds.resultsFailed, refCheckbox) return ret
def get_context_data(self, **kwargs): import allauth context = super().get_context_data(**kwargs) context["navbar"]["buildsystem"] = True if not self.request.user.is_authenticated: # nobody is logged in -> use large dummy avatar; no social user available userLargeAvatarEle = octicon("person", height="125") socialUser = None else: try: # get large avatar from social account (github); set social user varible socialUser = allauth.socialaccount.models.SocialAccount.objects.get( user=self.request.user) avatarUrl = socialUser.get_avatar_url() userLargeAvatarEle = '<img height="125em" src="' + avatarUrl + '"/>' except allauth.socialaccount.models.SocialAccount.DoesNotExist: # its not a social account (github) -> use large dummy avatar; no social user available socialUser = None userLargeAvatarEle = octicon("person", height="125") context[ "clientID"] = allauth.socialaccount.models.SocialApp.objects.get( provider="github").client_id context["userLargeAvatarEle"] = userLargeAvatarEle context["socialUser"] = socialUser context[ "githubAccessTokenDummy"] = "<not shown for security reasons>" if self.gh.getAccessToken( ) else None context["githubUserInMbsimenv"] = self.gh.getUserInMbsimenvOrg( base.helper.GithubCache.viewTimeout) sessionDBObj = list( django.contrib.sessions.models.Session.objects.filter( session_key=self.request.session.session_key)) if len(sessionDBObj) > 0: context["session"] = {} context["session"]["id"] = sessionDBObj[0].session_key context["session"]["data"] = sessionDBObj[0].get_decoded() context["session"]["expire"] = sessionDBObj[0].expire_date return context
def colData_guiTest(self, ds): ret = "" url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "Example", ds.id, "guiTestOpenmbvOutput"]) vis = "visible" if ds.guiTestOpenmbvOK is not None else "hidden" ok = "success" if ds.guiTestOpenmbvOK == runexamples.models.Example.GUITestResult.PASSED else ( "warning" if ds.guiTestOpenmbvOK == runexamples.models.Example. GUITestResult.TIMEDOUT or ds.willFail else "danger") img = django.templatetags.static.static("base/openmbv.svg") ret+='<a href="%s"><button type="button" style="visibility:%s;" class="btn btn-%s btn-xs">'%(url, vis, ok)+\ '<img src="%s" alt="ombv"/></button></a> '%(img) url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "Example", ds.id, "guiTestHdf5serieOutput"]) vis = "visible" if ds.guiTestHdf5serieOK is not None else "hidden" ok = "success" if ds.guiTestHdf5serieOK == runexamples.models.Example.GUITestResult.PASSED else ( "warning" if ds.guiTestHdf5serieOK == runexamples.models.Example. GUITestResult.TIMEDOUT or ds.willFail else "danger") img = django.templatetags.static.static("base/h5plotserie.svg") ret+='<a href="%s"><button type="button" style="visibility:%s;" class="btn btn-%s btn-xs">'%(url, vis, ok)+\ '<img src="%s" alt="h5p"/></button></a> '%(img) url = django.urls.reverse( 'base:textFieldFromDB', args=["runexamples", "Example", ds.id, "guiTestMbsimguiOutput"]) vis = "visible" if ds.guiTestMbsimguiOK is not None else "hidden" ok = "success" if ds.guiTestMbsimguiOK == runexamples.models.Example.GUITestResult.PASSED else ( "warning" if ds.guiTestMbsimguiOK == runexamples.models.Example. GUITestResult.TIMEDOUT or ds.willFail else "danger") img = django.templatetags.static.static("base/mbsimgui.svg") ret+='<a href="%s"><button type="button" style="visibility:%s;" class="btn btn-%s btn-xs">'%(url, vis, ok)+\ '<img src="%s" alt="gui"/></button></a>'%(img) # valgrind if ds.valgrinds.filter(programType__startswith="guitest_").count() > 0: ret += '''<div class="dropdown"> <button class="btn btn-secondary btn-xs" type="button" data-toggle="dropdown">valgrind {}</button> <div class="dropdown-menu">'''.format(octicon("triangle-down")) for vg in ds.valgrinds.filter(programType__startswith="guitest_"): valgrindNrErrors = runexamples.models.Valgrind.objects.get( id=vg.id).errors.all().count() ret+='<a class="dropdown-item text-{}" href="{}">{}{}</a>'.\ format("success" if valgrindNrErrors==0 else "danger", django.urls.reverse('runexamples:valgrind', args=[vg.id]), vg.programType[len("guitest_"):], ' <span class="badge badge-danger">%d</span> errors'%(valgrindNrErrors) if valgrindNrErrors>0 else "") ret += '</div></div>' return ret
def colData_result(self, ds): if ds.result==runexamples.models.CompareResult.Result.FILENOTINCUR or ds.result==runexamples.models.CompareResult.Result.FILENOTINREF or \ ds.result==runexamples.models.CompareResult.Result.DATASETNOTINCUR or ds.result==runexamples.models.CompareResult.Result.DATASETNOTINREF: return '' if ds.result == runexamples.models.CompareResult.Result.LABELNOTINCUR: return '<span class="text-danger">' + octicon( "stop") + '</span> [label not in cur]' if ds.result == runexamples.models.CompareResult.Result.LABELNOTINREF: return '<span class="text-danger">' + octicon( "stop") + '</span> [label not in ref]' if ds.result == runexamples.models.CompareResult.Result.LABELDIFFER: return '<span class="text-danger">' + octicon( "stop") + '</span> [label differ]' if ds.result == runexamples.models.CompareResult.Result.LABELMISSING: return '<span class="text-danger">' + octicon( "stop") + '</span> [label missing]' if ds.result == runexamples.models.CompareResult.Result.PASSED: return '<span class="text-success">' + octicon( "check") + '</span> passed' url = django.urls.reverse('runexamples:differenceplot', args=[ds.id]) return '<span class="text-danger">' + octicon( "stop") + '</span> <a href="%s">failed</a>' % (url)
def colData_mbsimBranch(self, ds): return '<a href="https://github.com/mbsim-env/mbsim/tree/'+ds.mbsimBranch+'">'\ '<span class="badge badge-primary">'+octicon("git-branch")+' '+ds.mbsimBranch+'</span></a>'
def colData_remove(self, ds): tooltip = "service/%s: id=%d" % (self.model, ds.id) return base.helper.tooltip(\ '<button class="btn btn-secondary btn-xs" onclick="deleteBranchCombination($(this), \'{}\');" type="button">{}</button>'.\ format(django.urls.reverse('service:db_deletebranchcombi', args=[self.model, ds.id]), octicon("diff-removed")), tooltip)