def update_locus_list_handler(request, locus_list_guid): locus_list = LocusList.objects.get(guid=locus_list_guid) check_user_created_object_permissions(locus_list, request.user, permission_level=CAN_EDIT) request_json = json.loads(request.body) genes_by_id, intervals, invalid_items = parse_locus_list_items( request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) update_model_from_json(locus_list, request_json, allow_unknown_keys=True) if genes_by_id is not None: _update_locus_list_items(locus_list, genes_by_id, intervals, request_json) return create_json_response({ 'locusListsByGuid': { locus_list.guid: get_json_for_locus_list(locus_list, request.user) }, 'genesById': genes_by_id or {}, })
def create_locus_list_handler(request): request_json = json.loads(request.body) if not request_json.get('name'): return create_json_response({}, status=400, reason='"Name" is required') genes_by_id, intervals, invalid_items = parse_locus_list_items( request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) locus_list = LocusList.objects.create( name=request_json['name'], description=request_json.get('description') or '', is_public=request_json.get('isPublic') or False, created_by=request.user, ) _update_locus_list_items(locus_list, genes_by_id, intervals, request_json) return create_json_response({ 'locusListsByGuid': { locus_list.guid: get_json_for_locus_list(locus_list, request.user) }, 'genesById': genes_by_id, })
def create_locus_list_handler(request): request_json = json.loads(request.body) if not request_json.get('name'): return create_json_response({}, status=400, reason='"Name" is required') genes_by_id, intervals, invalid_items = parse_locus_list_items( request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) try: locus_list = create_model_from_json( LocusList, { 'name': request_json['name'], 'description': request_json.get('description') or '', 'is_public': request_json.get('isPublic') or False, }, request.user) except IntegrityError: return create_json_response({'error': 'This list already exists'}, status=400) _update_locus_list_items(locus_list, genes_by_id, intervals, request_json, request.user) return create_json_response({ 'locusListsByGuid': { locus_list.guid: get_json_for_locus_list(locus_list, request.user) }, 'genesById': genes_by_id, })
def create_locus_list_handler(request): request_json = json.loads(request.body) if not request_json.get('name'): return create_json_response({}, status=400, reason='"Name" is required') new_genes, existing_gene_ids, new_intervals, existing_interval_guids, invalid_items = _parse_list_items(request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) locus_list = create_seqr_model( LocusList, name=request_json['name'], description=request_json.get('description') or '', is_public=request_json.get('isPublic') or False, created_by=request.user, ) _update_locus_list_items(locus_list, new_genes, existing_gene_ids, new_intervals, existing_interval_guids, request_json, request.user) add_locus_list_user_permissions(locus_list) return create_json_response({ 'locusListsByGuid': {locus_list.guid: get_json_for_locus_list(locus_list, request.user)}, 'genesById': new_genes, })
def test_json_for_locus_list(self): locus_list = LocusList.objects.first() user = User.objects.filter().first() json = get_json_for_locus_list(locus_list, user) fields = { 'locusListGuid', 'description', 'lastModifiedDate', 'numEntries', 'isPublic', 'createdBy', 'createdDate', 'canEdit', 'name', 'items', 'intervalGenomeVersion' } self.assertSetEqual(set(json.keys()), fields)
def locus_list_info(request, locus_list_guid): locus_list = LocusList.objects.get(guid=locus_list_guid) check_public_object_permissions(locus_list, request.user) locus_list_json = get_json_for_locus_list(locus_list, request.user) gene_ids = [item['geneId'] for item in locus_list_json['items'] if item.get('geneId')] return create_json_response({ 'locusListsByGuid': {locus_list_guid: locus_list_json}, 'genesById': get_genes(gene_ids, add_dbnsfp=True, add_omim=True, add_constraints=True) })
def locus_list_info(request, locus_list_guid): locus_list = LocusList.objects.get(guid=locus_list_guid) if not locus_list.is_public: check_multi_project_permissions(locus_list, request.user) locus_list_json = get_json_for_locus_list(locus_list, request.user) gene_ids = [ item['geneId'] for item in locus_list_json['items'] if item.get('geneId') ] return create_json_response({ 'locusListsByGuid': { locus_list_guid: locus_list_json }, 'genesById': get_genes(gene_ids) })
def update_locus_list_handler(request, locus_list_guid): locus_list = LocusList.objects.get(guid=locus_list_guid) check_object_permissions(locus_list, request.user, permission_level=CAN_EDIT) request_json = json.loads(request.body) genes_by_id, intervals, invalid_items = parse_locus_list_items(request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) update_model_from_json(locus_list, request_json, allow_unknown_keys=True) if genes_by_id is not None: _update_locus_list_items(locus_list, genes_by_id, intervals, request_json, request.user) return create_json_response({ 'locusListsByGuid': {locus_list.guid: get_json_for_locus_list(locus_list, request.user)}, 'genesById': genes_by_id or {}, })
def create_locus_list_handler(request): request_json = json.loads(request.body) if not request_json.get('name'): return create_json_response({}, status=400, reason='"Name" is required') genes_by_id, intervals, invalid_items = parse_locus_list_items(request_json) if invalid_items and not request_json.get('ignoreInvalidItems'): return create_json_response({'invalidLocusListItems': invalid_items}, status=400, reason=INVALID_ITEMS_ERROR) locus_list = create_seqr_model( LocusList, name=request_json['name'], description=request_json.get('description') or '', is_public=request_json.get('isPublic') or False, created_by=request.user, ) _update_locus_list_items(locus_list, genes_by_id, intervals, request_json, request.user) add_locus_list_user_permissions(locus_list) return create_json_response({ 'locusListsByGuid': {locus_list.guid: get_json_for_locus_list(locus_list, request.user)}, 'genesById': genes_by_id, })
def test_json_for_locus_list(self): locus_list = LocusList.objects.first() user = User.objects.filter().first() json = get_json_for_locus_list(locus_list, user) self.assertSetEqual(set(json.keys()), LOCUS_LIST_DETAIL_FIELDS)