22# -*- coding: utf-8 -*-
33
44
5- import time
65import datetime
7- import shutil
86import os
7+ import pytz
98import re
9+ import shutil
10+ import time
11+
1012from unittest import skipIf
1113
1214import django
1315from django .db .models import F
1416from django .urls import reverse as urlreverse
15- from django .utils import timezone
1617from django .utils .text import slugify
1718#from django.test.utils import override_settings
1819
1920import debug # pyflakes:ignore
2021
22+ from ietf import settings
2123from ietf .doc .factories import DocumentFactory
2224from ietf .doc .models import State
2325from ietf .group import colors
24- from ietf .person .models import Person
25- from ietf .group .models import Group
2626from ietf .group .factories import GroupFactory
27+ from ietf .group .models import Group
2728from ietf .meeting .factories import SessionFactory
28- from ietf .meeting .test_data import make_meeting_test_data , make_interim_meeting
2929from ietf .meeting .models import (Schedule , SchedTimeSessAssignment , Session ,
3030 Room , TimeSlot , Constraint , ConstraintName ,
31- Meeting , SchedulingEvent , SessionStatusName )
31+ Meeting , SchedulingEvent , SessionStatusName ,
32+ Person )
33+ from ietf .meeting .test_data import make_meeting_test_data , make_interim_meeting
3234from ietf .meeting .utils import add_event_info_to_session_qs
3335from ietf .utils .pipe import pipe
3436from ietf .utils .test_runner import IetfLiveServerTestCase
3537from ietf .utils .test_utils import assert_ical_response_is_valid
36- from ietf import settings
38+ from ietf .utils .timezone import datetime_today_start
39+
3740
3841skip_selenium = False
3942skip_message = ""
@@ -102,7 +105,7 @@ def test_edit_meeting_schedule(self):
102105 schedule = Schedule .objects .filter (meeting = meeting , owner__user__username = "plain" ).first ()
103106
104107 room1 = Room .objects .get (name = "Test Room" )
105- slot1 = TimeSlot .objects .filter (meeting = meeting , location = room1 ).order_by ('_time ' ).first ()
108+ slot1 = TimeSlot .objects .filter (meeting = meeting , location = room1 ).order_by ('time ' ).first ()
106109
107110 room2 = Room .objects .create (meeting = meeting , name = "Test Room2" , capacity = 1 )
108111 room2 .session_types .add ('regular' )
@@ -265,14 +268,14 @@ def test_edit_meeting_schedule(self):
265268 # hide timeslots
266269 self .driver .find_element_by_css_selector (".timeslot-group-toggles button" ).click ()
267270 self .assertTrue (self .driver .find_element_by_css_selector ("#timeslot-group-toggles-modal" ).is_displayed ())
268- self .driver .find_element_by_css_selector ("#timeslot-group-toggles-modal [value=\" {}\" ]" .format ("ts-group-{}-{}" .format (slot2 .time .strftime ("%Y%m%d-%H%M" ), int (slot2 .duration .total_seconds () / 60 )))).click ()
271+ self .driver .find_element_by_css_selector ("#timeslot-group-toggles-modal [value=\" {}\" ]" .format ("ts-group-{}-{}" .format (slot2 .local_start_time () .strftime ("%Y%m%d-%H%M" ), int (slot2 .duration .total_seconds () / 60 )))).click ()
269272 self .driver .find_element_by_css_selector ("#timeslot-group-toggles-modal [data-dismiss=\" modal\" ]" ).click ()
270273 self .assertTrue (not self .driver .find_element_by_css_selector ("#timeslot-group-toggles-modal" ).is_displayed ())
271274
272275 # swap days
273- self .driver .find_element_by_css_selector (".day [data-target=\" #swap-days-modal\" ][data-dayid=\" {}\" ]" .format (slot4 .time . date ().isoformat ())).click ()
276+ self .driver .find_element_by_css_selector (".day [data-target=\" #swap-days-modal\" ][data-dayid=\" {}\" ]" .format (slot4 .local_date ().isoformat ())).click ()
274277 self .assertTrue (self .driver .find_element_by_css_selector ("#swap-days-modal" ).is_displayed ())
275- self .driver .find_element_by_css_selector ("#swap-days-modal input[name=\" target_day\" ][value=\" {}\" ]" .format (slot1 .time . date ().isoformat ())).click ()
278+ self .driver .find_element_by_css_selector ("#swap-days-modal input[name=\" target_day\" ][value=\" {}\" ]" .format (slot1 .local_date ().isoformat ())).click ()
276279 self .driver .find_element_by_css_selector ("#swap-days-modal button[type=\" submit\" ]" ).click ()
277280
278281 self .assertTrue (self .driver .find_elements_by_css_selector ('#timeslot{} #session{}' .format (slot4 .pk , s1 .pk )))
@@ -734,13 +737,15 @@ def session_from_agenda_row_id(self, row_id):
734737 # for others (break, reg, other):
735738 # row-<meeting#>-<year>-<month>-<day>-<DoW>-<HHMM>-<group acro>-<session name slug>
736739 meeting_number = components [1 ]
737- start_time = datetime .datetime (
740+ meeting = Meeting .objects .get (number = meeting_number )
741+ tz = pytz .timezone (meeting .time_zone )
742+ start_time = tz .localize (datetime .datetime (
738743 year = int (components [2 ]),
739744 month = int (components [3 ]),
740745 day = int (components [4 ]),
741746 hour = int (components [6 ][0 :2 ]),
742747 minute = int (components [6 ][2 :4 ]),
743- )
748+ ))
744749 # If labeled as plenary, it's plenary...
745750 if components [7 ] == '1plenary' :
746751 session_type = 'plenary'
@@ -756,8 +761,7 @@ def session_from_agenda_row_id(self, row_id):
756761 else :
757762 # Last component was a group, this is a regular session
758763 session_type = 'regular'
759-
760- meeting = Meeting .objects .get (number = meeting_number )
764+
761765 possible_assignments = SchedTimeSessAssignment .objects .filter (
762766 schedule__in = [meeting .schedule , meeting .schedule .base ],
763767 timeslot__time = start_time ,
@@ -916,7 +920,7 @@ def setUp(self):
916920
917921 # Create a group with a plenary interim session for testing type filters
918922 somegroup = GroupFactory (acronym = 'sg' , name = 'Some Group' )
919- sg_interim = make_interim_meeting (somegroup , timezone . now (). date () + datetime .timedelta (days = 20 ))
923+ sg_interim = make_interim_meeting (somegroup , datetime_today_start () + datetime .timedelta (days = 20 ))
920924 sg_sess = sg_interim .session_set .first ()
921925 sg_slot = sg_sess .timeslotassignments .first ().timeslot
922926 sg_sess .type_id = 'plenary'
@@ -946,7 +950,7 @@ def displayed_interims(self, groups=None):
946950 Session .objects .filter (
947951 meeting__type_id = 'interim' ,
948952 timeslotassignments__schedule = F ('meeting__schedule' ),
949- timeslotassignments__timeslot__time__gte = datetime . datetime . today ()
953+ timeslotassignments__timeslot__time__gte = datetime_today_start ()
950954 )
951955 ).filter (current_status__in = ('sched' ,'canceled' ))
952956 meetings = []
@@ -959,7 +963,7 @@ def displayed_interims(self, groups=None):
959963 def all_ietf_meetings (self ):
960964 meetings = Meeting .objects .filter (
961965 type_id = 'ietf' ,
962- date__gte = datetime . datetime . today ()- datetime .timedelta (days = 7 )
966+ date__gte = datetime_today_start ()- datetime .timedelta (days = 7 )
963967 )
964968 for m in meetings :
965969 m .calendar_label = 'IETF %s' % m .number
@@ -1084,7 +1088,7 @@ def assert_upcoming_view_filter_matches_ics_filter(self, filter_string):
10841088 expected_assignments = list (SchedTimeSessAssignment .objects .filter (
10851089 schedule__in = expected_schedules ,
10861090 session__in = expected_interim_sessions ,
1087- timeslot__time__gte = timezone . now (). date (),
1091+ timeslot__time__gte = datetime_today_start (),
10881092 ))
10891093 # The UID formats should match those in the upcoming.ics template
10901094 expected_uids = [
0 commit comments