Skip to content
Merged
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
14 changes: 11 additions & 3 deletions ietf/api/urls_rpc.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
# Copyright The IETF Trust 2023-2024, All Rights Reserved

from ietf.api import views_rpc
from django.conf import settings

from ietf.api import views_rpc, views_rpc_demo
from ietf.utils.urls import url

urlpatterns = [
url(r"^doc/create_demo_draft/$", views_rpc.create_demo_draft),
url(r"^doc/drafts/(?P<doc_id>[0-9]+)$", views_rpc.rpc_draft),
url(r"^doc/drafts/(?P<doc_id>[0-9]+)/references", views_rpc.rpc_draft_refs),
url(r"^doc/drafts_by_names/", views_rpc.drafts_by_names),
url(r"^doc/submitted_to_rpc/$", views_rpc.submitted_to_rpc),
url(r"^doc/rfc/original_stream/$", views_rpc.rfc_original_stream),
url(r"^doc/rfc/authors/$", views_rpc.rfc_authors),
url(r"^doc/draft/authors/$", views_rpc.draft_authors),
url(r"^person/create_demo_person/$", views_rpc.create_demo_person),
url(r"^person/persons_by_email/$", views_rpc.persons_by_email),
url(r"^person/(?P<person_id>[0-9]+)$", views_rpc.rpc_person),
url(r"^persons/$", views_rpc.rpc_persons),
url(r"^subject/(?P<subject_id>[0-9]+)/person/$", views_rpc.rpc_subject_person),
]

if settings.SERVER_MODE not in {"production", "test"}:
# for non production demos
urlpatterns.append(
url(r"^doc/create_demo_draft/$", views_rpc_demo.create_demo_draft)
)
urlpatterns.append(
url(r"^person/create_demo_person/$", views_rpc_demo.create_demo_person)
)
51 changes: 0 additions & 51 deletions ietf/api/views_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from django.db.models import OuterRef, Subquery, Q
from django.http import (
HttpResponse,
HttpResponseBadRequest,
JsonResponse,
HttpResponseNotAllowed,
Expand All @@ -15,9 +14,7 @@
from django.contrib.auth.models import User

from ietf.api.ietf_utils import requires_api_token
from ietf.doc.factories import WgDraftFactory # DO NOT MERGE INTO MAIN
from ietf.doc.models import Document, DocHistory, RelatedDocument
from ietf.person.factories import PersonFactory # DO NOT MERGE INTO MAIN
from ietf.person.models import Email, Person


Expand Down Expand Up @@ -300,51 +297,3 @@ def draft_authors(request):
item["authors"].append(item_author)
response.append(item)
return JsonResponse(response, safe=False)


@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def create_demo_person(request):
"""Helper for creating rpc demo objects - SHOULD NOT MAKE IT INTO PRODUCTION"""
if request.method != "POST":
return HttpResponseNotAllowed(["POST"])

request_params = json.loads(request.body)
name = request_params["name"]
person = Person.objects.filter(name=name).first() or PersonFactory(name=name)
return JsonResponse({"user_id": person.user.pk, "person_pk": person.pk})


@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def create_demo_draft(request):
"""Helper for creating rpc demo objects - SHOULD NOT MAKE IT INTO PRODUCTION"""
if request.method != "POST":
return HttpResponseNotAllowed(["POST"])

request_params = json.loads(request.body)
name = request_params.get("name")
rev = request_params.get("rev")
states = request_params.get("states")
stream_id = request_params.get("stream_id", "ietf")
doc = None
if not name:
return HttpResponse(status=400, content="Name is required")
doc = Document.objects.filter(name=name).first()
if not doc:
kwargs = {"name": name, "stream_id": stream_id}
if states:
kwargs["states"] = states
if rev:
kwargs["rev"] = rev
doc = WgDraftFactory(
**kwargs
) # Yes, things may be a little strange if the stream isn't IETF, but until we nned something different...
event_type = "iesg_approved" if stream_id == "ietf" else "requested_publication"
if not doc.docevent_set.filter(
type=event_type
).exists(): # Not using get_or_create here on purpose - these are wobbly facades we're creating
doc.docevent_set.create(
type=event_type, by_id=1, desc="Sent off to the RPC"
)
return JsonResponse({"doc_id": doc.pk, "name": doc.name})
60 changes: 60 additions & 0 deletions ietf/api/views_rpc_demo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Copyright The IETF Trust 2023-2024, All Rights Reserved

import json

from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse, HttpResponseNotAllowed, JsonResponse

from ietf.api.ietf_utils import requires_api_token
from ietf.doc.factories import WgDraftFactory
from ietf.doc.models import Document
from ietf.person.factories import PersonFactory
from ietf.person.models import Person


@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def create_demo_person(request):
"""Helper for creating rpc demo objects - SHOULD NOT MAKE IT INTO PRODUCTION"""
if request.method != "POST":
return HttpResponseNotAllowed(["POST"])

request_params = json.loads(request.body)
name = request_params["name"]
person = Person.objects.filter(name=name).first() or PersonFactory(name=name)
return JsonResponse({"user_id": person.user.pk, "person_pk": person.pk})


@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def create_demo_draft(request):
"""Helper for creating rpc demo objects - SHOULD NOT MAKE IT INTO PRODUCTION"""
if request.method != "POST":
return HttpResponseNotAllowed(["POST"])

request_params = json.loads(request.body)
name = request_params.get("name")
rev = request_params.get("rev")
states = request_params.get("states")
stream_id = request_params.get("stream_id", "ietf")
doc = None
if not name:
return HttpResponse(status=400, content="Name is required")
doc = Document.objects.filter(name=name).first()
if not doc:
kwargs = {"name": name, "stream_id": stream_id}
if states:
kwargs["states"] = states
if rev:
kwargs["rev"] = rev
doc = WgDraftFactory(
**kwargs
) # Yes, things may be a little strange if the stream isn't IETF, but until we nned something different...
event_type = "iesg_approved" if stream_id == "ietf" else "requested_publication"
if not doc.docevent_set.filter(
type=event_type
).exists(): # Not using get_or_create here on purpose - these are wobbly facades we're creating
doc.docevent_set.create(
type=event_type, by_id=1, desc="Sent off to the RPC"
)
return JsonResponse({"doc_id": doc.pk, "name": doc.name})