Skip to content

Commit 18902ff

Browse files
fix: more accurate group areas (red API) (#10462)
* fix: RFC area only for ietf stream * fix: no ADs for inactive areas
1 parent abf5e0d commit 18902ff

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

ietf/doc/serializers.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ class RfcMetadataSerializer(serializers.ModelSerializer):
229229
status = RfcStatusSerializer(source="*")
230230
authors = serializers.SerializerMethodField()
231231
group = GroupSerializer()
232-
area = AreaSerializer(source="group.area", required=False)
232+
area = serializers.SerializerMethodField()
233233
stream = StreamNameSerializer()
234234
ad = AreaDirectorSerializer(read_only=True, allow_null=True)
235235
group_list_email = serializers.EmailField(source="group.list_email", read_only=True)
@@ -287,6 +287,23 @@ def get_authors(self, doc: Document):
287287
many=True,
288288
).data
289289

290+
@extend_schema_field(AreaSerializer(required=False))
291+
def get_area(self, doc: Document):
292+
"""Get area for the RFC
293+
294+
This logic might be better moved to Document or a combination of Document
295+
and Group. The current (2026-02-24) Group.area() method is not strict enough:
296+
it does not limit to WG groups or IETF-stream documents.
297+
"""
298+
if doc.stream_id != "ietf":
299+
return None
300+
if doc.group is None:
301+
return None
302+
parent = doc.group.parent
303+
if parent.type_id == "area":
304+
return AreaSerializer(parent).data
305+
return None
306+
290307
@extend_schema_field(DocIdentifierSerializer(many=True))
291308
def get_identifiers(self, doc: Document):
292309
identifiers = []

ietf/group/serializers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,15 @@ def get_email(self, instance: Email | Role):
3030

3131

3232
class AreaSerializer(serializers.ModelSerializer):
33-
ads = AreaDirectorSerializer(many=True, read_only=True)
33+
ads = serializers.SerializerMethodField()
3434

3535
class Meta:
3636
model = Group
3737
fields = ["acronym", "name", "type", "ads"]
38+
39+
@extend_schema_field(AreaDirectorSerializer(many=True))
40+
def get_ads(self, area: Group):
41+
return AreaDirectorSerializer(
42+
area.ads() if area.is_active else Role.objects.none(),
43+
many=True,
44+
).data

0 commit comments

Comments
 (0)