def update_variant_tags_handler(request, variant_guid): saved_variant = SavedVariant.objects.get(guid=variant_guid) check_permissions(saved_variant.project, request.user, CAN_EDIT) request_json = json.loads(request.body) updated_tags = request_json.get('tags', []) updated_functional_data = request_json.get('functionalData', []) # Update tags existing_tag_guids = [tag['tagGuid'] for tag in updated_tags if tag.get('tagGuid')] new_tags = [tag for tag in updated_tags if not tag.get('tagGuid')] for tag in saved_variant.varianttag_set.exclude(guid__in=existing_tag_guids): delete_seqr_model(tag) for tag in new_tags: variant_tag_type = VariantTagType.objects.get( Q(name=tag['name']), Q(project=saved_variant.project) | Q(project__isnull=True) ) create_seqr_model( VariantTag, saved_variant=saved_variant, variant_tag_type=variant_tag_type, search_parameters=request_json.get('searchParameters'), created_by=request.user, ) # Update functional data existing_functional_guids = [tag['tagGuid'] for tag in updated_functional_data if tag.get('tagGuid')] for tag in saved_variant.variantfunctionaldata_set.exclude(guid__in=existing_functional_guids): delete_seqr_model(tag) for tag in updated_functional_data: if tag.get('tagGuid'): tag_model = VariantFunctionalData.objects.get( guid=tag.get('tagGuid'), functional_data_tag=tag.get('name'), saved_variant=saved_variant ) update_model_from_json(tag_model, tag, allow_unknown_keys=True) else: create_seqr_model( VariantFunctionalData, saved_variant=saved_variant, functional_data_tag=tag.get('name'), metadata=tag.get('metadata'), search_parameters=request_json.get('searchParameters'), created_by=request.user, ) return create_json_response({ variant_guid: { 'tags': [get_json_for_variant_tag(tag) for tag in saved_variant.varianttag_set.all()], 'functionalData': [get_json_for_variant_functional_data(tag) for tag in saved_variant.variantfunctionaldata_set.all()] } })
def test_json_for_variant_tag(self): tag = VariantTag.objects.first() json = get_json_for_variant_tag(tag) fields = { 'tagGuid', 'name', 'category', 'color', 'searchParameters', 'searchHash', 'lastModifiedDate', 'createdBy' } self.assertSetEqual(set(json.keys()), fields)
def test_json_for_variant_tag(self): tag = VariantTag.objects.first() json = get_json_for_variant_tag(tag) fields = { 'tagGuid', 'name', 'category', 'color', 'searchParameters', 'searchHash', 'lastModifiedDate', 'createdBy' } self.assertSetEqual(set(json.keys()), fields)
def update_variant_tags_handler(request, variant_guid): saved_variant = SavedVariant.objects.get(guid=variant_guid) check_permissions(saved_variant.family.project, request.user, CAN_VIEW) request_json = json.loads(request.body) updated_tags = request_json.get('tags', []) updated_functional_data = request_json.get('functionalData', []) # Update tags existing_tag_guids = [ tag['tagGuid'] for tag in updated_tags if tag.get('tagGuid') ] saved_variant.varianttag_set.exclude(guid__in=existing_tag_guids).delete() _create_new_tags(saved_variant, request_json, request.user) # Update functional data existing_functional_guids = [ tag['tagGuid'] for tag in updated_functional_data if tag.get('tagGuid') ] saved_variant.variantfunctionaldata_set.exclude( guid__in=existing_functional_guids).delete() for tag in updated_functional_data: if tag.get('tagGuid'): tag_model = VariantFunctionalData.objects.get( guid=tag.get('tagGuid'), functional_data_tag=tag.get('name'), saved_variant=saved_variant) update_model_from_json(tag_model, tag, allow_unknown_keys=True) else: VariantFunctionalData.objects.create( saved_variant=saved_variant, functional_data_tag=tag.get('name'), metadata=tag.get('metadata'), search_hash=request_json.get('searchHash'), created_by=request.user, ) return create_json_response({ 'savedVariantsByGuid': { variant_guid: { 'tags': [ get_json_for_variant_tag(tag) for tag in saved_variant.varianttag_set.all() ], 'functionalData': [ get_json_for_variant_functional_data(tag) for tag in saved_variant.variantfunctionaldata_set.all() ] } } })
def update_variant_tags_handler(request, variant_guid): saved_variant = SavedVariant.objects.get(guid=variant_guid) check_permissions(saved_variant.project, request.user, CAN_VIEW) request_json = json.loads(request.body) updated_tags = request_json.get('tags', []) updated_functional_data = request_json.get('functionalData', []) # Update tags existing_tag_guids = [tag['tagGuid'] for tag in updated_tags if tag.get('tagGuid')] for tag in saved_variant.varianttag_set.exclude(guid__in=existing_tag_guids): delete_seqr_model(tag) _create_new_tags(saved_variant, request_json, request.user) # Update functional data existing_functional_guids = [tag['tagGuid'] for tag in updated_functional_data if tag.get('tagGuid')] for tag in saved_variant.variantfunctionaldata_set.exclude(guid__in=existing_functional_guids): delete_seqr_model(tag) for tag in updated_functional_data: if tag.get('tagGuid'): tag_model = VariantFunctionalData.objects.get( guid=tag.get('tagGuid'), functional_data_tag=tag.get('name'), saved_variant=saved_variant ) update_model_from_json(tag_model, tag, allow_unknown_keys=True) else: create_seqr_model( VariantFunctionalData, saved_variant=saved_variant, functional_data_tag=tag.get('name'), metadata=tag.get('metadata'), search_hash=request_json.get('searchHash'), created_by=request.user, ) return create_json_response({'savedVariantsByGuid': { variant_guid: { 'tags': [get_json_for_variant_tag(tag) for tag in saved_variant.varianttag_set.all()], 'functionalData': [get_json_for_variant_functional_data(tag) for tag in saved_variant.variantfunctionaldata_set.all()] } }})