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
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
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