Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions b2b/urls.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
"""URL routing for the B2B API."""

from django.urls import include, re_path

import b2b.views.v0.urls as urls_v0

urlpatterns = [
re_path(r"^api/v0/b2b/", include((urls_v0, "v0"))),
]
# moved to main.urls.v0
urlpatterns = []
2 changes: 2 additions & 0 deletions cms/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

detail_path_char_pattern = r"\w\-\.+:"

app_name = "cms"

if WAGTAIL_APPEND_SLASH:
custom_serve_pattern = (
rf"^({COURSE_INDEX_SLUG}/(?:[{detail_path_char_pattern}]+/)*)$"
Expand Down
File renamed without changes.
Empty file added cms/wagtail_api/schema.py
Empty file.
69 changes: 21 additions & 48 deletions cms/wagtail_api/schema/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,33 +105,6 @@ class PageMetaSerializer(serializers.Serializer):
last_published_at = serializers.DateTimeField(allow_null=True)


class PageSerializer(serializers.Serializer):
"""
Serializer for individual Wagtail pages.
"""

id = serializers.IntegerField()
title = serializers.CharField()
meta = PageMetaSerializer()


class PageListMetaSerializer(serializers.Serializer):
"""
Serializer for metadata of a list of Wagtail pages.
"""

total_count = serializers.IntegerField()


class PageListSerializer(serializers.Serializer):
"""
Serializer for a list of Wagtail pages.
"""

meta = PageListMetaSerializer()
items = PageSerializer(many=True)


class CertificatePageSerializer(serializers.Serializer):
"""
Serializer for certificate pages, including overrides and signatory items.
Expand All @@ -146,15 +119,6 @@ class CertificatePageSerializer(serializers.Serializer):
signatory_items = SignatoryItemSerializer(many=True)


class CertificatePageListSerializer(serializers.Serializer):
"""
Serializer for a list of certificate pages.
"""

meta = PageListMetaSerializer()
items = CertificatePageSerializer(many=True)


class CoursePageItemSerializer(serializers.ModelSerializer):
"""
Serializer for individual course page items, including all relevant fields.
Expand Down Expand Up @@ -204,15 +168,6 @@ class Meta:
topic_list = TopicSerializer(many=True)


class CoursePageListSerializer(serializers.Serializer):
"""
Serializer for a list of course pages, including metadata and items.
"""

meta = PageListMetaSerializer()
items = CoursePageItemSerializer(many=True)


class ProgramPageItemSerializer(serializers.ModelSerializer):
"""
Serializer for individual program page items, including all relevant fields.
Expand Down Expand Up @@ -267,10 +222,28 @@ def get_description(self, instance):
program_details = ProgramSerializer()


class ProgramPageListSerializer(serializers.Serializer):
class PageSerializer(serializers.Serializer):
"""
Serializer for individual Wagtail pages.
"""

id = serializers.IntegerField()
title = serializers.CharField()
meta = PageMetaSerializer()


class PageListMetaSerializer(serializers.Serializer):
"""
Serializer for a list of program pages, including metadata and items.
Serializer for metadata of a list of Wagtail pages.
"""

total_count = serializers.IntegerField()


class PageListSerializer(serializers.Serializer):
"""
Serializer for a list of Wagtail pages.
"""

meta = PageListMetaSerializer()
items = ProgramPageItemSerializer(many=True)
items = PageSerializer(many=True)
20 changes: 15 additions & 5 deletions cms/wagtail_api/schema/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,25 @@
Views for Wagtail API Schema
"""

from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema
from rest_framework.response import Response
from rest_framework.views import APIView

from .serializers import (
from cms.wagtail_apit.schema.serializers import (
CertificatePageListSerializer,
CoursePageListSerializer,
PageListSerializer,
ProgramPageListSerializer,
)
from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema
from main.versioning import V2Versioning
from rest_framework.response import Response
from rest_framework.views import APIView


class WagtailPagesSchemaView(APIView):
"""
View for listing all Wagtail pages with schema documentation.
"""

versioning_class = V2Versioning

@extend_schema(
summary="List all Wagtail Pages",
description="Returns pages of all types",
Expand Down Expand Up @@ -56,6 +58,8 @@ class WagtailCertificatePagesSchemaView(APIView):
View for listing all Certificate Pages with schema documentation.
"""

versioning_class = V2Versioning

@extend_schema(
summary="List all Certificate Pages",
description="Returns pages of type cms.CertificatePage",
Expand All @@ -78,6 +82,8 @@ class WagtailCoursePagesSchemaView(APIView):
View for listing all Course Pages with schema documentation.
"""

versioning_class = V2Versioning

@extend_schema(
summary="List all Course Pages",
description="Returns pages of type cms.CoursePage",
Expand Down Expand Up @@ -108,6 +114,8 @@ class WagtailProgramPagesSchemaView(APIView):
View for listing all Program Pages with schema documentation.
"""

versioning_class = V2Versioning

@extend_schema(
summary="List all Program Pages",
description="Returns pages of type cms.ProgramPage",
Expand Down Expand Up @@ -138,6 +146,8 @@ class WagtailPagesRetrieveSchemaView(APIView):
View for retrieving details of a specific Wagtail page with schema documentation.
"""

versioning_class = V2Versioning

@extend_schema(
summary="Get Wagtail Page Details",
description="Returns details of a specific Wagtail page by ID",
Expand Down
56 changes: 56 additions & 0 deletions cms/wagtail_api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from enum import Enum

from django.db.models import F
from drf_spectacular.utils import extend_schema, extend_schema_view
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.response import Response
from wagtail.api.v2.views import PagesAPIViewSet
Expand Down Expand Up @@ -33,6 +34,61 @@ def anonymous_access_allowed_types(cls):
return [cls.COURSE.value, cls.PROGRAM.value, cls.CERTIFICATE.value]


@extend_schema_view(
list=extend_schema(
summary="List all Wagtail Pages",
description="Returns pages of all types",
operation_id="pages_list",
parameters=[
OpenApiParameter(
name="type",
required=False,
type=str,
description="Filter by Wagtail page type",
),
OpenApiParameter(
name="fields",
required=False,
type=str,
description="Specify fields (e.g. `*`)",
),
],
responses=PageListSerializer,
),
retreive=extend_schema(
summary="Get Wagtail Page Details",
description="Returns details of a specific Wagtail page by ID",
operation_id="pages_retrieve",
parameters=[
OpenApiParameter(
name="id",
type=int,
location=OpenApiParameter.PATH,
required=True,
description="ID of the Wagtail page",
),
OpenApiParameter(
name="revision_id",
required=False,
type=int,
description="Optional certificate revision ID to retrieve a specific revision of the certificate page",
),
],
responses={
200: OpenApiResponse(
response={
"oneOf": [
{"$ref": "#/components/schemas/CoursePageItem"},
{"$ref": "#/components/schemas/ProgramPageItem"},
{"$ref": "#/components/schemas/CertificatePage"},
{"$ref": "#/components/schemas/Page"},
]
},
description="Returns a page of any known Wagtail page type",
)
},
),
)
class WagtailPagesAPIViewSet(PagesAPIViewSet):
"""
Custom API viewset for Wagtail pages with
Expand Down
12 changes: 1 addition & 11 deletions courses/urls/__init__.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
"""Course API URL routes"""

from django.urls import include, path
from django.urls import path
from rest_framework import routers

import courses.urls.v1.urls as urls_v1
import courses.urls.v2.urls as urls_v2
from courses.views import v1

router = routers.SimpleRouter()


urlpatterns = [
path("api/v1/", include(urls_v1, "v1")),
path("api/v2/", include(urls_v2, "v2")),
]

urlpatterns += [
path(
"api/records/program/<int:pk>/share/",
v1.LearnerRecordShareView.as_view(),
Expand All @@ -36,9 +29,6 @@
v1.LearnerRecordFromUUIDView.as_view(),
name="shared_learner_record_from_uuid",
),
]

urlpatterns += [
path(
"enrollments/",
v1.CreateEnrollmentView.as_view(),
Expand Down
2 changes: 0 additions & 2 deletions ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
ProductViewSet,
UserDiscountViewSet,
)
from ecommerce.views.v0.urls import urlpatterns as v0_urls
from main.routers import SimpleRouterWithNesting

router = SimpleRouterWithNesting()
Expand Down Expand Up @@ -74,7 +73,6 @@
)

urlpatterns = [
path("api/v0/", include((v0_urls, "v0"))),
path("api/", include(router.urls)),
re_path(
"checkout/to_payment",
Expand Down
2 changes: 2 additions & 0 deletions ecommerce/views/v0/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
parents_query_lookups=["discount"],
)

app_name = "ecommerce"

urlpatterns = [
path(
"baskets/create_from_product/<str:product_id>/",
Expand Down
2 changes: 1 addition & 1 deletion main/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -1102,7 +1102,7 @@
"DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticated",),
"EXCEPTION_HANDLER": "main.exceptions.exception_handler",
"TEST_REQUEST_DEFAULT_FORMAT": "json",
"DEFAULT_VERSIONING": "rest_framework.versioning.NamespaceVersioning",
"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.NamespaceVersioning",
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
"ALLOWED_VERSIONS": ["v0", "v1", "v2"],
"DEFAULT_RENDERER_CLASSES": ("rest_framework.renderers.JSONRenderer",)
Expand Down
2 changes: 1 addition & 1 deletion main/urls.py → main/urls/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from wagtail.documents import urls as wagtaildocs_urls

from cms.views import instructor_page
from cms.wagtail_api.urls import api_router as wagtail_api_router
from cms.wagtail_api.router import api_router as wagtail_api_router
from main.views import (
cms_signin_redirect_to_site_signin,
index,
Expand Down
8 changes: 8 additions & 0 deletions main/urls/v0.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.urls import include, path

app_name = "v0"

urlpatterns = [
path("b2b/", include("b2b.views.v0.urls")),
path("", include("ecommerce.views.v0.urls")),
]
5 changes: 5 additions & 0 deletions main/urls/v1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.urls import include, path

app_name = "v1"

urlpatterns = [path("", include("courses.urls.v1.urls"))]
7 changes: 7 additions & 0 deletions main/urls/v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.urls import include, path

app_name = "v2"

urlpatterns = [
path("", include("courses.urls.v2.urls")),
]
Loading
Loading