예제 #1
0
    def test_json_for_saved_search(self):
        search = VariantSearch.objects.first()
        user = User.objects.filter(is_staff=True).first()
        json = get_json_for_saved_search(search, user)

        self.assertSetEqual(set(json.keys()), SAVED_SEARCH_FIELDS)
        self.assertTrue('hgmd' in json['search']['pathogenicity'])

        user = User.objects.filter(is_staff=False).first()
        json = get_json_for_saved_search(search, user)
        self.assertSetEqual(set(json.keys()), SAVED_SEARCH_FIELDS)
        self.assertFalse('hgmd' in json['search']['pathogenicity'])
예제 #2
0
    def test_json_for_saved_search(self):
        search = VariantSearch.objects.first()
        user = User.objects.get(username='******')
        json = get_json_for_saved_search(search, user)

        self.assertSetEqual(set(json.keys()), SAVED_SEARCH_FIELDS)
        self.assertTrue('hgmd' in json['search']['pathogenicity'])

        user = User.objects.get(username='******')
        json = get_json_for_saved_search(search, user)
        self.assertSetEqual(set(json.keys()), SAVED_SEARCH_FIELDS)
        self.assertFalse('hgmd' in json['search']['pathogenicity'])
예제 #3
0
    def test_json_for_saved_search(self):
        search = VariantSearch.objects.first()
        user = User.objects.filter(is_staff=True).first()
        json = get_json_for_saved_search(search, user)

        fields = {'savedSearchGuid', 'name', 'search'}
        self.assertSetEqual(set(json.keys()), fields)
        self.assertTrue('hgmd' in json['search']['pathogenicity'])

        user = User.objects.filter(is_staff=False).first()
        json = get_json_for_saved_search(search, user)
        self.assertSetEqual(set(json.keys()), fields)
        self.assertFalse('hgmd' in json['search']['pathogenicity'])
예제 #4
0
    def test_json_for_saved_search(self):
        search = VariantSearch.objects.first()
        user = User.objects.filter(is_staff=True).first()
        json = get_json_for_saved_search(search, user)

        fields = {'savedSearchGuid', 'name', 'search'}
        self.assertSetEqual(set(json.keys()), fields)
        self.assertTrue('hgmd' in json['search']['pathogenicity'])

        user = User.objects.filter(is_staff=False).first()
        json = get_json_for_saved_search(search, user)
        self.assertSetEqual(set(json.keys()), fields)
        self.assertFalse('hgmd' in json['search']['pathogenicity'])
예제 #5
0
def create_saved_search_handler(request):
    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        return create_json_response({}, status=400, reason='"Name" is required')

    if request_json.get('inheritance', {}).get('filter', {}).get('genotype'):
        return create_json_response({}, status=400, reason='Saved searches cannot include custom genotype filters')

    try:
        saved_search, _ = VariantSearch.objects.get_or_create(
            search=request_json,
            created_by=request.user,
        )
    except MultipleObjectsReturned:
        # Can't create a unique constraint on JSON field, so its possible that a duplicate gets made by accident
        dup_searches = VariantSearch.objects.filter(
            search=request_json,
            created_by=request.user,
        )
        saved_search = dup_searches[0]
        for search in dup_searches:
            search.delete()
    saved_search.name = name
    saved_search.save()

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search.guid: get_json_for_saved_search(saved_search, request.user)
        }
    })
예제 #6
0
def create_saved_search_handler(request):
    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        return create_json_response({},
                                    status=400,
                                    reason='"Name" is required')

    if request_json.get('inheritance', {}).get('filter', {}).get('genotype'):
        return create_json_response(
            {},
            status=400,
            reason='Saved searches cannot include custom genotype filters')

    saved_search = VariantSearch.objects.create(
        name=name,
        search=request_json,
        created_by=request.user,
    )

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search.guid:
            get_json_for_saved_search(saved_search, request.user)
        }
    })
예제 #7
0
def create_saved_search_handler(request):
    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        error = '"Name" is required'
        return create_json_response({'error': error}, status=400, reason=error)

    if (request_json.get('inheritance') or {}).get('filter', {}).get('genotype'):
        error = 'Saved searches cannot include custom genotype filters'
        return create_json_response({'error': error}, status=400, reason=error)

    try:
        saved_search, _ = get_or_create_model_from_json(
            VariantSearch, {'search': request_json, 'created_by': request.user}, {'name': name}, request.user)
    except MultipleObjectsReturned:
        # Can't create a unique constraint on JSON field, so its possible that a duplicate gets made by accident
        dup_searches = VariantSearch.objects.filter(
            search=request_json,
            created_by=request.user,
        ).order_by('created_date')
        saved_search = dup_searches.first()
        VariantSearch.bulk_delete(request.user, queryset=dup_searches.exclude(guid=saved_search.guid))
        update_model_from_json(saved_search, {'name': name}, request.user)
    except IntegrityError:
        error = 'Saved search with name "{}" already exists'.format(name)
        return create_json_response({'error': error}, status=400, reason=error)

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search.guid: get_json_for_saved_search(saved_search, request.user)
        }
    })
예제 #8
0
def update_saved_search_handler(request, saved_search_guid):
    search = VariantSearch.objects.get(guid=saved_search_guid)
    if search.created_by != request.user:
        return create_json_response({}, status=403, reason='User does not have permission to edit this search')

    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        return create_json_response({}, status=400, reason='"Name" is required')

    update_model_from_json(search, {'name': name}, request.user)

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search_guid: get_json_for_saved_search(search, request.user)
        }
    })
예제 #9
0
def update_saved_search_handler(request, saved_search_guid):
    search = VariantSearch.objects.get(guid=saved_search_guid)
    if search.created_by != request.user:
        return create_json_response({}, status=403, reason='User does not have permission to edit this search')

    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        return create_json_response({}, status=400, reason='"Name" is required')

    search.name = name
    search.save()

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search_guid: get_json_for_saved_search(search, request.user)
        }
    })
예제 #10
0
def create_saved_search_handler(request):
    request_json = json.loads(request.body)
    name = request_json.pop('name', None)
    if not name:
        return create_json_response({},
                                    status=400,
                                    reason='"Name" is required')

    saved_search = VariantSearch.objects.create(
        name=name,
        search=request_json,
        created_by=request.user,
    )

    return create_json_response({
        'savedSearchesByGuid': {
            saved_search.guid:
            get_json_for_saved_search(saved_search, request.user)
        }
    })