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