fix: handle timezones in a bunch of places

This commit is contained in:
Jennifer Richards 2022-09-23 16:11:49 -03:00
parent 2e3686b08e
commit 56505147e0
No known key found for this signature in database
GPG key ID: 26801E4DC0928410
23 changed files with 95 additions and 61 deletions

View file

@ -162,7 +162,7 @@ def get_first_commit(path):
else:
pass
except OSError:
rev, who, when = None, None, datetime.datetime.now()
rev, who, when = None, None, datetime.datetime.now(datetime.timezone.utc)
return { path: { 'rev': rev, 'who': who, 'date': when.strftime('%Y-%m-%d %H:%M:%S'), }, }

View file

@ -26,8 +26,9 @@ from ietf.review.utils import (
send_unavailability_period_ending_reminder, send_reminder_all_open_reviews,
send_review_reminder_overdue_assignment, send_reminder_unconfirmed_assignments)
from ietf.utils.log import log
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
today = datetime.date.today()
today = date_today(DEADLINE_TZINFO)
for assignment in review_assignments_needing_reviewer_reminder(today):
email_reviewer_reminder(assignment)

View file

@ -18,7 +18,7 @@ from ietf.person.models import Person
from ietf.meeting.models import Meeting
from ietf.doc.utils import add_state_change_event, update_action_holders
from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.timezone import datetime_today, DEADLINE_TZINFO
from ietf.utils.timezone import date_today, datetime_today, DEADLINE_TZINFO
nonexpirable_states: Optional[List[State]] = None
@ -173,7 +173,7 @@ def expire_draft(doc):
def clean_up_draft_files():
"""Move unidentified and old files out of the Internet Draft directory."""
cut_off = datetime.date.today()
cut_off = date_today()
pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*")
filename_re = re.compile(r'^(.*)-(\d\d)$')

View file

@ -15,6 +15,7 @@ from ietf.person.fields import SearchablePersonField, SearchablePersonsField
from ietf.person.models import Email, Person
from ietf.name.models import ExtResourceName
from ietf.utils.timezone import date_today
from ietf.utils.validators import validate_external_resource_value
class TelechatForm(forms.Form):
@ -34,7 +35,7 @@ class TelechatForm(forms.Form):
for d in dates:
self.page_count[d] = telechat_page_count(date=d).for_approval
choice_display[d] = '%s (%s pages)' % (d.strftime("%Y-%m-%d"),self.page_count[d])
if d-datetime.date.today() < datetime.timedelta(days=13):
if d - date_today() < datetime.timedelta(days=13):
choice_display[d] += ' : WARNING - this may not leave enough time for directorate reviews!'
self.fields['telechat_date'].choices = [("", "(not on agenda)")] + [(d, choice_display[d]) for d in dates]

View file

@ -10,6 +10,8 @@ from ietf.person.models import Person
from ietf.doc.utils import add_state_change_event, update_action_holders
from ietf.doc.mails import generate_ballot_writeup, generate_approval_mail, generate_last_call_announcement
from ietf.doc.mails import send_last_call_request, email_last_call_expired, email_last_call_expired_with_downref
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
def request_last_call(request, doc):
if not doc.latest_event(type="changed_ballot_writeup_text"):
@ -33,7 +35,7 @@ def request_last_call(request, doc):
e.save()
def get_expired_last_calls():
today = datetime.date.today()
today = date_today(DEADLINE_TZINFO)
for d in Document.objects.filter(Q(states__type="draft-iesg", states__slug="lc")
| Q(states__type="statchg", states__slug="in-lc")):
e = d.latest_event(LastCallDocEvent, type="sent_last_call")

View file

@ -25,6 +25,7 @@ from ietf.doc.utils_bofreq import bofreq_editors, bofreq_responsible
from ietf.group.models import Role
from ietf.doc.models import Document
from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
def email_state_changed(request, doc, text, mailtrigger_id=None):
@ -192,7 +193,7 @@ def generate_ballot_rfceditornote(request, doc):
return e
def generate_last_call_announcement(request, doc):
expiration_date = datetime.date.today() + datetime.timedelta(days=14)
expiration_date = date_today(DEADLINE_TZINFO) + datetime.timedelta(days=14)
if doc.group.type_id in ("individ", "area"):
group = "an individual submitter"
expiration_date += datetime.timedelta(days=14)

View file

@ -36,7 +36,7 @@ from ietf.utils.decorators import memoize
from ietf.utils.validators import validate_no_control_chars
from ietf.utils.mail import formataddr
from ietf.utils.models import ForeignKey
from ietf.utils.timezone import RPC_TZINFO
from ietf.utils.timezone import date_today, RPC_TZINFO
if TYPE_CHECKING:
# importing other than for type checking causes errors due to cyclic imports
from ietf.meeting.models import ProceedingsMaterial, Session
@ -831,16 +831,20 @@ class Document(DocumentInfo):
def telechat_date(self, e=None):
if not e:
e = self.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
return e.telechat_date if e and e.telechat_date and e.telechat_date >= datetime.date.today() else None
return e.telechat_date if e and e.telechat_date and e.telechat_date >= date_today(settings.TIME_ZONE) else None
def past_telechat_date(self):
"Return the latest telechat date if it isn't in the future; else None"
e = self.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
return e.telechat_date if e and e.telechat_date and e.telechat_date < datetime.date.today() else None
return e.telechat_date if e and e.telechat_date and e.telechat_date < date_today(settings.TIME_ZONE) else None
def previous_telechat_date(self):
"Return the most recent telechat date in the past, if any (even if there's another in the future)"
e = self.latest_event(TelechatDocEvent, type="scheduled_for_telechat", telechat_date__lt=timezone.now())
e = self.latest_event(
TelechatDocEvent,
type="scheduled_for_telechat",
telechat_date__lt=date_today(settings.TIME_ZONE),
)
return e.telechat_date if e else None
def request_closed_time(self, review_req):
@ -906,8 +910,14 @@ class Document(DocumentInfo):
def future_presentations(self):
""" returns related SessionPresentation objects for meetings that
have not yet ended. This implementation allows for 2 week meetings """
candidate_presentations = self.sessionpresentation_set.filter(session__meeting__date__gte=datetime.date.today()-datetime.timedelta(days=15))
return sorted([pres for pres in candidate_presentations if pres.session.meeting.end_date()>=datetime.date.today()], key=lambda x:x.session.meeting.date)
candidate_presentations = self.sessionpresentation_set.filter(
session__meeting__date__gte=date_today() - datetime.timedelta(days=15)
)
return sorted(
[pres for pres in candidate_presentations
if pres.session.meeting.end_date() >= date_today()],
key=lambda x:x.session.meeting.date,
)
def last_presented(self):
""" returns related SessionPresentation objects for the most recent meeting in the past"""

View file

@ -38,6 +38,7 @@ import debug # pyflakes:ignore
from django import template
from django.urls import reverse as urlreverse
from django.db.models import Q
from django.utils import timezone
from django.utils.safestring import mark_safe
from ietf.ietfauth.utils import user_is_person, has_role
@ -173,17 +174,17 @@ def state_age_colored(doc):
if iesg_state in ["dead", "watching", "pub", "idexists"]:
return ""
try:
state_date = (
state_datetime = (
doc.docevent_set.filter(
Q(type="started_iesg_process")
| Q(type="changed_state", statedocevent__state_type="draft-iesg")
)
.order_by("-time")[0]
.time.date()
.time
)
except IndexError:
state_date = datetime.date(1990, 1, 1)
days = (datetime.date.today() - state_date).days
state_datetime = datetime.datetime(1990, 1, 1, tzinfo=datetime.timezone.utc)
days = (timezone.now() - state_datetime).days
# loosely based on
# https://trac.ietf.org/trac/iesg/wiki/PublishPath
if iesg_state == "lc":

View file

@ -2226,7 +2226,7 @@ class DocumentMeetingTests(TestCase):
self.other_chair = PersonFactory()
self.other_group.role_set.create(name_id='chair',person=self.other_chair,email=self.other_chair.email())
today = datetime.date.today()
today = datetime_today()
cut_days = settings.MEETING_MATERIALS_DEFAULT_SUBMISSION_CORRECTION_DAYS
self.past_cutoff = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1+cut_days))
self.past = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=cut_days/2))

View file

@ -640,7 +640,7 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
meeting = Meeting.objects.create(number="123",
type=MeetingTypeName.objects.get(slug="ietf"),
date=datetime.date.today())
date=date_today())
second_cut_off = meeting.get_second_cut_off()
ietf_monday = meeting.get_ietf_monday()

View file

@ -324,7 +324,7 @@ class BaseManipulationTests():
def test_issue_ballot(self):
draft = RgDraftFactory()
url = urlreverse('ietf.doc.views_ballot.issue_irsg_ballot',kwargs=dict(name=draft.name))
due = datetime.date.today()+datetime.timedelta(days=14)
due = datetime_today(DEADLINE_TZINFO)+datetime.timedelta(days=14)
empty_outbox()
login_testing_unauthorized(self, self.username , url)
@ -445,7 +445,7 @@ class IRSGMemberTests(TestCase):
def test_cant_issue_irsg_ballot(self):
draft = RgDraftFactory()
due = datetime.date.today()+datetime.timedelta(days=14)
due = datetime_today(DEADLINE_TZINFO) + datetime.timedelta(days=14)
url = urlreverse('ietf.doc.views_ballot.close_irsg_ballot', kwargs=dict(name=draft.name))
self.client.login(username = self.username, password = self.username+'+password')

View file

@ -38,7 +38,7 @@ from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of, get_p
from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects
from ietf.utils.test_utils import TestCase
from ietf.utils.text import strip_prefix, xslugify
from ietf.utils.timezone import DEADLINE_TZINFO
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
from django.utils.html import escape
class ReviewTests(TestCase):
@ -78,7 +78,7 @@ class ReviewTests(TestCase):
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
deadline = datetime.date.today() + datetime.timedelta(days=10)
deadline = date_today() + datetime.timedelta(days=10)
empty_outbox()
@ -268,7 +268,7 @@ class ReviewTests(TestCase):
team=review_req.team,
state_id='assigned',
requested_rev="01",
deadline=datetime.date.today() - datetime.timedelta(days=80),
deadline=date_today() - datetime.timedelta(days=80),
)
ReviewAssignmentFactory(
review_request = req,
@ -526,7 +526,7 @@ class ReviewTests(TestCase):
messages = r.json()["messages"]
self.assertEqual(len(messages), 2)
today = datetime.date.today()
today = date_today()
self.assertEqual(messages[0]["url"], "https://www.example.com/testmessage")
self.assertTrue("John Doe" in messages[0]["content"])

View file

@ -25,6 +25,8 @@ from ietf.utils.mail import parse_preformatted
from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.log import log
from ietf.group.utils import save_group_in_history
from ietf.utils.timezone import date_today
def charter_name_for_group(group):
if group.type_id == "rg":
@ -216,7 +218,7 @@ def default_review_text(group, charter, by):
parent_ads=group.parent.role_set.filter(name='ad'),
techadv=group.role_set.filter(name="techadv"),
milestones=group.groupmilestone_set.filter(state="charter"),
review_date=(datetime.date.today() + datetime.timedelta(weeks=1)).isoformat(),
review_date=(date_today() + datetime.timedelta(weeks=1)).isoformat(),
review_type="new" if group.state_id in ["proposed","bof"] else "recharter",
to=addrs.to,
cc=addrs.cc,

View file

@ -1084,7 +1084,7 @@ def make_last_call(request, name):
return HttpResponseRedirect(doc.get_absolute_url())
else:
initial = {}
initial["last_call_sent_date"] = datetime.date.today()
initial["last_call_sent_date"] = date_today()
if doc.type.slug == 'draft':
# This logic is repeated in the code that edits last call text - why?
expire_days = 14
@ -1095,7 +1095,7 @@ def make_last_call(request, name):
expire_days=28
templ = 'doc/status_change/make_last_call.html'
initial["last_call_expiration_date"] = datetime.date.today() + datetime.timedelta(days=expire_days)
initial["last_call_expiration_date"] = date_today() + datetime.timedelta(days=expire_days)
form = MakeLastCallForm(initial=initial)
@ -1192,7 +1192,10 @@ def irsg_ballot_status(request):
ballot = doc.active_ballot()
if ballot:
doc.ballot = ballot
doc.duedate=datetime.datetime.strftime(ballot.irsgballotdocevent.duedate, '%Y-%m-%d')
doc.duedate=datetime.datetime.strftime(
ballot.irsgballotdocevent.duedate.astimezone(DEADLINE_TZINFO),
'%Y-%m-%d',
)
docs.append(doc)

View file

@ -84,6 +84,7 @@ from ietf.utils import markup_txt, log, markdown
from ietf.utils.draft import PlaintextDraft
from ietf.utils.response import permission_denied
from ietf.utils.text import maybe_split
from ietf.utils.timezone import date_today
def render_document_top(request, doc, tab, name):
@ -185,7 +186,7 @@ def document_main(request, name, rev=None):
telechat = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
if telechat and (not telechat.telechat_date or telechat.telechat_date < datetime.date.today()):
if telechat and (not telechat.telechat_date or telechat.telechat_date < date_today(settings.TIME_ZONE)):
telechat = None
@ -1386,11 +1387,12 @@ def telechat_date(request, name):
warnings = []
if e and e.telechat_date and doc.type.slug != 'charter':
if e.telechat_date==datetime.date.today():
today = date_today(settings.TIME_ZONE)
if e.telechat_date == today:
warnings.append( "This document is currently scheduled for today's telechat. "
+"Please set the returning item bit carefully.")
elif e.telechat_date<datetime.date.today() and has_same_ballot(doc,e.telechat_date):
elif e.telechat_date < today and has_same_ballot(doc,e.telechat_date):
initial_returning_item = True
warnings.append( "This document appears to have been on a previous telechat with the same ballot, "
+"so the returning item bit has been set. Clear it if that is not appropriate.")

View file

@ -54,7 +54,7 @@ from ietf.utils.mail import send_mail_message
from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.fields import MultiEmailField
from ietf.utils.response import permission_denied
from ietf.utils.timezone import DEADLINE_TZINFO
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
def clean_doc_revision(doc, rev):
@ -96,7 +96,7 @@ class RequestReviewForm(forms.ModelForm):
def clean_deadline(self):
v = self.cleaned_data.get('deadline')
if v < datetime.date.today():
if v < date_today(DEADLINE_TZINFO):
raise forms.ValidationError("Select today or a date in the future.")
return v
@ -352,7 +352,7 @@ class RejectReviewerAssignmentForm(forms.Form):
def reject_reviewer_assignment(request, name, assignment_id):
doc = get_object_or_404(Document, name=name)
review_assignment = get_object_or_404(ReviewAssignment, pk=assignment_id, state__in=["assigned", "accepted"])
review_request_past_deadline = review_assignment.review_request.deadline < datetime.date.today()
review_request_past_deadline = review_assignment.review_request.deadline < date_today(DEADLINE_TZINFO)
if not review_assignment.reviewer:
return redirect(review_request, name=review_assignment.review_request.doc.name, request_id=review_assignment.review_request.pk)
@ -727,7 +727,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
type=form.cleaned_data['review_type'],
doc=doc,
team=team,
deadline=datetime.date.today(),
deadline=date_today(DEADLINE_TZINFO),
requested_by=Person.objects.get(user=request.user),
requested_rev=form.cleaned_data['reviewed_rev'],
)
@ -786,7 +786,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
need_to_email_review = review_submission != "link" and assignment.review_request.team.list_email and not revising_review
submitted_on_different_date = completion_datetime.date() != datetime.date.today()
submitted_on_different_date = completion_datetime.date() != date_today(DEADLINE_TZINFO)
desc = "Request for {} review by {} {}: {}. Reviewer: {}.".format(
assignment.review_request.type.name,
assignment.review_request.team.acronym.upper(),
@ -902,8 +902,13 @@ def complete_review(request, name, assignment_id=None, acronym=None):
}
try:
initial['review_content'] = render_to_string('/group/%s/review/content_templates/%s.txt' % (assignment.review_request.team.acronym,
request_type.slug), {'assignment':assignment, 'today':datetime.date.today()})
initial['review_content'] = render_to_string(
f'/group/{assignment.review_request.team.acronym}/review/content_templates/{request_type.slug}.txt',
{
'assignment': assignment,
'today': date_today(settings.TIME_ZONE),
},
)
except (TemplateDoesNotExist, AttributeError):
pass
@ -992,7 +997,7 @@ class EditReviewRequestDeadlineForm(forms.ModelForm):
def clean_deadline(self):
v = self.cleaned_data.get('deadline')
if v < datetime.date.today():
if v < date_today(DEADLINE_TZINFO):
raise forms.ValidationError("Select today or a date in the future.")
return v

View file

@ -19,6 +19,8 @@ from ietf.doc.utils import get_search_cache_key
from ietf.doc.views_search import SearchForm, retrieve_search_results
from ietf.name.models import DocTypeName
from ietf.person.models import Person
from ietf.utils.timezone import date_today
epochday = datetime.datetime.utcfromtimestamp(0).date().toordinal()
@ -47,7 +49,7 @@ def model_to_timeline_data(model, field='time', **kwargs):
# This is needed for sqlite, when we're running tests:
if type(obj_list[0]['date']) != datetime.date:
obj_list = [ {'date': dt(e['date']), 'count': e['count']} for e in obj_list ]
today = datetime.date.today()
today = date_today()
if not obj_list[-1]['date'] == today:
obj_list += [ {'date': today, 'count': 0} ]
data = [ ((e['date'].toordinal()-epochday)*1000*60*60*24, e['count']) for e in obj_list ]

View file

@ -35,6 +35,7 @@ from ietf.name.models import DocRelationshipName, StdLevelName
from ietf.person.models import Person
from ietf.utils.mail import send_mail_preformatted
from ietf.utils.textupload import get_cleaned_text_file_content
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
class ChangeStateForm(forms.Form):
@ -638,7 +639,7 @@ def generate_last_call_text(request, doc):
# and when groups are set, vary the expiration time accordingly
requester = "an individual participant"
expiration_date = datetime.date.today() + datetime.timedelta(days=28)
expiration_date = date_today(DEADLINE_TZINFO) + datetime.timedelta(days=28)
cc = []
new_text = render_to_string("doc/status_change/last_call_announcement.txt",

View file

@ -27,6 +27,7 @@ from ietf.utils import log
from ietf.utils.textupload import get_cleaned_text_file_content
#from ietf.utils.ordereddict import insert_after_in_ordered_dict
from ietf.utils.fields import DatepickerDateField, MultiEmailField
from ietf.utils.timezone import date_today
from ietf.utils.validators import validate_external_resource_value
# --- Constants --------------------------------------------------------
@ -364,7 +365,7 @@ class AddUnavailablePeriodForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddUnavailablePeriodForm, self).__init__(*args, **kwargs)
self.fields["start_date"] = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1" }, label=self.fields["start_date"].label, help_text=self.fields["start_date"].help_text, required=self.fields["start_date"].required, initial=datetime.date.today())
self.fields["start_date"] = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1" }, label=self.fields["start_date"].label, help_text=self.fields["start_date"].help_text, required=self.fields["start_date"].required, initial=date_today())
self.fields["end_date"] = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1" }, label=self.fields["end_date"].label, help_text=self.fields["end_date"].help_text, required=self.fields["end_date"].required)
self.fields['availability'].widget = forms.RadioSelect(choices=UnavailablePeriod.LONG_AVAILABILITY_CHOICES)

View file

@ -42,6 +42,8 @@ from ietf.person.factories import PersonFactory, EmailFactory
from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
def group_urlreverse_list(group, viewname):
return [
@ -269,7 +271,7 @@ class GroupPagesTests(TestCase):
group=group,
state_id="active",
desc="Get Work Done",
due=datetime.date.today() + datetime.timedelta(days=100))
due=date_today(DEADLINE_TZINFO) + datetime.timedelta(days=100))
milestone.docs.add(draft)
for url in [group.about_url(),] + group_urlreverse_list(group, 'ietf.group.views.group_about'):
@ -876,7 +878,7 @@ class GroupEditTests(TestCase):
self.assertEqual(r.status_code, 302)
review_assignment.state_id = 'accepted'
review_assignment.save()
review_req.deadline = datetime.date.today() - datetime.timedelta(days=1)
review_req.deadline = date_today(DEADLINE_TZINFO) - datetime.timedelta(days=1)
review_req.save()
r = self.client.post(url, post_data)
@ -1194,7 +1196,7 @@ class MilestoneTests(TestCase):
m1 = GroupMilestone.objects.create(id=1,
group=group,
desc="Test 1",
due=datetime.date.today(),
due=date_today(DEADLINE_TZINFO),
resolved="",
state_id="active")
m1.docs.set([draft])
@ -1202,7 +1204,7 @@ class MilestoneTests(TestCase):
m2 = GroupMilestone.objects.create(id=2,
group=group,
desc="Test 2",
due=datetime.date.today(),
due=date_today(DEADLINE_TZINFO),
resolved="",
state_id="charter")
m2.docs.set([draft])
@ -1246,7 +1248,7 @@ class MilestoneTests(TestCase):
events_before = group.groupevent_set.count()
doc_pks = pklist(Document.objects.filter(type="draft"))
due = self.last_day_of_month(datetime.date.today() + datetime.timedelta(days=365))
due = self.last_day_of_month(date_today(DEADLINE_TZINFO) + datetime.timedelta(days=365))
# faulty post
r = self.client.post(url, { 'prefix': "m-1",
@ -1302,7 +1304,7 @@ class MilestoneTests(TestCase):
milestones_before = GroupMilestone.objects.filter(group=group).count()
events_before = group.groupevent_set.count()
due = self.last_day_of_month(datetime.date.today() + datetime.timedelta(days=365))
due = self.last_day_of_month(date_today(DEADLINE_TZINFO) + datetime.timedelta(days=365))
# add
mailbox_before = len(outbox)
@ -1393,7 +1395,7 @@ class MilestoneTests(TestCase):
events_before = group.groupevent_set.count()
doc_pks = pklist(Document.objects.filter(type="draft"))
due = self.last_day_of_month(datetime.date.today() + datetime.timedelta(days=365))
due = self.last_day_of_month(date_today(DEADLINE_TZINFO) + datetime.timedelta(days=365))
# faulty post
r = self.client.post(url, { 'prefix': "m1",
@ -1776,7 +1778,7 @@ class MeetingInfoTests(TestCase):
def setUp(self):
super().setUp()
self.group = GroupFactory.create(type_id='wg')
today = datetime.date.today()
today = date_today()
SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=14))
self.inprog = SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=1))
SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today+datetime.timedelta(days=90))
@ -1900,7 +1902,7 @@ class StatusUpdateTests(TestCase):
def test_view_status_update_for_meeting(self):
chair = RoleFactory(name_id='chair',group__type_id='wg')
GroupEventFactory(type='status_update',group=chair.group)
sess = SessionFactory.create(meeting__type_id='ietf',group=chair.group,meeting__date=timezone.now()-datetime.timedelta(days=1))
sess = SessionFactory.create(meeting__type_id='ietf',group=chair.group,meeting__date=date_today()-datetime.timedelta(days=1))
url = urlreverse('ietf.group.views.group_about_status_meeting',kwargs={'acronym':chair.group.acronym,'num':sess.meeting.number})
response = self.client.get(url)
self.assertEqual(response.status_code,200)

View file

@ -7,6 +7,7 @@ import debug # pyflakes:ignore
from pyquery import PyQuery
from django.conf import settings
from django.urls import reverse as urlreverse
from django.utils import timezone
@ -477,7 +478,7 @@ class ReviewTests(TestCase):
review_req1 = ReviewRequestFactory()
review_assignment_completed = ReviewAssignmentFactory(review_request=review_req1,reviewer=EmailFactory(person__user__username='marschairman'), state_id='completed', reviewed_rev=0)
ReviewAssignmentFactory(review_request=review_req1,reviewer=review_assignment_completed.reviewer)
TelechatDocEvent.objects.create(telechat_date=datetime.date.today(), type='scheduled_for_telechat', by=review_assignment_completed.reviewer.person, doc=review_req1.doc, rev=0)
TelechatDocEvent.objects.create(telechat_date=date_today(settings.TIME_ZONE), type='scheduled_for_telechat', by=review_assignment_completed.reviewer.person, doc=review_req1.doc, rev=0)
DBTemplateFactory.create(path='/group/defaults/email/open_assignments.txt',
type_id='django',
@ -598,7 +599,7 @@ class ReviewTests(TestCase):
self.assertEqual(settings.skip_next, 0)
# add unavailable period
start_date = datetime.date.today() + datetime.timedelta(days=10)
start_date = date_today() + datetime.timedelta(days=10)
empty_outbox()
r = self.client.post(url, {
"action": "add_period",

View file

@ -119,7 +119,7 @@ from ietf.settings import MAILING_LIST_INFO_URL
from ietf.utils.response import permission_denied
from ietf.utils.text import strip_suffix
from ietf.utils import markdown
from ietf.utils.timezone import datetime_today, DEADLINE_TZINFO
from ietf.utils.timezone import date_today, datetime_today, DEADLINE_TZINFO
# --- Helpers ----------------------------------------------------------
@ -1389,7 +1389,7 @@ def review_requests(request, acronym, group_type=None):
unassigned_review_requests.sort(key=lambda r: r.doc.name)
open_review_assignments = list(ReviewAssignment.objects.filter(review_request__team=group, state_id__in=('assigned','accepted')).order_by('-assigned_on'))
today = datetime.date.today()
today = date_today(DEADLINE_TZINFO)
unavailable_periods = current_unavailable_periods_for_reviewers(group)
for a in open_review_assignments:
a.reviewer_unavailable = any(p.availability == "unavailable"
@ -1460,7 +1460,7 @@ def reviewer_overview(request, acronym, group_type=None):
unavailable_periods[p.person_id].append(p)
reviewer_roles = { r.person_id: r for r in Role.objects.filter(group=group, name="reviewer").select_related("email") }
today = datetime.date.today()
today = date_today()
max_closed_reqs = settings.GROUP_REVIEW_MAX_ITEMS_TO_SHOW_IN_REVIEWER_LIST
days_back = settings.GROUP_REVIEW_DAYS_TO_SHOW_IN_REVIEWER_LIST
@ -1838,7 +1838,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
period.save()
update_change_reason(period, "Added unavailability period: {}".format(period))
today = datetime.date.today()
today = date_today()
in_the_past = period.end_date and period.end_date < today
@ -1879,7 +1879,7 @@ def change_reviewer_settings(request, acronym, reviewer_email, group_type=None):
period.delete()
update_change_reason(period, "Removed unavailability period: {}".format(period))
today = datetime.date.today()
today = date_today()
in_the_past = period.end_date and period.end_date < today

View file

@ -7,7 +7,6 @@
import datetime
import os
import pytz
from django.conf import settings
from django.template.loader import render_to_string
@ -297,6 +296,6 @@ def id_index_txt(with_abstracts=False):
return render_to_string("idindex/id_index.txt", {
'groups': groups,
'time': timezone.now().astimezone(pytz.utc).strftime("%Y-%m-%d %H:%M:%S %Z"),
'time': timezone.now().astimezone(datetime.timezone.utc).strftime("%Y-%m-%d %H:%M:%S %Z"),
'with_abstracts': with_abstracts,
})