Skip to content

Commit

Permalink
Use dicts instead of function for base URLs
Browse files Browse the repository at this point in the history
  • Loading branch information
CasperWA committed Feb 3, 2020
1 parent 796b6eb commit 97af883
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 25 deletions.
33 changes: 19 additions & 14 deletions optimade/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,18 @@
from .entry_collections import MongoCollection
from .config import CONFIG
from .routers import info, links, references, structures
from .routers.utils import get_providers, optional_base_urls
from .routers.utils import get_providers

from optimade import __api_version__, __version__
import optimade.server.exception_handlers as exc_handlers


versioned_base_url = f"/optimade/v{__api_version__.split('.')[0]}"
base_urls = {
"major": f"/optimade/v{__api_version__.split('.')[0]}",
"minor": f"/optimade/v{__api_version__.split('.')[1]}",
"patch": f"/optimade/v{__api_version__.split('.')[2]}",
}

app = FastAPI(
title="OPTiMaDe API",
description=(
Expand All @@ -28,9 +33,9 @@
This specification is generated using [`optimade-python-tools`](https://github.com/Materials-Consortia/optimade-python-tools/tree/v{__version__}) v{__version__}."""
),
version=__api_version__,
docs_url=f"{versioned_base_url}/extensions/docs",
redoc_url=f"{versioned_base_url}/extensions/redoc",
openapi_url=f"{versioned_base_url}/extensions/openapi.json",
docs_url=f"{base_urls['major']}/extensions/docs",
redoc_url=f"{base_urls['major']}/extensions/redoc",
openapi_url=f"{base_urls['major']}/extensions/openapi.json",
)


Expand Down Expand Up @@ -73,10 +78,10 @@ def load_entries(endpoint_name: str, endpoint_collection: MongoCollection):


# Add various endpoints to `/optimade/vMAJOR`
app.include_router(info.router, prefix=versioned_base_url)
app.include_router(links.router, prefix=versioned_base_url)
app.include_router(references.router, prefix=versioned_base_url)
app.include_router(structures.router, prefix=versioned_base_url)
app.include_router(info.router, prefix=base_urls["major"])
app.include_router(links.router, prefix=base_urls["major"])
app.include_router(references.router, prefix=base_urls["major"])
app.include_router(structures.router, prefix=base_urls["major"])


def add_optional_versioned_base_urls(app: FastAPI):
Expand All @@ -86,11 +91,11 @@ def add_optional_versioned_base_urls(app: FastAPI):
/optimade/vMajor.Minor.Patch
```
"""
for prefix in optional_base_urls(both=False, index=False, include_major=False):
app.include_router(info.router, prefix=prefix)
app.include_router(links.router, prefix=prefix)
app.include_router(references.router, prefix=prefix)
app.include_router(structures.router, prefix=prefix)
for version in ("minor", "patch"):
app.include_router(info.router, prefix=base_urls[version])
app.include_router(links.router, prefix=base_urls[version])
app.include_router(references.router, prefix=base_urls[version])
app.include_router(structures.router, prefix=base_urls[version])


def update_schema(app: FastAPI):
Expand Down
24 changes: 14 additions & 10 deletions optimade/server/main_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@

from .config import CONFIG
from .routers import index_info, links
from .routers.utils import optional_base_urls

from optimade import __api_version__, __version__
import optimade.server.exception_handlers as exc_handlers


versioned_base_url = f"/index/optimade/v{__api_version__.split('.')[0]}"
base_urls = {
"major": f"/index/optimade/v{__api_version__.split('.')[0]}",
"minor": f"/index/optimade/v{__api_version__.split('.')[1]}",
"patch": f"/index/optimade/v{__api_version__.split('.')[2]}",
}

app = FastAPI(
title="OPTiMaDe API - Index meta-database",
description=(
Expand All @@ -28,9 +32,9 @@
This specification is generated using [`optimade-python-tools`](https://github.com/Materials-Consortia/optimade-python-tools/tree/v{__version__}) v{__version__}."""
),
version=__api_version__,
docs_url=f"{versioned_base_url}/extensions/docs",
redoc_url=f"{versioned_base_url}/extensions/redoc",
openapi_url=f"{versioned_base_url}/extensions/openapi.json",
docs_url=f"{base_urls['major']}/extensions/docs",
redoc_url=f"{base_urls['major']}/extensions/redoc",
openapi_url=f"{base_urls['major']}/extensions/openapi.json",
)


Expand Down Expand Up @@ -59,8 +63,8 @@


# Add various endpoints to `/optimade/vMAJOR`
app.include_router(index_info.router, prefix=versioned_base_url)
app.include_router(links.router, prefix=versioned_base_url)
app.include_router(index_info.router, prefix=base_urls["major"])
app.include_router(links.router, prefix=base_urls["major"])


def add_optional_versioned_base_urls(app: FastAPI):
Expand All @@ -70,9 +74,9 @@ def add_optional_versioned_base_urls(app: FastAPI):
/index/optimade/vMajor.Minor.Patch
```
"""
for prefix in optional_base_urls(both=False, index=True, include_major=False):
app.include_router(index_info.router, prefix=prefix)
app.include_router(links.router, prefix=prefix)
for version in ("minor", "patch"):
app.include_router(index_info.router, prefix=base_urls[version])
app.include_router(links.router, prefix=base_urls[version])


def update_schema(app: FastAPI):
Expand Down
4 changes: 3 additions & 1 deletion optimade/server/routers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,12 @@ def meta_values(
) -> ResponseMeta:
"""Helper to initialize the meta values"""
from optimade.models import ResponseMetaQuery, Provider, Implementation
from optimade.server.main import base_urls
from optimade.server.main_index import base_urls as index_base_urls

parse_result = urllib.parse.urlparse(url)

for prefix in optional_base_urls():
for prefix in list(base_urls.values()) + list(index_base_urls.values()):
if parse_result.path.startswith(prefix):
url_path = parse_result.path[len(prefix) :]
break
Expand Down

0 comments on commit 97af883

Please sign in to comment.