fix: Support time zones in agenda.txt; restore agenda-utc.txt (#5233)
* fix: Format times in display timezone in agenda.txt template * chore: Remove unused and non-timezone-friendly TimeSlot.time_desc() * feat: Dispatch agenda-utc.txt URL * refactor: Use None to indicate lack of utc parameter to view * feat: Show display timezone in agenda.txt template * refactor: Combine URL regexes for the agenda.txt to a single entry * test: Update tests for agenda.txt/agenda-csv.txt * fix: Remove ':' added to time formats in agenda.txt template
This commit is contained in:
parent
e469addcb2
commit
8e16b4405b
|
@ -602,10 +602,6 @@ class TimeSlot(models.Model):
|
|||
self._session_cache = self.sessions.filter(timeslotassignments__schedule__in=[self.meeting.schedule, self.meeting.schedule.base if self.meeting else None]).first()
|
||||
return self._session_cache
|
||||
|
||||
@property
|
||||
def time_desc(self):
|
||||
return "%s-%s" % (self.time.strftime("%H%M"), (self.time + self.duration).strftime("%H%M"))
|
||||
|
||||
def meeting_date(self):
|
||||
return self.time.date()
|
||||
|
||||
|
|
|
@ -228,9 +228,6 @@ class MeetingTests(BaseMeetingTestCase):
|
|||
|
||||
registration_text = "Registration"
|
||||
|
||||
# utc
|
||||
time_interval = r"%s<span.*/span>-%s" % (slot.utc_start_time().strftime("%H:%M").lstrip("0"), (slot.utc_start_time() + slot.duration).strftime("%H:%M").lstrip("0"))
|
||||
|
||||
# Extremely rudementary test of agenda-neue - to be replaced with back-end tests as the front-end tests are developed.
|
||||
r = self.client.get(urlreverse("agenda", kwargs=dict(num=meeting.number,utc='-utc')))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -279,23 +276,32 @@ class MeetingTests(BaseMeetingTestCase):
|
|||
}
|
||||
)
|
||||
|
||||
# plain
|
||||
time_interval = r"{}<span.*/span>-{}".format(
|
||||
slot.time.astimezone(meeting.tz()).strftime("%H:%M").lstrip("0"),
|
||||
slot.end_time().astimezone(meeting.tz()).strftime("%H:%M").lstrip("0"),
|
||||
)
|
||||
|
||||
# text
|
||||
# the rest of the results don't have as nicely formatted times
|
||||
time_interval = "%s-%s" % (slot.time.strftime("%H%M").lstrip("0"), (slot.time + slot.duration).strftime("%H%M").lstrip("0"))
|
||||
|
||||
r = self.client.get(urlreverse("ietf.meeting.views.agenda_plain", kwargs=dict(num=meeting.number, ext=".txt")))
|
||||
self.assertContains(r, session.group.acronym)
|
||||
self.assertContains(r, session.group.name)
|
||||
self.assertContains(r, session.group.parent.acronym.upper())
|
||||
self.assertContains(r, slot.location.name)
|
||||
self.assertContains(r, "{}-{}".format(
|
||||
slot.time.astimezone(meeting.tz()).strftime("%H%M"),
|
||||
(slot.time + slot.duration).astimezone(meeting.tz()).strftime("%H%M"),
|
||||
))
|
||||
self.assertContains(r, f"shown in the {meeting.tz()} time zone")
|
||||
|
||||
self.assertContains(r, time_interval)
|
||||
# text, UTC
|
||||
r = self.client.get(urlreverse(
|
||||
"ietf.meeting.views.agenda_plain",
|
||||
kwargs=dict(num=meeting.number, ext=".txt", utc="-utc"),
|
||||
))
|
||||
self.assertContains(r, session.group.acronym)
|
||||
self.assertContains(r, session.group.name)
|
||||
self.assertContains(r, session.group.parent.acronym.upper())
|
||||
self.assertContains(r, slot.location.name)
|
||||
self.assertContains(r, "{}-{}".format(
|
||||
slot.time.astimezone(datetime.timezone.utc).strftime("%H%M"),
|
||||
(slot.time + slot.duration).astimezone(datetime.timezone.utc).strftime("%H%M"),
|
||||
))
|
||||
self.assertContains(r, "shown in UTC")
|
||||
|
||||
# future meeting, no agenda
|
||||
r = self.client.get(urlreverse("ietf.meeting.views.agenda_plain", kwargs=dict(num=future_meeting.number, ext=".txt")))
|
||||
|
|
|
@ -69,7 +69,7 @@ type_interim_patterns = [
|
|||
|
||||
type_ietf_only_patterns_id_optional = [
|
||||
url(r'^agenda(?P<utc>-utc)?(?P<ext>\.html)?/?$', views.agenda, name='agenda'),
|
||||
url(r'^agenda(?P<ext>\.txt)$', views.agenda_plain),
|
||||
url(r'^agenda(?P<utc>-utc)?(?P<ext>\.txt)$', views.agenda_plain),
|
||||
url(r'^agenda(?P<ext>\.csv)$', views.agenda_plain),
|
||||
url(r'^agenda/edit$',
|
||||
RedirectView.as_view(pattern_name='ietf.meeting.views.edit_meeting_schedule', permanent=True),
|
||||
|
|
|
@ -1521,7 +1521,7 @@ def get_assignments_for_agenda(schedule):
|
|||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def agenda_plain(request, num=None, name=None, base=None, ext=None, owner=None, utc=""):
|
||||
def agenda_plain(request, num=None, name=None, base=None, ext=None, owner=None, utc=None):
|
||||
base = base if base else 'agenda'
|
||||
ext = ext if ext else '.txt'
|
||||
mimetype = {
|
||||
|
@ -1571,7 +1571,7 @@ def agenda_plain(request, num=None, name=None, base=None, ext=None, owner=None,
|
|||
|
||||
is_current_meeting = (num is None) or (num == get_current_ietf_meeting_num())
|
||||
|
||||
display_timezone = 'UTC' if utc else meeting.time_zone
|
||||
display_timezone = meeting.time_zone if utc is None else 'UTC'
|
||||
with timezone.override(display_timezone):
|
||||
rendered_page = render(
|
||||
request,
|
||||
|
|
|
@ -10,22 +10,23 @@
|
|||
{% filter center:72 %}Updated {{ updated|date:"Y-m-d H:i:s T" }}{% endfilter %}
|
||||
|
||||
{% filter center:72 %}IETF agendas are subject to change, up to and during the meeting.{% endfilter %}
|
||||
{% filter center:72 %}Times are shown in {% if display_timezone.lower == "utc" %}UTC{% else %}the {{ display_timezone }} time zone{% endif %}.{% endfilter %}
|
||||
{% for item in filtered_assignments %}{% ifchanged %}
|
||||
|
||||
|
||||
{{ item.timeslot.time|date:"l"|upper }}, {{ item.timeslot.time|date:"F j, Y" }}
|
||||
{% endifchanged %}{% if item.slot_type.slug == "reg" %}
|
||||
{{ item.timeslot.time_desc }} {{ item.timeslot.name }}{% if schedule.meeting.reg_area %} - {{ schedule.meeting.reg_area }}{% endif %}{% endif %}{% if item.slot_type.slug == "plenary" %}
|
||||
{{ item.timeslot.time_desc }} {{ item.session.name }} - {{ item.timeslot.location.name }}
|
||||
{{ item.timeslot.time|date:"Hi" }}-{{ item.timeslot.end_time|date:"Hi" }} {{ item.timeslot.name }}{% if schedule.meeting.reg_area %} - {{ schedule.meeting.reg_area }}{% endif %}{% endif %}{% if item.slot_type.slug == "plenary" %}
|
||||
{{ item.timeslot.time|date:"Hi" }}-{{ item.timeslot.end_time|date:"Hi" }} {{ item.session.name }} - {{ item.timeslot.location.name }}
|
||||
|
||||
{{ item.session.agenda_text.strip|indent:"3" }}
|
||||
{% endif %}{% if item.slot_type.slug == 'regular' %}{% ifchanged %}
|
||||
|
||||
{{ item.timeslot.time_desc }} {{ item.timeslot.name }}
|
||||
{{ item.timeslot.time|date:"Hi" }}-{{ item.timeslot.end_time|date:"Hi" }} {{ item.timeslot.name }}
|
||||
{% endifchanged %}{{ item.timeslot.location.name|ljust:14 }} {{ item.session.group_parent_at_the_time.acronym|upper|ljust:4 }} {{ item.session.group_at_the_time.acronym|ljust:10 }} {{ item.session.group_at_the_time.name }} {% if item.session.group_at_the_time.state_id == "bof" %}BOF{% elif item.session.group_at_the_time.type_id == "wg" %}WG{% endif %}{% if item.session.agenda_note %} - {{ item.session.agenda_note }}{% endif %}{% if item.session.current_status == 'canceled' %} *** CANCELLED ***{% elif item.session.current_status == 'resched' %} *** RESCHEDULED{% if item.session.rescheduled_to %} TO {{ item.session.rescheduled_to.time|date:"l G:i"|upper }}-{{ item.session.rescheduled_to.end_time|date:"G:i" }}{% endif %} ***{% endif %}
|
||||
{% endif %}{% if item.slot_type.slug == "break" %}
|
||||
{{ item.timeslot.time_desc }} {{ item.timeslot.name }}{% if schedule.meeting.break_area and item.timeslot.show_location %} - {{ schedule.meeting.break_area }}{% endif %}{% endif %}{% if item.slot_type.slug == "other" %}
|
||||
{{ item.timeslot.time_desc }} {{ item.timeslot.name }} - {{ item.timeslot.location.name }}{% endif %}{% endfor %}
|
||||
{{ item.timeslot.time|date:"Hi" }}-{{ item.timeslot.end_time|date:"Hi" }} {{ item.timeslot.name }}{% if schedule.meeting.break_area and item.timeslot.show_location %} - {{ schedule.meeting.break_area }}{% endif %}{% endif %}{% if item.slot_type.slug == "other" %}
|
||||
{{ item.timeslot.time|date:"Hi" }}-{{ item.timeslot.end_time|date:"Hi" }} {{ item.timeslot.name }} - {{ item.timeslot.location.name }}{% endif %}{% endfor %}
|
||||
|
||||
====================================================================
|
||||
{% endautoescape %}
|
||||
|
|
Loading…
Reference in a new issue