fix: use Internet-Draft more consistently across the UI (#5104)
* s/Internet Draft/Internet-Draft/i * s/draft/Internet-Draft/i or s/draft/I-D/i * s/ID/I-D/ * Fix tests * a -> an * Undo case-change to ASCII * Address code review comments * Add migrations * Add merged migration * fix: straighten out migrations * fix: finish straightening out migrations --------- Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
This commit is contained in:
parent
45e8f6816e
commit
f8b48f4c43
|
@ -42,7 +42,7 @@ $DTDIR/ietf/manage.py populate_yang_model_dirs -v0
|
|||
# Re-run yang checks on active documents
|
||||
$DTDIR/ietf/manage.py run_yang_model_checks -v0
|
||||
|
||||
# Expire internet drafts
|
||||
# Expire Internet-Drafts
|
||||
# Enable when removed from /a/www/ietf-datatracker/scripts/Cron-runner:
|
||||
$DTDIR/ietf/bin/expire-ids
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ def check_id_submission_directories(app_configs, **kwargs):
|
|||
p = getattr(settings, s)
|
||||
if not os.path.exists(p):
|
||||
errors.append(checks.Critical(
|
||||
"A directory used by the ID submission tool does not\n"
|
||||
"A directory used by the I-D submission tool does not\n"
|
||||
"exist at the path given in the settings file. The setting is:\n"
|
||||
" %s = %s" % (s, p),
|
||||
hint = ("Please either update the local settings to point at the correct\n"
|
||||
|
@ -134,7 +134,7 @@ def check_id_submission_files(app_configs, **kwargs):
|
|||
p = getattr(settings, s)
|
||||
if not os.path.exists(p):
|
||||
errors.append(checks.Critical(
|
||||
"A file used by the ID submission tool does not exist\n"
|
||||
"A file used by the I-D submission tool does not exist\n"
|
||||
"at the path given in the settings file. The setting is:\n"
|
||||
" %s = %s" % (s, p),
|
||||
hint = ("Please either update the local settings to point at the correct\n"
|
||||
|
@ -179,7 +179,7 @@ def check_id_submission_checkers(app_configs, **kwargs):
|
|||
except Exception as e:
|
||||
errors.append(checks.Critical(
|
||||
"An exception was raised when trying to import the\n"
|
||||
"draft submission checker class '%s':\n %s" % (checker_path, e),
|
||||
"Internet-Draft submission checker class '%s':\n %s" % (checker_path, e),
|
||||
hint = "Please check that the class exists and can be imported.\n",
|
||||
id = "datatracker.E0008",
|
||||
))
|
||||
|
@ -188,7 +188,7 @@ def check_id_submission_checkers(app_configs, **kwargs):
|
|||
except Exception as e:
|
||||
errors.append(checks.Critical(
|
||||
"An exception was raised when trying to instantiate\n"
|
||||
"the draft submission checker class '%s':\n %s" % (checker_path, e),
|
||||
"the Internet-Draft submission checker class '%s':\n %s" % (checker_path, e),
|
||||
hint = "Please check that the class can be instantiated.\n",
|
||||
id = "datatracker.E0009",
|
||||
))
|
||||
|
@ -196,7 +196,7 @@ def check_id_submission_checkers(app_configs, **kwargs):
|
|||
for attr in ('name',):
|
||||
if not hasattr(checker, attr):
|
||||
errors.append(checks.Critical(
|
||||
"The draft submission checker\n '%s'\n"
|
||||
"The Internet-Draft submission checker\n '%s'\n"
|
||||
"has no attribute '%s', which is required" % (checker_path, attr),
|
||||
hint = "Please update the class.\n",
|
||||
id = "datatracker.E0010",
|
||||
|
@ -207,7 +207,7 @@ def check_id_submission_checkers(app_configs, **kwargs):
|
|||
break
|
||||
else:
|
||||
errors.append(checks.Critical(
|
||||
"The draft submission checker\n '%s'\n"
|
||||
"The Internet-Draft submission checker\n '%s'\n"
|
||||
" has no recognised checker method; "
|
||||
"should be one or more of %s." % (checker_path, checker_methods),
|
||||
hint = "Please update the class.\n",
|
||||
|
|
|
@ -13,7 +13,7 @@ from ietf.person.models import Person
|
|||
from ietf.person.fields import SearchablePersonField
|
||||
|
||||
class AddDocumentsForm(forms.Form):
|
||||
documents = SearchableDocumentsField(label="Add documents to track", doc_type="draft")
|
||||
documents = SearchableDocumentsField(label="Add Internet-Drafts to track", doc_type="draft")
|
||||
|
||||
class SearchRuleTypeForm(forms.Form):
|
||||
rule_type = forms.ChoiceField(choices=[('', '--------------')] + SearchRule.RULE_TYPES)
|
||||
|
|
|
@ -19,11 +19,11 @@ class CommunityList(models.Model):
|
|||
|
||||
def long_name(self):
|
||||
if self.user:
|
||||
return 'Personal ID list of %s' % self.user.username
|
||||
return 'Personal I-D list of %s' % self.user.username
|
||||
elif self.group:
|
||||
return 'ID list for %s' % self.group.name
|
||||
return 'I-D list for %s' % self.group.name
|
||||
else:
|
||||
return 'ID list'
|
||||
return 'I-D list'
|
||||
|
||||
def __str__(self):
|
||||
return self.long_name()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright The IETF Trust 2010-2020, All Rights Reserved
|
||||
# -*- coding: utf-8 -*-
|
||||
# expiry of Internet Drafts
|
||||
# expiry of Internet-Drafts
|
||||
|
||||
|
||||
from django.conf import settings
|
||||
|
@ -179,7 +179,7 @@ def expire_draft(doc):
|
|||
doc.save_with_history(events)
|
||||
|
||||
def clean_up_draft_files():
|
||||
"""Move unidentified and old files out of the Internet Draft directory."""
|
||||
"""Move unidentified and old files out of the Internet-Draft directory."""
|
||||
cut_off = date_today(DEADLINE_TZINFO)
|
||||
|
||||
pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*")
|
||||
|
|
|
@ -140,7 +140,7 @@ class AddDownrefForm(forms.Form):
|
|||
required=True)
|
||||
drafts = SearchableDocAliasesField(
|
||||
label="Internet-Drafts that makes the reference",
|
||||
help_text="The drafts that approve the downref in their Last Call",
|
||||
help_text="The Internet-Drafts that approve the downref in their Last Call",
|
||||
required=True)
|
||||
|
||||
def clean_rfc(self):
|
||||
|
@ -163,7 +163,7 @@ class AddDownrefForm(forms.Form):
|
|||
if not state or state.slug not in IESG_APPROVED_STATE_LIST:
|
||||
v_err_names.append(da.name)
|
||||
if v_err_names:
|
||||
raise forms.ValidationError("Draft is not yet approved: " + ", ".join(v_err_names))
|
||||
raise forms.ValidationError("Internet-Draft is not yet approved: " + ", ".join(v_err_names))
|
||||
return drafts
|
||||
|
||||
def clean(self):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# helpers for handling last calls on Internet Drafts
|
||||
# helpers for handling last calls on Internet-Drafts
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ def email_stream_changed(request, doc, old_stream, new_stream, text=""):
|
|||
text = strip_tags(text)
|
||||
|
||||
send_mail(request, to, None,
|
||||
"ID Tracker Stream Change Notice: %s" % doc.file_tag(),
|
||||
"I-D Tracker Stream Change Notice: %s" % doc.file_tag(),
|
||||
"doc/mail/stream_changed_email.txt",
|
||||
dict(text=text,
|
||||
url=settings.IDTRACKER_BASE_URL + doc.get_absolute_url()),
|
||||
|
@ -288,7 +288,7 @@ def generate_approval_mail_approved(request, doc):
|
|||
else:
|
||||
contacts = "The IESG contact person is %s." % responsible_directors[0]
|
||||
|
||||
doc_type = "RFC" if doc.get_state_slug() == "rfc" else "Internet Draft"
|
||||
doc_type = "RFC" if doc.get_state_slug() == "rfc" else "Internet-Draft"
|
||||
|
||||
addrs = gather_address_lists('ballot_approved_ietf_stream',doc=doc).as_strings()
|
||||
return render_to_string("doc/mail/approval_mail.txt",
|
||||
|
@ -308,7 +308,7 @@ def generate_approval_mail_rfc_editor(request, doc):
|
|||
# This is essentially dead code - it is only exercised if the IESG ballots on some other stream's document,
|
||||
# which does not happen now that we have conflict reviews.
|
||||
disapproved = doc.get_state_slug("draft-iesg") in DO_NOT_PUBLISH_IESG_STATES
|
||||
doc_type = "RFC" if doc.get_state_slug() == "rfc" else "Internet Draft"
|
||||
doc_type = "RFC" if doc.get_state_slug() == "rfc" else "Internet-Draft"
|
||||
addrs = gather_address_lists('ballot_approved_conflrev', doc=doc).as_strings()
|
||||
|
||||
return render_to_string("doc/mail/approval_mail_rfc_editor.txt",
|
||||
|
|
|
@ -22,7 +22,7 @@ DEFAULT_DAYS = 7
|
|||
class Command(BaseCommand):
|
||||
help = ('Generate draft bibxml files for xml2rfc references, placing them in the '
|
||||
'directory configured in settings.BIBXML_BASE_PATH: %s. '
|
||||
'By default, generate files as needed for new draft revisions from the '
|
||||
'By default, generate files as needed for new Internet-Draft revisions from the '
|
||||
'last %s days.' % (settings.BIBXML_BASE_PATH, DEFAULT_DAYS))
|
||||
|
||||
def add_arguments(self, parser):
|
||||
|
|
|
@ -9,7 +9,7 @@ def std_level_prompt(doc):
|
|||
to the object's intended_std_level (with the word RFC appended in some
|
||||
cases), or a prompt requesting that the intended_std_level be set."""
|
||||
|
||||
prompt = "*** YOU MUST SELECT AN INTENDED STATUS FOR THIS DRAFT AND REGENERATE THIS TEXT ***"
|
||||
prompt = "*** YOU MUST SELECT AN INTENDED STATUS FOR THIS INTERNET-DRAFT AND REGENERATE THIS TEXT ***"
|
||||
|
||||
if doc.intended_std_level:
|
||||
prompt = doc.intended_std_level.name
|
||||
|
|
|
@ -2522,7 +2522,7 @@ class ChartTests(ResourceTestCaseMixin, TestCase):
|
|||
self.assertValidJSONResponse(r)
|
||||
d = r.json()
|
||||
self.assertEqual(d['chart']['type'], settings.CHART_TYPE_COLUMN_OPTIONS['chart']['type'])
|
||||
self.assertEqual("New draft revisions over time for %s" % person.name, d['title']['text'])
|
||||
self.assertEqual("New Internet-Draft revisions over time for %s" % person.name, d['title']['text'])
|
||||
|
||||
data_url = urlreverse('ietf.doc.views_stats.chart_data_person_drafts', kwargs=dict(id=person.id))
|
||||
|
||||
|
|
|
@ -355,13 +355,13 @@ class RebuildReferenceRelationsTests(TestCase):
|
|||
result = rebuild_reference_relations(self.doc, {})
|
||||
self.assertCountEqual(result.keys(), ['errors'])
|
||||
self.assertEqual(len(result['errors']), 1)
|
||||
self.assertIn('No draft text available', result['errors'][0],
|
||||
'Error should be reported if no draft file is given')
|
||||
self.assertIn('No Internet-Draft text available', result['errors'][0],
|
||||
'Error should be reported if no Internet-Draft file is given')
|
||||
|
||||
result = rebuild_reference_relations(self.doc, {'md': 'cant-do-this.md'})
|
||||
self.assertCountEqual(result.keys(), ['errors'])
|
||||
self.assertEqual(len(result['errors']), 1)
|
||||
self.assertIn('No draft text available', result['errors'][0],
|
||||
self.assertIn('No Internet-Draft text available', result['errors'][0],
|
||||
'Error should be reported if no XML or plaintext file is given')
|
||||
|
||||
@patch.object(XMLDraft, 'get_refs')
|
||||
|
|
|
@ -792,7 +792,7 @@ def rebuild_reference_relations(doc, filenames):
|
|||
except IOError as e:
|
||||
return { 'errors': ["%s :%s" % (e.strerror, filename)] }
|
||||
else:
|
||||
return {'errors': ['No draft text available for rebuilding reference relations. Need XML or plaintext.']}
|
||||
return {'errors': ['No Internet-Draft text available for rebuilding reference relations. Need XML or plaintext.']}
|
||||
|
||||
doc.relateddocument_set.filter(relationship__slug__in=['refnorm','refinfo','refold','refunk']).delete()
|
||||
|
||||
|
|
|
@ -994,7 +994,7 @@ class MakeLastCallForm(forms.Form):
|
|||
|
||||
@role_required('Secretariat')
|
||||
def make_last_call(request, name):
|
||||
"""Make last call for Internet Draft, sending out announcement."""
|
||||
"""Make last call for Internet-Draft, sending out announcement."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
if not (doc.get_state("draft-iesg") or doc.get_state("statchg")):
|
||||
raise Http404
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
# changing state and metadata on Internet Drafts
|
||||
# changing state and metadata on Internet-Drafts
|
||||
|
||||
import datetime
|
||||
import os
|
||||
|
@ -84,7 +84,7 @@ class ChangeStateForm(forms.Form):
|
|||
|
||||
@role_required('Area Director','Secretariat')
|
||||
def change_state(request, name):
|
||||
"""Change IESG state of Internet Draft, notifying parties as necessary
|
||||
"""Change IESG state of Internet-Draft, notifying parties as necessary
|
||||
and logging the change as a comment."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
|
||||
|
@ -229,7 +229,7 @@ class ChangeIanaStateForm(forms.Form):
|
|||
|
||||
@role_required('Secretariat', 'IANA')
|
||||
def change_iana_state(request, name, state_type):
|
||||
"""Change IANA review state of Internet Draft. Normally, this is done via
|
||||
"""Change IANA review state of Internet-Draft. Normally, this is done via
|
||||
automatic sync, but this form allows one to set it manually."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
|
||||
|
@ -344,9 +344,9 @@ class ReplacesForm(forms.Form):
|
|||
def clean_replaces(self):
|
||||
for d in self.cleaned_data['replaces']:
|
||||
if d.document == self.doc:
|
||||
raise forms.ValidationError("A draft can't replace itself")
|
||||
raise forms.ValidationError("An Internet-Draft can't replace itself")
|
||||
if d.document.type_id == "draft" and d.document.get_state_slug() == "rfc":
|
||||
raise forms.ValidationError("A draft can't replace an RFC")
|
||||
raise forms.ValidationError("An Internet-Draft can't replace an RFC")
|
||||
return self.cleaned_data['replaces']
|
||||
|
||||
def replaces(request, name):
|
||||
|
@ -631,7 +631,7 @@ def to_iesg(request,name):
|
|||
|
||||
@role_required('Area Director','Secretariat')
|
||||
def edit_info(request, name):
|
||||
"""Edit various Internet Draft attributes, notifying parties as
|
||||
"""Edit various Internet-Draft attributes, notifying parties as
|
||||
necessary and logging changes as document events."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
if doc.get_state_slug() == "expired":
|
||||
|
@ -790,7 +790,7 @@ def edit_info(request, name):
|
|||
|
||||
@role_required('Area Director','Secretariat')
|
||||
def request_resurrect(request, name):
|
||||
"""Request resurrect of expired Internet Draft."""
|
||||
"""Request resurrect of expired Internet-Draft."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
if doc.get_state_slug() != "expired":
|
||||
raise Http404
|
||||
|
@ -813,7 +813,7 @@ def request_resurrect(request, name):
|
|||
|
||||
@role_required('Secretariat')
|
||||
def resurrect(request, name):
|
||||
"""Resurrect expired Internet Draft."""
|
||||
"""Resurrect expired Internet-Draft."""
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
if doc.get_state_slug() != "expired":
|
||||
raise Http404
|
||||
|
@ -858,7 +858,7 @@ def restore_draft_file(request, draft):
|
|||
shutil.move(file, settings.INTERNET_DRAFT_PATH)
|
||||
log.log(" Moved file %s to %s" % (file, settings.INTERNET_DRAFT_PATH))
|
||||
except shutil.Error as ex:
|
||||
messages.warning(request, 'There was an error restoring the draft file: {} ({})'.format(file, ex))
|
||||
messages.warning(request, 'There was an error restoring the Internet-Draft file: {} ({})'.format(file, ex))
|
||||
log.log(" Exception %s when attempting to move %s" % (ex, file))
|
||||
|
||||
|
||||
|
@ -1152,7 +1152,7 @@ class AdForm(forms.Form):
|
|||
state = self.doc.get_state('draft-iesg')
|
||||
if not ad:
|
||||
if state.slug not in ['idexists','dead']:
|
||||
raise forms.ValidationError("Drafts in state %s must have an assigned AD." % state)
|
||||
raise forms.ValidationError("Internet-Drafts in state %s must have an assigned AD." % state)
|
||||
return ad
|
||||
|
||||
@role_required("Area Director", "Secretariat")
|
||||
|
|
|
@ -66,9 +66,9 @@ def get_doctypes(queryargs, pluralize=False):
|
|||
or queryargs.get('activedrafts') == 'on'
|
||||
or queryargs.get('olddrafts') == 'on'):
|
||||
if pluralize:
|
||||
doctypes.append('Drafts')
|
||||
doctypes.append('Internet-Drafts')
|
||||
else:
|
||||
doctypes.append('Draft')
|
||||
doctypes.append('Internet-Draft')
|
||||
alltypes = DocTypeName.objects.exclude(slug__in='draft').order_by('name');
|
||||
for doctype in alltypes:
|
||||
if 'include-' + doctype.slug in queryargs:
|
||||
|
@ -166,8 +166,8 @@ def chart_conf_person_drafts(request, id):
|
|||
conf = {}
|
||||
else:
|
||||
conf = copy.deepcopy(settings.CHART_TYPE_COLUMN_OPTIONS)
|
||||
conf['title']['text'] = "New draft revisions over time for %s" % person.name
|
||||
conf['series'][0]['name'] = "Submitted drafts"
|
||||
conf['title']['text'] = "New Internet-Draft revisions over time for %s" % person.name
|
||||
conf['series'][0]['name'] = "Submitted Internet-Drafts"
|
||||
return JsonResponse(conf)
|
||||
|
||||
@cache_page(60*15)
|
||||
|
|
|
@ -29,7 +29,7 @@ class MilestoneForm(forms.Form):
|
|||
desc = forms.CharField(max_length=500, label="Milestone", required=True)
|
||||
due = DatepickerDateField(date_format="MM yyyy", picker_settings={"min-view-mode": "months", "autoclose": "1", "view-mode": "years" }, required=True)
|
||||
order = forms.IntegerField(required=True, widget=forms.HiddenInput)
|
||||
docs = SearchableDocumentsField(label="Drafts", required=False, help_text="Any drafts that the milestone concerns.")
|
||||
docs = SearchableDocumentsField(label="Internet-Drafts", required=False, help_text="Any Internet-Drafts that the milestone concerns.")
|
||||
resolved_checkbox = forms.BooleanField(required=False, label="Resolved")
|
||||
resolved = forms.CharField(label="Resolved as", max_length=50, required=False)
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ def all_id_txt():
|
|||
state += "::" + "::".join(tags)
|
||||
add_line(d.name + "-" + d.rev,
|
||||
formatted_rev_date(d.name),
|
||||
"In IESG processing - ID Tracker state <" + state + ">",
|
||||
"In IESG processing - I-D Tracker state <" + state + ">",
|
||||
"",
|
||||
)
|
||||
|
||||
|
|
|
@ -413,7 +413,7 @@ class ThirdPartyIprDisclosureForm(IprDisclosureFormBase):
|
|||
|
||||
class SearchForm(forms.Form):
|
||||
state = forms.MultipleChoiceField(choices=[], widget=forms.CheckboxSelectMultiple,required=False)
|
||||
draft = forms.CharField(label="Draft name", max_length=128, required=False)
|
||||
draft = forms.CharField(label="Internet-Draft name", max_length=128, required=False)
|
||||
rfc = forms.IntegerField(label="RFC number", required=False)
|
||||
holder = forms.CharField(label="Name of patent owner/applicant", max_length=128,required=False)
|
||||
patent = forms.CharField(label="Text in patent information", max_length=128,required=False)
|
||||
|
|
|
@ -8,7 +8,7 @@ from ietf.ipr.utils import generate_draft_recursive_txt
|
|||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = ("Generate machine-readable list of IPR disclosures by draft name (recursive)")
|
||||
help = ("Generate machine-readable list of IPR disclosures by Internet-Draft name (recursive)")
|
||||
|
||||
def handle(self, *args, **options):
|
||||
try:
|
||||
|
|
|
@ -79,7 +79,7 @@ def generate_draft_recursive_txt():
|
|||
docipr[name] = []
|
||||
docipr[name].append(o.disclosure_id)
|
||||
|
||||
lines = [ "# Machine-readable list of IPR disclosures by draft name" ]
|
||||
lines = [ "# Machine-readable list of IPR disclosures by Internet-Draft name" ]
|
||||
for name, iprs in docipr.items():
|
||||
lines.append(name + "\t" + "\t".join(str(ipr_id) for ipr_id in sorted(iprs)))
|
||||
|
||||
|
|
|
@ -6025,7 +6025,7 @@
|
|||
},
|
||||
{
|
||||
"fields": {
|
||||
"desc": "The internet drafts ticketing system",
|
||||
"desc": "The Internet-Drafts ticketing system",
|
||||
"template": "<internet-drafts@ietf.org>"
|
||||
},
|
||||
"model": "mailtrigger.recipient",
|
||||
|
@ -11545,7 +11545,7 @@
|
|||
{
|
||||
"fields": {
|
||||
"default_offset_days": -19,
|
||||
"desc": "Internet Draft submission cut-off for -00 drafts by UTC 23:59",
|
||||
"desc": "Internet-Draft submission cut-off for -00 drafts by UTC 23:59",
|
||||
"name": "00 ID Cutoff",
|
||||
"order": 0,
|
||||
"used": false
|
||||
|
@ -11556,7 +11556,7 @@
|
|||
{
|
||||
"fields": {
|
||||
"default_offset_days": -12,
|
||||
"desc": "Internet Draft submission cut-off for revised (-01 and above) drafts by UTC 23:59",
|
||||
"desc": "Internet-Draft submission cut-off for revised (-01 and above) drafts by UTC 23:59",
|
||||
"name": "01 ID Cutoff",
|
||||
"order": 0,
|
||||
"used": false
|
||||
|
@ -11699,7 +11699,7 @@
|
|||
{
|
||||
"fields": {
|
||||
"default_offset_days": -12,
|
||||
"desc": "Internet Draft submission cut-off (for all drafts, including -00) by UTC 23:59",
|
||||
"desc": "Internet-Draft submission cut-off (for all drafts, including -00) by UTC 23:59",
|
||||
"name": "ID Cutoff",
|
||||
"order": 0,
|
||||
"used": true
|
||||
|
|
33
ietf/person/migrations/0030_id_term.py
Normal file
33
ietf/person/migrations/0030_id_term.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Generated by Django 2.2.28 on 2023-02-10 19:58
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('person', '0029_use_timezone_now_for_person_models'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='email',
|
||||
name='origin',
|
||||
field=models.CharField(help_text="The origin of the address: the user's email address, or 'author: DRAFTNAME' if an Internet-Draft, or 'role: GROUP/ROLE' if a role.", max_length=150),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='historicalemail',
|
||||
name='origin',
|
||||
field=models.CharField(help_text="The origin of the address: the user's email address, or 'author: DRAFTNAME' if an Internet-Draft, or 'role: GROUP/ROLE' if a role.", max_length=150),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='historicalperson',
|
||||
name='name_from_draft',
|
||||
field=models.CharField(editable=False, help_text='Name as found in an Internet-Draft submission.', max_length=255, null=True, verbose_name='Full Name (from submission)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='person',
|
||||
name='name_from_draft',
|
||||
field=models.CharField(editable=False, help_text='Name as found in an Internet-Draft submission.', max_length=255, null=True, verbose_name='Full Name (from submission)'),
|
||||
),
|
||||
]
|
|
@ -57,7 +57,7 @@ class Person(models.Model):
|
|||
biography = models.TextField(blank=True, help_text="Short biography for use on leadership pages. Use plain text or reStructuredText markup.")
|
||||
photo = models.ImageField(storage=NoLocationMigrationFileSystemStorage(), upload_to=settings.PHOTOS_DIRNAME, blank=True, default=None)
|
||||
photo_thumb = models.ImageField(storage=NoLocationMigrationFileSystemStorage(), upload_to=settings.PHOTOS_DIRNAME, blank=True, default=None)
|
||||
name_from_draft = models.CharField("Full Name (from submission)", null=True, max_length=255, editable=False, help_text="Name as found in a draft submission.")
|
||||
name_from_draft = models.CharField("Full Name (from submission)", null=True, max_length=255, editable=False, help_text="Name as found in an Internet-Draft submission.")
|
||||
|
||||
def __str__(self):
|
||||
return self.plain_name()
|
||||
|
@ -281,7 +281,7 @@ class Email(models.Model):
|
|||
person = ForeignKey(Person, null=True)
|
||||
time = models.DateTimeField(auto_now_add=True)
|
||||
primary = models.BooleanField(default=False)
|
||||
origin = models.CharField(max_length=150, blank=False, help_text="The origin of the address: the user's email address, or 'author: DRAFTNAME' if a draft, or 'role: GROUP/ROLE' if a role.") # User.username or Document.name
|
||||
origin = models.CharField(max_length=150, blank=False, help_text="The origin of the address: the user's email address, or 'author: DRAFTNAME' if an Internet-Draft, or 'role: GROUP/ROLE' if a role.") # User.username or Document.name
|
||||
active = models.BooleanField(default=True) # Old email addresses are *not* purged, as history
|
||||
# information points to persons through these
|
||||
|
||||
|
|
24
ietf/review/migrations/0031_id_term.py
Normal file
24
ietf/review/migrations/0031_id_term.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 2.2.28 on 2023-02-10 19:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import ietf.utils.validators
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('review', '0030_use_date_today_helper'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='historicalreviewersettings',
|
||||
name='filter_re',
|
||||
field=models.CharField(blank=True, help_text='Internet-Draft names matching this regular expression should not be assigned', max_length=255, validators=[ietf.utils.validators.RegexStringValidator()], verbose_name='Filter regexp'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='reviewersettings',
|
||||
name='filter_re',
|
||||
field=models.CharField(blank=True, help_text='Internet-Draft names matching this regular expression should not be assigned', max_length=255, validators=[ietf.utils.validators.RegexStringValidator()], verbose_name='Filter regexp'),
|
||||
),
|
||||
]
|
|
@ -34,7 +34,7 @@ class ReviewerSettings(models.Model):
|
|||
min_interval = models.IntegerField(verbose_name="Can review at most", choices=INTERVALS, blank=True, null=True)
|
||||
filter_re = models.CharField(max_length=255, verbose_name="Filter regexp", blank=True,
|
||||
validators=[validate_regular_expression_string, ],
|
||||
help_text="Draft names matching this regular expression should not be assigned")
|
||||
help_text="Internet-Draft names matching this regular expression should not be assigned")
|
||||
skip_next = models.IntegerField(default=0, verbose_name="Skip next assignments")
|
||||
remind_days_before_deadline = models.IntegerField(null=True, blank=True, help_text="To get an email reminder in case you forget to do an assigned review, enter the number of days before review deadline you want to receive it. Clear the field if you don't want this reminder.")
|
||||
remind_days_open_reviews = models.PositiveIntegerField(null=True, blank=True, verbose_name="Periodic reminder of open reviews every X days", help_text="To get a periodic email reminder of all your open reviews, enter the number of days between these reminders. Clear the field if you don't want these reminders.")
|
||||
|
|
|
@ -1009,7 +1009,7 @@ HTPASSWD_FILE = "/www/htpasswd"
|
|||
# Generation of pdf files
|
||||
GHOSTSCRIPT_COMMAND = "/usr/bin/gs"
|
||||
|
||||
# Generation of bibxml files (currently only for internet drafts)
|
||||
# Generation of bibxml files (currently only for Internet-Drafts)
|
||||
BIBXML_BASE_PATH = '/a/ietfdata/derived/bibxml'
|
||||
|
||||
# Timezone files for iCalendar
|
||||
|
|
|
@ -182,7 +182,7 @@ def document_stats(request, stats_type=None):
|
|||
possible_document_types = add_url_to_choices([
|
||||
("", "All"),
|
||||
("rfc", "RFCs"),
|
||||
("draft", "Drafts"),
|
||||
("draft", "Internet-Drafts"),
|
||||
], lambda slug: build_document_stats_url(get_overrides={ "type": slug }))
|
||||
|
||||
document_type = get_choice(request, "type", possible_document_types) or ""
|
||||
|
|
|
@ -103,7 +103,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
elif now <= cutoff_00:
|
||||
self.cutoff_warning = (
|
||||
'The last submission time for new Internet-Drafts before the meeting is %s.<br>'
|
||||
'After that, you will not be able to submit drafts until after %s (IETF-meeting local time)' % (cutoff_00_str, reopen_str, ))
|
||||
'After that, you will not be able to submit Internet-Drafts until after %s (IETF-meeting local time)' % (cutoff_00_str, reopen_str, ))
|
||||
else:
|
||||
if now.date() >= (cutoff_00.date() - meeting.idsubmit_cutoff_warning_days) and now.date() < cutoff_00.date():
|
||||
self.cutoff_warning = ( 'The last submission time for new documents (i.e., version -00 Internet-Drafts) before %s is %s.<br><br>' % (meeting, cutoff_00_str) +
|
||||
|
@ -207,7 +207,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
self.add_error('xml', msgs)
|
||||
return
|
||||
except Exception as e:
|
||||
self.add_error('xml', f'Error parsing XML draft: {e}')
|
||||
self.add_error('xml', f'Error parsing XML Internet-Draft: {e}')
|
||||
return
|
||||
|
||||
self.filename = xml_draft.filename
|
||||
|
@ -236,19 +236,19 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
raise forms.ValidationError('')
|
||||
|
||||
if not self.filename:
|
||||
raise forms.ValidationError("Could not extract a valid draft name from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full draft name including "
|
||||
raise forms.ValidationError("Could not extract a valid Internet-Draft name from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full Internet-Draft name including "
|
||||
"revision number appears centered on its own line below the document title on the "
|
||||
"first page. In an xml upload, please make sure that the top-level <rfc/> "
|
||||
"element has a docName attribute which provides the full draft name including "
|
||||
"element has a docName attribute which provides the full Internet-Draft name including "
|
||||
"revision number.")
|
||||
|
||||
if not self.revision:
|
||||
raise forms.ValidationError("Could not extract a valid draft revision from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full draft name including "
|
||||
raise forms.ValidationError("Could not extract a valid Internet-Draft revision from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full Internet-Draft name including "
|
||||
"revision number appears centered on its own line below the document title on the "
|
||||
"first page. In an xml upload, please make sure that the top-level <rfc/> "
|
||||
"element has a docName attribute which provides the full draft name including "
|
||||
"element has a docName attribute which provides the full Internet-Draft name including "
|
||||
"revision number.")
|
||||
|
||||
if self.cleaned_data.get('txt') or self.cleaned_data.get('xml'):
|
||||
|
@ -272,7 +272,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
raise forms.ValidationError(mark_safe(self.cutoff_warning))
|
||||
# check thresholds that depend on the draft / group
|
||||
self.check_submissions_thresholds(
|
||||
"for the draft %s" % self.filename,
|
||||
"for the Internet-Draft %s" % self.filename,
|
||||
dict(name=self.filename, rev=self.revision, submission_date=today),
|
||||
settings.IDSUBMIT_MAX_DAILY_SAME_DRAFT_NAME, settings.IDSUBMIT_MAX_DAILY_SAME_DRAFT_NAME_SIZE,
|
||||
)
|
||||
|
@ -306,7 +306,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
else:
|
||||
name_parts = name.split("-")
|
||||
if len(name_parts) < 3:
|
||||
raise forms.ValidationError("The draft name \"%s\" is missing a third part, please rename it" % name)
|
||||
raise forms.ValidationError("The Internet-Draft name \"%s\" is missing a third part, please rename it" % name)
|
||||
|
||||
if name.startswith('draft-ietf-') or name.startswith("draft-irtf-"):
|
||||
if name_parts[1] == "ietf":
|
||||
|
@ -324,7 +324,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
try:
|
||||
return Group.objects.get(acronym=name_parts[2], type=group_type)
|
||||
except Group.DoesNotExist:
|
||||
raise forms.ValidationError('There is no active group with acronym \'%s\', please rename your draft' % name_parts[2])
|
||||
raise forms.ValidationError('There is no active group with acronym \'%s\', please rename your Internet-Draft' % name_parts[2])
|
||||
|
||||
elif name.startswith("draft-rfc-"):
|
||||
return Group.objects.get(acronym="iesg")
|
||||
|
@ -338,7 +338,7 @@ class SubmissionBaseUploadForm(forms.Form):
|
|||
if group:
|
||||
return group
|
||||
else:
|
||||
raise forms.ValidationError('Draft names starting with draft-%s- are restricted, please pick a different name' % ntype)
|
||||
raise forms.ValidationError('Internet-Draft names starting with draft-%s- are restricted, please pick a different name' % ntype)
|
||||
return None
|
||||
|
||||
|
||||
|
@ -541,19 +541,19 @@ class DeprecatedSubmissionBaseUploadForm(SubmissionBaseUploadForm):
|
|||
raise forms.ValidationError('')
|
||||
|
||||
if not self.filename:
|
||||
raise forms.ValidationError("Could not extract a valid draft name from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full draft name including "
|
||||
raise forms.ValidationError("Could not extract a valid Internet-Draft name from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full Internet-Draft name including "
|
||||
"revision number appears centered on its own line below the document title on the "
|
||||
"first page. In an xml upload, please make sure that the top-level <rfc/> "
|
||||
"element has a docName attribute which provides the full draft name including "
|
||||
"element has a docName attribute which provides the full Internet-Draft name including "
|
||||
"revision number.")
|
||||
|
||||
if not self.revision:
|
||||
raise forms.ValidationError("Could not extract a valid draft revision from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full draft name including "
|
||||
raise forms.ValidationError("Could not extract a valid Internet-Draft revision from the upload. "
|
||||
"To fix this in a text upload, please make sure that the full Internet-Draft name including "
|
||||
"revision number appears centered on its own line below the document title on the "
|
||||
"first page. In an xml upload, please make sure that the top-level <rfc/> "
|
||||
"element has a docName attribute which provides the full draft name including "
|
||||
"element has a docName attribute which provides the full Internet-Draft name including "
|
||||
"revision number.")
|
||||
|
||||
if not self.title:
|
||||
|
@ -576,7 +576,7 @@ class DeprecatedSubmissionBaseUploadForm(SubmissionBaseUploadForm):
|
|||
today = date_today()
|
||||
|
||||
self.check_submissions_thresholds(
|
||||
"for the draft %s" % self.filename,
|
||||
"for the Internet-Draft %s" % self.filename,
|
||||
dict(name=self.filename, rev=self.revision, submission_date=today),
|
||||
settings.IDSUBMIT_MAX_DAILY_SAME_DRAFT_NAME, settings.IDSUBMIT_MAX_DAILY_SAME_DRAFT_NAME_SIZE,
|
||||
)
|
||||
|
@ -653,24 +653,24 @@ class SubmissionAutoUploadForm(SubmissionBaseUploadForm):
|
|||
self.add_error(
|
||||
'replaces',
|
||||
forms.ValidationError(
|
||||
'Unknown draft name(s): ' + ', '.join(unknown_names)
|
||||
'Unknown Internet-Draft name(s): ' + ', '.join(unknown_names)
|
||||
),
|
||||
)
|
||||
for alias in aliases_replaced:
|
||||
if alias.document.name == self.filename:
|
||||
self.add_error(
|
||||
'replaces',
|
||||
forms.ValidationError("A draft cannot replace itself"),
|
||||
forms.ValidationError("An Internet-Draft cannot replace itself"),
|
||||
)
|
||||
elif alias.document.type_id != "draft":
|
||||
self.add_error(
|
||||
'replaces',
|
||||
forms.ValidationError("A draft can only replace another draft"),
|
||||
forms.ValidationError("An Internet-Draft can only replace another Internet-Draft"),
|
||||
)
|
||||
elif alias.document.get_state_slug() == "rfc":
|
||||
self.add_error(
|
||||
'replaces',
|
||||
forms.ValidationError("A draft cannot replace an RFC"),
|
||||
forms.ValidationError("An Internet-Draft cannot replace an RFC"),
|
||||
)
|
||||
elif alias.document.get_state_slug('draft-iesg') in ('approved', 'ann', 'rfcqueue'):
|
||||
self.add_error(
|
||||
|
@ -716,7 +716,7 @@ class SubmitterForm(NameEmailForm):
|
|||
return line
|
||||
|
||||
class ReplacesForm(forms.Form):
|
||||
replaces = SearchableDocAliasesField(required=False, help_text="Any drafts that this document replaces (approval required for replacing a draft you are not the author of)")
|
||||
replaces = SearchableDocAliasesField(required=False, help_text="Any Internet-Drafts that this document replaces (approval required for replacing an Internet-Draft you are not the author of)")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.name = kwargs.pop("name")
|
||||
|
@ -725,11 +725,11 @@ class ReplacesForm(forms.Form):
|
|||
def clean_replaces(self):
|
||||
for alias in self.cleaned_data['replaces']:
|
||||
if alias.document.name == self.name:
|
||||
raise forms.ValidationError("A draft cannot replace itself.")
|
||||
raise forms.ValidationError("An Internet-Draft cannot replace itself.")
|
||||
if alias.document.type_id != "draft":
|
||||
raise forms.ValidationError("A draft can only replace another draft")
|
||||
raise forms.ValidationError("An Internet-Draft can only replace another Internet-Draft")
|
||||
if alias.document.get_state_slug() == "rfc":
|
||||
raise forms.ValidationError("A draft cannot replace an RFC")
|
||||
raise forms.ValidationError("An Internet-Draft cannot replace an RFC")
|
||||
if alias.document.get_state_slug('draft-iesg') in ('approved','ann','rfcqueue'):
|
||||
raise forms.ValidationError(alias.name+" is approved by the IESG and cannot be replaced")
|
||||
return self.cleaned_data['replaces']
|
||||
|
@ -781,15 +781,15 @@ class PreapprovalForm(forms.Form):
|
|||
if components[-1] == "00":
|
||||
raise forms.ValidationError("Name appears to end with a revision number -00 - do not include the revision.")
|
||||
if len(components) < 4:
|
||||
raise forms.ValidationError("Name has less than four dash-delimited components - can't form a valid group draft name.")
|
||||
raise forms.ValidationError("Name has less than four dash-delimited components - can't form a valid group Internet-Draft name.")
|
||||
acronym = components[2]
|
||||
if acronym not in [ g.acronym for g in self.groups ]:
|
||||
raise forms.ValidationError("Group acronym not recognized as one you can approve drafts for.")
|
||||
raise forms.ValidationError("Group acronym not recognized as one you can approve Internet-Drafts for.")
|
||||
|
||||
if Preapproval.objects.filter(name=n):
|
||||
raise forms.ValidationError("Pre-approval for this name already exists.")
|
||||
if Submission.objects.filter(state="posted", name=n):
|
||||
raise forms.ValidationError("A draft with this name has already been submitted and accepted. A pre-approval would not make any difference.")
|
||||
raise forms.ValidationError("An Internet-Draft with this name has already been submitted and accepted. A pre-approval would not make any difference.")
|
||||
|
||||
return n
|
||||
|
||||
|
@ -802,7 +802,7 @@ class SubmissionEmailForm(forms.Form):
|
|||
if submission_pk is None we are starting a new submission and name
|
||||
must be unique. Otherwise the name must match the submission.name.
|
||||
'''
|
||||
name = forms.CharField(required=True, max_length=255, label="Draft name")
|
||||
name = forms.CharField(required=True, max_length=255, label="Internet-Draft name")
|
||||
submission_pk = forms.IntegerField(required=False, widget=forms.HiddenInput())
|
||||
direction = forms.ChoiceField(choices=(("incoming", "Incoming"), ("outgoing", "Outgoing")),
|
||||
widget=forms.RadioSelect)
|
||||
|
|
|
@ -52,7 +52,7 @@ def send_submission_confirmation(request, submission, chair_notice=False):
|
|||
return all_addrs
|
||||
|
||||
def send_full_url(request, submission):
|
||||
subject = 'Full URL for managing submission of draft %s' % submission.name
|
||||
subject = 'Full URL for managing submission of Internet-Draft %s' % submission.name
|
||||
from_email = settings.IDSUBMIT_FROM_EMAIL
|
||||
(to_email, cc) = gather_address_lists('sub_management_url_requested',submission=submission)
|
||||
url = settings.IDTRACKER_BASE_URL + urlreverse('ietf.submit.views.submission_status', kwargs=dict(submission_id=submission.pk, access_token=submission.access_token()))
|
||||
|
@ -75,7 +75,7 @@ def send_approval_request(request, submission, replaced_doc=None):
|
|||
If replaced_doc is not None, requests will be sent to the wg chairs or ADs
|
||||
responsible for that doc's group instead of the submission.
|
||||
"""
|
||||
subject = 'New draft waiting for approval: %s' % submission.name
|
||||
subject = 'New Internet-Draft waiting for approval: %s' % submission.name
|
||||
from_email = settings.IDSUBMIT_FROM_EMAIL
|
||||
|
||||
# Sort out which MailTrigger to use
|
||||
|
|
|
@ -327,7 +327,7 @@ class SubmitTests(BaseSubmitTestCase):
|
|||
self.assertEqual(r.status_code, 302)
|
||||
status_url = r["Location"]
|
||||
self.assertEqual(len(outbox), mailbox_before + 1)
|
||||
self.assertTrue("New draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue("New Internet-Draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue(name in outbox[-1]["Subject"])
|
||||
|
||||
# as chair of WG, we should see approval button
|
||||
|
@ -438,7 +438,7 @@ class SubmitTests(BaseSubmitTestCase):
|
|||
|
||||
# Approval request notification should be sent to the WG chair
|
||||
self.assertEqual(len(outbox), mailbox_before + 1)
|
||||
self.assertTrue("New draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue("New Internet-Draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue(name in outbox[-1]["Subject"])
|
||||
self.assertTrue('mars-chairs@ietf.org' in outbox[-1]['To'])
|
||||
|
||||
|
@ -791,7 +791,7 @@ class SubmitTests(BaseSubmitTestCase):
|
|||
|
||||
# Approval request notification should be sent to the AD for the group
|
||||
self.assertEqual(len(outbox), mailbox_before + 1)
|
||||
self.assertTrue("New draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue("New Internet-Draft waiting for approval" in outbox[-1]["Subject"])
|
||||
self.assertTrue(name in outbox[-1]["Subject"])
|
||||
self.assertTrue(ad.user.email in outbox[-1]['To'])
|
||||
|
||||
|
@ -1224,7 +1224,7 @@ class SubmitTests(BaseSubmitTestCase):
|
|||
ad.user.email if notify_ad else '%s-chairs@ietf.org' % replaced_draft.group.acronym,
|
||||
notice['To']
|
||||
)
|
||||
self.assertIn('New draft waiting for approval', notice['Subject'])
|
||||
self.assertIn('New Internet-Draft waiting for approval', notice['Subject'])
|
||||
|
||||
def test_submit_new_individual_replacing_wg(self):
|
||||
self.submit_new_individual_replacing_wg()
|
||||
|
@ -3061,7 +3061,7 @@ class SubmissionUploadFormTests(BaseSubmitTestCase):
|
|||
files=files_dict,
|
||||
)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertIn('A draft cannot replace itself', form.errors['replaces'])
|
||||
self.assertIn('An Internet-Draft cannot replace itself', form.errors['replaces'])
|
||||
|
||||
# can't replace non-draft
|
||||
review = ReviewFactory()
|
||||
|
@ -3071,7 +3071,7 @@ class SubmissionUploadFormTests(BaseSubmitTestCase):
|
|||
files=files_dict,
|
||||
)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertIn('A draft can only replace another draft', form.errors['replaces'])
|
||||
self.assertIn('An Internet-Draft can only replace another Internet-Draft', form.errors['replaces'])
|
||||
|
||||
# can't replace RFC
|
||||
rfc = WgRfcFactory()
|
||||
|
@ -3081,7 +3081,7 @@ class SubmissionUploadFormTests(BaseSubmitTestCase):
|
|||
files=files_dict,
|
||||
)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertIn('A draft cannot replace an RFC', form.errors['replaces'])
|
||||
self.assertIn('An Internet-Draft cannot replace an RFC', form.errors['replaces'])
|
||||
|
||||
# can't replace draft approved by iesg
|
||||
existing_drafts[0].set_state(State.objects.get(type='draft-iesg', slug='approved'))
|
||||
|
@ -3217,7 +3217,7 @@ class AsyncSubmissionTests(BaseSubmitTestCase):
|
|||
process_uploaded_submission(submission)
|
||||
submission = Submission.objects.get(pk=submission.pk) # refresh
|
||||
self.assertEqual(submission.state_id, 'cancel')
|
||||
self.assertIn('draft filename disagrees', submission.submissionevent_set.last().desc)
|
||||
self.assertIn('Internet-Draft filename disagrees', submission.submissionevent_set.last().desc)
|
||||
|
||||
# rev mismatch
|
||||
submission = SubmissionFactory(
|
||||
|
@ -3249,7 +3249,7 @@ class AsyncSubmissionTests(BaseSubmitTestCase):
|
|||
process_uploaded_submission(submission)
|
||||
submission = Submission.objects.get(pk=submission.pk) # refresh
|
||||
self.assertEqual(submission.state_id, 'cancel')
|
||||
self.assertIn('Only XML draft submissions', submission.submissionevent_set.last().desc)
|
||||
self.assertIn('Only XML Internet-Draft submissions', submission.submissionevent_set.last().desc)
|
||||
|
||||
# wrong state
|
||||
submission = SubmissionFactory(
|
||||
|
@ -3416,7 +3416,7 @@ class ApiSubmitTests(BaseSubmitTestCase):
|
|||
def test_api_submit_info(self):
|
||||
url = urlreverse('ietf.submit.views.api_submit')
|
||||
r = self.client.get(url)
|
||||
expected = "A simplified draft submission interface, intended for automation"
|
||||
expected = "A simplified Internet-Draft submission interface, intended for automation"
|
||||
self.assertContains(r, expected, status_code=200)
|
||||
|
||||
def test_api_submit_bad_method(self):
|
||||
|
|
|
@ -126,7 +126,7 @@ def validate_submission_name(name):
|
|||
if re.search(r'-\d\d$', name):
|
||||
name = name[:-3]
|
||||
if len(name) > 50:
|
||||
return "Expected the draft name to be at most 50 ascii characters long; found %d." % len(name)
|
||||
return "Expected the Internet-Draft name to be at most 50 ascii characters long; found %d." % len(name)
|
||||
else:
|
||||
msg = "Expected name 'draft-...' using lowercase ascii letters, digits, and hyphen; found '%s'." % name
|
||||
if '.' in name:
|
||||
|
@ -309,10 +309,10 @@ def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
|
|||
# update draft attributes
|
||||
try:
|
||||
draft = Document.objects.get(name=submission.name)
|
||||
log.log(f"{submission.name}: retrieved draft: {draft}")
|
||||
log.log(f"{submission.name}: retrieved Internet-Draft: {draft}")
|
||||
except Document.DoesNotExist:
|
||||
draft = Document.objects.create(name=submission.name, type_id="draft")
|
||||
log.log(f"{submission.name}: created draft: {draft}")
|
||||
log.log(f"{submission.name}: created Internet-Draft: {draft}")
|
||||
|
||||
prev_rev = draft.rev
|
||||
|
||||
|
@ -341,7 +341,7 @@ def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
|
|||
draft.stream = StreamName.objects.get(slug=stream_slug)
|
||||
|
||||
draft.expires = timezone.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
|
||||
log.log(f"{submission.name}: got draft details")
|
||||
log.log(f"{submission.name}: got Internet-Draft details")
|
||||
|
||||
events = []
|
||||
|
||||
|
@ -417,9 +417,9 @@ def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
|
|||
|
||||
e = DocEvent(type="changed_document", doc=draft, rev=draft.rev)
|
||||
if draft.stream_id == 'ietf':
|
||||
e.desc = "Sub state has been changed to <b>AD Followup</b> from <b>Revised ID Needed</b>"
|
||||
e.desc = "Sub state has been changed to <b>AD Followup</b> from <b>Revised I-D Needed</b>"
|
||||
else:
|
||||
e.desc = "<b>Revised ID Needed</b> tag cleared"
|
||||
e.desc = "<b>Revised I-D Needed</b> tag cleared"
|
||||
e.by = system
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -1134,9 +1134,9 @@ def process_submission_xml(submission):
|
|||
xml_draft = XMLDraft(xml_path)
|
||||
|
||||
if submission.name != xml_draft.filename:
|
||||
raise SubmissionError('XML draft filename disagrees with submission filename')
|
||||
raise SubmissionError('XML Internet-Draft filename disagrees with submission filename')
|
||||
if submission.rev != xml_draft.revision:
|
||||
raise SubmissionError('XML draft revision disagrees with submission revision')
|
||||
raise SubmissionError('XML Internet-Draft revision disagrees with submission revision')
|
||||
|
||||
authors = xml_draft.get_author_list()
|
||||
for a in authors:
|
||||
|
@ -1176,17 +1176,17 @@ def process_submission_text(submission):
|
|||
|
||||
if submission.name != text_draft.filename:
|
||||
raise SubmissionError(
|
||||
f'Text draft filename ({text_draft.filename}) disagrees with submission filename ({submission.name})'
|
||||
f'Text Internet-Draft filename ({text_draft.filename}) disagrees with submission filename ({submission.name})'
|
||||
)
|
||||
if submission.rev != text_draft.revision:
|
||||
raise SubmissionError(
|
||||
f'Text draft revision ({text_draft.revision}) disagrees with submission revision ({submission.rev})')
|
||||
f'Text Internet-Draft revision ({text_draft.revision}) disagrees with submission revision ({submission.rev})')
|
||||
text_title = _normalize_title(text_draft.get_title())
|
||||
if not text_title:
|
||||
raise SubmissionError('Could not extract a valid title from the text')
|
||||
if text_title != submission.title:
|
||||
raise SubmissionError(
|
||||
f'Text draft title ({text_title}) disagrees with submission title ({submission.title})')
|
||||
f'Text Internet-Draft title ({text_title}) disagrees with submission title ({submission.title})')
|
||||
|
||||
submission.abstract = text_draft.get_abstract()
|
||||
submission.document_date = text_draft.get_creation_date()
|
||||
|
@ -1213,7 +1213,7 @@ def process_uploaded_submission(submission):
|
|||
return # do nothing
|
||||
|
||||
if submission.file_types != '.xml':
|
||||
abort_submission('Only XML draft submissions can be processed.')
|
||||
abort_submission('Only XML Internet-Draft submissions can be processed.')
|
||||
|
||||
try:
|
||||
process_submission_xml(submission)
|
||||
|
|
|
@ -101,7 +101,7 @@ def upload_submission(request):
|
|||
except DataError as e:
|
||||
form = SubmissionManualUploadForm(request=request)
|
||||
form._errors = {}
|
||||
form._errors["__all__"] = form.error_class(["There was a failure processing your upload -- please verify that your draft passes idnits. (%s)" % e.message])
|
||||
form._errors["__all__"] = form.error_class(["There was a failure processing your upload -- please verify that your Internet-Draft passes idnits. (%s)" % e.message])
|
||||
if debug.debug:
|
||||
raise
|
||||
else:
|
||||
|
@ -472,7 +472,7 @@ def submission_status(request, submission_id, access_token=None):
|
|||
approvals_received = submitter_form.cleaned_data['approvals_received']
|
||||
|
||||
if submission.rev == '00' and submission.group and not submission.group.is_active:
|
||||
permission_denied(request, 'Posting a new draft for an inactive group is not permitted.')
|
||||
permission_denied(request, 'Posting a new Internet-Draft for an inactive group is not permitted.')
|
||||
|
||||
if approvals_received:
|
||||
if not is_secretariat:
|
||||
|
|
|
@ -4,25 +4,25 @@ from ietf.doc.models import Document, State
|
|||
def find_discrepancies():
|
||||
res = []
|
||||
|
||||
title = "Drafts that have been sent to the RFC Editor but do not have an RFC Editor state"
|
||||
title = "Internet-Drafts that have been sent to the RFC Editor but do not have an RFC Editor state"
|
||||
|
||||
docs = Document.objects.filter(states__in=list(State.objects.filter(used=True, type="draft-iesg", slug__in=("ann", "rfcqueue")))).exclude(states__in=list(State.objects.filter(used=True, type="draft-rfceditor")))
|
||||
|
||||
res.append((title, docs))
|
||||
|
||||
title = "Drafts that have the IANA Action state \"In Progress\" but do not have a \"IANA\" RFC-Editor state/tag"
|
||||
title = "Internet-Drafts that have the IANA Action state \"In Progress\" but do not have a \"IANA\" RFC-Editor state/tag"
|
||||
|
||||
docs = Document.objects.filter(states__in=list(State.objects.filter(used=True, type="draft-iana-action", slug__in=("inprog",)))).exclude(tags="iana").exclude(states__in=list(State.objects.filter(used=True, type="draft-rfceditor", slug="iana")))
|
||||
|
||||
res.append((title, docs))
|
||||
|
||||
title = "Drafts that have the IANA Action state \"Waiting on RFC Editor\" or \"RFC-Ed-Ack\" but are in the RFC Editor state \"IANA\"/tagged with \"IANA\""
|
||||
title = "Internet-Drafts that have the IANA Action state \"Waiting on RFC Editor\" or \"RFC-Ed-Ack\" but are in the RFC Editor state \"IANA\"/tagged with \"IANA\""
|
||||
|
||||
docs = Document.objects.filter(states__in=list(State.objects.filter(used=True, type="draft-iana-action", slug__in=("waitrfc", "rfcedack")))).filter(models.Q(tags="iana") | models.Q(states__in=list(State.objects.filter(used=True, type="draft-rfceditor", slug="iana"))))
|
||||
|
||||
res.append((title, docs))
|
||||
|
||||
title = "Drafts that have a state other than \"RFC Ed Queue\", \"RFC Published\" or \"Sent to the RFC Editor\" and have an RFC Editor or IANA Action state"
|
||||
title = "Internet-Drafts that have a state other than \"RFC Ed Queue\", \"RFC Published\" or \"Sent to the RFC Editor\" and have an RFC Editor or IANA Action state"
|
||||
|
||||
docs = Document.objects.exclude(states__in=list(State.objects.filter(used=True, type="draft-iesg", slug__in=("rfcqueue", "pub"))) + list(State.objects.filter(used=True, type__in=("draft-stream-iab", "draft-stream-ise", "draft-stream-irtf"), slug="rfc-edit"))).filter(states__in=list(State.objects.filter(used=True, type__in=("draft-iana-action", "draft-rfceditor"))))
|
||||
|
||||
|
|
|
@ -567,7 +567,7 @@ def post_approved_draft(url, name):
|
|||
"Authorization": "Basic %s" % force_str(base64.encodebytes(smart_bytes("%s:%s" % (username, password)))).replace("\n", ""),
|
||||
}
|
||||
|
||||
log("Posting RFC-Editor notification of approved draft '%s' to '%s'" % (name, url))
|
||||
log("Posting RFC-Editor notification of approved Internet-Draft '%s' to '%s'" % (name, url))
|
||||
text = error = ""
|
||||
|
||||
try:
|
||||
|
@ -578,7 +578,7 @@ def post_approved_draft(url, name):
|
|||
timeout=settings.DEFAULT_REQUESTS_TIMEOUT,
|
||||
)
|
||||
|
||||
log("RFC-Editor notification result for draft '%s': %s:'%s'" % (name, r.status_code, r.text))
|
||||
log("RFC-Editor notification result for Internet-Draft '%s': %s:'%s'" % (name, r.status_code, r.text))
|
||||
|
||||
if r.status_code != 200:
|
||||
raise RuntimeError("Status code is not 200 OK (it's %s)." % r.status_code)
|
||||
|
@ -589,7 +589,7 @@ def post_approved_draft(url, name):
|
|||
except Exception as e:
|
||||
# catch everything so we don't leak exceptions, convert them
|
||||
# into string instead
|
||||
msg = "Exception on RFC-Editor notification for draft '%s': %s: %s" % (name, type(e), str(e))
|
||||
msg = "Exception on RFC-Editor notification for Internet-Draft '%s': %s: %s" % (name, type(e), str(e))
|
||||
log(msg)
|
||||
if settings.SERVER_MODE == 'test':
|
||||
debug.say(msg)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<p>
|
||||
This section describes the autogenerated read-only API towards the database tables. See also
|
||||
the
|
||||
<a href="{% url 'ietf.submit.views.api_submit' %}">draft submission API description</a>
|
||||
<a href="{% url 'ietf.submit.views.api_submit' %}">Internet-Draft submission API description</a>
|
||||
and the
|
||||
<a href="#iesg-position-api">IESG ballot position API description</a>
|
||||
</p>
|
||||
|
@ -99,7 +99,7 @@
|
|||
</li>
|
||||
<li>
|
||||
States which match <code>states__type__slug__in=draft</code> describe the basic
|
||||
Active/Expired/Dead whatever state of the draft.
|
||||
Active/Expired/Dead whatever state of the Internet-Draft.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
|
|
|
@ -90,13 +90,13 @@
|
|||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.recent_drafts" %}">
|
||||
Recent drafts
|
||||
Recent I-Ds
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.submit.views.upload_submission" %}">
|
||||
Draft submission
|
||||
I-D submission
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -134,7 +134,7 @@
|
|||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.submit.views.approvals" %}">
|
||||
Approve a draft
|
||||
Approve an I-D
|
||||
</a>
|
||||
</li>
|
||||
{% for g in user|docman_groups %}
|
||||
|
@ -377,7 +377,7 @@
|
|||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.document_stats' %}">
|
||||
Drafts/RFCs
|
||||
I-Ds/RFCs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -12,6 +12,6 @@ Change by {{ event.by }} on {{ event.time }}:
|
|||
|
||||
Best regards,
|
||||
|
||||
The Datatracker draft tracking service
|
||||
The Datatracker Internet-Draft tracking service
|
||||
(for the IETF Secretariat)
|
||||
{% endautoescape %}
|
||||
|
|
|
@ -25,13 +25,13 @@ To allow evaluation of your proposal, please include the following items:
|
|||
- Open source projects (if any) implementing this work:
|
||||
|
||||
## Agenda
|
||||
- Items, drafts, speakers, timing
|
||||
- Items, Internet-Drafts, speakers, timing
|
||||
- Or a URL
|
||||
|
||||
## Links to the mailing list, draft charter if any, relevant Internet-Drafts, etc.
|
||||
- Mailing List: https://www.ietf.org/mailman/listinfo/example
|
||||
- Draft charter: {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name='charter-ietf-EXAMPLE' %}
|
||||
- Relevant drafts:
|
||||
- Relevant Internet-Drafts:
|
||||
- Use Cases:
|
||||
- {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name='draft-blah-uses' %}
|
||||
- Solutions
|
||||
|
|
|
@ -18,7 +18,7 @@ The IESG would also like the {{receiver}} to review the comments in the datatrac
|
|||
The IESG review is documented at:
|
||||
{{review_url}}
|
||||
|
||||
A URL of the reviewed Internet Draft is:
|
||||
A URL of the reviewed Internet-Draft is:
|
||||
{{conflictdoc_url}}
|
||||
|
||||
The process for such documents is described {% if conflictdoc.stream_id == 'ise' %}at https://www.rfc-editor.org/indsubs.html {% else %}{% if conflictdoc.stream_id == 'irtf' %}in RFC 5743 {% endif %} {% endif %}
|
||||
|
|
|
@ -713,14 +713,14 @@
|
|||
{% if user.is_authenticated %}
|
||||
<a class="btn btn-primary btn-sm track-untrack-doc {% if not doc.tracked_in_personal_community_list %}hide{% endif %}"
|
||||
href="{% url "ietf.community.views.untrack_document" username=user.username name=doc.name %}"
|
||||
title="Remove from your personal ID list">
|
||||
title="Remove from your personal I-D list">
|
||||
<i class="bi bi-bookmark-check-fill">
|
||||
</i>
|
||||
Untrack
|
||||
</a>
|
||||
<a class="btn btn-primary btn-sm track-untrack-doc {% if doc.tracked_in_personal_community_list %}hide{% endif %}"
|
||||
href="{% url "ietf.community.views.track_document" username=user.username name=doc.name %}"
|
||||
title="Add to your personal ID list">
|
||||
title="Add to your personal I-D list">
|
||||
<i class="bi bi-bookmark">
|
||||
</i>
|
||||
Track
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<small class="text-muted">{{ doc }}</small>
|
||||
</h1>
|
||||
<p class="my-3 alert alert-info">
|
||||
You can begin managing the group state of this draft.
|
||||
You can begin managing the group state of this Internet-Draft.
|
||||
The document will be moved into the stream of the adopting group.
|
||||
</p>
|
||||
<form method="post">
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
{% bootstrap_form form %}
|
||||
{% if state and state.slug == "rfcqueue" %}
|
||||
<div class="form-text">
|
||||
<b>Note:</b> If you pull the draft out of the
|
||||
<b>Note:</b> If you pull the Internet-Draft out of the
|
||||
<i>{{ state.name }}</i> state, the RFC Editor and IANA will be notified
|
||||
by email with this comment, so they can update their queues.
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% load ietf_filters %}{% autoescape off %}The following draft will expire soon:
|
||||
{% load ietf_filters %}{% autoescape off %}The following Internet-Draft will expire soon:
|
||||
|
||||
Name: {{ doc.name|clean_whitespace }}
|
||||
Title: {{ doc.title}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% autoescape off %}{{ doc.file_tag|safe }} was just expired.
|
||||
This draft is in the state "{{ state }}" in the Datatracker.
|
||||
This Internet-Draft is in the state "{{ state }}" in the Datatracker.
|
||||
|
||||
|
||||
Thanks,
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{% extends "base.html" %}
|
||||
{% load origin %}
|
||||
{% load django_bootstrap5 %}
|
||||
{% block title %}Release draft {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
{% block title %}Release I-D {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>
|
||||
Release draft
|
||||
Release Internet-Draft
|
||||
<br>
|
||||
<small class="text-muted">{{ doc.name }}-{{ doc.rev }}</small>
|
||||
</h1>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
error.
|
||||
</p>
|
||||
<p>
|
||||
We have not changed the draft state or sent the announcement
|
||||
We have not changed the Internet-Draft state or sent the announcement
|
||||
yet so if this is an intermittent error, you can go back and try
|
||||
again.
|
||||
</p>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% autoescape off %}As you requested, the Internet Draft {{ doc.file_tag }}
|
||||
{% autoescape off %}As you requested, the Internet-Draft {{ doc.file_tag }}
|
||||
has been resurrected.
|
||||
|
||||
Datatracker URL: {{ url }}
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
<th scope="row">
|
||||
</th>
|
||||
<th scope="row">
|
||||
Draft last updated
|
||||
I-D last updated
|
||||
</th>
|
||||
<td>
|
||||
{{ doc.time|date:"Y-m-d" }}
|
||||
|
|
|
@ -11,14 +11,14 @@
|
|||
{% if user.is_authenticated %}
|
||||
<a href="{% url "ietf.community.views.untrack_document" username=request.user.username name=doc.name %}"
|
||||
class="track-untrack-doc {% if not doc.tracked_in_personal_community_list %}d-none{% endif %}"
|
||||
aria-label="Remove from your personal ID list"
|
||||
title="Remove from your personal ID list">
|
||||
aria-label="Remove from your personal I-D list"
|
||||
title="Remove from your personal I-D list">
|
||||
<i class="bi bi-bookmark-check-fill"></i>
|
||||
</a>
|
||||
<a href="{% url "ietf.community.views.track_document" username=request.user.username name=doc.name %}"
|
||||
class="track-untrack-doc {% if doc.tracked_in_personal_community_list %}d-none{% endif %}"
|
||||
aria-label="Add to your personal ID list"
|
||||
title="Add to your personal ID list">
|
||||
aria-label="Add to your personal I-D list"
|
||||
title="Add to your personal I-D list">
|
||||
<i class="bi bi-bookmark"></i>
|
||||
</a>
|
||||
<br>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<h1>Request closing of {{ group.acronym }} {{ group.type.name }}</h1>
|
||||
<p class="alert alert-info my-3">
|
||||
Please provide instructions regarding the disposition of each
|
||||
active Internet-Draft (such as to withdraw the draft, move it to
|
||||
active Internet-Draft (such as to withdraw it, move it to
|
||||
another group, convert it to an individual submission, and so on),
|
||||
wording for the closure announcement, and the status of the group
|
||||
mailing list (will it remain open or should it be closed).
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<small class="text-muted">{{ group.acronym }} {{ group.type.name }}</small>
|
||||
</h1>
|
||||
<p class="my-3">
|
||||
Below you can customize the draft states and tags used in the
|
||||
Below you can customize the Internet-Draft states and tags used in the
|
||||
<a href="{{ group.about_url }}">{{ group.acronym }} {{ group.type.name }}</a>.
|
||||
Note that some states are
|
||||
mandatory for group operation and cannot be deactivated.
|
||||
|
|
|
@ -3,29 +3,29 @@
|
|||
# generated: {% now "Y-m-d H:i:s T" %}
|
||||
#
|
||||
# Description of fields:
|
||||
# 0 draft name and latest revision
|
||||
# 0 Internet-Draft name and latest revision
|
||||
# 1 always -1 (was internal numeric database id in earlier schema)
|
||||
# 2 one of "Active", "Expired", "RFC", "Withdrawn by Submitter",
|
||||
# "Replaced", or "Withdrawn by IETF"
|
||||
# 3 if #2 is "Active", the IESG state for the document (such as
|
||||
# "In Last Call", "AD Evaluation::Revised ID Needed", or "I-D Exists");
|
||||
# "In Last Call", "AD Evaluation::Revised I-D Needed", or "I-D Exists");
|
||||
# otherwise empty
|
||||
# 4 if #2 is "RFC", the RFC number (otherwise empty)
|
||||
# 5 if #2 is "Replaced", the replacing draft name (otherwise empty)
|
||||
# 5 if #2 is "Replaced", the replacing Internet-Draft name (otherwise empty)
|
||||
# 6 revision date (YYYY-MM-DD)
|
||||
# 7 group acronym (or empty if no group/not known)
|
||||
# 8 area acronym (or empty if not known; not necessarily accurate
|
||||
# for older drafts)
|
||||
# for older Internet-Drafts)
|
||||
# 9 responsible AD name (or empty if not known)
|
||||
# 10 intended maturity level (or empty if not known)
|
||||
# 11 if #3 is "In Last Call" (with any substate), the last call
|
||||
# end date (YYYY-MM-DD); otherwise empty
|
||||
# 12 if #2 is "Active", list of file types; otherwise empty
|
||||
# 13 draft title
|
||||
# 14 draft authors (often quite inaccurate, especially the email
|
||||
# 13 Internet-Draft title
|
||||
# 14 Internet-Draft authors (often quite inaccurate, especially the email
|
||||
# addresses...)
|
||||
# 15 draft shepherd (Shep Erd <shep@erd.example>)
|
||||
# 16 draft areadirector (Aread Irector <aread.irector@example.org>)
|
||||
# 15 Internet-Draft shepherd (Shep Erd <shep@erd.example>)
|
||||
# 16 Internet-Draft areadirector (Aread Irector <aread.irector@example.org>)
|
||||
#
|
||||
# new fields can be added to the end in the future, so remember to
|
||||
# ignore those in your code
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
{% if with_abstracts %}
|
||||
This summary sheet provides a short synopsis of each Internet-Draft
|
||||
available within the "internet-drafts" directory at the shadow
|
||||
sites directory. These drafts are listed alphabetically by working
|
||||
sites directory. These Internet-Drafts are listed alphabetically by working
|
||||
group acronym and start date.{% else %}
|
||||
This summary sheet provides an index of each Internet-Draft. These
|
||||
drafts are listed alphabetically by Working Group acronym and initial
|
||||
Internet-Drafts are listed alphabetically by Working Group acronym and initial
|
||||
post date.{% endif %} Generated {{ time }}.
|
||||
|
||||
{% for group in groups %}
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
</li>
|
||||
<li>
|
||||
Google for the person's name within the ietf.org site: "Jane Doe site:ietf.org". If
|
||||
found, and the email address matches an address used in drafts or discussions,
|
||||
found, and the email address matches an address used in Internet-Drafts or discussions,
|
||||
things are fine, and it's OK to add the address to the allowlist using this form,
|
||||
and ask the person to please try the
|
||||
<a href="{% url 'ietf.ietfauth.views.create_account' %}">account creation form</a>
|
||||
|
|
|
@ -169,13 +169,13 @@
|
|||
{% endif %}
|
||||
{% if teams %}
|
||||
<p>
|
||||
Add a draft that you would like to review when it becomes available for review:
|
||||
Add an Internet-Draft that you would like to review when it becomes available for review:
|
||||
</p>
|
||||
<form method="post" class="form-inline">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form review_wish_form %}
|
||||
<button class="btn btn-primary" type="submit" name="action" value="add_wish">
|
||||
Add draft
|
||||
Add I-D
|
||||
</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin static django_bootstrap5 %}
|
||||
{% block title %}Add drafts to {{ session.meeting }} : {{ session.group.acronym }}{% endblock %}
|
||||
{% block title %}Add I-Ds to {{ session.meeting }} : {{ session.group.acronym }}{% endblock %}
|
||||
{% block pagehead %}{{ form.media.css }}{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<h1>
|
||||
Add drafts to {{ session.meeting }}
|
||||
Add Internet-Drafts to {{ session.meeting }}
|
||||
{% if session_number %}: Session {{ session_number }}{% endif %}
|
||||
<br>
|
||||
<small class="text-muted">{{ session.group.acronym }}
|
||||
|
@ -20,9 +20,9 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
<div class="alert alert-info my-3">
|
||||
This form will link additional drafts to this session with a revision of "Current at time of presentation". For more fine grained control of versions, or to remove a draft from a session, adjust the sessions associated with a draft from the draft's main page.
|
||||
This form will link additional Internet-Drafts to this session with a revision of "Current at time of presentation". For more fine grained control of versions, or to remove an Internet-Draft from a session, adjust the sessions associated with an Internet-Draft from the Internet-Draft's main page.
|
||||
</div>
|
||||
<h2 class="mt-5">Drafts already linked to this session</h2>
|
||||
<h2 class="mt-5">Internet-Drafts already linked to this session</h2>
|
||||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -47,7 +47,7 @@
|
|||
</tbody>
|
||||
{% endif %}
|
||||
</table>
|
||||
<h2 class="mt-5">Additional drafts to link to this session</h2>
|
||||
<h2 class="mt-5">Additional Internet-Drafts to link to this session</h2>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
This will make the proceedings for IETF {{ meeting.number }} final.
|
||||
</p>
|
||||
<p>
|
||||
All drafts associated with sessions that are marked "current version" will have their version set to whatever the version was at the end of the meeting.
|
||||
All Internet-Drafts associated with sessions that are marked "current version" will have their version set to whatever the version was at the end of the meeting.
|
||||
</p>
|
||||
{# This would be a good place to put any warnings about important things missing from the proceedings #}
|
||||
<form method="post" class="my-3">
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
<a href="{{ draft.get_href }}">{{ draft.name }}</a>
|
||||
<br>
|
||||
{% empty %}
|
||||
<span class="badge rounded-pill bg-warning">No drafts</span>
|
||||
<span class="badge rounded-pill bg-warning">No Internet-Drafts</span>
|
||||
{% endfor %}
|
||||
{% endwith %}
|
||||
</td>
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
</a>
|
||||
<br>
|
||||
{% empty %}
|
||||
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No drafts</span>{% endif %}
|
||||
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No Internet-Drafts</span>{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% endif %}
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
{% endif %}
|
||||
{% if d.name.slug == 'idcutoff' %}
|
||||
Upload using the
|
||||
<a href="{% url 'ietf.submit.views.upload_submission' %}">ID Submission Tool</a>.
|
||||
<a href="{% url 'ietf.submit.views.upload_submission' %}">I-D Submission Tool</a>.
|
||||
{% endif %}
|
||||
{% if d.name.slug == 'draftwgagenda' or d.name.slug == 'revwgagenda' or d.name.slug == 'procsub' or d.name.slug == 'revslug' %}
|
||||
Upload using the
|
||||
|
|
|
@ -15,7 +15,7 @@ DESCRIPTION:{{ d.name.desc }}{% if first and d.name.slug == 'openreg' or first a
|
|||
{{ request.scheme }}://{{ request.get_host }}{% url 'ietf.secr.sreq.views.main' %}{% endif %}{% if d.name.slug == 'cutoffbofreq' %}\n
|
||||
To request a BOF, please see instructions on Requesting a BOF:\n
|
||||
https://www.ietf.org/how/bofs/bof-procedures/{% endif %}{% if d.name.slug == 'idcutoff' %}\n
|
||||
Upload using the ID Submission Tool:\n
|
||||
Upload using the I-D Submission Tool:\n
|
||||
{{ request.scheme }}://{{ request.get_host }}{% url 'ietf.submit.views.upload_submission' %}{% endif %}{% if d.name.slug == 'draftwgagenda' or d.name.slug == 'revwgagenda' or d.name.slug == 'procsub' or d.name.slug == 'revslug' %}\n
|
||||
Upload using the Meeting Materials Management Tool:\n
|
||||
{{ request.scheme }}://{{ request.get_host }}{% url 'ietf.meeting.views.materials' num=meeting.number %}{% endif %}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<th scope="col" data-sort="agenda">Agenda</th>
|
||||
<th scope="col" data-sort="minutes">Minutes</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">Drafts</th>
|
||||
<th scope="col" data-sort="drafts">Internet-Drafts</th>
|
||||
<th scope="col" data-sort="updated">Updated</th>
|
||||
{% if user|has_role:"Secretariat" or user_groups %}
|
||||
<th scope="col"></th>
|
||||
|
@ -73,7 +73,7 @@
|
|||
<th scope="col" data-sort="agenda">Agenda</th>
|
||||
<th scope="col" data-sort="minutes">Minutes</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">Drafts</th>
|
||||
<th scope="col" data-sort="drafts">Internet-Drafts</th>
|
||||
<th scope="col" data-sort="updated">Updated</th>
|
||||
{% if user|has_role:"Secretariat" or user_groups %}
|
||||
<th scope="col"></th>
|
||||
|
@ -101,7 +101,7 @@
|
|||
<th scope="col" data-sort="minutes">Minutes</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
<th scope="col" data-sort="updated">
|
||||
Updated
|
||||
|
@ -143,7 +143,7 @@
|
|||
Slides
|
||||
</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
<th scope="col" data-sort="updated">
|
||||
Updated
|
||||
|
@ -183,7 +183,7 @@
|
|||
Slides
|
||||
</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
<th scope="col" data-sort="updated">
|
||||
Updated
|
||||
|
@ -222,7 +222,7 @@
|
|||
Slides
|
||||
</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
<th scope="col" data-sort="updated">
|
||||
Updated
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<th scope="col" data-sort="artifacts">Artifacts</th>
|
||||
<th scope="col" data-sort="recordings">Recordings</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">Drafts</th>
|
||||
<th scope="col" data-sort="drafts">Internet-Drafts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<th scope="col" data-sort="artifacts">Artifacts</th>
|
||||
<th scope="col" data-sort="recordings">Recordings</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">Drafts</th>
|
||||
<th scope="col" data-sort="drafts">Internet-Drafts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<th scope="col" data-sort="artifacts">Artifacts</th>
|
||||
<th scope="col" data-sort="recordings">Recordings</th>
|
||||
<th scope="col" data-sort="slides">Slides</th>
|
||||
<th scope="col" data-sort="drafts">Drafts</th>
|
||||
<th scope="col" data-sort="drafts">Internet-Drafts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -136,7 +136,7 @@
|
|||
Slides
|
||||
</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -168,7 +168,7 @@
|
|||
Slides
|
||||
</th>
|
||||
<th scope="col" data-sort="drafts">
|
||||
Drafts
|
||||
Internet-Drafts
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
|
@ -181,7 +181,7 @@
|
|||
{% endif %}
|
||||
|
||||
{% if can_manage_materials %}<div class="form-text">Drag-and-drop to reorder slides</div>{% endif %}
|
||||
<h3 class="mt-4">Drafts</h3>
|
||||
<h3 class="mt-4">Internet-Drafts</h3>
|
||||
<table class="table table-sm table-striped">
|
||||
{% if session.filtered_drafts %}
|
||||
<tbody>
|
||||
|
@ -210,7 +210,7 @@
|
|||
{% if can_manage_materials %}
|
||||
<a class="btn btn-primary"
|
||||
href="{% url 'ietf.meeting.views.add_session_drafts' session_id=session.pk num=session.meeting.number %}">
|
||||
Link additional drafts to session
|
||||
Link additional I-Ds to session
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if timezone_now < timeslot.end_time %}{# show meeting tools until the session ends #}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% load ietf_filters %}{% autoescape off %}The following draft will expire soon:
|
||||
{% load ietf_filters %}{% autoescape off %}The following Internet-Draft will expire soon:
|
||||
|
||||
Filename: {{draft.filename}}
|
||||
Title: {{draft.title|clean_whitespace}}
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
{{ person.first_name }} has no RFCs as of {{ today|date:"Y-m-d" }}.
|
||||
{% endif %}
|
||||
<h2 class="mt-5" id="drafts-{{ forloop.counter }}">
|
||||
Active Drafts <small class="text-muted">({{ person.active_drafts|length }})</small>
|
||||
Active Internet-Drafts <small class="text-muted">({{ person.active_drafts|length }})</small>
|
||||
</h2>
|
||||
{% if person.active_drafts.exists %}
|
||||
<ul>
|
||||
|
@ -137,10 +137,10 @@
|
|||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
{{ person.first_name }} has no active drafts as of {{ today|date:"Y-m-d" }}.
|
||||
{{ person.first_name }} has no active Internet-Drafts as of {{ today|date:"Y-m-d" }}.
|
||||
{% endif %}
|
||||
<h2 class="mt-5">
|
||||
Expired Drafts <small class="text-muted">({{ person.expired_drafts|length }})</small>
|
||||
Expired Internet-Drafts <small class="text-muted">({{ person.expired_drafts|length }})</small>
|
||||
</h2>
|
||||
{% if person.expired_drafts.exists %}
|
||||
<ul>
|
||||
|
@ -154,13 +154,13 @@
|
|||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
(Excluding replaced drafts.)
|
||||
(Excluding replaced Internet-Drafts.)
|
||||
{% else %}
|
||||
{{ person.first_name }} has no expired drafts as of {{ today|date:"Y-m-d" }}.
|
||||
{{ person.first_name }} has no expired Internet-Drafts as of {{ today|date:"Y-m-d" }}.
|
||||
{% endif %}
|
||||
{% if person.has_drafts %}
|
||||
<h2 class="mt-5">
|
||||
Draft Activity
|
||||
Internet-Draft Activity
|
||||
</h2>
|
||||
<div id="chart-{{ forloop.counter }}">
|
||||
</div>
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
The first version of the idtracker was commissioned by the IESG under <i>Harald
|
||||
Alvestrand</i> in 2001, and the IESG started using it at the beginning of 2002. It was
|
||||
written by <i>Michael Lee</i> in Perl, with direct SQL statements. It provided a
|
||||
major improvement in visibility of the progress of drafts by the IESG.
|
||||
major improvement in visibility of the progress of Internet-Drafts by the IESG.
|
||||
The first
|
||||
<a href="https://www.ietf.org/proceedings/55/slides/plenary-6/plenary-6.ppt">
|
||||
public presentation
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<h1>Draft/RFC statistics</h1>
|
||||
<h1>Internet-Draft and RFC statistics</h1>
|
||||
<div class="row my-3">
|
||||
<label class="fw-bold col-sm-2 col-form-label">Documents:</label>
|
||||
<div class="btn-group col-sm-10">
|
||||
|
@ -71,7 +71,7 @@
|
|||
</div>
|
||||
<div class="alert alert-info my-3">
|
||||
<b>Please Note:</b> The author information in the datatracker about RFCs
|
||||
with numbers lower than about 1300 and drafts from before 2001 is
|
||||
with numbers lower than about 1300 and Internet-Drafts from before 2001 is
|
||||
unreliable and in many cases absent. For this reason, statistics on these
|
||||
pages does not show correct author stats for corpus selections that involve such
|
||||
documents.
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
</table>
|
||||
<p>
|
||||
The statistics are based entirely on the author affiliation
|
||||
provided with each draft. Since this may vary across documents, an
|
||||
provided with each Internet-Draft. Since this may vary across documents, an
|
||||
author may be counted with more than one affiliation, making the
|
||||
total sum more than 100%.
|
||||
</p>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
</table>
|
||||
<p>
|
||||
The statistics are based entirely on the author addresses provided
|
||||
with each draft. Since this varies across documents, a traveling
|
||||
with each Internet-Draft. Since this varies across documents, a traveling
|
||||
author may be counted in more than country, making the total sum
|
||||
more than 100%.
|
||||
</p>
|
|
@ -63,7 +63,7 @@
|
|||
</table>
|
||||
<p>
|
||||
The statistics are based entirely on the author addresses provided
|
||||
with each draft. Since this varies across documents, a traveling
|
||||
with each Internet-Draft. Since this varies across documents, a traveling
|
||||
author may be counted in more than country, making the total sum
|
||||
more than 100%.
|
||||
</p>
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="{% url "ietf.stats.views.document_stats" %}">Drafts/RFCs (authors, countries, formats, ...)</a>
|
||||
<a href="{% url "ietf.stats.views.document_stats" %}">Internet-Drafts and RFCs (authors, countries, formats, ...)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url "ietf.stats.views.meeting_stats" %}">Meeting attendance</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" href="{% url "ietf.stats.views.review_stats" %}">Reviews of drafts in review teams</a>
|
||||
<a rel="nofollow" href="{% url "ietf.stats.views.review_stats" %}">Reviews of Internet-Drafts in review teams</a>
|
||||
(requires login)
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -9,14 +9,14 @@
|
|||
{% origin %}
|
||||
<h2 class="mt-3">Add pre-approval</h2>
|
||||
<p>
|
||||
You can register a pre-approved draft name. Then the chair
|
||||
approval step of group <code>-00</code> submissions is suspended for that draft name
|
||||
You can register a pre-approved Internet-Draft name. Then the chair
|
||||
approval step of group <code>-00</code> submissions is suspended for that Internet-Draft name
|
||||
so a future submission is posted to the data tracker immediately.
|
||||
</p>
|
||||
<p>
|
||||
When the revision <code>-00</code> draft is submitted, the pre-approval will not
|
||||
When the revision <code>-00</code> Internet-Draft is submitted, the pre-approval will not
|
||||
be shown anymore as it has fulfilled its purpose (only revision <code>-00</code> submissions are
|
||||
subject to approval). If the draft never shows up, you can instead
|
||||
subject to approval). If the Internet-Draft never shows up, you can instead
|
||||
later cancel the pre-approval to get rid of it.
|
||||
</p>
|
||||
<h2 class="mt-3">Instructions</h2>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<p>
|
||||
As chair
|
||||
{% if groups|length > 1 %}of {{ groups|length|apnumber }} groups{% endif %}
|
||||
you can pre-approve draft names on the form:
|
||||
you can pre-approve Internet-Draft names on the form:
|
||||
</p>
|
||||
<p class="buttonlist">
|
||||
{% for g in groups %}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{% autoescape off %}
|
||||
A New Internet-Draft is available from the on-line Internet-Drafts directories.
|
||||
{% if submission.group %}This draft is a work item of the {{ submission.group.name }}{% if submission.group.type.name %} {{ submission.group.type.name }}{% endif %} of the {% if submission.group.type_id == "rg" %}IRTF{% else %}IETF{% endif %}.{% endif %}
|
||||
{% if submission.group %}This Internet-Draft is a work item of the {{ submission.group.name }}{% if submission.group.type.name %} {{ submission.group.type.name }}{% endif %} of the {% if submission.group.type_id == "rg" %}IRTF{% else %}IETF{% endif %}.{% endif %}
|
||||
|
||||
Title : {{ submission.title }}
|
||||
Author{{ submission.authors|pluralize:" ,s" }} : {% for author in submission.authors %}{{ author.name }}{% if not forloop.last %}
|
||||
|
@ -12,7 +12,7 @@ A New Internet-Draft is available from the on-line Internet-Drafts directories.
|
|||
Abstract:
|
||||
{{ submission.abstract }}
|
||||
|
||||
The IETF datatracker status page for this draft is:
|
||||
The IETF datatracker status page for this Internet-Draft is:
|
||||
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=submission.name %}
|
||||
{% if submission.xml_version == "3" %}
|
||||
There is also an HTML version available at:
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015-2022, All Rights Reserved #}
|
||||
{% load origin ietf_filters %}
|
||||
{% block title %}Draft submission API instructions{% endblock %}
|
||||
{% block title %}I-D submission API instructions{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<h1 class="mb-3">Draft submission API instructions</h1>
|
||||
<h1 class="mb-3">Internet-Draft submission API instructions</h1>
|
||||
<p>
|
||||
A simplified draft submission interface, intended for automation,
|
||||
A simplified Internet-Draft submission interface, intended for automation,
|
||||
is available at <code>{% url 'ietf.submit.views.api_submission' %}</code>.
|
||||
</p>
|
||||
<p>
|
||||
|
@ -37,11 +37,11 @@
|
|||
<code>xml</code>, which is the submitted file (required)
|
||||
</li>
|
||||
<li>
|
||||
<code>replaces</code>, a comma-separated list of draft names replaced by this submission (optional)
|
||||
<code>replaces</code>, a comma-separated list of Internet-Draft names replaced by this submission (optional)
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
When a draft is submitted, basic checks are performed immediately and an HTTP response
|
||||
When an Internet-Draft is submitted, basic checks are performed immediately and an HTTP response
|
||||
is sent including an appropriate http result code and JSON data describing the outcome.
|
||||
</p>
|
||||
<p>
|
||||
|
@ -62,7 +62,7 @@
|
|||
"error": "Description of the error"
|
||||
}</pre>
|
||||
<p>
|
||||
If the basic checks passed and a successful response is sent, the draft is queued for further
|
||||
If the basic checks passed and a successful response is sent, the Internet-Draft is queued for further
|
||||
processing. Its status can be monitored by issuing GET requests to the <code>status_url</code>
|
||||
indicated in the JSON response. This URL will respond with JSON data in the format
|
||||
</p>
|
||||
|
@ -72,17 +72,17 @@
|
|||
"state": "validating"
|
||||
}</pre>
|
||||
<p>
|
||||
The state <code>validating</code> indicates that the draft is being or waiting to be processed.
|
||||
Any other state indicates that the draft completed validation. If the validation failed or if the
|
||||
draft was canceled after validation, the state will be <code>cancel</code>.
|
||||
The state <code>validating</code> indicates that the Internet-Draft is being or waiting to be processed.
|
||||
Any other state indicates that the Internet-Draft completed validation. If the validation failed or if the
|
||||
Internet-Draft was canceled after validation, the state will be <code>cancel</code>.
|
||||
</p>
|
||||
<p>
|
||||
Human-readable details of the draft's status and history can be found at
|
||||
Human-readable details of the Internet-Draft's status and history can be found at
|
||||
{% absurl 'ietf.submit.views.submission_status' submission_id='123' %}
|
||||
(replacing <code>123</code> with the <code>id</code> for the submission).)
|
||||
</p>
|
||||
<p>
|
||||
Here is an example of submitting a draft and polling its status through the API:
|
||||
Here is an example of submitting an Internet-Draft and polling its status through the API:
|
||||
</p>
|
||||
<pre class="border p-3">
|
||||
$ curl -s -F "user=user.name@example.com" -F "xml=@~/draft-user-example.xml" -F "replaces=draft-user-replaced-draft" {% absurl 'ietf.submit.views.api_submission' %} | jq
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015-2022, All Rights Reserved #}
|
||||
{% load origin ietf_filters %}
|
||||
{% block title %}Draft submission API instructions{% endblock %}
|
||||
{% block title %}I-D submission API instructions{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<h1 class="mb-3">Draft submission API instructions</h1>
|
||||
<h1 class="mb-3">Internet-Draft submission API instructions</h1>
|
||||
<p>
|
||||
Note: API endpoint described here is known to have a slow response time or to fail
|
||||
due to timeout for some draft submissions, particularly those with large file sizes.
|
||||
due to timeout for some Internet-Draft submissions, particularly those with large file sizes.
|
||||
It is recommended to use the <a href="{% url 'ietf.submit.views.api_submission' %}">new API endpoint</a>
|
||||
instead for increased reliability.
|
||||
</p>
|
||||
<p>
|
||||
A simplified draft submission interface, intended for automation,
|
||||
A simplified Internet-Draft submission interface, intended for automation,
|
||||
is available at <code>{% absurl 'ietf.submit.views.api_submit' %}</code>.
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -5,7 +5,7 @@ Hi,
|
|||
{% if not submission.group.is_active %}
|
||||
Note: This submission belongs to an inactive working group.
|
||||
{% endif %}
|
||||
To approve the draft, go to this URL (note: you need to login to be able to approve):
|
||||
To approve the Internet-Draft, go to this URL (note: you need to login to be able to approve):
|
||||
https://{{ domain }}{% url "ietf.submit.views.submission_status" submission_id=submission.pk access_token=submission.access_token %}
|
||||
|
||||
File name : {{ submission.name }}
|
||||
|
@ -32,4 +32,4 @@ To approve the draft, go to this URL (note: you need to login to be able to appr
|
|||
Best regards,
|
||||
|
||||
The IETF Secretariat
|
||||
through the draft submission service
|
||||
through the Internet-Draft submission service
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{% block pagehead %}
|
||||
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
|
||||
{% endblock %}
|
||||
{% block title %}Draft submission approvals{% endblock %}
|
||||
{% block title %}I-D submission approvals{% endblock %}
|
||||
{% load ietf_filters %}
|
||||
{% block submit_content %}
|
||||
{% origin %}
|
||||
|
@ -18,7 +18,7 @@
|
|||
<table class="approvals table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort="draft">Draft</th>
|
||||
<th scope="col" data-sort="draft">Internet-Draft</th>
|
||||
<th scope="col" data-sort="date">Submitted</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -36,7 +36,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<h2 class="mt-5" id="preapprovals">Pre-approved drafts not yet submitted</h2>
|
||||
<h2 class="mt-5" id="preapprovals">Pre-approved Internet-Drafts not yet submitted</h2>
|
||||
{% if user|has_role:"Secretariat,WG Chair,RG Chair" %}
|
||||
<p>
|
||||
<a class="btn btn-primary"
|
||||
|
@ -51,7 +51,7 @@
|
|||
<table class="preapprovals table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort="draft">Draft name</th>
|
||||
<th scope="col" data-sort="draft">Internet-Draft name</th>
|
||||
<th scope="col" data-sort="date">Pre-approved</th>
|
||||
<th scope="col" data-sort="by">By</th>
|
||||
<th scope="col"></th>
|
||||
|
@ -74,16 +74,16 @@
|
|||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<h2 class="mt-5" id="recently-approved">Approved drafts within the past {{ days }} days</h2>
|
||||
<h2 class="mt-5" id="recently-approved">Approved Internet-Drafts within the past {{ days }} days</h2>
|
||||
{% if not recently_approved %}
|
||||
<p class="alert alert-info my-3">
|
||||
No drafts approved.
|
||||
No Internet-Drafts approved.
|
||||
</p>
|
||||
{% else %}
|
||||
<table class="recently-approved table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort="draft">Draft</th>
|
||||
<th scope="col" data-sort="draft">Internet-Draft</th>
|
||||
<th scope="col" data-sort="date">Submitted</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -103,7 +103,7 @@
|
|||
<h2>Submission of approvals</h2>
|
||||
<p>
|
||||
This is where chairs and the secretariat can approve and pre-approve document
|
||||
submissions which require approval, such as WG <code>-00</code> drafts.
|
||||
submissions which require approval, such as WG <code>-00</code> Internet-Drafts.
|
||||
</p>
|
||||
<p>
|
||||
You need to
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
{% if submission.state_id == "posted" %}
|
||||
<p class="alert alert-warning my-3">
|
||||
The submission has already been posted. See the
|
||||
<a href="{% url "ietf.doc.views_doc.document_main" name=submission.name %}">draft here</a>.
|
||||
<a href="{% url "ietf.doc.views_doc.document_main" name=submission.name %}">Internet-Draft here</a>.
|
||||
</p>
|
||||
{% else %}
|
||||
<div class="alert alert-info my-3">
|
||||
|
@ -54,7 +54,7 @@
|
|||
<form id="confirm-submission" method="post">
|
||||
{% csrf_token %}
|
||||
<button class="btn btn-primary" type="submit" name="action" value="confirm">
|
||||
Confirm submission & post draft
|
||||
Confirm submission & post I-D
|
||||
</button>
|
||||
<button class="btn btn-danger" type="submit" name="action" value="cancel">Cancel submission</button>
|
||||
</form>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{% autoescape off %}
|
||||
Hi,
|
||||
|
||||
The IETF datatracker draft submission service has received your draft
|
||||
The IETF datatracker Internet-Draft submission service has received your Internet-Draft
|
||||
{{ submission.name }}-{{ submission.rev }}, and requires a
|
||||
confirmation step in order to be able to complete the posting of
|
||||
the draft.{% if chair_notice %}
|
||||
the Internet-Draft.{% if chair_notice %}
|
||||
|
||||
The chairs have been copied since this is a group document whose author list has changed.
|
||||
{%endif%}
|
||||
|
@ -16,6 +16,6 @@ Please follow this link to the page where you can confirm the posting:
|
|||
Best regards,
|
||||
|
||||
The IETF Secretariat
|
||||
through the draft submission service
|
||||
through the Internet-Draft submission service
|
||||
|
||||
{% endautoescape %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Hi,
|
||||
|
||||
The datatracker has received a request to send out the link to the URL where you
|
||||
can confirm the submission of your draft {{ submission.name }}-{{ submission.rev }}.
|
||||
can confirm the submission of your Internet-Draft {{ submission.name }}-{{ submission.rev }}.
|
||||
|
||||
Please follow this link to get full access to the submission page:
|
||||
{{ url|safe }}
|
||||
|
@ -11,6 +11,6 @@ Please follow this link to get full access to the submission page:
|
|||
Best regards,
|
||||
|
||||
The IETF Secretariat
|
||||
through the draft submission service
|
||||
through the Internet-Draft submission service
|
||||
|
||||
{% endautoescape %}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{% block pagehead %}
|
||||
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
|
||||
{% endblock %}
|
||||
{% block title %}Draft submissions awaiting manual posting{% endblock %}
|
||||
{% block title %}I-D submissions awaiting manual posting{% endblock %}
|
||||
{% load ietf_filters %}
|
||||
{% block submit_content %}
|
||||
{% origin %}
|
||||
|
@ -18,7 +18,7 @@
|
|||
class="submissions table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort="draft">Draft</th>
|
||||
<th scope="col" data-sort="draft">Internet-Draft</th>
|
||||
<th scope="col" data-sort="date">Submitted</th>
|
||||
<th scope="col" data-sort="passes">Passes Checks</th>
|
||||
<th scope="col" data-sort="metadata">Metadata</th>
|
||||
|
@ -58,10 +58,10 @@
|
|||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
<h2 class="mt-3" id="id_upload">Submissions awaiting draft upload</h2>
|
||||
<h2 class="mt-3" id="id_upload">Submissions awaiting Internet-Draft upload</h2>
|
||||
{% if not waiting_for_draft %}
|
||||
<p class="alert alert-info my-3" id="no-waiting-for-draft">
|
||||
There are no submissions awaiting draft upload.
|
||||
There are no submissions awaiting Internet-Draft upload.
|
||||
</p>
|
||||
{% else %}
|
||||
<table id="waiting-for-draft"
|
||||
|
|
|
@ -7,7 +7,7 @@ Manual posting has been requested for the following Internet-Draft.
|
|||
- {{ err }}{% endfor %}
|
||||
|
||||
If the authors claim that this is incorrect, then please look at the actual
|
||||
draft and verify that it does not have the problems indicated.
|
||||
Internet-Draft and verify that it does not have the problems indicated.
|
||||
{% endif %}
|
||||
Full idnits results are available at the end of this message.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
of the Bug Report links at the bottom of the page.
|
||||
<hr>
|
||||
If you run into problems submitting an Internet-Draft and need to request manual posting of an Internet-Draft, please send the
|
||||
draft and the reason for manual posting to
|
||||
Internet-Draft and the reason for manual posting to
|
||||
<a href="mailto:{{ settings.SECRETARIAT_SUPPORT_EMAIL }}">{{ settings.SECRETARIAT_SUPPORT_EMAIL }}</a>.
|
||||
Be advised that manual processing always takes additional time.
|
||||
</div>
|
|
@ -39,9 +39,9 @@
|
|||
<h2 class="mt-5">Submission checks</h2>
|
||||
<p class="alert {% if passes_checks %}alert-success{% else %}alert-warning{% endif %} my-3">
|
||||
{% if passes_checks %}
|
||||
Your draft has been verified to pass the submission checks.
|
||||
Your Internet-Draft has been verified to pass the submission checks.
|
||||
{% else %}
|
||||
Your draft has <b>NOT</b> been verified to pass the submission checks.
|
||||
Your Internet-Draft has <b>NOT</b> been verified to pass the submission checks.
|
||||
{% endif %}
|
||||
</p>
|
||||
{% if submission.authors|length > 5 %}
|
||||
|
@ -130,7 +130,7 @@
|
|||
</div>
|
||||
{% if submission.state_id == "waiting-for-draft" %}
|
||||
<p class="alert alert-warning my-3">
|
||||
This submission is awaiting the first draft upload.
|
||||
This submission is awaiting the first Internet-Draft upload.
|
||||
</p>
|
||||
{% elif submission.state_id == 'validating' %}
|
||||
<p class="alert alert-warning my-3">
|
||||
|
@ -427,7 +427,7 @@
|
|||
{% if requires_group_approval %}
|
||||
Notifies group chairs to get approval.
|
||||
{% elif requires_prev_authors_approval %}
|
||||
Notifies authors of previous revision of draft to get approval.
|
||||
Notifies authors of previous revision of Internet-Draft to get approval.
|
||||
{% else %}
|
||||
Notifies submitter and authors for confirmation.
|
||||
{% endif %}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<a href="https://www.ietf.org/ietf/1id-abstracts.txt">https://www.ietf.org/ietf/1id-abstracts.txt</a>.
|
||||
</p>
|
||||
<p>
|
||||
An API for automated draft submission is available as an alternative to this webpage at
|
||||
An API for automated Internet-Draft submission is available as an alternative to this webpage at
|
||||
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.submit.views.api_submit' %}">{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.submit.views.api_submit' %}</a>.
|
||||
</p>
|
||||
<p>
|
||||
|
@ -92,7 +92,7 @@
|
|||
If the submission does not have any validation errors, then the user will be allowed to proceed with the automated posting process. This process will begin with submitter authentication, which will be done by e-mail.
|
||||
</p>
|
||||
<p>
|
||||
A user must carefully examine the meta-data that are displayed on this screen, and make sure that these data were extracted correctly. If the data were not extracted correctly, then the user can correct the errors via the Adjust page. In such a case, the user will pass the draft to the Secretariat for manual posting.
|
||||
A user must carefully examine the meta-data that are displayed on this screen, and make sure that these data were extracted correctly. If the data were not extracted correctly, then the user can correct the errors via the Adjust page. In such a case, the user will pass the Internet-Draft to the Secretariat for manual posting.
|
||||
</p>
|
||||
<table class="table table-sm table-striped">
|
||||
<tbody>
|
||||
|
@ -136,7 +136,7 @@
|
|||
</th>
|
||||
<td>
|
||||
<p>
|
||||
Button to start the automated posting process with submitter authentication. Once clicked, an email message will be sent to the parties who can verify the submission. For a new draft (<code>-00</code>), that will be the authors listed in the document. For -01 and subsequent drafts, the confirmation message is sent to the authors of the <b>previous</b> version. One of the recipients of the confirmation message will need to open the email message via his or her email application, and click the link provided in the message body.
|
||||
Button to start the automated posting process with submitter authentication. Once clicked, an email message will be sent to the parties who can verify the submission. For a new Internet-Draft (<code>-00</code>), that will be the authors listed in the document. For -01 and subsequent Internet-Drafts, the confirmation message is sent to the authors of the <b>previous</b> version. One of the recipients of the confirmation message will need to open the email message via his or her email application, and click the link provided in the message body.
|
||||
</p>
|
||||
<p>
|
||||
Once a link in the email body is clicked, the document gets pushed to the IETF Web and FTP sites, a notification is sent to the authors of the document, and an I-D Action announcement will be sent out within the next 15 minutes.
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" data-sort="draft">Draft name</th>
|
||||
<th scope="col" data-sort="draft">Internet-Draft name</th>
|
||||
<th scope="col" data-sort="iesg">IESG state</th>
|
||||
<th scope="col" data-sort="rfc">RFC Editor state</th>
|
||||
<th scope="col" data-sort="iana">IANA Action state</th>
|
||||
|
|
|
@ -13,7 +13,7 @@ SYNOPSIS
|
|||
|
||||
DESCRIPTION
|
||||
Extract information about authors' names and email addresses,
|
||||
intended status and number of pages from Internet Drafts.
|
||||
intended status and number of pages from Internet-Drafts.
|
||||
The information is emitted in the form of a line containing
|
||||
xml-style attributes, prefixed with the name of the draft.
|
||||
|
||||
|
@ -629,6 +629,8 @@ class PlaintextDraft(Draft):
|
|||
|
||||
address_section = r"^ *([0-9]+\.)? *(Author|Editor)('s|s'|s|\(s\)) (Address|Addresses|Information)"
|
||||
|
||||
# "Internet Draft" (without the dash) is correct here, because the usage is to
|
||||
# suppress incorrect author name extraction
|
||||
ignore = [
|
||||
"Standards Track", "Current Practice", "Internet Draft", "Working Group",
|
||||
"Expiration Date",
|
||||
|
@ -936,7 +938,7 @@ class PlaintextDraft(Draft):
|
|||
companies[i] = None
|
||||
break
|
||||
else:
|
||||
_warn("Author tuple doesn't match text in draft: %s, %s" % (authors[i], fullname))
|
||||
_warn("Author tuple doesn't match text in Internet-Draft: %s, %s" % (authors[i], fullname))
|
||||
authors[i] = None
|
||||
break
|
||||
except AssertionError:
|
||||
|
@ -1266,7 +1268,7 @@ def getmeta(fn):
|
|||
fields["eventsource"] = "draft"
|
||||
|
||||
if " " in fn or not fn.endswith(".txt"):
|
||||
_warn("Skipping unexpected draft name: '%s'" % (fn))
|
||||
_warn("Skipping unexpected Internet-Draft name: '%s'" % (fn))
|
||||
return {}
|
||||
|
||||
if os.path.exists(fn):
|
||||
|
@ -1409,7 +1411,7 @@ def _main(outfile=sys.stdout):
|
|||
files = [ "-" ]
|
||||
|
||||
for file in files:
|
||||
_debug( "Reading drafts from '%s'" % file)
|
||||
_debug( "Reading Internet-Drafts from '%s'" % file)
|
||||
if file == "-":
|
||||
file = sys.stdin
|
||||
elif file.endswith(".gz"):
|
||||
|
|
|
@ -40,11 +40,11 @@ class Command(BaseCommand):
|
|||
* All yang modules from published RFCs should be extracted and be
|
||||
available in an rfc-yang repository.
|
||||
|
||||
* All valid yang modules from active, not replaced, internet drafts
|
||||
* All valid yang modules from active, not replaced, Internet-Drafts
|
||||
should be extracted and be available in a draft-valid-yang repository.
|
||||
|
||||
* All, valid and invalid, yang modules from active, not replaced,
|
||||
internet drafts should be available in a draft-all-yang repository.
|
||||
Internet-Drafts should be available in a draft-all-yang repository.
|
||||
(Actually, given precedence ordering, it would be enough to place
|
||||
non-validating modules in a draft-invalid-yang repository instead).
|
||||
|
||||
|
|
Loading…
Reference in a new issue