prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Another location where meeting time zone info is incorrect
  ### Describe the issue
  
  Related to #5285 ; time data is incorrectly showing in UTC. This is not a showstopper since I'm probably the only one who would see this page, but I'm just alerting you to one more place the time zone is showing as UTC instead of meeting time: on the "Edit Session" page. 
  
  See below for an example: these office hours are scheduled for 10:30 local time but the edit session page says 01:30.
  
  <img width="719" alt="Screen Shot 2023-03-15 at 2 24 42 PM" src="https://user-images.githubusercontent.com/29440652/225447877-90f2209a-8e79-41c8-8f6a-c054c877779e.png">
  
  
  ### Code of Conduct
  
  - [X] I agree to follow the [IETF's Code of Conduct](https://github.com/ietf-tools/.github/blob/main/CODE_OF_CONDUCT.md)
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `ietf/meeting/templatetags/session_filters.py`
  Content:
  ```
  1 from django import template
  2 
  3 register = template.Library()
  4 
  5 @register.filter
  6 def presented_versions(session,doc):
  7    sp = session.sessionpresentation_set.filter(document=doc)
  8    if not sp:
  9        return "Document not in session"
  10    else:
  11       rev = sp.first().rev
  12       return rev if rev else "(current)"
  13 
  14 @register.filter
  15 def can_manage_materials(session,user):
  16     return session.can_manage_materials(user)
  17 
  18
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py
  --- a/ietf/meeting/templatetags/session_filters.py
  +++ b/ietf/meeting/templatetags/session_filters.py
  @@ -1,17 +1,56 @@
  +# Copyright The IETF Trust 2023, All Rights Reserved
   from django import template
   
  +from ietf.name.models import SessionStatusName
  +
   register = template.Library()
   
  +
   @register.filter
  -def presented_versions(session,doc):
  -   sp = session.sessionpresentation_set.filter(document=doc)
  -   if not sp:
  -       return "Document not in session"
  -   else:
  -      rev = sp.first().rev
  -      return rev if rev else "(current)"
  +def presented_versions(session, doc):
  +    sp = session.sessionpresentation_set.filter(document=doc)
  +    if not sp:
  +        return "Document not in session"
  +    else:
  +        rev = sp.first().rev
  +        return rev if rev else "(current)"
  +
   
   @register.filter
  -def can_manage_materials(session,user):
  +def can_manage_materials(session, user):
       return session.can_manage_materials(user)
   
  +
  +@register.filter
  +def describe_with_tz(session):
  +    # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting
  +    # and displays the timeslot in the meeting's timezone.
  +
  +    if session is None:
  +        return ""
  +
  +    status_id = None
  +    if hasattr(session, "current_status"):
  +        status_id = session.current_status
  +    elif session.pk is not None:
  +        latest_event = session.schedulingevent_set.order_by("-time", "-id").first()
  +        if latest_event:
  +            status_id = latest_event.status_id
  +
  +    if status_id in ("canceled", "disappr", "notmeet", "deleted"):
  +        ss0name = "(%s)" % SessionStatusName.objects.get(slug=status_id).name
  +    else:
  +        ss0name = "(unscheduled)"
  +        ss = session.timeslotassignments.filter(
  +            schedule__in=[
  +                session.meeting.schedule,
  +                session.meeting.schedule.base if session.meeting.schedule else None,
  +            ]
  +        ).order_by("timeslot__time")
  +        if ss:
  +            ss0name = ",".join(
  +                x.timeslot.time.astimezone(session.meeting.tz()).strftime("%a-%H%M")
  +                for x in ss
  +            )
  +            ss0name += f" {session.meeting.tz()}"
  +    return f"{session.meeting}: {session.group.acronym} {session.name} {ss0name}"
  
verification_info: {"golden_diff": "diff --git a/ietf/meeting/templatetags/session_filters.py b/ietf/meeting/templatetags/session_filters.py\n--- a/ietf/meeting/templatetags/session_filters.py\n+++ b/ietf/meeting/templatetags/session_filters.py\n@@ -1,17 +1,56 @@\n+# Copyright The IETF Trust 2023, All Rights Reserved\n from django import template\n \n+from ietf.name.models import SessionStatusName\n+\n register = template.Library()\n \n+\n @register.filter\n-def presented_versions(session,doc):\n-   sp = session.sessionpresentation_set.filter(document=doc)\n-   if not sp:\n-       return \"Document not in session\"\n-   else:\n-      rev = sp.first().rev\n-      return rev if rev else \"(current)\"\n+def presented_versions(session, doc):\n+    sp = session.sessionpresentation_set.filter(document=doc)\n+    if not sp:\n+        return \"Document not in session\"\n+    else:\n+        rev = sp.first().rev\n+        return rev if rev else \"(current)\"\n+\n \n @register.filter\n-def can_manage_materials(session,user):\n+def can_manage_materials(session, user):\n     return session.can_manage_materials(user)\n \n+\n+@register.filter\n+def describe_with_tz(session):\n+    # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting\n+    # and displays the timeslot in the meeting's timezone.\n+\n+    if session is None:\n+        return \"\"\n+\n+    status_id = None\n+    if hasattr(session, \"current_status\"):\n+        status_id = session.current_status\n+    elif session.pk is not None:\n+        latest_event = session.schedulingevent_set.order_by(\"-time\", \"-id\").first()\n+        if latest_event:\n+            status_id = latest_event.status_id\n+\n+    if status_id in (\"canceled\", \"disappr\", \"notmeet\", \"deleted\"):\n+        ss0name = \"(%s)\" % SessionStatusName.objects.get(slug=status_id).name\n+    else:\n+        ss0name = \"(unscheduled)\"\n+        ss = session.timeslotassignments.filter(\n+            schedule__in=[\n+                session.meeting.schedule,\n+                session.meeting.schedule.base if session.meeting.schedule else None,\n+            ]\n+        ).order_by(\"timeslot__time\")\n+        if ss:\n+            ss0name = \",\".join(\n+                x.timeslot.time.astimezone(session.meeting.tz()).strftime(\"%a-%H%M\")\n+                for x in ss\n+            )\n+            ss0name += f\" {session.meeting.tz()}\"\n+    return f\"{session.meeting}: {session.group.acronym} {session.name} {ss0name}\"\n", "issue": "Another location where meeting time zone info is incorrect\n### Describe the issue\n\nRelated to #5285 ; time data is incorrectly showing in UTC. This is not a showstopper since I'm probably the only one who would see this page, but I'm just alerting you to one more place the time zone is showing as UTC instead of meeting time: on the \"Edit Session\" page. \r\n\r\nSee below for an example: these office hours are scheduled for 10:30 local time but the edit session page says 01:30.\r\n\r\n<img width=\"719\" alt=\"Screen Shot 2023-03-15 at 2 24 42 PM\" src=\"https://user-images.githubusercontent.com/29440652/225447877-90f2209a-8e79-41c8-8f6a-c054c877779e.png\">\r\n\n\n### Code of Conduct\n\n- [X] I agree to follow the [IETF's Code of Conduct](https://github.com/ietf-tools/.github/blob/main/CODE_OF_CONDUCT.md)\n", "before_files": [{"content": "from django import template\n\nregister = template.Library()\n\n@register.filter\ndef presented_versions(session,doc):\n   sp = session.sessionpresentation_set.filter(document=doc)\n   if not sp:\n       return \"Document not in session\"\n   else:\n      rev = sp.first().rev\n      return rev if rev else \"(current)\"\n\n@register.filter\ndef can_manage_materials(session,user):\n    return session.can_manage_materials(user)\n\n", "path": "ietf/meeting/templatetags/session_filters.py"}], "after_files": [{"content": "# Copyright The IETF Trust 2023, All Rights Reserved\nfrom django import template\n\nfrom ietf.name.models import SessionStatusName\n\nregister = template.Library()\n\n\n@register.filter\ndef presented_versions(session, doc):\n    sp = session.sessionpresentation_set.filter(document=doc)\n    if not sp:\n        return \"Document not in session\"\n    else:\n        rev = sp.first().rev\n        return rev if rev else \"(current)\"\n\n\n@register.filter\ndef can_manage_materials(session, user):\n    return session.can_manage_materials(user)\n\n\n@register.filter\ndef describe_with_tz(session):\n    # Very similar to session.__str__, but doesn't treat interims differently from sessions at an IETF meeting\n    # and displays the timeslot in the meeting's timezone.\n\n    if session is None:\n        return \"\"\n\n    status_id = None\n    if hasattr(session, \"current_status\"):\n        status_id = session.current_status\n    elif session.pk is not None:\n        latest_event = session.schedulingevent_set.order_by(\"-time\", \"-id\").first()\n        if latest_event:\n            status_id = latest_event.status_id\n\n    if status_id in (\"canceled\", \"disappr\", \"notmeet\", \"deleted\"):\n        ss0name = \"(%s)\" % SessionStatusName.objects.get(slug=status_id).name\n    else:\n        ss0name = \"(unscheduled)\"\n        ss = session.timeslotassignments.filter(\n            schedule__in=[\n                session.meeting.schedule,\n                session.meeting.schedule.base if session.meeting.schedule else None,\n            ]\n        ).order_by(\"timeslot__time\")\n        if ss:\n            ss0name = \",\".join(\n                x.timeslot.time.astimezone(session.meeting.tz()).strftime(\"%a-%H%M\")\n                for x in ss\n            )\n            ss0name += f\" {session.meeting.tz()}\"\n    return f\"{session.meeting}: {session.group.acronym} {session.name} {ss0name}\"\n", "path": "ietf/meeting/templatetags/session_filters.py"}]}