diff --git a/ietf/api/urls_rpc.py b/ietf/api/urls_rpc.py index 63b0b47042..aef075cb47 100644 --- a/ietf/api/urls_rpc.py +++ b/ietf/api/urls_rpc.py @@ -1,11 +1,11 @@ # 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[0-9]+)$", views_rpc.rpc_draft), url(r"^doc/drafts/(?P[0-9]+)/references", views_rpc.rpc_draft_refs), url(r"^doc/drafts_by_names/", views_rpc.drafts_by_names), @@ -13,9 +13,17 @@ 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[0-9]+)$", views_rpc.rpc_person), url(r"^persons/$", views_rpc.rpc_persons), url(r"^subject/(?P[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) + ) diff --git a/ietf/api/views_rpc.py b/ietf/api/views_rpc.py index cfc17b437c..81eee78f1f 100644 --- a/ietf/api/views_rpc.py +++ b/ietf/api/views_rpc.py @@ -4,7 +4,6 @@ from django.db.models import OuterRef, Subquery, Q from django.http import ( - HttpResponse, HttpResponseBadRequest, JsonResponse, HttpResponseNotAllowed, @@ -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 @@ -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}) diff --git a/ietf/api/views_rpc_demo.py b/ietf/api/views_rpc_demo.py new file mode 100644 index 0000000000..51dff32bf0 --- /dev/null +++ b/ietf/api/views_rpc_demo.py @@ -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})