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
3 changes: 3 additions & 0 deletions ietf/api/serializers_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
update_rfcauthors,
)
from ietf.group.models import Group
from ietf.group.serializers import AreaSerializer
from ietf.name.models import StreamName, StdLevelName
from ietf.person.models import Person
from ietf.utils import log
Expand Down Expand Up @@ -115,6 +116,7 @@ class FullDraftSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length=255)
title = serializers.CharField(max_length=255)
group = serializers.SlugRelatedField(slug_field="acronym", read_only=True)
area = AreaSerializer(read_only=True)

# Other fields we need to add / adjust
source_format = serializers.SerializerMethodField()
Expand All @@ -133,6 +135,7 @@ class Meta:
"stream",
"title",
"group",
"area",
"abstract",
"pages",
"source_format",
Expand Down
16 changes: 16 additions & 0 deletions ietf/doc/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1147,6 +1147,22 @@ def request_closed_time(self, review_req):
e = self.latest_event(ReviewRequestDocEvent, type="closed_review_request", review_request=review_req)
return e.time if e and e.time else None

@property
def area(self) -> Group | None:
"""Get area for document, if one exists

None for non-IETF-stream documents. N.b., this is stricter than Group.area() and
uses different logic from Document.area_acronym().
"""
if self.stream_id != "ietf":
return None
if self.group is None:
return None
parent = self.group.parent
if parent.type_id == "area":
return parent
return None

def area_acronym(self):
g = self.group
if g:
Expand Down
19 changes: 1 addition & 18 deletions ietf/doc/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ class RfcMetadataSerializer(serializers.ModelSerializer):
status = RfcStatusSerializer(source="*")
authors = serializers.SerializerMethodField()
group = GroupSerializer()
area = serializers.SerializerMethodField()
area = AreaSerializer(read_only=True)
stream = StreamNameSerializer()
ad = AreaDirectorSerializer(read_only=True, allow_null=True)
group_list_email = serializers.EmailField(source="group.list_email", read_only=True)
Expand Down Expand Up @@ -288,23 +288,6 @@ def get_authors(self, doc: Document):
many=True,
).data

@extend_schema_field(AreaSerializer(required=False))
def get_area(self, doc: Document):
"""Get area for the RFC

This logic might be better moved to Document or a combination of Document
and Group. The current (2026-02-24) Group.area() method is not strict enough:
it does not limit to WG groups or IETF-stream documents.
"""
if doc.stream_id != "ietf":
return None
if doc.group is None:
return None
parent = doc.group.parent
if parent.type_id == "area":
return AreaSerializer(parent).data
return None

@extend_schema_field(DocIdentifierSerializer(many=True))
def get_identifiers(self, doc: Document):
identifiers = []
Expand Down
Loading