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)
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)
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()] }}})
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()] }})
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()] }}})
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()] }}})
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()] }})
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}, })
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() ] } } })
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() ] } } })
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()] }})
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 })
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 })
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)