def testjob(request, job): job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable) suite_table = TestJobResultsTable( data.get_table_data().filter(job=job) ) failed_definitions = [] yaml_dict = OrderedDict() if TestData.objects.filter(testjob=job).exists(): # some duplicates can exist, so get would fail here and [0] is quicker than try except. testdata = TestData.objects.filter( testjob=job).prefetch_related('actionlevels__testcase', 'actionlevels__testcase__suite')[0] if job.state == TestJob.STATE_FINISHED: # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic'] executed = [ { case.action_metadata['test_definition_start']: case.action_metadata.get('success', '')} for case in TestCase.objects.filter( suite__in=TestSuite.objects.filter(job=job)) if case.action_metadata and 'test_definition_start' in case.action_metadata and case.suite.name == 'lava'] submitted = [ actiondata.testcase.action_metadata for actiondata in testdata.actionlevels.all() if actiondata.testcase and 'test-runscript-overlay' in actiondata.action_name] # compare with a dict similar to created in executed for item in submitted: if executed and {item['name']: item['success']} not in executed: comparison = {} if item['from'] != 'inline': comparison['repository'] = item['repository'] comparison['path'] = item['path'] comparison['name'] = item['name'] comparison['uuid'] = item['success'] failed_definitions.append(comparison) # hide internal python objects, like OrderedDict for data in testdata.attributes.all().order_by('name'): yaml_dict[str(data.name)] = str(data.value) RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table) template = loader.get_template("lava_results_app/job.html") return HttpResponse(template.render( { 'bread_crumb_trail': BreadCrumbTrail.leading_to(testjob, job=job.id), 'job': job, 'job_link': pklink(job), 'suite_table': suite_table, 'metadata': yaml_dict, 'failed_definitions': failed_definitions, 'condition_choices': simplejson.dumps( QueryCondition.get_condition_choices(job) ), 'available_content_types': simplejson.dumps( QueryCondition.get_similar_job_content_types() ), }, request=request))
def testjob(request, job): job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable) suite_table = TestJobResultsTable( data.get_table_data().filter(job=job), request=request ) failed_definitions = [] yaml_dict = OrderedDict() if hasattr(job, "testdata"): for data in job.testdata.attributes.all().order_by("name"): yaml_dict[str(data.name)] = str(data.value) RequestConfig(request, paginate={"per_page": suite_table.length}).configure( suite_table ) template = loader.get_template("lava_results_app/job.html") return HttpResponse( template.render( { "bread_crumb_trail": BreadCrumbTrail.leading_to(testjob, job=job.id), "job": job, "job_link": pklink(job), "suite_table": suite_table, "metadata": yaml_dict, "condition_choices": simplejson.dumps( QueryCondition.get_condition_choices(job) ), "available_content_types": simplejson.dumps( QueryCondition.get_similar_job_content_types() ), }, request=request, ) )
def _parse_conditions(content_type, conditions): # Parse conditions from request. conditions_objects = [] for condition_str in conditions.split(","): condition = QueryCondition() condition_fields = condition_str.split("__") if len(condition_fields) == 3: condition.table = content_type condition.field = condition_fields[0] condition.operator = condition_fields[1] condition.value = condition_fields[2] elif len(condition_fields) == 4: content_type = ContentType.objects.get( model=condition_fields[0], app_label=_get_app_label_for_model(condition_fields[0]) ) condition.table = content_type condition.field = condition_fields[1] condition.operator = condition_fields[2] condition.value = condition_fields[3] else: # TODO: more validation for conditions?. raise InvalidConditionsError("Conditions URL incorrect.") conditions_objects.append(condition) return conditions_objects
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if "query" in self.initial and self.initial["query"].__class__ == Query: condition_choices = QueryCondition.get_condition_choices() self.fields["condition_choices"].initial = simplejson.dumps( condition_choices)
def __init__(self, *args, **kwargs): super(QueryConditionForm, self).__init__(*args, **kwargs) if "query" in self.initial and \ self.initial['query'].__class__ == Query: condition_choices = QueryCondition.get_condition_choices() self.fields['condition_choices'].initial = simplejson.dumps( condition_choices)
def __init__(self, *args, **kwargs): super(QueryConditionForm, self).__init__(*args, **kwargs) if "query" in self.initial and \ self.initial['query'].__class__ == Query: condition_choices = QueryCondition.get_condition_choices() self.fields['condition_choices'].initial = simplejson.dumps( condition_choices)
def testjob(request, job): job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable) suite_table = TestJobResultsTable(data.get_table_data().filter(job=job), request=request) failed_definitions = [] yaml_dict = OrderedDict() with contextlib.suppress(TestData.DoesNotExist): # some duplicates can exist, so get would fail here and [0] is quicker than try except. testdata = TestData.objects.filter(testjob=job)[0] # hide internal python objects, like OrderedDict for data in testdata.attributes.all().order_by("name"): yaml_dict[str(data.name)] = str(data.value) RequestConfig(request, paginate={ "per_page": suite_table.length }).configure(suite_table) template = loader.get_template("lava_results_app/job.html") return HttpResponse( template.render( { "bread_crumb_trail": BreadCrumbTrail.leading_to(testjob, job=job.id), "job": job, "job_link": pklink(job), "suite_table": suite_table, "metadata": yaml_dict, "condition_choices": simplejson.dumps(QueryCondition.get_condition_choices(job)), "available_content_types": simplejson.dumps( QueryCondition.get_similar_job_content_types()), }, request=request, ))
def _parse_conditions(content_type, conditions): # Parse conditions from text representation. if not conditions: return [] conditions_objects = [] for condition_str in conditions.split(CONDITIONS_SEPARATOR): condition = QueryCondition() condition_fields = condition_str.split(CONDITION_DIVIDER) if len(condition_fields) == 3: condition.table = content_type condition.field = condition_fields[0] condition.operator = condition_fields[1] condition.value = condition_fields[2] elif len(condition_fields) == 4: try: content_type = _get_content_type(condition_fields[0]) except ContentType.DoesNotExist: raise InvalidContentTypeError( "Wrong table name in conditions parameter. " + "Please refer to query docs.") condition.table = content_type condition.field = condition_fields[1] condition.operator = condition_fields[2] condition.value = condition_fields[3] else: # TODO: more validation for conditions?. raise InvalidConditionsError("Conditions URL incorrect. Please " "refer to query docs.") conditions_objects.append(condition) return conditions_objects
def testjob(request, job): job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable) suite_table = TestJobResultsTable(data.get_table_data().filter(job=job)) failed_definitions = [] yaml_dict = OrderedDict() if TestData.objects.filter(testjob=job).exists(): # some duplicates can exist, so get would fail here and [0] is quicker than try except. testdata = TestData.objects.filter(testjob=job).prefetch_related( "actionlevels__testcase", "actionlevels__testcase__suite" )[0] if job.state == TestJob.STATE_FINISHED: # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic'] executed = [ { case.action_metadata[ "test_definition_start" ]: case.action_metadata.get("success", "") } for case in TestCase.objects.filter( suite__in=TestSuite.objects.filter(job=job) ) if case.action_metadata and "test_definition_start" in case.action_metadata and case.suite.name == "lava" ] submitted = [ actiondata.testcase.action_metadata for actiondata in testdata.actionlevels.all() if actiondata.testcase and "test-runscript-overlay" in actiondata.action_name ] # compare with a dict similar to created in executed for item in submitted: if executed and {item["name"]: item["success"]} not in executed: comparison = {} if item["from"] != "inline": comparison["repository"] = item["repository"] comparison["path"] = item["path"] comparison["name"] = item["name"] comparison["uuid"] = item["success"] failed_definitions.append(comparison) # hide internal python objects, like OrderedDict for data in testdata.attributes.all().order_by("name"): yaml_dict[str(data.name)] = str(data.value) RequestConfig(request, paginate={"per_page": suite_table.length}).configure( suite_table ) template = loader.get_template("lava_results_app/job.html") return HttpResponse( template.render( { "bread_crumb_trail": BreadCrumbTrail.leading_to(testjob, job=job.id), "job": job, "job_link": pklink(job), "suite_table": suite_table, "metadata": yaml_dict, "failed_definitions": failed_definitions, "condition_choices": simplejson.dumps( QueryCondition.get_condition_choices(job) ), "available_content_types": simplejson.dumps( QueryCondition.get_similar_job_content_types() ), }, request=request, ) )
def testjob(request, job): job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=ResultsTable) suite_table = ResultsTable(data.get_table_data().filter(job=job)) failed_definitions = [] yaml_dict = OrderedDict() if TestData.objects.filter(testjob=job).exists(): # some duplicates can exist, so get would fail here and [0] is quicker than try except. testdata = TestData.objects.filter(testjob=job).prefetch_related( 'actionlevels__testcase', 'actionlevels__testcase__suite')[0] if job.status in [TestJob.INCOMPLETE, TestJob.COMPLETE]: # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic'] executed = [{ case.action_metadata['test_definition_start']: case.action_metadata.get('success', '') } for case in TestCase.objects.filter( suite__in=TestSuite.objects.filter(job=job)) if case.action_metadata and 'test_definition_start' in case.action_metadata and case.suite.name == 'lava'] submitted = [ actiondata.testcase.action_metadata for actiondata in testdata.actionlevels.all() if actiondata.testcase and 'test-runscript-overlay' in actiondata.action_name ] # compare with a dict similar to created in executed for item in submitted: if executed and { item['name']: item['success'] } not in executed: comparison = {} if item['from'] != 'inline': comparison['repository'] = item['repository'] comparison['path'] = item['path'] comparison['name'] = item['name'] comparison['uuid'] = item['success'] failed_definitions.append(comparison) # hide internal python objects, like OrderedDict for data in testdata.attributes.all().order_by('name'): yaml_dict[str(data.name)] = str(data.value) RequestConfig(request, paginate={ "per_page": suite_table.length }).configure(suite_table) template = loader.get_template("lava_results_app/job.html") return HttpResponse( template.render( { 'bread_crumb_trail': BreadCrumbTrail.leading_to(testjob, job=job.id), 'job': job, 'job_link': pklink(job), 'suite_table': suite_table, 'metadata': yaml_dict, 'content_type_id': ContentType.objects.get_for_model(TestSuite).id, 'failed_definitions': failed_definitions, 'condition_choices': simplejson.dumps(QueryCondition.get_condition_choices(job)), 'available_content_types': simplejson.dumps( QueryCondition.get_similar_job_content_types()), }, request=request))