Skip to content

Commit cabb82e

Browse files
chore: merge main into feat/tzaware branch
2 parents a8d4bec + cbb639c commit cabb82e

9 files changed

Lines changed: 63 additions & 83 deletions

File tree

ietf/doc/management/commands/generate_draft_bibxml_files.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010

1111
from django.conf import settings
1212
from django.core.management.base import BaseCommand
13-
from django.template.loader import render_to_string
1413
from django.utils import timezone
1514

1615
import debug # pyflakes:ignore
1716

1817
from ietf.doc.models import NewRevisionDocEvent
18+
from ietf.doc.utils import bibxml_for_draft
1919

2020
DEFAULT_DAYS = 7
2121

@@ -77,21 +77,8 @@ def handle(self, *args, **options):
7777
self.mutter('%s %s' % (e.time, e.doc.name))
7878
try:
7979
doc = e.doc
80-
if e.rev != doc.rev:
81-
for h in doc.history_set.order_by("-time"):
82-
if e.rev == h.rev:
83-
doc = h
84-
break
85-
doc.date = e.time.date()
86-
ref_text = '%s' % render_to_string('doc/bibxml.xml', {'name':doc.name, 'doc': doc, 'doc_bibtype':'I-D'})
87-
# if e.rev == e.doc.rev:
88-
# for name in (doc.name, doc.name[6:]):
89-
# ref_file_name = os.path.join(bibxmldir, 'reference.I-D.%s.xml' % (name, ))
90-
# self.write(ref_file_name, ref_text)
91-
# for name in (doc.name, doc.name[6:]):
92-
# ref_rev_file_name = os.path.join(bibxmldir, 'reference.I-D.%s-%s.xml' % (name, doc.rev))
93-
# self.write(ref_rev_file_name, ref_text)
94-
ref_rev_file_name = os.path.join(bibxmldir, 'reference.I-D.%s-%s.xml' % (doc.name, doc.rev))
95-
self.write(ref_rev_file_name, ref_text)
80+
bibxml = bibxml_for_draft(doc, e.rev)
81+
ref_rev_file_name = os.path.join(bibxmldir, 'reference.I-D.%s-%s.xml' % (doc.name, e.rev))
82+
self.write(ref_rev_file_name, bibxml)
9683
except Exception as ee:
9784
sys.stderr.write('\n%s-%s: %s\n' % (doc.name, doc.rev, ee))

ietf/doc/utils.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from django.conf import settings
1818
from django.contrib import messages
1919
from django.forms import ValidationError
20+
from django.http import Http404
2021
from django.template.loader import render_to_string
2122
from django.utils import timezone
2223
from django.utils.html import escape
@@ -1331,3 +1332,33 @@ def fuzzy_find_documents(name, rev=None):
13311332

13321333
FoundDocuments = namedtuple('FoundDocuments', 'documents matched_name matched_rev')
13331334
return FoundDocuments(docs, name, rev)
1335+
1336+
def bibxml_for_draft(doc, rev=None):
1337+
1338+
if rev is not None and rev != doc.rev:
1339+
# find the entry in the history
1340+
for h in doc.history_set.order_by("-time"):
1341+
if rev == h.rev:
1342+
doc = h
1343+
break
1344+
if rev and rev != doc.rev:
1345+
raise Http404("Revision not found")
1346+
1347+
# Build the date we want to claim for the document in the bibxml
1348+
# For documents that have relevent NewRevisionDocEvents, use the date of the event.
1349+
# Very old documents don't have NewRevisionDocEvents - just use the document time.
1350+
1351+
latest_revision_event = doc.latest_event(NewRevisionDocEvent, type="new_revision")
1352+
latest_revision_rev = latest_revision_event.rev if latest_revision_event else None
1353+
best_events = NewRevisionDocEvent.objects.filter(doc__name=doc.name, rev=(rev or latest_revision_rev))
1354+
if best_events.exists():
1355+
# There was a period where it was possible to get more than one NewRevisionDocEvent for a revision.
1356+
# A future data cleanup would allow this to be simplified
1357+
best_event = best_events.order_by('time').first()
1358+
log.assertion('doc.rev == best_event.rev')
1359+
doc.date = best_event.time.date()
1360+
else:
1361+
doc.date = doc.time.date() # Even if this may be incoreect, what would be better?
1362+
1363+
return render_to_string('doc/bibxml.xml', {'name':doc.name, 'doc': doc, 'doc_bibtype':'I-D'})
1364+

ietf/doc/views_doc.py

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
get_initial_notify, make_notify_changed_event, make_rev_history, default_consensus,
6464
add_events_message_info, get_unicode_document_content, build_doc_meta_block,
6565
augment_docs_and_user_with_user_info, irsg_needed_ballot_positions, add_action_holder_change_event,
66-
build_doc_supermeta_block, build_file_urls, update_documentauthors, fuzzy_find_documents)
66+
build_doc_supermeta_block, build_file_urls, update_documentauthors, fuzzy_find_documents,
67+
bibxml_for_draft)
6768
from ietf.doc.utils_bofreq import bofreq_editors, bofreq_responsible
6869
from ietf.group.models import Role, Group
6970
from ietf.group.utils import can_manage_all_groups_of_type, can_manage_materials, group_features_role_filter
@@ -1020,41 +1021,9 @@ def document_bibxml(request, name, rev=None):
10201021
rev = None
10211022

10221023
doc = get_object_or_404(Document, name=name, type_id='draft')
1023-
1024-
latest_revision = doc.latest_event(NewRevisionDocEvent, type="new_revision")
1025-
latest_rev = latest_revision.rev if latest_revision else None
1026-
1027-
if rev != None:
1028-
# find the entry in the history
1029-
for h in doc.history_set.order_by("-time"):
1030-
if rev == h.rev:
1031-
doc = h
1032-
break
1033-
if rev and rev != doc.rev:
1034-
raise Http404("Revision not found")
1035-
1036-
### PATCH to deal with unexpected multiple NewRevisionDocEvent objects for the same revision on a document
1037-
doc_event_qs = NewRevisionDocEvent.objects.filter(doc__name=doc.name, rev=(rev or latest_rev))
1038-
if doc_event_qs.count():
1039-
doc_event = doc_event_qs.order_by('time').last()
1040-
doc.date = doc_event.time.date()
1041-
else:
1042-
doc.date = doc.time.date() # Even if this may be incoreect, what would be better?
10431024

1044-
# try:
1045-
# doc_event = NewRevisionDocEvent.objects.get(doc__name=doc.name, rev=(rev or latest_rev))
1046-
# doc.date = doc_event.time.date()
1047-
# except DocEvent.DoesNotExist:
1048-
# doc.date = doc.time.date() # Even if this may be incoreect, what would be better?
1049-
1050-
return render(request, "doc/bibxml.xml",
1051-
dict(
1052-
name=name,
1053-
doc=doc,
1054-
doc_bibtype='I-D',
1055-
),
1056-
content_type="application/xml; charset=utf-8",
1057-
)
1025+
return HttpResponse(bibxml_for_draft(doc, rev), content_type="application/xml; charset=utf-8")
1026+
10581027

10591028

10601029
def document_writeup(request, name):

ietf/secr/static/js/dynamic_inlines.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ function add_inline_form(name) {
2828
// check to see if this is a stacked or tabular inline
2929
if (first.hasClass("tabular")) {
3030
var field_table = first.parent().find('table > tbody')
31-
var count = field_table.children().length
32-
var copy = $('tr:last', field_table).clone(true)
31+
const children = field_table.children('tr.dynamic-inline')
32+
var count = children.length
33+
const last = $(children[count-1])
34+
var copy = last.clone(true)
3335
copy.removeClass("row1 row2")
34-
copy.find("input[name$='address']").removeAttr("readonly")
35-
copy.addClass("row"+((count % 2) == 0 ? 1 : 2))
36-
field_table.append(copy)
37-
increment_form_ids($('tr:last', field_table), count, name)
36+
copy.find("input[name$='address']").attr("readonly", false)
37+
copy.addClass("row"+((count % 2) ? 2 : 1))
38+
copy.insertAfter(last)
39+
increment_form_ids($(copy), count, name)
3840
}
3941
else {
4042
var last = $(first).parent().children('.last-related')
@@ -54,13 +56,14 @@ function add_inline_form(name) {
5456
$(function() {
5557
var html_template = '<ul class="tools">'+
5658
'<li>'+
57-
'<a class="addlink" href="#" onclick="return add_inline_form(\'{{prefix}}\')">'+
59+
'<a id="addlink-{{prefix}}" class="addlink" href="#">'+
5860
'Add another</a>'+
5961
'</li>'+
6062
'</ul>'
6163
$('.inline-group').each(function(i) {
6264
//prefix is in the name of the input fields before the "-"
63-
var prefix = $("input[type='hidden'][name!='csrfmiddlewaretoken']", this).attr("name").split("-")[0]
64-
$(this).append(html_template.replace("{{prefix}}", prefix))
65+
var prefix = $("input[type='hidden'][name!='csrfmiddlewaretoken']", this).attr("name").split("-")[0];
66+
$(this).append(html_template.replace("{{prefix}}", prefix));
67+
$('#addlink-' + prefix).on('click', () => add_inline_form(prefix));
6568
})
6669
})

ietf/secr/templates/meetings/rooms.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ <h2>Rooms</h2>
2828
{% if form.non_field_errors %}
2929
<tr><td colspan="3">{{ form.non_field_errors }}</td></tr>
3030
{% endif %}
31-
<tr class="{% cycle 'row1' 'row2' %}">
31+
<tr class="dynamic-inline {% cycle 'row1' 'row2' %}">
3232
<td>
3333
{% for hidden in form.hidden_fields %}
3434
{{ hidden }}

ietf/secr/templates/rolodex/edit.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ <h2>Email Addresses</h2>
4343
<tbody>
4444
{% for form in email_formset.forms %}
4545
{% if form.non_field_errors %}{{ form.non_field_errors }}{% endif %}
46-
<tr class="{% cycle 'row1' 'row2' %}">
46+
<tr class="dynamic-inline {% cycle 'row1' 'row2' %}">
4747
<td>
4848
{# Include the hidden fields in the form #}
4949
{% for hidden in form.hidden_fields %}

ietf/submit/utils.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from django.db import transaction
2121
from django.http import HttpRequest # pyflakes:ignore
2222
from django.utils.module_loading import import_string
23-
from django.template.loader import render_to_string
2423
from django.contrib.auth.models import AnonymousUser
2524
from django.utils import timezone
2625

@@ -30,9 +29,10 @@
3029
DocumentAuthor, AddedMessageEvent )
3130
from ietf.doc.models import NewRevisionDocEvent
3231
from ietf.doc.models import RelatedDocument, DocRelationshipName, DocExtResource
33-
from ietf.doc.utils import add_state_change_event, rebuild_reference_relations
34-
from ietf.doc.utils import ( set_replaces_for_document, prettify_std_name,
35-
update_doc_extresources, can_edit_docextresources, update_documentauthors, update_action_holders )
32+
from ietf.doc.utils import (add_state_change_event, rebuild_reference_relations,
33+
set_replaces_for_document, prettify_std_name, update_doc_extresources,
34+
can_edit_docextresources, update_documentauthors, update_action_holders,
35+
bibxml_for_draft )
3636
from ietf.doc.mails import send_review_possibly_replaces_request, send_external_resource_change_request
3737
from ietf.group.models import Group
3838
from ietf.ietfauth.utils import has_role
@@ -486,14 +486,7 @@ def post_submission(request, submission, approved_doc_desc, approved_subm_desc):
486486
create_submission_event(request, submission, approved_subm_desc)
487487

488488
# Create bibxml-ids entry
489-
ref_text = '%s' % render_to_string('doc/bibxml.xml', {'name':draft.name, 'doc': draft, 'doc_bibtype':'I-D'})
490-
# for name in (draft.name, draft.name[6:]):
491-
# ref_file_name = os.path.join(os.path.join(settings.BIBXML_BASE_PATH, 'bibxml-ids'), 'reference.I-D.%s.xml' % (name, ))
492-
# with io.open(ref_file_name, "w", encoding='utf-8') as f:
493-
# f.write(ref_text)
494-
# ref_rev_file_name = os.path.join(os.path.join(settings.BIBXML_BASE_PATH, 'bibxml-ids'), 'reference.I-D.%s-%s.xml' % (name, draft.rev ))
495-
# with io.open(ref_rev_file_name, "w", encoding='utf-8') as f:
496-
# f.write(ref_text)
489+
ref_text = bibxml_for_draft(draft, draft.rev)
497490
ref_rev_file_name = os.path.join(os.path.join(settings.BIBXML_BASE_PATH, 'bibxml-ids'), 'reference.I-D.%s-%s.xml' % (draft.name, draft.rev ))
498491
with io.open(ref_rev_file_name, "w", encoding='utf-8') as f:
499492
f.write(ref_text)

ietf/templates/doc/bibxml.xml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<reference anchor="{{doc_bibtype}}.{{name|slice:"6:"}}">
33
<front>
4-
<title>{{doc.title}}</title>{% if doc.submission %}{% for author in doc.submission.authors %}
5-
<author fullname="{{ author.name }}">
6-
{% if author.affiliation %}<organization>{{ author.affiliation }}</organization>
7-
{% endif %}</author>{% endfor %}{% else %}{% for author in doc.documentauthor_set.all %}
4+
<title>{{doc.title}}</title>{% for author in doc.documentauthor_set.all %}
85
<author initials="{{ author.person.initials }}" surname="{{ author.person.last_name }}" fullname="{{ author.person.name }}">
96
{% if author.affiliation %}<organization>{{ author.affiliation }}</organization>
10-
{% endif %}</author>{% endfor %}{% endif %}
7+
{% endif %}</author>{% endfor %}
118
<date month="{{doc.date|date:"F"}}" day="{{doc.date.day}}" year="{{doc.date.year}}" />
129
<abstract>
1310
<t>{{doc.abstract}}

ietf/templates/mailtrigger/recipient.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ <h1>Mail recipients</h1>
3939
</td>
4040
<td>
4141
{% if recipient.template %}
42-
<code>{{ recipient.template|escape|linebreaksbr }}</code>
42+
<pre><code>{{ recipient.template|escape }}</code></pre>
4343
{% endif %}
4444
</td>
4545
<td>
4646
{% if recipient.code %}
47-
<code>{{ recipient.code|escape|linebreaksbr }}</code>
47+
<pre><code>{{ recipient.code|escape }}</code></pre>
4848
{% endif %}
4949
</td>
5050
</tr>
@@ -55,4 +55,4 @@ <h1>Mail recipients</h1>
5555
{% endblock %}
5656
{% block js %}
5757
<script src="{% static "ietf/js/list.js" %}"></script>
58-
{% endblock %}
58+
{% endblock %}

0 commit comments

Comments
 (0)