Skip to content

Commit

Permalink
Merge pull request #202 from Materials-Consortia/fix_200_updated_quer…
Browse files Browse the repository at this point in the history
…y_string_behaviour

Fix include query parameter
  • Loading branch information
ml-evs committed Mar 3, 2020
2 parents 840d416 + df95127 commit ade8f64
Show file tree
Hide file tree
Showing 17 changed files with 59 additions and 70 deletions.
7 changes: 3 additions & 4 deletions .github/workflows/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
lark-parser==0.8.1
fastapi==0.48.0
fastapi==0.52.0
pydantic==1.4
email_validator==1.0.5
requests==2.22.0
uvicorn==0.11.2
requests==2.23.0
uvicorn==0.11.3
pymongo==3.10.1
mongomock==3.19.0
django==2.2.10
elasticsearch-dsl==6.4.0
Jinja2==2.11.1
idna==2.8
1 change: 0 additions & 1 deletion .github/workflows/requirements_eager.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,3 @@ mongomock
django
elasticsearch_dsl
Jinja2
idna
7 changes: 3 additions & 4 deletions optimade/server/exception_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@

from pydantic import ValidationError
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.requests import Request
from starlette.responses import JSONResponse
from fastapi.exceptions import RequestValidationError, StarletteHTTPException
from fastapi import Request
from fastapi.responses import JSONResponse

from optimade.models import OptimadeError, ErrorResponse, ErrorSource

Expand Down
7 changes: 2 additions & 5 deletions optimade/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@

from pydantic import ValidationError
from fastapi import FastAPI
from fastapi.exceptions import RequestValidationError
from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.middleware.cors import CORSMiddleware
from fastapi.exceptions import RequestValidationError, StarletteHTTPException
from fastapi.middleware.cors import CORSMiddleware

from .entry_collections import MongoCollection
from .config import CONFIG
from .middleware import RedirectSlashedURLs
from .routers import info, links, references, structures, landing
from .routers.utils import get_providers, BASE_URL_PREFIXES

Expand Down Expand Up @@ -64,7 +62,6 @@ def load_entries(endpoint_name: str, endpoint_collection: MongoCollection):


# Add various middleware
app.add_middleware(RedirectSlashedURLs)
app.add_middleware(CORSMiddleware, allow_origins=["*"])


Expand Down
7 changes: 2 additions & 5 deletions optimade/server/main_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@

from pydantic import ValidationError
from fastapi import FastAPI
from fastapi.exceptions import RequestValidationError
from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.middleware.cors import CORSMiddleware
from fastapi.exceptions import RequestValidationError, StarletteHTTPException
from fastapi.middleware.cors import CORSMiddleware

from .config import CONFIG
from .middleware import RedirectSlashedURLs
from .routers import index_info, links
from .routers.utils import BASE_URL_PREFIXES

Expand Down Expand Up @@ -58,7 +56,6 @@


# Add various middleware
app.add_middleware(RedirectSlashedURLs)
app.add_middleware(CORSMiddleware, allow_origins=["*"])


Expand Down
25 changes: 0 additions & 25 deletions optimade/server/middleware.py

This file was deleted.

5 changes: 2 additions & 3 deletions optimade/server/routers/index_info.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import Union

from fastapi import APIRouter
from starlette.requests import Request
from fastapi import APIRouter, Request

from optimade import __api_version__

Expand All @@ -18,7 +17,7 @@
from .utils import meta_values


router = APIRouter()
router = APIRouter(redirect_slashes=True)


@router.get(
Expand Down
7 changes: 3 additions & 4 deletions optimade/server/routers/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

from typing import Union

from fastapi import APIRouter
from starlette.exceptions import HTTPException as StarletteHTTPException
from starlette.requests import Request
from fastapi import APIRouter, Request
from fastapi.exceptions import StarletteHTTPException

from optimade import __api_version__

Expand All @@ -19,7 +18,7 @@
from .utils import meta_values, retrieve_queryable_properties, get_base_url


router = APIRouter()
router = APIRouter(redirect_slashes=True)

ENTRY_INFO_SCHEMAS = {
"structures": StructureResource.schema,
Expand Down
4 changes: 2 additions & 2 deletions optimade/server/routers/landing.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
""" OPTiMaDe landing page, rendered as a Jinja2 template. """

from pathlib import Path
from fastapi.templating import Jinja2Templates
from starlette.routing import Router, Route
from optimade import __api_version__
from pathlib import Path
from starlette.templating import Jinja2Templates

from . import ENTRY_COLLECTIONS
from .utils import meta_values
Expand Down
5 changes: 2 additions & 3 deletions optimade/server/routers/links.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import Union

from fastapi import APIRouter, Depends
from starlette.requests import Request
from fastapi import APIRouter, Depends, Request

from optimade.models import ErrorResponse, LinksResponse, LinksResource
from optimade.server.config import CONFIG
Expand All @@ -11,7 +10,7 @@

from .utils import get_entries

router = APIRouter()
router = APIRouter(redirect_slashes=True)

links_coll = MongoCollection(
collection=client[CONFIG.mongo_database][CONFIG.links_collection],
Expand Down
5 changes: 2 additions & 3 deletions optimade/server/routers/references.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import Union

from fastapi import APIRouter, Depends
from starlette.requests import Request
from fastapi import APIRouter, Depends, Request

from optimade.models import (
ErrorResponse,
Expand All @@ -17,7 +16,7 @@
from .utils import get_entries, get_single_entry


router = APIRouter()
router = APIRouter(redirect_slashes=True)

references_coll = MongoCollection(
collection=client[CONFIG.mongo_database][CONFIG.references_collection],
Expand Down
5 changes: 2 additions & 3 deletions optimade/server/routers/structures.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import Union

from fastapi import APIRouter, Depends
from starlette.requests import Request
from fastapi import APIRouter, Depends, Request

from optimade.models import (
ErrorResponse,
Expand All @@ -16,7 +15,7 @@

from .utils import get_entries, get_single_entry

router = APIRouter()
router = APIRouter(redirect_slashes=True)

structures_coll = MongoCollection(
collection=client[CONFIG.mongo_database][CONFIG.structures_collection],
Expand Down
7 changes: 5 additions & 2 deletions optimade/server/routers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
from datetime import datetime
from typing import Union, List, Dict, Any

from fastapi import HTTPException
from starlette.requests import Request
from fastapi import HTTPException, Request

from optimade import __api_version__
from optimade.models import (
Expand Down Expand Up @@ -211,6 +210,8 @@ def get_entries(
include = []
if getattr(params, "include", False):
include.extend(params.include.split(","))
else:
include.append(EntryListingQueryParams().include.default)

included = get_included_relationships(results, ENTRY_COLLECTIONS, include)

Expand Down Expand Up @@ -257,6 +258,8 @@ def get_single_entry(
include = []
if getattr(params, "include", False):
include.extend(params.include.split(","))
else:
include.append(SingleEntryQueryParams().include.default)

included = get_included_relationships(results, ENTRY_COLLECTIONS, include)

Expand Down
2 changes: 1 addition & 1 deletion optimade/validator/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from typing import Union

from pydantic import ValidationError
from starlette.testclient import TestClient
from fastapi.testclient import TestClient

from optimade.models import InfoResponse, EntryInfoResponse, IndexInfoResponse

Expand Down
5 changes: 2 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,10 @@
python_requires=">=3.6",
install_requires=[
"lark-parser~=0.8.1",
"fastapi~=0.48",
"fastapi~=0.52",
"pydantic~=1.4",
"email_validator",
"requests",
"idna<2.9", # Set to avoid problems with requests
"requests~=2.23",
],
extras_require={
"all": all_deps,
Expand Down
28 changes: 27 additions & 1 deletion tests/server/test_query_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def check_response(
else [response["data"]]
)

included_resource_types = {_["type"] for _ in response["included"]}
included_resource_types = list({_["type"] for _ in response["included"]})
self.assertEqual(
sorted(expected_included_types),
sorted(included_resource_types),
Expand Down Expand Up @@ -114,6 +114,15 @@ def test_default_value(self):
request = "/structures?include="
self.check_response(request, expected_types, expected_reference_ids)

# Single entry
request = "/structures/mpf_1"
expected_types = ["references"]
expected_reference_ids = ["dijkstra1968"]
self.check_response(request, expected_types, expected_reference_ids)

request = "/structures/mpf_1?include="
self.check_response(request, expected_types, expected_reference_ids)

def test_empty_value(self):
"""An empty value should resolve in no relationships being returned under `included`"""
request = '/structures?include=""'
Expand All @@ -135,6 +144,23 @@ def test_empty_value(self):
expected_data_relationship_types,
)

# Single entry
request = "/structures/mpf_1?include=''"
self.check_response(
request,
expected_types,
expected_reference_ids,
expected_data_relationship_types,
)

request = "/structures/mpf_1?include=''"
self.check_response(
request,
expected_types,
expected_reference_ids,
expected_data_relationship_types,
)

def test_default_value_single_entry(self):
"""For single entry. Default value for `include` is 'references'"""
request = "/structures/mpf_1"
Expand Down
2 changes: 1 addition & 1 deletion tests/server/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from pydantic import BaseModel

from starlette.testclient import TestClient
from fastapi.testclient import TestClient


def get_regular_client() -> TestClient:
Expand Down

0 comments on commit ade8f64

Please sign in to comment.