Example #1
0
    def ensure_family(self,
                      store: Store,
                      family_info: dict,
                      app_tag: str = None):
        """Load a family with samples and link relations"""
        customer_obj = self.ensure_customer(store)
        family_obj = store.Family(
            name=family_info["name"],
            panels=family_info["panels"],
            internal_id=family_info["internal_id"],
            priority="standard",
        )

        family_obj = self.add_family(store,
                                     family_obj=family_obj,
                                     customer_id=customer_obj.internal_id)

        app_tag = app_tag or "WGTPCFC030"
        app_type = family_info.get("application_type", "wgs")
        self.ensure_application_version(store, application_tag=app_tag)
        data_analysis = family_info.get("data_analysis", "mip")
        sample_objs = {}
        for sample_data in family_info["samples"]:
            sample_id = sample_data["internal_id"]
            sample_obj = self.add_sample(
                store,
                customer_name=sample_data["name"],
                gender=sample_data["sex"],
                internal_id=sample_id,
                data_analysis=data_analysis,
                application_type=app_type,
                ticket=sample_data["ticket_number"],
                reads=sample_data["reads"],
            )
            sample_objs[sample_id] = sample_obj

        for sample_data in family_info["samples"]:
            sample_obj = sample_objs[sample_data["internal_id"]]
            father = None
            if sample_data.get("father"):
                father = sample_objs[sample_data["father"]]
            mother = None
            if sample_data.get("mother"):
                mother = sample_objs[sample_data["mother"]]
            self.add_relationship(
                store,
                family=family_obj,
                sample=sample_obj,
                status=sample_data.get("status", "unknown"),
                father=father,
                mother=mother,
            )

        self.add_analysis(store, pipeline="pipeline", family=family_obj)
        return family_obj
Example #2
0
def fixture_analysis_store(base_store: Store, analysis_family: dict) -> Store:
    """Setup a store instance for testing analysis API."""
    customer = base_store.customer("cust000")
    family = base_store.Family(
        data_analysis=analysis_family["data_analysis"],
        name=analysis_family["name"],
        panels=analysis_family["panels"],
        internal_id=analysis_family["internal_id"],
        priority=Priority.standard.name,
    )
    family.customer = customer
    base_store.add(family)
    application_version = base_store.application("WGSPCFC030").versions[0]
    for sample_data in analysis_family["samples"]:
        sample = base_store.add_sample(
            name=sample_data["name"],
            sex=sample_data["sex"],
            internal_id=sample_data["internal_id"],
            ticket=sample_data["ticket_number"],
            reads=sample_data["reads"],
            capture_kit=sample_data["capture_kit"],
        )
        sample.family = family
        sample.application_version = application_version
        sample.customer = customer
        base_store.add(sample)
    base_store.commit()
    for sample_data in analysis_family["samples"]:
        sample_obj = base_store.sample(sample_data["internal_id"])
        link = base_store.relate_sample(
            family=family,
            sample=sample_obj,
            status=sample_data["status"],
            father=base_store.sample(sample_data["father"])
            if sample_data.get("father") else None,
            mother=base_store.sample(sample_data["mother"])
            if sample_data.get("mother") else None,
        )
        base_store.add(link)
    base_store.commit()
    yield base_store
Example #3
0
    def ensure_case_from_dict(
        store: Store,
        case_info: dict,
        app_tag: str = None,
        ordered_at: datetime = None,
        completed_at: datetime = None,
        created_at: datetime = datetime.now(),
    ):
        """Load a case with samples and link relations"""
        customer_obj = StoreHelpers.ensure_customer(store)
        case_obj = store.Family(
            name=case_info["name"],
            panels=case_info["panels"],
            internal_id=case_info["internal_id"],
            ordered_at=ordered_at,
            data_analysis=case_info.get("data_analysis", str(Pipeline.MIP_DNA)),
            data_delivery=case_info.get("data_delivery", str(DataDelivery.SCOUT)),
            created_at=created_at,
            action=case_info.get("action"),
        )

        case_obj = StoreHelpers.add_case(
            store, case_obj=case_obj, customer_id=customer_obj.internal_id
        )

        app_tag = app_tag or "WGSPCFC030"
        app_type = case_info.get("application_type", "wgs")
        StoreHelpers.ensure_application_version(store, application_tag=app_tag)

        sample_objs = {}
        for sample_data in case_info["samples"]:
            sample_id = sample_data["internal_id"]
            sample_obj = StoreHelpers.add_sample(
                store,
                gender=sample_data["sex"],
                name=sample_data.get("name"),
                internal_id=sample_id,
                application_type=app_type,
                ticket=sample_data["ticket_number"],
                reads=sample_data["reads"],
                capture_kit=sample_data["capture_kit"],
            )
            sample_objs[sample_id] = sample_obj

        for sample_data in case_info["samples"]:
            sample_obj = sample_objs[sample_data["internal_id"]]
            father = None
            if sample_data.get("father"):
                father = sample_objs[sample_data["father"]]
            mother = None
            if sample_data.get("mother"):
                mother = sample_objs[sample_data["mother"]]
            StoreHelpers.add_relationship(
                store,
                case=case_obj,
                sample=sample_obj,
                status=sample_data.get("status", "unknown"),
                father=father,
                mother=mother,
            )

        StoreHelpers.add_analysis(
            store,
            pipeline=Pipeline.MIP_DNA,
            case=case_obj,
            completed_at=completed_at or datetime.now(),
        )
        return case_obj