feat: Set more fields on rfc doc

This commit is contained in:
Jennifer Richards 2023-08-10 17:00:08 -03:00
parent fd1d425db6
commit 7535df3eeb
No known key found for this signature in database
GPG key ID: 9B2BF5C5ADDA6A6E

View file

@ -374,6 +374,7 @@ def update_docs_from_rfc_index(
tag_has_verified_errata = DocTagName.objects.get(slug="verified-errata")
relationship_obsoletes = DocRelationshipName.objects.get(slug="obs")
relationship_updates = DocRelationshipName.objects.get(slug="updates")
rfc_published_state = State.objects.get(type_id="rfc", slug="published")
system = Person.objects.get(name="(System)")
@ -407,9 +408,34 @@ def update_docs_from_rfc_index(
rfc_changes = []
rfc_published = False
# Find the document
# Find the draft, if any
draft = None
if draft_name:
try:
draft = Document.objects.get(name=draft_name, type_id="draft")
except Document.DoesNotExist:
log(f"Warning: RFC index for {rfc_number} referred to unknown draft {draft_name}")
# Find or create the RFC document
creation_args = {"name": f"rfc{rfc_number}"}
if draft:
creation_args.update(
{
"title": draft.title,
"stream": draft.stream,
"group": draft.group,
"abstract": draft.abstract,
"pages": draft.pages,
"words": draft.words,
"std_level": draft.std_level,
"ad": draft.ad,
"external_url": draft.external_url,
"uploaded_filename": draft.uploaded_filename,
"note": draft.note,
}
)
doc, created_rfc = Document.objects.get_or_create(
rfc_number=rfc_number, type_id="rfc", defaults={"name": f"rfc{rfc_number}"}
rfc_number=rfc_number, type_id="rfc", defaults=creation_args
)
if created_rfc:
rfc_changes.append(f"created document {prettify_std_name(doc.name)}")
@ -417,74 +443,71 @@ def update_docs_from_rfc_index(
alias, _ = DocAlias.objects.get_or_create(name=doc.name)
alias.docs.add(doc)
rfc_changes.append(f"created alias {prettify_std_name(doc.name)}")
if draft:
doc.formal_languages.set(draft.formal_languages.all())
if draft_name:
try:
draft = Document.objects.get(name=draft_name, type_id="draft")
except Document.DoesNotExist:
log(f"Warning: RFC index for {rfc_number} referred to unknown draft {draft_name}")
else:
draft_events = []
draft_changes = []
if draft:
draft_events = []
draft_changes = []
# Ensure the draft is in the "rfc" state and move its files to the archive
# if necessary.
if draft.get_state_slug() != "rfc":
draft.set_state(
State.objects.get(used=True, type="draft", slug="rfc")
)
move_draft_files_to_archive(draft, draft.rev)
draft_changes.append(f"changed state to {draft.get_state()}")
# Ensure the draft and rfc are linked with a "became_rfc" relationship
r, created_relateddoc = RelatedDocument.objects.get_or_create(
source=draft, target=doc, relationship_id="became_rfc"
# Ensure the draft is in the "rfc" state and move its files to the archive
# if necessary.
if draft.get_state_slug() != "rfc":
draft.set_state(
State.objects.get(used=True, type="draft", slug="rfc")
)
if created_relateddoc:
change = "created {rel_name} relationship between {pretty_draft_name} and {pretty_rfc_name}".format(
rel_name=r.relationship.name.lower(),
pretty_draft_name=prettify_std_name(draft_name),
pretty_rfc_name=prettify_std_name(doc.name),
)
draft_changes.append(change)
rfc_changes.append(change)
move_draft_files_to_archive(draft, draft.rev)
draft_changes.append(f"changed state to {draft.get_state()}")
# Ensure draft is in the correct iesg and stream states
for t in (
"draft-iesg",
"draft-stream-iab",
"draft-stream-irtf",
"draft-stream-ise",
):
prev_state = draft.get_state(t)
if prev_state is not None:
if prev_state.slug not in ("pub", "idexists"):
new_state = State.objects.select_related("type").get(
used=True, type=t, slug="pub"
)
draft.set_state(new_state)
draft_changes.append(
f"changed {new_state.type.label} to {new_state}"
)
e = update_action_holders(draft, prev_state, new_state)
if e:
draft_events.append(e)
elif t == "draft-iesg":
draft.set_state(
State.objects.get(type_id="draft-iesg", slug="idexists")
# Ensure the draft and rfc are linked with a "became_rfc" relationship
r, created_relateddoc = RelatedDocument.objects.get_or_create(
source=draft, target=doc, relationship_id="became_rfc"
)
if created_relateddoc:
change = "created {rel_name} relationship between {pretty_draft_name} and {pretty_rfc_name}".format(
rel_name=r.relationship.name.lower(),
pretty_draft_name=prettify_std_name(draft_name),
pretty_rfc_name=prettify_std_name(doc.name),
)
draft_changes.append(change)
rfc_changes.append(change)
# Ensure draft is in the correct iesg and stream states
for t in (
"draft-iesg",
"draft-stream-iab",
"draft-stream-irtf",
"draft-stream-ise",
):
prev_state = draft.get_state(t)
if prev_state is not None:
if prev_state.slug not in ("pub", "idexists"):
new_state = State.objects.select_related("type").get(
used=True, type=t, slug="pub"
)
if draft_changes:
draft_events.append(
DocEvent.objects.create(
doc=draft,
rev=doc.rev,
by=system,
type="sync_from_rfc_editor",
desc=f"Received changes through RFC Editor sync ({', '.join(draft_changes)})",
draft.set_state(new_state)
draft_changes.append(
f"changed {new_state.type.label} to {new_state}"
)
e = update_action_holders(draft, prev_state, new_state)
if e:
draft_events.append(e)
elif t == "draft-iesg":
draft.set_state(
State.objects.get(type_id="draft-iesg", slug="idexists")
)
draft.save_with_history(draft_events)
yield draft_changes, draft, False # yield changes to the draft
if draft_changes:
draft_events.append(
DocEvent.objects.create(
doc=draft,
rev=doc.rev,
by=system,
type="sync_from_rfc_editor",
desc=f"Received changes through RFC Editor sync ({', '.join(draft_changes)})",
)
)
draft.save_with_history(draft_events)
yield draft_changes, draft, False # yield changes to the draft
# check attributes
if title != doc.title: