from qa_analytics.models import Build from django.utils import timezone import json import os class Ingestion(): def run(self, results_json): results_dict = json.loads(results_json.decode("utf-8")) if 'BUILD_ID' in os.environ: build = Build.objects.create(id=os.environ['BUILD_ID'], ingested_time=timezone.now()) else: build = Build.objects.create(ingested_time=timezone.now()) # create individual FeatureBuilds for feature_dict in results_dict: name = feature_dict["name"] feature_build = build.featurebuild_set.create(name=name) # "elements" doesnt exist if the feature was run without scenarios # ex. all scenarios are tagged as @wip if "elements" in feature_dict: scenarios_dict = feature_dict["elements"] # create individual ScenarioBuilds for scenario_dict in scenarios_dict: name = scenario_dict["name"] scenario_result = scenario_dict["steps"] # in case the after hooks aren't triggered: if "after" in scenario_dict: # if a screenshot was captured, add it to the scenario result if "embeddings" in scenario_dict["after"][0]: scenario_result[-1].update(scenario_dict["after"][0]["embeddings"][0]) scenario_build = feature_build.scenariobuild_set.create(name=name) # create individual StepBuilds for step_dict in scenario_result: name = "{0}{1}".format(step_dict.pop("keyword"), step_dict.pop("name")) scenario_build.stepbuild_set.create(name=name, json=step_dict) return build