Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
013e720
feat: API to publish RFC (WIP)
jennifer-richards Nov 18, 2025
b572f7d
feat: group / formal_languages from draft
jennifer-richards Nov 19, 2025
1c15b8f
feat: allow optional formal_languages via API
jennifer-richards Nov 19, 2025
4cff06c
feat: fill in overrides/updates
jennifer-richards Nov 19, 2025
543dd99
feat: subseries membership
jennifer-richards Nov 19, 2025
c91bb9b
fix: tolerate race to create related docs
jennifer-richards Nov 19, 2025
626e0b2
fix: wrap pub in a transaction
jennifer-richards Nov 19, 2025
d773cef
feat: prevent re-publishing draft as RFC
jennifer-richards Nov 19, 2025
6cdb1bd
chore: remove stale code
jennifer-richards Nov 19, 2025
a02d2c1
chore: remove debug
jennifer-richards Nov 19, 2025
bddcfcf
feat: RFC file upload API (WIP)
jennifer-richards Nov 20, 2025
75ad7f2
feat: specify RFC, validate file exts
jennifer-richards Nov 20, 2025
952109d
feat: move uploaded files into place
jennifer-richards Nov 20, 2025
86423d6
feat: add replace option
jennifer-richards Nov 20, 2025
82d822b
fix: add rest of replace option
jennifer-richards Nov 20, 2025
eb18fb9
feat: handle ad/group more consistently
jennifer-richards Nov 20, 2025
d5235ea
chore: remove inadvertent change
jennifer-richards Nov 20, 2025
b7fe5f8
chore: drop external_url, get note from draft
jennifer-richards Nov 21, 2025
c01fdbc
refactor: clarify default value logic
jennifer-richards Nov 21, 2025
950480d
refactor: ID obsoletes/updates by number
jennifer-richards Nov 24, 2025
42767a4
fix: handle draft-stream-editorial
jennifer-richards Nov 24, 2025
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
Prev Previous commit
Next Next commit
feat: subseries membership
  • Loading branch information
jennifer-richards committed Nov 19, 2025
commit 543dd991aa2604bb25659b9d08a6dbc203e1e296
41 changes: 39 additions & 2 deletions ietf/api/serializers_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,13 @@ class RfcPubSerializer(serializers.ModelSerializer):
required=False,
queryset=Document.objects.filter(type_id="rfc"),
)
subseries = serializers.ListField(
child=serializers.RegexField(
required=False,
# pattern: no leading 0, finite length (arbitrarily set to 5 digits)
regex=r"^(bcp|std|fyi)[1-9][0-9]{0,4}$",
)
)
authors = AuthorSerializer(many=True)

class Meta:
Expand All @@ -278,6 +285,7 @@ class Meta:
"external_url",
"obsoletes",
"updates",
"subseries",
]

def validate(self, data):
Expand All @@ -301,6 +309,7 @@ def create(self, validated_data):
draft_rev = validated_data.pop("draft_rev", None)
obsoletes = validated_data.pop("obsoletes", [])
updates = validated_data.pop("updates", [])
subseries = validated_data.pop("subseries", [])

# Retrieve draft
draft = None
Expand All @@ -319,6 +328,7 @@ def create(self, validated_data):
)
# todo check that draft is in the right state

system_person = Person.objects.get(name="(System)")
rfc = self._create_rfc(
{
"group": draft.group if draft else "none",
Expand All @@ -330,7 +340,7 @@ def create(self, validated_data):
rev=rfc.rev,
type="published_rfc",
time=published,
by=Person.objects.get(name="(System)"),
by=system_person,
desc="RFC published",
)
rfc.set_state(State.objects.get(used=True, type_id="rfc", slug="published"))
Expand All @@ -345,6 +355,33 @@ def create(self, validated_data):
source=rfc, target=updated_rfc_pk, relationship_id="updates"
)

# create subseries relations
for subseries_doc_name in subseries:
ss_slug = subseries_doc_name[:3]
subseries_doc, created = Document.objects.get_or_create(
type_id=ss_slug, name=subseries_doc_name
)
if created:
subseries_doc.docevent_set.create(
type=f"{ss_slug}_doc_created",
by=system_person,
desc=f"Created {subseries_doc_name} via publication of {rfc.name}",
)
subseries_doc.relateddocument_set.create(
relationship_id="contains", target=rfc
)
subseries_doc.docevent_set.create(
type="sync_from_rfc_editor",
by=system_person,
desc=f"Added {rfc.name} to {subseries_doc.name}",
)
rfc.docevent_set.create(
type="sync_from_rfc_editor",
by=system_person,
desc=f"Added {rfc.name} to {subseries_doc.name}",
)


# create relation with draft and update draft state
if draft is not None:
draft_changes = []
Expand Down Expand Up @@ -420,7 +457,7 @@ def create(self, validated_data):
DocEvent.objects.create(
doc=draft,
rev=draft.rev,
by=Person.objects.get(name="(System)"),
by=system_person,
type="sync_from_rfc_editor",
desc=f"Updated while publishing {rfc.name} ({', '.join(draft_changes)})",
)
Expand Down