Skip to content

Commit

Permalink
refactor(apis_core): refactor the urls entrypoint
Browse files Browse the repository at this point in the history
This commit refactors the whole `apis_core.urls` module. It splits up
different apps urls in separate blocks that are only included if the app
is actually enabled. It also moves some of the app specific routes to
their apps, instead if cluttering the main urls.py file with the
includes.

Closes: #1170
  • Loading branch information
b1rger committed Sep 9, 2024
1 parent 9166e86 commit a10f901
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 48 deletions.
11 changes: 11 additions & 0 deletions apis_core/apis_entities/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from django.shortcuts import get_list_or_404
from django.urls import include, path, register_converter

from apis_core.apis_entities.api_views import GetEntityGeneric, ListEntityGeneric

# from .views import ReversionCompareView TODO: add again when import is fixed
from apis_core.apis_entities.models import AbstractEntity
from apis_core.apis_entities.views import (
Expand All @@ -13,6 +15,15 @@
)
from apis_core.generic.views import Create, Delete, Detail, List

api_routes = [
path("entities/", ListEntityGeneric.as_view()),
path(
"entity/<int:pk>/",
GetEntityGeneric.as_view(),
name="GetEntityGeneric",
),
]


class EntityToContenttypeConverter:
"""
Expand Down
7 changes: 7 additions & 0 deletions apis_core/apis_metainfo/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from rest_framework.routers import DefaultRouter

from apis_core.apis_metainfo.viewsets import UriToObjectViewSet

router = DefaultRouter()

router.register(r"metainfo/uritoobject", UriToObjectViewSet, basename="uritoobject")
5 changes: 5 additions & 0 deletions apis_core/core/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.urls import path

from apis_core.core.views import Dumpdata

api_routes = [path("dumpdata", Dumpdata.as_view())]
120 changes: 72 additions & 48 deletions apis_core/urls.py
Original file line number Diff line number Diff line change
@@ -1,76 +1,100 @@
from django.conf import settings
from django.contrib import admin
from django.contrib.auth.decorators import login_required
from django.urls import include, path, re_path
from django.urls import include, path
from django.views.generic import TemplateView
from django.views.static import serve
from drf_spectacular.views import (
SpectacularAPIView,
SpectacularRedocView,
SpectacularSwaggerView,
)

from apis_core.apis_entities.api_views import GetEntityGeneric, ListEntityGeneric
from apis_core.apis_metainfo.viewsets import UriToObjectViewSet
from apis_core.core.views import Dumpdata
from apis_core.generic.routers import CustomDefaultRouter

app_name = "apis_core"

router = CustomDefaultRouter()
# inject the manually created UriToObjectViewSet into the api router
router.register(r"metainfo/uritoobject", UriToObjectViewSet, basename="uritoobject")


urlpatterns = [
path("", TemplateView.as_view(template_name="base.html"), name="apis_index"),
path("admin/", admin.site.urls),
path("swagger/schema/", SpectacularAPIView.as_view(), name="schema"),
# Optional UI:
path(
"swagger/schema/swagger-ui/",
SpectacularSwaggerView.as_view(url_name="apis_core:schema"),
name="swagger-ui",
),
path(
"swagger/schema/redoc/",
SpectacularRedocView.as_view(url_name="apis_core:schema"),
name="redoc",
),
path(
"entities/", include("apis_core.apis_entities.urls", namespace="apis_entities")
),
path(
"relations/",
include("apis_core.apis_relations.urls", namespace="apis_relations"),
),
path(
"api/", include((router.urls, "apis_core"), namespace="apis_api")
), # routers do not support namespaces out of the box
path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
re_path(
r"^docs/(?P<path>.*)$",
login_required(serve),
{"document_root": "apis-core/docs/_build/html"},
"docs",
),
path("accounts/", include("django.contrib.auth.urls")),
path(
"entity/<int:pk>/",
GetEntityGeneric.as_view(),
name="GetEntityGeneric",
),
path("api/entities/", ListEntityGeneric.as_view()),
path("api/dumpdata", Dumpdata.as_view()),
path("", include("apis_core.generic.urls", namespace="generic")),
]

router = CustomDefaultRouter()

if "apis_core.core" in settings.INSTALLED_APPS:
from apis_core.core.urls import api_routes

urlpatterns.append(path("api/", include(api_routes)))


if "apis_core.generic" in settings.INSTALLED_APPS:
urlpatterns.append(path("", include("apis_core.generic.urls", namespace="generic")))


if "apis_core.apis_metainfo" in settings.INSTALLED_APPS:
from apis_core.apis_metainfo.urls import router as apis_metainfo_router

router.registry.extend(apis_metainfo_router.registry)


if "apis_core.apis_entities" in settings.INSTALLED_APPS:
urlpatterns.append(
path(
"entities/",
include("apis_core.apis_entities.urls", namespace="apis_entities"),
)
)
from apis_core.apis_entities.urls import api_routes

urlpatterns.append(path("api/", include(api_routes)))


if "apis_core.apis_relations" in settings.INSTALLED_APPS:
urlpatterns.append(
path(
"relations/",
include("apis_core.apis_relations.urls", namespace="apis_relations"),
)
)


if "apis_core.history" in settings.INSTALLED_APPS:
urlpatterns.append(
path("history/", include("apis_core.history.urls", namespace="history"))
)


if "apis_core.relations" in settings.INSTALLED_APPS:
urlpatterns.append(path("relations/", include("apis_core.relations.urls")))


if "apis_core.collections" in settings.INSTALLED_APPS:
urlpatterns.append(path("collections/", include("apis_core.collections.urls")))


if "rest_framework" in settings.INSTALLED_APPS:
urlpatterns.append(
path("api/", include((router.urls, "apis_core"), namespace="apis_api"))
)
urlpatterns.append(
path("api-auth/", include("rest_framework.urls", namespace="rest_framework"))
)


if "drf_spectacular" in settings.INSTALLED_APPS:
urlpatterns.append(
path("swagger/schema/", SpectacularAPIView.as_view(), name="schema")
)
urlpatterns.append(
path(
"swagger/schema/swagger-ui/",
SpectacularSwaggerView.as_view(url_name="apis_core:schema"),
name="swagger-ui",
)
)
urlpatterns.append(
path(
"swagger/schema/redoc/",
SpectacularRedocView.as_view(url_name="apis_core:schema"),
name="redoc",
)
)

0 comments on commit a10f901

Please sign in to comment.