def search() -> Response: """Main query endpoint.""" logger.debug('Got query: %s', request.args) data, status_code, headers = api.search(request.args) # requested = request.accept_mimetypes.best_match([JSON, ATOM_XML]) # if requested == ATOM_XML: # return serialize.as_atom(data), status, headers response_data = serialize.as_json(data['results'], query=data['query']) return response_data, status_code, headers
def test_category_primary_classification(self, mock_index): """Request with a category as primary classification.""" category = 'cs.DL' params = MultiDict({'primary_classification': category}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertEqual(len(query.primary_classification), 1) self.assertEqual(query.primary_classification[0], Classification(category={'id': category}))
def test_archive_primary_classification(self, mock_index): """Request with an archive as primary classification.""" archive = 'physics' params = MultiDict({'primary_classification': archive}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertEqual(len(query.primary_classification), 1) self.assertEqual(query.primary_classification[0], Classification(archive={'id': archive}))
def search() -> Response: """Main query endpoint.""" logger.debug("Got query: %s", request.args) data, status_code, headers = api.search(request.args) # requested = request.accept_mimetypes.best_match([JSON, ATOM_XML]) # if requested == ATOM_XML: # return serialize.as_atom(data), status, headers response_data = serialize.as_json(data["results"], query=data["query"]) headers.update({"Content-type": JSON}) response: Response = make_response(response_data, status_code, headers) return response
def test_include_fields(self, mock_index): """Request with specific fields included.""" extra_fields = ['title', 'abstract', 'authors'] params = MultiDict({'include': extra_fields}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") self.assertIn("results", data, "Results are returned") self.assertIn("query", data, "Query object is returned") expected_fields = api_domain.get_required_fields() + extra_fields self.assertEqual(set(data["query"].include_fields), set(expected_fields), "Requested fields are included")
def test_group_primary_classification(self, mock_index): """Request with a group as primary classification.""" group = "grp_physics" params = MultiDict({"primary_classification": group}) data, code, headers = api.search(params) self.assertEqual(code, HTTPStatus.OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertEqual(len(query.primary_classification), 1) self.assertEqual( query.primary_classification[0], Classification(group={"id": group}), )
def test_no_params(self, mock_index): """Request with no parameters.""" params = MultiDict({}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") self.assertIn("results", data, "Results are returned") self.assertIn("query", data, "Query object is returned") expected_fields = api_domain.get_required_fields() \ + api_domain.get_default_extra_fields() self.assertEqual(set(data["query"].include_fields), set(expected_fields), "Default set of fields is included")
def test_archive_subsumed_classification(self, mock_index): """Request with a subsumed archive as primary classification.""" archive = 'chao-dyn' params = MultiDict({'primary_classification': archive}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertEqual(len(query.primary_classification), 2) self.assertEqual(query.primary_classification[0], Classification(archive={'id': archive})) self.assertEqual(query.primary_classification[1], Classification(archive={'id': 'nlin.CD'}), "The canonical archive is used instead")
def test_with_start_date(self, mock_index): """Request with dates specified.""" params = MultiDict({'start_date': '1999-01-02'}) data, code, headers = api.search(params) self.assertEqual(code, status.HTTP_200_OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertIsNotNone(query.date_range) self.assertEqual(query.date_range.start_date.year, 1999) self.assertEqual(query.date_range.start_date.month, 1) self.assertEqual(query.date_range.start_date.day, 2) self.assertEqual(query.date_range.date_type, DateRange.SUBMITTED_CURRENT, "Submitted date of current version is the default")
def test_with_end_dates_and_type(self, mock_index): """Request with end date and date type specified.""" params = MultiDict( {"end_date": "1999-01-02", "date_type": "announced_date_first"} ) data, code, headers = api.search(params) self.assertEqual(code, HTTPStatus.OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertIsNotNone(query.date_range) self.assertEqual(query.date_range.end_date.year, 1999) self.assertEqual(query.date_range.end_date.month, 1) self.assertEqual(query.date_range.end_date.day, 2) self.assertEqual(query.date_range.date_type, DateRange.ANNOUNCED)
def test_query_param(self, mock_index): """Request with a query string. Tests conjuncts and quoted phrases.""" params = MultiDict({"query": 'au:copernicus AND ti:"dark matter"'}) data, code, headers = api.search(params) self.assertEqual(code, HTTPStatus.OK, "Returns 200 OK") self.assertIn("results", data, "Results are returned") self.assertIn("query", data, "Query object is returned") expected_fields = ( api_domain.get_required_fields() + api_domain.get_default_extra_fields() ) self.assertEqual( set(data["query"].include_fields), set(expected_fields), "Default set of fields is included", )
def test_archive_subsumed_classification(self, mock_index): """Request with a subsumed archive as primary classification.""" archive = "chao-dyn" params = MultiDict({"primary_classification": archive}) data, code, headers = api.search(params) self.assertEqual(code, HTTPStatus.OK, "Returns 200 OK") query = mock_index.search.call_args[0][0] self.assertEqual(len(query.primary_classification), 2) self.assertEqual( query.primary_classification[0], Classification(archive={"id": archive}), ) self.assertEqual( query.primary_classification[1], Classification(archive={"id": "nlin.CD"}), "The canonical archive is used instead", )
def test_bad_classification(self, mock_index): """Request with nonsense as primary classification.""" params = MultiDict({"primary_classification": "nonsense"}) with self.assertRaises(BadRequest): api.search(params)