Skip to content

Commit

Permalink
Pass OPENAPI_DOCUMENT to API also in django mode (#1510)
Browse files Browse the repository at this point in the history
* Pass OPENAPI_DOCUMENT to API also in django mode

Fixes #1509

* Add basic test for django

This only verifies that one page loads, which however
covers most of the django setup.

* Install django requirements in CI
  • Loading branch information
totycro authored Jan 30, 2024
1 parent 8e7f8fc commit 278004d
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 2 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ jobs:
pip3 install -r requirements-starlette.txt
pip3 install -r requirements-dev.txt
pip3 install -r requirements-provider.txt
pip3 install -r requirements-django.txt
pip3 install -r docs/requirements.txt
python3 setup.py install
pip3 install --upgrade numpy elasticsearch
Expand All @@ -123,6 +124,7 @@ jobs:
pytest tests/test_config.py
pytest tests/test_csv__formatter.py
pytest tests/test_csv__provider.py
pytest tests/test_django.py
pytest tests/test_elasticsearch__provider.py
pytest tests/test_esri_provider.py
pytest tests/test_filesystem_provider.py
Expand Down
2 changes: 2 additions & 0 deletions pygeoapi/django_/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import os
# pygeoapi specific
from pygeoapi.config import get_config
from pygeoapi.openapi import load_openapi_document
from pygeoapi.util import get_api_rules

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
Expand Down Expand Up @@ -167,6 +168,7 @@

# pygeoapi specific
PYGEOAPI_CONFIG = get_config()
OPENAPI_DOCUMENT = load_openapi_document()

API_RULES = get_api_rules(PYGEOAPI_CONFIG)

Expand Down
4 changes: 2 additions & 2 deletions pygeoapi/django_/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -545,9 +545,9 @@ def _feed_response(request: HttpRequest, api_definition: str,

if 'admin' in api_definition and settings.PYGEOAPI_CONFIG['server'].get('admin'): # noqa
from pygeoapi.admin import Admin
api_ = Admin(settings.PYGEOAPI_CONFIG)
api_ = Admin(settings.PYGEOAPI_CONFIG, settings.OPENAPI_DOCUMENT)
else:
api_ = API(settings.PYGEOAPI_CONFIG)
api_ = API(settings.PYGEOAPI_CONFIG, settings.OPENAPI_DOCUMENT)

api = getattr(api_, api_definition)

Expand Down
18 changes: 18 additions & 0 deletions tests/test_django.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from http import HTTPStatus
import sys
import os
from unittest import mock

import django
from django.test import Client


@mock.patch.dict(os.environ, {"DJANGO_SETTINGS_MODULE": "django_.settings"})
@mock.patch.object(sys, "path", sys.path + ["./pygeoapi"])
def test_django_landing_page_loads():
django.setup()

response = Client(SERVER_NAME="localhost").get("/")

assert response.status_code == HTTPStatus.OK
assert response.json()["title"] == "pygeoapi default instance"

0 comments on commit 278004d

Please sign in to comment.