Skip to content
Closed
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
56 changes: 55 additions & 1 deletion ietf/api/serializers_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class DocumentAuthorSerializer(serializers.ModelSerializer):
"""Serializer for a Person in a response"""

plain_name = serializers.SerializerMethodField()

class Meta:
model = DocumentAuthor
fields = ["person", "plain_name"]
Expand Down Expand Up @@ -192,3 +192,57 @@ class Meta:
model = Document
fields = ["id", "name"]
read_only_fields = ["id", "name"]


class CreateDocumentAuthorSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentAuthor
fields = ["person", "email", "affiliation", "country"]


class CreateRfcSerializer(serializers.ModelSerializer):
# fields based on ietf.sync.rfceditor.update_docs_from_rfc_index()
authors = CreateDocumentAuthorSerializer(many=True) # todo what about non-Person authors?

class Meta:
model = Document
fields = [
"rfc_number",
"title",
"authors",
"stream",
"group",
"abstract",
"pages",
"words",
"formal_languages",
"std_level",
"ad",
"external_url",
"uploaded_filename",
"note",
]

def create(self, validated_data):
authors_data = validated_data.pop("authors")
rfc = Document.objects.create(
type_id="rfc",
name=f"rfc{validated_data['rfc_number']}",
**validated_data,
)
for order, author_data in enumerate(authors_data):
rfc.documentauthor_set.create(
order=order,
**author_data,
)


class RfcPubNotificationSerializer(serializers.Serializer):
published = serializers.DateTimeField(default_timezone=datetime.timezone.utc)
draft_name = serializers.CharField(allow_blank=True)
draft_rev = serializers.CharField(allow_blank=True)
rfc = CreateRfcSerializer()


class NotificationAckSerializer(serializers.Serializer):
message = serializers.CharField(default="ack")
1 change: 1 addition & 0 deletions ietf/api/urls_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

urlpatterns = [
url(r"^doc/drafts_by_names/", views_rpc.DraftsByNamesView.as_view()),
url(r"^notify/pub/", views_rpc.RfcPubNotificationView.as_view()),
url(r"^persons/search/", views_rpc.RpcPersonSearch.as_view()),
path(r"subject/<str:subject_id>/person/", views_rpc.SubjectPersonView.as_view()),
]
Expand Down
21 changes: 20 additions & 1 deletion ietf/api/views_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
ReferenceSerializer,
EmailPersonSerializer,
RfcWithAuthorsSerializer,
DraftWithAuthorsSerializer,
DraftWithAuthorsSerializer, RfcPubNotificationSerializer, NotificationAckSerializer,
)
from ietf.doc.models import Document, DocHistory
from ietf.person.models import Email, Person
Expand Down Expand Up @@ -280,3 +280,22 @@ def post(self, request):
names = request.data
docs = Document.objects.filter(type_id="draft", name__in=names)
return Response(DraftSerializer(docs, many=True).data)


class RfcPubNotificationView(APIView):
api_key_endpoint = "ietf.api.views_rpc"

@extend_schema(
operation_id="notify_rfc_published",
summary="Notify datatracker of RFC publication",
request=RfcPubNotificationSerializer,
responses=NotificationAckSerializer,
)
def post(self, request):
# todo implement this for real
serializer = RfcPubNotificationSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
print(">>> Notified of RFC publication!!")
from pprint import pp
pp(serializer.validated_data)
return Response(NotificationAckSerializer().data)