Ejemplo n.º 1
0
def create_variant_note_handler(request, variant_guids):
    request_json = json.loads(request.body)
    save_as_gene_note = request_json.get('saveAsGeneNote')

    family_guid = request_json.pop('familyGuid')
    family = Family.objects.get(guid=family_guid)
    check_project_permissions(family.project, request.user)

    all_variant_guids = variant_guids.split(',')
    saved_variants = SavedVariant.objects.filter(guid__in=all_variant_guids)
    if len(saved_variants) != len(all_variant_guids):
        error = 'Unable to find the following variant(s): {}'.format(', '.join(
            [
                guid for guid in all_variant_guids
                if guid not in {sv.guid
                                for sv in saved_variants}
            ]))
        return create_json_response({'error': error}, status=400, reason=error)

    # update saved_variants
    note = _create_variant_note(saved_variants, request_json, request.user)
    note_json = get_json_for_variant_note(note, add_variant_guids=False)
    note_json['variantGuids'] = all_variant_guids
    response = {
        'savedVariantsByGuid': {
            saved_variant.guid: {
                'noteGuids':
                [n.guid for n in saved_variant.variantnote_set.all()]
            }
            for saved_variant in saved_variants
        },
        'variantNotesByGuid': {
            note.guid: note_json
        },
    }

    if save_as_gene_note:
        main_transcript_id = saved_variants[
            0].selected_main_transcript_id or saved_variants[
                0].saved_variant_json['mainTranscriptId']
        gene_id = next(
            (gene_id for gene_id, transcripts in saved_variants[0].
             saved_variant_json['transcripts'].items() if any(
                 t['transcriptId'] == main_transcript_id
                 for t in transcripts)), None) if main_transcript_id else None
        GeneNote.objects.create(
            note=request_json.get('note'),
            gene_id=gene_id,
            created_by=request.user,
        )
        response['genesById'] = {
            gene_id: {
                'notes':
                get_json_for_gene_notes_by_gene_id([gene_id],
                                                   request.user)[gene_id],
            }
        }

    return create_json_response(response)
Ejemplo n.º 2
0
    def test_json_for_variant_note(self):
        tag = VariantNote.objects.first()
        json = get_json_for_variant_note(tag)

        fields = {
             'noteGuid', 'note', 'submitToClinvar', 'lastModifiedDate', 'createdBy'
        }
        self.assertSetEqual(set(json.keys()), fields)
Ejemplo n.º 3
0
def delete_variant_note_handler(request, variant_guid, note_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_VIEW)
    note = VariantNote.objects.get(guid=note_guid, saved_variant=saved_variant)
    delete_seqr_model(note)
    return create_json_response({'savedVariantsByGuid': {variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }}})
Ejemplo n.º 4
0
    def test_json_for_variant_note(self):
        tag = VariantNote.objects.first()
        json = get_json_for_variant_note(tag)

        fields = {
             'noteGuid', 'note', 'submitToClinvar', 'lastModifiedDate', 'createdBy'
        }
        self.assertSetEqual(set(json.keys()), fields)
Ejemplo n.º 5
0
def delete_variant_note_handler(request, variant_guid, note_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_EDIT)
    note = VariantNote.objects.get(guid=note_guid, saved_variant=saved_variant)
    delete_seqr_model(note)
    return create_json_response({variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }})
Ejemplo n.º 6
0
def create_variant_note_handler(request, variant_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_VIEW)

    _create_variant_note(saved_variant, json.loads(request.body), request.user)

    return create_json_response({'savedVariantsByGuid': {variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }}})
Ejemplo n.º 7
0
def update_variant_note_handler(request, variant_guid, note_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_VIEW)
    note = VariantNote.objects.get(guid=note_guid, saved_variant=saved_variant)

    request_json = json.loads(request.body)
    update_model_from_json(note, request_json, allow_unknown_keys=True)

    return create_json_response({'savedVariantsByGuid': {variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }}})
Ejemplo n.º 8
0
def update_variant_note_handler(request, variant_guid, note_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_EDIT)
    note = VariantNote.objects.get(guid=note_guid, saved_variant=saved_variant)

    request_json = json.loads(request.body)
    update_model_from_json(note, request_json, allow_unknown_keys=True)

    return create_json_response({variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }})
Ejemplo n.º 9
0
def update_variant_note_handler(request, variant_guids, note_guid):
    note = VariantNote.objects.get(guid=note_guid)
    projects = {saved_variant.family.project for saved_variant in note.saved_variants.all()}
    for project in projects:
        check_project_permissions(project, request.user)
    request_json = json.loads(request.body)
    update_model_from_json(note, request_json, user=request.user, allow_unknown_keys=True)

    note_json = get_json_for_variant_note(note, add_variant_guids=False)
    note_json['variantGuids'] = variant_guids.split(',')

    return create_json_response({
        'variantNotesByGuid': {note.guid: note_json},
    })
Ejemplo n.º 10
0
def delete_variant_note_handler(request, variant_guid, note_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.family.project, request.user, CAN_VIEW)
    VariantNote.objects.get(guid=note_guid,
                            saved_variant=saved_variant).delete()
    return create_json_response({
        'savedVariantsByGuid': {
            variant_guid: {
                'notes': [
                    get_json_for_variant_note(tag)
                    for tag in saved_variant.variantnote_set.all()
                ]
            }
        }
    })
Ejemplo n.º 11
0
def create_variant_note_handler(request, variant_guid):
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_VIEW)

    _create_variant_note(saved_variant, json.loads(request.body), request.user)

    return create_json_response({
        'savedVariantsByGuid': {
            variant_guid: {
                'notes': [
                    get_json_for_variant_note(tag)
                    for tag in saved_variant.variantnote_set.all()
                ]
            }
        }
    })
Ejemplo n.º 12
0
def create_variant_note_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)
    create_seqr_model(
        VariantNote,
        saved_variant=saved_variant,
        note=request_json.get('note'),
        submit_to_clinvar=request_json.get('submitToClinvar', False),
        search_parameters=request_json.get('searchParameters'),
        created_by=request.user,
    )

    return create_json_response({variant_guid: {
        'notes': [get_json_for_variant_note(tag) for tag in saved_variant.variantnote_set.all()]
    }})
Ejemplo n.º 13
0
def create_variant_note_handler(request, variant_guid):
    request_json = json.loads(request.body)

    save_as_gene_note = request_json.get('saveAsGeneNote')
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.family.project, request.user, CAN_VIEW)

    if save_as_gene_note:
        main_transcript_id = saved_variant.selected_main_transcript_id or saved_variant.saved_variant_json[
            'mainTranscriptId']
        gene_id = next(
            (gene_id for gene_id, transcripts in
             saved_variant.saved_variant_json['transcripts'].items() if any(
                 t['transcriptId'] == main_transcript_id
                 for t in transcripts)), None) if main_transcript_id else None
        create_seqr_model(
            GeneNote,
            note=request_json.get('note'),
            gene_id=gene_id,
            created_by=request.user,
        )

    gene_note = {
        gene_id: {
            'notes':
            get_json_for_gene_notes_by_gene_id([gene_id], request.user).get(
                gene_id, [])
        }
    } if save_as_gene_note else {}

    _create_variant_note(saved_variant, request_json, request.user)

    variant_note = {
        variant_guid: {
            'notes': [
                get_json_for_variant_note(tag)
                for tag in saved_variant.variantnote_set.all()
            ]
        },
    }

    return create_json_response({
        'savedVariantsByGuid': variant_note,
        'genesById': gene_note
    })
Ejemplo n.º 14
0
def create_variant_note_handler(request, variant_guid):
    request_json = json.loads(request.body)

    save_as_gene_note = request_json.get('saveAsGeneNote')
    saved_variant = SavedVariant.objects.get(guid=variant_guid)
    check_permissions(saved_variant.project, request.user, CAN_VIEW)

    if save_as_gene_note:
        gene_id = json.loads(
            saved_variant.saved_variant_json)['mainTranscript']['geneId']
        create_seqr_model(
            GeneNote,
            note=request_json.get('note'),
            gene_id=gene_id,
            created_by=request.user,
        )

    gene_note = {
        gene_id: {
            'notes':
            get_json_for_gene_notes_by_gene_id([gene_id], request.user).get(
                gene_id, [])
        }
    } if save_as_gene_note else {}

    _create_variant_note(saved_variant, request_json, request.user)

    variant_note = {
        variant_guid: {
            'notes': [
                get_json_for_variant_note(tag)
                for tag in saved_variant.variantnote_set.all()
            ]
        },
    }

    return create_json_response({
        'savedVariantsByGuid': variant_note,
        'genesById': gene_note
    })
Ejemplo n.º 15
0
 def test_json_for_variant_note(self):
     tag = VariantNote.objects.first()
     json = get_json_for_variant_note(tag)
     self.assertSetEqual(set(json.keys()), VARIANT_NOTE_FIELDS)