From 5f88ea07d92c15cd0470903902cacd67f7207b9e Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 28 Sep 2023 12:22:44 -0500 Subject: [PATCH 1/2] feat: api for creating demo drafts --- ietf/api/urls.py | 1 + ietf/api/views.py | 40 ++++++++++++++++++++++++++++++++++++++-- rpcapi.yaml | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/ietf/api/urls.py b/ietf/api/urls.py index 772cf59d094..f53bcdce5ea 100644 --- a/ietf/api/urls.py +++ b/ietf/api/urls.py @@ -64,6 +64,7 @@ url(r'^rpc/persons/$', api_views.rpc_persons), url(r'^rpc/doc/submitted_to_rpc/$', api_views.submitted_to_rpc), url(r'^rpc/person/create_demo_person/$', api_views.create_demo_person), + url(r'^rpc/doc/create_demo_draft/$', api_views.create_demo_draft), ] diff --git a/ietf/api/views.py b/ietf/api/views.py index ea1aa5da339..f0f471287e6 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -31,11 +31,12 @@ import debug # pyflakes:ignore import ietf -from ietf.person.factories import PersonFactory +from ietf.person.factories import PersonFactory # DO NOT MERGE INTO MAIN from ietf.person.models import Person, Email from ietf.api import _api_list from ietf.api.serializer import JsonExportMixin from ietf.api.ietf_utils import is_valid_token +from ietf.doc.factories import WgDraftFactory # DO NOT MERGE INTO MAIN from ietf.doc.models import Document from ietf.doc.utils import fuzzy_find_documents from ietf.ietfauth.views import send_account_creation_email @@ -505,4 +506,39 @@ def create_demo_person(request): person = PersonFactory(name=name) - return JsonResponse({"user_id":person.user.pk,"person_pk":person.pk}, status=201) + return JsonResponse({"user_id":person.user.pk,"person_pk":person.pk}) + +@csrf_exempt +def create_demo_draft(request): + """ Helper for creating rpc demo objects - SHOULD NOT MAKE IT INTO PRODUCTION + + """ + authtoken = request.META.get("HTTP_X_API_KEY", None) + if authtoken is None or not is_valid_token("ietf.api.views.submitted_to_rpc", authtoken): + return HttpResponseForbidden() + if request.method != "POST": + return HttpResponseForbidden() + + request_params = json.loads(request.body) + debug.show("request_params") + name = request_params.get("name") + states = request_params.get("states") + debug.show("name") + debug.show("states") + exists = False + doc = None + if not name: + return HttpResponse(status=400, content="Name is required") + doc = Document.objects.filter(name=name).first() + if doc: + exists = True + else: + kwargs = {} + if name: + kwargs["name"] = name + if states: + kwargs["states"] = states + doc = WgDraftFactory(**kwargs) + return JsonResponse({ "doc_id":doc.pk, "name":doc.name }) + + diff --git a/rpcapi.yaml b/rpcapi.yaml index f6a0db088b0..383fdb65417 100644 --- a/rpcapi.yaml +++ b/rpcapi.yaml @@ -65,7 +65,7 @@ paths: name: type: string responses: - '201': + '200': description: OK content: application/json: @@ -77,6 +77,40 @@ paths: person_pk: type: integer + /doc/create_demo_draft/: + post: + operationId: create_demo_draft + summary: Build a datatraker WG draft for RPC demo purposes + description: returns a datatracker document id for a draft created with the provided name and states. The arguments, if present, are passed directly to the WgDraftFactory + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + states: + type: array + items: + type: array + items: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + doc_id: + type: integer + name: + type: string +s + /doc/submitted_to_rpc: get: operationId: submitted_to_rpc From 48d55589b7f210407e458a5926e131f109bc782a Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 28 Sep 2023 12:28:21 -0500 Subject: [PATCH 2/2] chore: remove debug and unnecessary conditional. --- ietf/api/views.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ietf/api/views.py b/ietf/api/views.py index f0f471287e6..825b469f529 100644 --- a/ietf/api/views.py +++ b/ietf/api/views.py @@ -520,11 +520,8 @@ def create_demo_draft(request): return HttpResponseForbidden() request_params = json.loads(request.body) - debug.show("request_params") name = request_params.get("name") states = request_params.get("states") - debug.show("name") - debug.show("states") exists = False doc = None if not name: @@ -533,9 +530,7 @@ def create_demo_draft(request): if doc: exists = True else: - kwargs = {} - if name: - kwargs["name"] = name + kwargs = {"name": name} if states: kwargs["states"] = states doc = WgDraftFactory(**kwargs)