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'])
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'])
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'])
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) } })
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) } })
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) } })
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) } })
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) } })
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) } })