Skip to content

Commit

Permalink
fix!: add url_prefix param to fix swagger docs at non-root paths #408
Browse files Browse the repository at this point in the history
  • Loading branch information
louise-davies authored and root committed Apr 11, 2023
1 parent 9921b53 commit 49632ea
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 4 deletions.
1 change: 1 addition & 0 deletions datagateway_api/config.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ host: "127.0.0.1"
port: "5000"
test_user_credentials: { username: "root", password: "pw" }
test_mechanism: "simple"
url_prefix: "/"
8 changes: 4 additions & 4 deletions datagateway_api/src/api_start_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ def handle_error(self, e):

def configure_datagateway_api_swaggerui_blueprint(flask_app):
swaggerui_blueprint = get_swaggerui_blueprint(
base_url=Config.config.datagateway_api.extension,
api_url="/datagateway-api/openapi.json",
base_url=f"{Config.config.url_prefix}{Config.config.datagateway_api.extension}",
api_url=f"{Config.config.url_prefix}/datagateway-api/openapi.json",
config={"app_name": "DataGateway API OpenAPI Spec"},
blueprint_name="DataGateway API Swagger UI",
)
Expand All @@ -83,8 +83,8 @@ def configure_datagateway_api_swaggerui_blueprint(flask_app):

def configure_search_api_swaggerui_blueprint(flask_app):
swaggerui_blueprint = get_swaggerui_blueprint(
base_url=Config.config.search_api.extension,
api_url="/search-api/openapi.json",
base_url=f"{Config.config.url_prefix}{Config.config.search_api.extension}",
api_url=f"{Config.config.url_prefix}/search-api/openapi.json",
config={"app_name": "Search API OpenAPI Spec"},
blueprint_name="Search API Swagger UI",
)
Expand Down
5 changes: 5 additions & 0 deletions datagateway_api/src/common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ def validate_extension(extension):
raise ValueError("must start with '/'")
if extension.endswith("/") and len(extension) != 1:
raise ValueError("must not end with '/'")
if extension == "/":
extension = ""

return extension

Expand Down Expand Up @@ -183,6 +185,9 @@ class APIConfig(BaseModel):
search_api: Optional[SearchAPI]
test_mechanism: Optional[StrictStr]
test_user_credentials: Optional[TestUserCredentials]
url_prefix: StrictStr

_validate_extension = validator("url_prefix", allow_reuse=True)(validate_extension)

@classmethod
def load(cls, path=Path(__file__).parent.parent.parent / "config.yaml"):
Expand Down
7 changes: 7 additions & 0 deletions datagateway_api/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
)
from datagateway_api.src.common.config import Config
from datagateway_api.src.common.logger_setup import setup_logger
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.wrappers import Response

setup_logger()
log = logging.getLogger()
Expand All @@ -18,8 +20,13 @@
api, specs = create_app_infrastructure(app)
create_api_endpoints(app, api, specs)
create_openapi_endpoints(app, specs)
app.config["APPLICATION_ROOT"] = Config.config.url_prefix

if __name__ == "__main__":
app.wsgi_app = DispatcherMiddleware(
Response('Not Found', status=404),
{Config.config.url_prefix: app.wsgi_app}
)
app.run(
host=Config.config.host,
port=Config.config.port,
Expand Down

0 comments on commit 49632ea

Please sign in to comment.