예제 #1
0
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 {},
    })
예제 #2
0
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,
    })
예제 #3
0
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,
    })
예제 #4
0
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,
    })
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
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)
    })
예제 #8
0
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)
    })
예제 #9
0
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)
    })
예제 #10
0
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 {},
    })
예제 #11
0
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,
    })
예제 #12
0
 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)