fix: timezone fixes from last few comparisons with tzaware-obe

This commit is contained in:
Jennifer Richards 2022-09-28 13:21:50 -03:00
parent 448cfbb13d
commit a653582cf7
No known key found for this signature in database
GPG key ID: 26801E4DC0928410
25 changed files with 107 additions and 89 deletions

View file

@ -2,13 +2,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime
import syslog import syslog
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from ietf.nomcom.models import NomCom, NomineePosition from ietf.nomcom.models import NomCom, NomineePosition
from ietf.nomcom.utils import send_accept_reminder_to_nominee,send_questionnaire_reminder_to_nominee from ietf.nomcom.utils import send_accept_reminder_to_nominee,send_questionnaire_reminder_to_nominee
from ietf.utils.timezone import date_today
def log(message): def log(message):
syslog.syslog(message) syslog.syslog(message)
@ -27,10 +28,10 @@ class Command(BaseCommand):
for nomcom in NomCom.objects.filter(group__state__slug='active'): for nomcom in NomCom.objects.filter(group__state__slug='active'):
nps = NomineePosition.objects.filter(nominee__nomcom=nomcom,nominee__duplicated__isnull=True) nps = NomineePosition.objects.filter(nominee__nomcom=nomcom,nominee__duplicated__isnull=True)
for nominee_position in nps.pending(): for nominee_position in nps.pending():
if is_time_to_send(nomcom, datetime.date.today(), nominee_position.time.date()): if is_time_to_send(nomcom, date_today(), nominee_position.time.date()):
send_accept_reminder_to_nominee(nominee_position) send_accept_reminder_to_nominee(nominee_position)
log('Sent accept reminder to %s' % nominee_position.nominee.email.address) log('Sent accept reminder to %s' % nominee_position.nominee.email.address)
for nominee_position in nps.accepted().without_questionnaire_response(): for nominee_position in nps.accepted().without_questionnaire_response():
if is_time_to_send(nomcom, datetime.date.today(), nominee_position.time.date()): if is_time_to_send(nomcom, date_today(), nominee_position.time.date()):
send_questionnaire_reminder_to_nominee(nominee_position) send_questionnaire_reminder_to_nominee(nominee_position)
log('Sent questionnaire reminder to %s' % nominee_position.nominee.email.address) log('Sent questionnaire reminder to %s' % nominee_position.nominee.email.address)

View file

@ -50,7 +50,7 @@ from ietf.stats.models import MeetingRegistration
from ietf.stats.factories import MeetingRegistrationFactory from ietf.stats.factories import MeetingRegistrationFactory
from ietf.utils.mail import outbox, empty_outbox, get_payload_text from ietf.utils.mail import outbox, empty_outbox, get_payload_text
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent
from ietf.utils.timezone import datetime_today, datetime_from_date, DEADLINE_TZINFO from ietf.utils.timezone import date_today, datetime_today, datetime_from_date, DEADLINE_TZINFO
client_test_cert_files = None client_test_cert_files = None
@ -1130,7 +1130,7 @@ class ReminderTest(TestCase):
def test_is_time_to_send(self): def test_is_time_to_send(self):
self.nomcom.reminder_interval = 4 self.nomcom.reminder_interval = 4
today = datetime.date.today() today = date_today()
self.assertTrue(is_time_to_send(self.nomcom,today+datetime.timedelta(days=4),today)) self.assertTrue(is_time_to_send(self.nomcom,today+datetime.timedelta(days=4),today))
for delta in range(4): for delta in range(4):
self.assertFalse(is_time_to_send(self.nomcom,today+datetime.timedelta(days=delta),today)) self.assertFalse(is_time_to_send(self.nomcom,today+datetime.timedelta(days=delta),today))
@ -1236,7 +1236,7 @@ class InactiveNomcomTests(TestCase):
self.assertIn( 'closed', q('.alert-warning').text()) self.assertIn( 'closed', q('.alert-warning').text())
def test_acceptance_closed(self): def test_acceptance_closed(self):
today = datetime.date.today().strftime('%Y%m%d') today = date_today().strftime('%Y%m%d')
pid = self.nc.position_set.first().nomineeposition_set.order_by('pk').first().id pid = self.nc.position_set.first().nomineeposition_set.order_by('pk').first().id
url = reverse('ietf.nomcom.views.process_nomination_status', kwargs = { url = reverse('ietf.nomcom.views.process_nomination_status', kwargs = {
'year' : self.nc.year(), 'year' : self.nc.year(),
@ -1892,7 +1892,7 @@ Junk body for testing
assert year >= 1990 assert year >= 1990
return (year-1985)*3+2 return (year-1985)*3+2
# Create meetings to ensure we have the 'last 5' # Create meetings to ensure we have the 'last 5'
meeting_start = first_meeting_of_year(datetime.date.today().year-2) meeting_start = first_meeting_of_year(date_today().year-2)
# Populate the meeting registration records # Populate the meeting registration records
for number in range(meeting_start, meeting_start+10): for number in range(meeting_start, meeting_start+10):
meeting = MeetingFactory.create(type_id='ietf', number=number) meeting = MeetingFactory.create(type_id='ietf', number=number)

View file

@ -33,7 +33,7 @@ from ietf.utils.pipe import pipe
from ietf.utils.mail import send_mail_text, send_mail, get_payload_text from ietf.utils.mail import send_mail_text, send_mail, get_payload_text
from ietf.utils.log import log from ietf.utils.log import log
from ietf.person.name import unidecode_name from ietf.person.name import unidecode_name
from ietf.utils.timezone import datetime_from_date, datetime_today, DEADLINE_TZINFO from ietf.utils.timezone import date_today, datetime_from_date, datetime_today, DEADLINE_TZINFO
import debug # pyflakes:ignore import debug # pyflakes:ignore
@ -240,7 +240,7 @@ def validate_public_key(public_key):
def send_accept_reminder_to_nominee(nominee_position): def send_accept_reminder_to_nominee(nominee_position):
today = datetime.date.today().strftime('%Y%m%d') today = date_today().strftime('%Y%m%d')
subject = 'Reminder: please accept (or decline) your nomination.' subject = 'Reminder: please accept (or decline) your nomination.'
domain = Site.objects.get_current().domain domain = Site.objects.get_current().domain
position = nominee_position.position position = nominee_position.position
@ -332,7 +332,7 @@ def make_nomineeposition(nomcom, candidate, position, author):
from_email = settings.NOMCOM_FROM_EMAIL.format(year=nomcom.year()) from_email = settings.NOMCOM_FROM_EMAIL.format(year=nomcom.year())
(to_email, cc) = gather_address_lists('nomination_new_nominee',nominee=nominee.email.address) (to_email, cc) = gather_address_lists('nomination_new_nominee',nominee=nominee.email.address)
domain = Site.objects.get_current().domain domain = Site.objects.get_current().domain
today = datetime.date.today().strftime('%Y%m%d') today = date_today().strftime('%Y%m%d')
hash = get_hash_nominee_position(today, nominee_position.id) hash = get_hash_nominee_position(today, nominee_position.id)
accept_url = reverse('ietf.nomcom.views.process_nomination_status', accept_url = reverse('ietf.nomcom.views.process_nomination_status',
None, None,

View file

@ -45,6 +45,8 @@ from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key, sug
from ietf.ietfauth.utils import role_required from ietf.ietfauth.utils import role_required
from ietf.person.models import Person from ietf.person.models import Person
from ietf.utils.response import permission_denied from ietf.utils.response import permission_denied
from ietf.utils.timezone import date_today
import debug # pyflakes:ignore import debug # pyflakes:ignore
@ -702,7 +704,7 @@ def process_nomination_status(request, year, nominee_position_id, state, date, h
expiration_days = getattr(settings, 'DAYS_TO_EXPIRE_NOMINATION_LINK', None) expiration_days = getattr(settings, 'DAYS_TO_EXPIRE_NOMINATION_LINK', None)
if expiration_days: if expiration_days:
request_date = datetime.date(int(date[:4]), int(date[4:6]), int(date[6:])) request_date = datetime.date(int(date[:4]), int(date[4:6]), int(date[6:]))
if datetime.date.today() > (request_date + datetime.timedelta(days=settings.DAYS_TO_EXPIRE_NOMINATION_LINK)): if date_today() > (request_date + datetime.timedelta(days=expiration_days)):
permission_denied(request, "Link expired.") permission_denied(request, "Link expired.")
need_confirmation = True need_confirmation = True

View file

@ -8,6 +8,7 @@ import debug # pyflakes:ignore
from ietf.nomcom.utils import is_eligible from ietf.nomcom.utils import is_eligible
from ietf.person.models import Alias from ietf.person.models import Alias
from ietf.utils.timezone import date_today
register = template.Library() register = template.Library()
@ -15,7 +16,7 @@ register = template.Library()
@register.filter @register.filter
def is_nomcom_eligible(person, date=None): def is_nomcom_eligible(person, date=None):
if date is None: if date is None:
date = datetime.date.today() date = date_today()
return is_eligible(person=person, date=date) return is_eligible(person=person, date=date)

View file

@ -10,6 +10,7 @@ from django.contrib import messages
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from django.shortcuts import render, get_object_or_404, redirect from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
import debug # pyflakes:ignore import debug # pyflakes:ignore
@ -76,7 +77,7 @@ def profile(request, email_or_name):
persons = [ p for p in persons if p and p.id ] persons = [ p for p in persons if p and p.id ]
if not persons: if not persons:
raise Http404 raise Http404
return render(request, 'person/profile.html', {'persons': persons, 'today':datetime.date.today()}) return render(request, 'person/profile.html', {'persons': persons, 'today': timezone.now()})
def photo(request, email_or_name): def photo(request, email_or_name):

View file

@ -25,6 +25,8 @@ from django.conf import settings
from django.utils.encoding import force_bytes, force_str from django.utils.encoding import force_bytes, force_str
from ietf.utils.mail import get_payload_text from ietf.utils.mail import get_payload_text
from ietf.utils.timezone import date_today
def list_name_from_email(list_email): def list_name_from_email(list_email):
if not list_email.endswith("@ietf.org"): if not list_email.endswith("@ietf.org"):
@ -51,7 +53,7 @@ def construct_query_urls(doc, team, query=None):
encoded_query = "?" + urlencode({ encoded_query = "?" + urlencode({
"qdr": "c", # custom time frame "qdr": "c", # custom time frame
"start_date": (datetime.date.today() - datetime.timedelta(days=180)).isoformat(), "start_date": (date_today() - datetime.timedelta(days=180)).isoformat(),
"email_list": list_name, "email_list": list_name,
"q": "subject:({})".format(query), "q": "subject:({})".format(query),
"as": "1", # this is an advanced search "as": "1", # this is an advanced search

View file

@ -2,8 +2,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime
from simple_history.models import HistoricalRecords from simple_history.models import HistoricalRecords
from django.db import models from django.db import models
@ -18,6 +16,8 @@ from ietf.name.models import ReviewTypeName, ReviewRequestStateName, ReviewResul
ReviewAssignmentStateName, ReviewerQueuePolicyName ReviewAssignmentStateName, ReviewerQueuePolicyName
from ietf.utils.validators import validate_regular_expression_string from ietf.utils.validators import validate_regular_expression_string
from ietf.utils.models import ForeignKey, OneToOneField from ietf.utils.models import ForeignKey, OneToOneField
from ietf.utils.timezone import date_today
class ReviewerSettings(models.Model): class ReviewerSettings(models.Model):
"""Keeps track of admin data associated with a reviewer in a team.""" """Keeps track of admin data associated with a reviewer in a team."""
@ -67,7 +67,7 @@ class UnavailablePeriod(models.Model):
history = HistoricalRecords(history_change_reason_field=models.TextField(null=True)) history = HistoricalRecords(history_change_reason_field=models.TextField(null=True))
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None)) team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
person = ForeignKey(Person) person = ForeignKey(Person)
start_date = models.DateField(default=datetime.date.today, null=True, help_text="Choose the start date so that you can still do a review if it's assigned just before the start date - this usually means you should mark yourself unavailable for assignment some time before you are actually away. The default is today.") start_date = models.DateField(default=date_today, null=True, help_text="Choose the start date so that you can still do a review if it's assigned just before the start date - this usually means you should mark yourself unavailable for assignment some time before you are actually away. The default is today.")
end_date = models.DateField(blank=True, null=True, help_text="Leaving the end date blank means that the period continues indefinitely. You can end it later.") end_date = models.DateField(blank=True, null=True, help_text="Leaving the end date blank means that the period continues indefinitely. You can end it later.")
AVAILABILITY_CHOICES = [ AVAILABILITY_CHOICES = [
("canfinish", "Can do follow-ups"), ("canfinish", "Can do follow-ups"),
@ -81,8 +81,7 @@ class UnavailablePeriod(models.Model):
reason = models.TextField(verbose_name="Reason why reviewer is unavailable (Optional)", max_length=2048, blank=True, help_text="Provide (for the secretary's benefit) the reason why the review is unavailable", default='') reason = models.TextField(verbose_name="Reason why reviewer is unavailable (Optional)", max_length=2048, blank=True, help_text="Provide (for the secretary's benefit) the reason why the review is unavailable", default='')
def state(self): def state(self):
import datetime today = date_today()
today = datetime.date.today()
if self.start_date is None or self.start_date <= today: if self.start_date is None or self.start_date <= today:
if not self.end_date or today <= self.end_date: if not self.end_date or today <= self.end_date:
return "active" return "active"

View file

@ -32,7 +32,7 @@ from ietf.review.models import (ReviewRequest, ReviewAssignment, ReviewRequestSt
from ietf.utils.mail import send_mail from ietf.utils.mail import send_mail
from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs
from ietf.utils import log from ietf.utils import log
from ietf.utils.timezone import datetime_today, DEADLINE_TZINFO from ietf.utils.timezone import date_today, datetime_today, DEADLINE_TZINFO
# The origin date is used to have a single reference date for "every X days". # The origin date is used to have a single reference date for "every X days".
@ -93,12 +93,12 @@ def no_review_from_teams_on_doc(doc, rev):
def unavailable_periods_to_list(past_days=14): def unavailable_periods_to_list(past_days=14):
return UnavailablePeriod.objects.filter( return UnavailablePeriod.objects.filter(
Q(end_date=None) | Q(end_date__gte=datetime.date.today() - datetime.timedelta(days=past_days)), Q(end_date=None) | Q(end_date__gte=date_today() - datetime.timedelta(days=past_days)),
).order_by("start_date") ).order_by("start_date")
def current_unavailable_periods_for_reviewers(team): def current_unavailable_periods_for_reviewers(team):
"""Return dict with currently active unavailable periods for reviewers.""" """Return dict with currently active unavailable periods for reviewers."""
today = datetime.date.today() today = date_today()
unavailable_period_qs = UnavailablePeriod.objects.filter( unavailable_period_qs = UnavailablePeriod.objects.filter(
Q(end_date__gte=today) | Q(end_date=None), Q(end_date__gte=today) | Q(end_date=None),
@ -877,7 +877,7 @@ def email_reviewer_reminder(assignment):
review_request = assignment.review_request review_request = assignment.review_request
team = review_request.team team = review_request.team
deadline_days = (review_request.deadline - datetime.date.today()).days deadline_days = (review_request.deadline - date_today(DEADLINE_TZINFO)).days
subject = "Reminder: deadline for review of {} in {} is {}".format(review_request.doc.name, team.acronym, review_request.deadline.isoformat()) subject = "Reminder: deadline for review of {} in {} is {}".format(review_request.doc.name, team.acronym, review_request.deadline.isoformat())
@ -943,7 +943,7 @@ def email_secretary_reminder(assignment, secretary_role):
review_request = assignment.review_request review_request = assignment.review_request
team = review_request.team team = review_request.team
deadline_days = (review_request.deadline - datetime.date.today()).days deadline_days = (review_request.deadline - date_today(DEADLINE_TZINFO)).days
subject = "Reminder: deadline for review of {} in {} is {}".format(review_request.doc.name, team.acronym, review_request.deadline.isoformat()) subject = "Reminder: deadline for review of {} in {} is {}".format(review_request.doc.name, team.acronym, review_request.deadline.isoformat())

View file

@ -31,7 +31,7 @@ from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm,
from ietf.secr.sreq.views import get_initial_session from ietf.secr.sreq.views import get_initial_session
from ietf.secr.utils.meeting import get_session, get_timeslot from ietf.secr.utils.meeting import get_session, get_timeslot
from ietf.mailtrigger.utils import gather_address_lists from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.timezone import make_aware from ietf.utils.timezone import date_today, make_aware
# prep for agenda changes # prep for agenda changes
@ -314,7 +314,7 @@ def blue_sheet_redirect(request):
This is the generic blue sheet URL. It gets the next IETF meeting and redirects This is the generic blue sheet URL. It gets the next IETF meeting and redirects
to the meeting specific URL. to the meeting specific URL.
''' '''
today = datetime.date.today() today = date_today()
qs = Meeting.objects.filter(date__gt=today,type='ietf').order_by('date') qs = Meeting.objects.filter(date__gt=today,type='ietf').order_by('date')
if qs: if qs:
meeting = qs[0] meeting = qs[0]

View file

@ -27,6 +27,7 @@ from ietf.meeting.utils import add_event_info_to_session_qs
from ietf.secr.proceedings.forms import RecordingForm, RecordingEditForm from ietf.secr.proceedings.forms import RecordingForm, RecordingEditForm
from ietf.secr.proceedings.proc_utils import (create_recording) from ietf.secr.proceedings.proc_utils import (create_recording)
from ietf.utils.timezone import date_today
# ------------------------------------------------- # -------------------------------------------------
# Globals # Globals
@ -154,7 +155,7 @@ def main(request):
meetings = Meeting.objects.filter(type='ietf').order_by('-number') meetings = Meeting.objects.filter(type='ietf').order_by('-number')
else: else:
# select meetings still within the cutoff period # select meetings still within the cutoff period
today = datetime.date.today() today = date_today()
meetings = [m for m in Meeting.objects.filter(type='ietf').order_by('-number') if m.get_submission_correction_date()>=today] meetings = [m for m in Meeting.objects.filter(type='ietf').order_by('-number') if m.get_submission_correction_date()>=today]
groups = get_my_groups(request.user) groups = get_my_groups(request.user)
@ -165,7 +166,7 @@ def main(request):
m.group = m.session_set.first().group m.group = m.session_set.first().group
# we today's date to see if we're past the submissio cutoff # we today's date to see if we're past the submissio cutoff
today = datetime.date.today() today = date_today()
return render(request, 'proceedings/main.html',{ return render(request, 'proceedings/main.html',{
'meetings': meetings, 'meetings': meetings,

View file

@ -16,6 +16,8 @@ from ietf.name.models import ConstraintName, TimerangeName
from ietf.person.models import Person from ietf.person.models import Person
from ietf.secr.sreq.forms import SessionForm from ietf.secr.sreq.forms import SessionForm
from ietf.utils.mail import outbox, empty_outbox, get_payload_text from ietf.utils.mail import outbox, empty_outbox, get_payload_text
from ietf.utils.timezone import date_today
from pyquery import PyQuery from pyquery import PyQuery
@ -23,7 +25,7 @@ SECR_USER='secretary'
class SreqUrlTests(TestCase): class SreqUrlTests(TestCase):
def test_urls(self): def test_urls(self):
MeetingFactory(type_id='ietf',date=datetime.date.today()) MeetingFactory(type_id='ietf',date=date_today())
self.client.login(username="secretary", password="secretary+password") self.client.login(username="secretary", password="secretary+password")
@ -39,7 +41,7 @@ class SreqUrlTests(TestCase):
class SessionRequestTestCase(TestCase): class SessionRequestTestCase(TestCase):
def test_main(self): def test_main(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
SessionFactory.create_batch(2, meeting=meeting, status_id='sched') SessionFactory.create_batch(2, meeting=meeting, status_id='sched')
SessionFactory.create_batch(2, meeting=meeting, status_id='disappr') SessionFactory.create_batch(2, meeting=meeting, status_id='disappr')
# An additional unscheduled group comes from make_immutable_base_data # An additional unscheduled group comes from make_immutable_base_data
@ -53,7 +55,7 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(len(unsched), 11) self.assertEqual(len(unsched), 11)
def test_approve(self): def test_approve(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
mars = GroupFactory(parent=area, acronym='mars') mars = GroupFactory(parent=area, acronym='mars')
@ -66,7 +68,7 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(SchedulingEvent.objects.filter(session=session).order_by('-id')[0].status_id, 'appr') self.assertEqual(SchedulingEvent.objects.filter(session=session).order_by('-id')[0].status_id, 'appr')
def test_cancel(self): def test_cancel(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
session = SessionFactory(meeting=meeting, group__parent=area, group__acronym='mars', status_id='sched') session = SessionFactory(meeting=meeting, group__parent=area, group__acronym='mars', status_id='sched')
@ -77,7 +79,7 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(SchedulingEvent.objects.filter(session=session).order_by('-id')[0].status_id, 'deleted') self.assertEqual(SchedulingEvent.objects.filter(session=session).order_by('-id')[0].status_id, 'deleted')
def test_edit(self): def test_edit(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
mars = RoleFactory(name_id='chair', person__user__username='marschairman', group__acronym='mars').group mars = RoleFactory(name_id='chair', person__user__username='marschairman', group__acronym='mars').group
group2 = GroupFactory() group2 = GroupFactory()
group3 = GroupFactory() group3 = GroupFactory()
@ -367,7 +369,7 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(len(mars.constraint_source_set.filter(name_id='conflict')), 0) self.assertEqual(len(mars.constraint_source_set.filter(name_id='conflict')), 0)
def test_tool_status(self): def test_tool_status(self):
MeetingFactory(type_id='ietf', date=datetime.date.today()) MeetingFactory(type_id='ietf', date=date_today())
url = reverse('ietf.secr.sreq.views.tool_status') url = reverse('ietf.secr.sreq.views.tool_status')
self.client.login(username="secretary", password="secretary+password") self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url) r = self.client.get(url)
@ -438,7 +440,7 @@ class SubmitRequestCase(TestCase):
MeetingFactory.reset_sequence(0) MeetingFactory.reset_sequence(0)
def test_submit_request(self): def test_submit_request(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
group = GroupFactory(parent=area) group = GroupFactory(parent=area)
@ -506,7 +508,7 @@ class SubmitRequestCase(TestCase):
self.assertEqual(list(session.joint_with_groups.all()), [group3, group4]) self.assertEqual(list(session.joint_with_groups.all()), [group3, group4])
def test_submit_request_invalid(self): def test_submit_request_invalid(self):
MeetingFactory(type_id='ietf', date=datetime.date.today()) MeetingFactory(type_id='ietf', date=date_today())
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
group = GroupFactory(parent=area) group = GroupFactory(parent=area)
@ -542,8 +544,8 @@ class SubmitRequestCase(TestCase):
self.assertContains(r, 'Must provide data for all sessions') self.assertContains(r, 'Must provide data for all sessions')
def test_submit_request_check_constraints(self): def test_submit_request_check_constraints(self):
m1 = MeetingFactory(type_id='ietf', date=datetime.date.today() - datetime.timedelta(days=100)) m1 = MeetingFactory(type_id='ietf', date=date_today() - datetime.timedelta(days=100))
MeetingFactory(type_id='ietf', date=datetime.date.today(), MeetingFactory(type_id='ietf', date=date_today(),
group_conflicts=['chair_conflict', 'conflic2', 'conflic3']) group_conflicts=['chair_conflict', 'conflic2', 'conflic3'])
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
@ -604,7 +606,7 @@ class SubmitRequestCase(TestCase):
self.assertContains(r, "Cannot declare a conflict with the same group") self.assertContains(r, "Cannot declare a conflict with the same group")
def test_request_notification(self): def test_request_notification(self):
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today()) meeting = MeetingFactory(type_id='ietf', date=date_today())
ad = Person.objects.get(user__username='ad') ad = Person.objects.get(user__username='ad')
area = GroupFactory(type_id='area') area = GroupFactory(type_id='area')
RoleFactory(name_id='ad', person=ad, group=area) RoleFactory(name_id='ad', person=ad, group=area)
@ -807,7 +809,7 @@ class SubmitRequestCase(TestCase):
class LockAppTestCase(TestCase): class LockAppTestCase(TestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(),session_request_lock_message='locked') self.meeting = MeetingFactory(type_id='ietf', date=date_today(),session_request_lock_message='locked')
self.group = GroupFactory(acronym='mars') self.group = GroupFactory(acronym='mars')
RoleFactory(name_id='chair', group=self.group, person__user__username='marschairman') RoleFactory(name_id='chair', group=self.group, person__user__username='marschairman')
SessionFactory(group=self.group,meeting=self.meeting) SessionFactory(group=self.group,meeting=self.meeting)
@ -853,7 +855,7 @@ class LockAppTestCase(TestCase):
class NotMeetingCase(TestCase): class NotMeetingCase(TestCase):
def test_not_meeting(self): def test_not_meeting(self):
MeetingFactory(type_id='ietf',date=datetime.date.today()) MeetingFactory(type_id='ietf',date=date_today())
group = GroupFactory(acronym='mars') group = GroupFactory(acronym='mars')
url = reverse('ietf.secr.sreq.views.no_session',kwargs={'acronym':group.acronym}) url = reverse('ietf.secr.sreq.views.no_session',kwargs={'acronym':group.acronym})
self.client.login(username="secretary", password="secretary+password") self.client.login(username="secretary", password="secretary+password")

View file

@ -8,14 +8,13 @@ from pyquery import PyQuery
import debug # pyflakes:ignore import debug # pyflakes:ignore
from django.urls import reverse from django.urls import reverse
from django.utils import timezone
from ietf.doc.factories import (WgDraftFactory, IndividualRfcFactory, CharterFactory, from ietf.doc.factories import (WgDraftFactory, IndividualRfcFactory, CharterFactory,
IndividualDraftFactory, ConflictReviewFactory) IndividualDraftFactory, ConflictReviewFactory)
from ietf.doc.models import BallotDocEvent, BallotType, BallotPositionDocEvent, State, Document from ietf.doc.models import BallotDocEvent, BallotType, BallotPositionDocEvent, State, Document
from ietf.doc.utils import update_telechat, create_ballot_if_not_open from ietf.doc.utils import update_telechat, create_ballot_if_not_open
from ietf.utils.test_utils import TestCase from ietf.utils.test_utils import TestCase
from ietf.utils.timezone import datetime_today from ietf.utils.timezone import date_today, datetime_today
from ietf.iesg.models import TelechatDate from ietf.iesg.models import TelechatDate
from ietf.person.models import Person from ietf.person.models import Person
from ietf.person.factories import PersonFactory from ietf.person.factories import PersonFactory
@ -24,7 +23,7 @@ from ietf.secr.telechat.views import get_next_telechat_date
SECR_USER='secretary' SECR_USER='secretary'
def augment_data(): def augment_data():
TelechatDate.objects.create(date=timezone.now()) TelechatDate.objects.create(date=date_today())
class SecrTelechatTestCase(TestCase): class SecrTelechatTestCase(TestCase):
def test_main(self): def test_main(self):
@ -140,7 +139,7 @@ class SecrTelechatTestCase(TestCase):
self.assertEqual(q("#telechat-positions-table").find("th:contains('No Record')").length,1) self.assertEqual(q("#telechat-positions-table").find("th:contains('No Record')").length,1)
def test_bash(self): def test_bash(self):
today = timezone.now() today = date_today()
TelechatDate.objects.create(date=today) TelechatDate.objects.create(date=today)
url = reverse('ietf.secr.telechat.views.bash',kwargs={'date':today.strftime('%Y-%m-%d')}) url = reverse('ietf.secr.telechat.views.bash',kwargs={'date':today.strftime('%Y-%m-%d')})
self.client.login(username="secretary", password="secretary+password") self.client.login(username="secretary", password="secretary+password")

View file

@ -20,6 +20,8 @@ from ietf.iesg.models import TelechatDate, TelechatAgendaItem, Telechat
from ietf.iesg.agenda import agenda_data, get_doc_section from ietf.iesg.agenda import agenda_data, get_doc_section
from ietf.ietfauth.utils import role_required from ietf.ietfauth.utils import role_required
from ietf.secr.telechat.forms import BallotForm, ChangeStateForm, DateSelectForm, TELECHAT_TAGS from ietf.secr.telechat.forms import BallotForm, ChangeStateForm, DateSelectForm, TELECHAT_TAGS
from ietf.utils.timezone import date_today
''' '''
EXPECTED CHANGES: EXPECTED CHANGES:
@ -80,14 +82,14 @@ def get_last_telechat_date():
This function returns the date of the last telechat This function returns the date of the last telechat
Tried TelechatDocEvent.objects.latest but that will return today's telechat Tried TelechatDocEvent.objects.latest but that will return today's telechat
''' '''
return TelechatDate.objects.filter(date__lt=datetime.date.today()).order_by('-date')[0].date return TelechatDate.objects.filter(date__lt=date_today()).order_by('-date')[0].date
#return '2011-11-01' # uncomment for testing #return '2011-11-01' # uncomment for testing
def get_next_telechat_date(): def get_next_telechat_date():
''' '''
This function returns the date of the next telechat This function returns the date of the next telechat
''' '''
return TelechatDate.objects.filter(date__gte=datetime.date.today()).order_by('date')[0].date return TelechatDate.objects.filter(date__gte=date_today()).order_by('date')[0].date
def get_section_header(doc, agenda): def get_section_header(doc, agenda):
''' '''

View file

@ -29,6 +29,7 @@ from ietf.name.models import FormalLanguageName, DocRelationshipName, CountryNam
from ietf.review.factories import ReviewRequestFactory, ReviewerSettingsFactory, ReviewAssignmentFactory from ietf.review.factories import ReviewRequestFactory, ReviewerSettingsFactory, ReviewAssignmentFactory
from ietf.stats.models import MeetingRegistration, CountryAlias from ietf.stats.models import MeetingRegistration, CountryAlias
from ietf.stats.utils import get_meeting_registration_data from ietf.stats.utils import get_meeting_registration_data
from ietf.utils.timezone import date_today
class StatisticsTests(TestCase): class StatisticsTests(TestCase):
@ -122,7 +123,7 @@ class StatisticsTests(TestCase):
def test_meeting_stats(self): def test_meeting_stats(self):
# create some data for the statistics # create some data for the statistics
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(), number="96") meeting = MeetingFactory(type_id='ietf', date=date_today(), number="96")
MeetingRegistration.objects.create(first_name='John', last_name='Smith', country_code='US', email="john.smith@example.us", meeting=meeting, attended=True) MeetingRegistration.objects.create(first_name='John', last_name='Smith', country_code='US', email="john.smith@example.us", meeting=meeting, attended=True)
CountryAlias.objects.get_or_create(alias="US", country=CountryName.objects.get(slug="US")) CountryAlias.objects.get_or_create(alias="US", country=CountryName.objects.get(slug="US"))
MeetingRegistration.objects.create(first_name='Jaume', last_name='Guillaume', country_code='FR', email="jaume.guillaume@example.fr", meeting=meeting, attended=True) MeetingRegistration.objects.create(first_name='Jaume', last_name='Guillaume', country_code='FR', email="jaume.guillaume@example.fr", meeting=meeting, attended=True)
@ -198,7 +199,7 @@ class StatisticsTests(TestCase):
self.assertTrue(q('.review-stats td:contains("1")')) self.assertTrue(q('.review-stats td:contains("1")'))
# check stacked chart # check stacked chart
expected_date = datetime.date.today().replace(day=1) expected_date = date_today().replace(day=1)
expected_js_timestamp = calendar.timegm(expected_date.timetuple()) * 1000 expected_js_timestamp = calendar.timegm(expected_date.timetuple()) * 1000
url = urlreverse(ietf.stats.views.review_stats, kwargs={ "stats_type": "time" }) url = urlreverse(ietf.stats.views.review_stats, kwargs={ "stats_type": "time" })
url += "?team={}".format(review_req.team.acronym) url += "?team={}".format(review_req.team.acronym)

View file

@ -641,7 +641,7 @@ def document_stats(request, stats_type=None):
template_name = "yearly" template_name = "yearly"
years_from = from_time.year if from_time else 1 years_from = from_time.year if from_time else 1
years_to = datetime.date.today().year - 1 years_to = timezone.now().year - 1
if stats_type == "yearly/affiliation": if stats_type == "yearly/affiliation":
@ -904,7 +904,7 @@ def meeting_stats(request, num=None, stats_type=None):
continents = {} continents = {}
meetings = Meeting.objects.filter(type='ietf', date__lte=datetime.date.today()).order_by('number') meetings = Meeting.objects.filter(type='ietf', date__lte=date_today()).order_by('number')
for m in meetings: for m in meetings:
country = CountryName.objects.get(slug=m.country) country = CountryName.objects.get(slug=m.country)
continents[country.continent.name] = country.continent.name continents[country.continent.name] = country.continent.name

View file

@ -7,7 +7,6 @@ import os
import re import re
import datetime import datetime
import email import email
import pytz
import sys import sys
import tempfile import tempfile
import xml2rfc import xml2rfc
@ -43,6 +42,7 @@ from ietf.submit.parsers.xml_parser import XMLParser
from ietf.utils import log from ietf.utils import log
from ietf.utils.draft import PlaintextDraft from ietf.utils.draft import PlaintextDraft
from ietf.utils.text import normalize_text from ietf.utils.text import normalize_text
from ietf.utils.timezone import date_today
from ietf.utils.xmldraft import XMLDraft, XMLParseError from ietf.utils.xmldraft import XMLDraft, XMLParseError
@ -80,7 +80,7 @@ class SubmissionBaseUploadForm(forms.Form):
self.base_formats = None # None will raise an exception in clean() if this isn't changed in a subclass self.base_formats = None # None will raise an exception in clean() if this isn't changed in a subclass
def set_cutoff_warnings(self): def set_cutoff_warnings(self):
now = timezone.now().astimezone(pytz.utc) now = timezone.now()
meeting = Meeting.get_current_meeting() meeting = Meeting.get_current_meeting()
if not meeting: if not meeting:
return return
@ -573,7 +573,7 @@ class DeprecatedSubmissionBaseUploadForm(SubmissionBaseUploadForm):
raise forms.ValidationError(mark_safe(self.cutoff_warning)) raise forms.ValidationError(mark_safe(self.cutoff_warning))
# check thresholds # check thresholds
today = datetime.date.today() today = date_today()
self.check_submissions_thresholds( self.check_submissions_thresholds(
"for the draft %s" % self.filename, "for the draft %s" % self.filename,

View file

@ -28,6 +28,8 @@ from ietf.utils.accesstoken import generate_access_token
from ietf.mailtrigger.utils import gather_address_lists, get_base_submission_message_address from ietf.mailtrigger.utils import gather_address_lists, get_base_submission_message_address
from ietf.submit.models import SubmissionEmailEvent, Submission from ietf.submit.models import SubmissionEmailEvent, Submission
from ietf.submit.checkers import DraftIdnitsChecker from ietf.submit.checkers import DraftIdnitsChecker
from ietf.utils.timezone import date_today
def send_submission_confirmation(request, submission, chair_notice=False): def send_submission_confirmation(request, submission, chair_notice=False):
subject = 'Confirm submission of I-D %s' % submission.name subject = 'Confirm submission of I-D %s' % submission.name
@ -299,7 +301,7 @@ def add_submission_email(request, remote_ip, name, rev, submission_pk, message,
rev=rev, rev=rev,
title=name, title=name,
note="", note="",
submission_date=datetime.date.today(), submission_date=date_today(),
replaces="", replaces="",
) )
from ietf.submit.utils import create_submission_event, docevent_from_submission from ietf.submit.utils import create_submission_event, docevent_from_submission

View file

@ -3,7 +3,6 @@
import re import re
import datetime
import debug # pyflakes:ignore import debug # pyflakes:ignore
from typing import List, Optional # pyflakes:ignore from typing import List, Optional # pyflakes:ignore
@ -12,6 +11,8 @@ from django.conf import settings
from django.template.defaultfilters import filesizeformat from django.template.defaultfilters import filesizeformat
from ietf.utils.mime import get_mime_type from ietf.utils.mime import get_mime_type
from ietf.utils.timezone import date_today
class MetaData(object): class MetaData(object):
rev = None rev = None
@ -60,7 +61,7 @@ class FileParser(object):
self.parse_max_size(); self.parse_max_size();
self.parse_filename_extension() self.parse_filename_extension()
self.parse_file_type() self.parse_file_type()
self.parsed_info.metadata.submission_date = datetime.date.today() self.parsed_info.metadata.submission_date = date_today()
return self.parsed_info return self.parsed_info
def parse_invalid_chars_in_filename(self): def parse_invalid_chars_in_filename(self):

View file

@ -52,6 +52,7 @@ from ietf.utils.accesstoken import generate_access_token
from ietf.utils.mail import outbox, empty_outbox, get_payload_text from ietf.utils.mail import outbox, empty_outbox, get_payload_text
from ietf.utils.models import VersionInfo from ietf.utils.models import VersionInfo
from ietf.utils.test_utils import login_testing_unauthorized, TestCase from ietf.utils.test_utils import login_testing_unauthorized, TestCase
from ietf.utils.timezone import date_today
from ietf.utils.draft import PlaintextDraft from ietf.utils.draft import PlaintextDraft
@ -91,7 +92,7 @@ class BaseSubmitTestCase(TestCase):
return settings.INTERNET_DRAFT_ARCHIVE_DIR return settings.INTERNET_DRAFT_ARCHIVE_DIR
def submission_file(name_in_doc, name_in_post, group, templatename, author=None, email=None, title=None, year=None, ascii=True): def submission_file(name_in_doc, name_in_post, group, templatename, author=None, email=None, title=None, year=None, ascii=True):
_today = datetime.date.today() _today = date_today()
# construct appropriate text draft # construct appropriate text draft
f = io.open(os.path.join(settings.BASE_DIR, "submit", templatename)) f = io.open(os.path.join(settings.BASE_DIR, "submit", templatename))
template = f.read() template = f.read()
@ -146,7 +147,7 @@ def create_draft_submission_with_rev_mismatch(rev='01'):
sub = Submission.objects.create( sub = Submission.objects.create(
name=draft_name, name=draft_name,
group=None, group=None,
submission_date=datetime.date.today() - datetime.timedelta(days=1), submission_date=date_today() - datetime.timedelta(days=1),
rev=rev, rev=rev,
state_id='posted', state_id='posted',
) )
@ -164,7 +165,7 @@ class SubmitTests(BaseSubmitTestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
# Submit views assume there is a "next" IETF to look for cutoff dates against # Submit views assume there is a "next" IETF to look for cutoff dates against
MeetingFactory(type_id='ietf', date=datetime.date.today()+datetime.timedelta(days=180)) MeetingFactory(type_id='ietf', date=date_today()+datetime.timedelta(days=180))
def create_and_post_submission(self, name, rev, author, group=None, formats=("txt",), base_filename=None): def create_and_post_submission(self, name, rev, author, group=None, formats=("txt",), base_filename=None):
"""Helper to create and post a submission """Helper to create and post a submission
@ -1355,7 +1356,7 @@ class SubmitTests(BaseSubmitTestCase):
# edit # edit
mailbox_before = len(outbox) mailbox_before = len(outbox)
# FIXME If this test is started before midnight, and ends after, it will fail # FIXME If this test is started before midnight, and ends after, it will fail
document_date = datetime.date.today() - datetime.timedelta(days=-3) document_date = date_today() - datetime.timedelta(days=-3)
r = self.client.post(edit_url, { r = self.client.post(edit_url, {
"edit-title": "some title", "edit-title": "some title",
"edit-rev": "00", "edit-rev": "00",
@ -1523,7 +1524,7 @@ class SubmitTests(BaseSubmitTestCase):
def test_expire_submissions(self): def test_expire_submissions(self):
s = Submission.objects.create(name="draft-ietf-mars-foo", s = Submission.objects.create(name="draft-ietf-mars-foo",
group=None, group=None,
submission_date=datetime.date.today() - datetime.timedelta(days=10), submission_date=date_today() - datetime.timedelta(days=10),
rev="00", rev="00",
state_id="uploaded") state_id="uploaded")
@ -1557,7 +1558,7 @@ class SubmitTests(BaseSubmitTestCase):
# Put today in the blackout period # Put today in the blackout period
meeting = Meeting.get_current_meeting() meeting = Meeting.get_current_meeting()
meeting.importantdate_set.create(name_id='idcutoff',date=datetime.date.today()-datetime.timedelta(days=2)) meeting.importantdate_set.create(name_id='idcutoff',date=date_today()-datetime.timedelta(days=2))
# regular user, no access # regular user, no access
r = self.client.get(url) r = self.client.get(url)
@ -1576,30 +1577,30 @@ class SubmitTests(BaseSubmitTestCase):
url = urlreverse('ietf.submit.views.upload_submission') url = urlreverse('ietf.submit.views.upload_submission')
meeting = Meeting.get_current_meeting() meeting = Meeting.get_current_meeting()
meeting.date = datetime.date.today()+datetime.timedelta(days=7) meeting.date = date_today()+datetime.timedelta(days=7)
meeting.save() meeting.save()
meeting.importantdate_set.filter(name_id='idcutoff').delete() meeting.importantdate_set.filter(name_id='idcutoff').delete()
meeting.importantdate_set.create(name_id='idcutoff', date=datetime.date.today()+datetime.timedelta(days=7)) meeting.importantdate_set.create(name_id='idcutoff', date=date_today()+datetime.timedelta(days=7))
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.status_code,200) self.assertEqual(r.status_code,200)
q = PyQuery(r.content) q = PyQuery(r.content)
self.assertEqual(len(q('input[type=file][name=txt]')), 1) self.assertEqual(len(q('input[type=file][name=txt]')), 1)
meeting = Meeting.get_current_meeting() meeting = Meeting.get_current_meeting()
meeting.date = datetime.date.today() meeting.date = date_today()
meeting.save() meeting.save()
meeting.importantdate_set.filter(name_id='idcutoff').delete() meeting.importantdate_set.filter(name_id='idcutoff').delete()
meeting.importantdate_set.create(name_id='idcutoff', date=datetime.date.today()) meeting.importantdate_set.create(name_id='idcutoff', date=date_today())
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.status_code,200) self.assertEqual(r.status_code,200)
q = PyQuery(r.content) q = PyQuery(r.content)
self.assertEqual(len(q('input[type=file][name=txt]')), 1) self.assertEqual(len(q('input[type=file][name=txt]')), 1)
meeting = Meeting.get_current_meeting() meeting = Meeting.get_current_meeting()
meeting.date = datetime.date.today()-datetime.timedelta(days=1) meeting.date = date_today()-datetime.timedelta(days=1)
meeting.save() meeting.save()
meeting.importantdate_set.filter(name_id='idcutoff').delete() meeting.importantdate_set.filter(name_id='idcutoff').delete()
meeting.importantdate_set.create(name_id='idcutoff', date=datetime.date.today()-datetime.timedelta(days=1)) meeting.importantdate_set.create(name_id='idcutoff', date=date_today()-datetime.timedelta(days=1))
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.status_code,200) self.assertEqual(r.status_code,200)
q = PyQuery(r.content) q = PyQuery(r.content)
@ -1864,7 +1865,7 @@ class SubmitTests(BaseSubmitTestCase):
self.index += 1 self.index += 1
sub = Submission.objects.create(name="draft-ietf-mars-bar-%d" % self.index, sub = Submission.objects.create(name="draft-ietf-mars-bar-%d" % self.index,
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
authors=[dict(name=self.author.name, authors=[dict(name=self.author.name,
email=self.author.user.email, email=self.author.user.email,
affiliation='affiliation', affiliation='affiliation',
@ -2136,17 +2137,17 @@ class ApprovalsTestCase(BaseSubmitTestCase):
Submission.objects.create(name="draft-ietf-mars-foo", Submission.objects.create(name="draft-ietf-mars-foo",
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
rev="00", rev="00",
state_id="posted") state_id="posted")
Submission.objects.create(name="draft-ietf-mars-bar", Submission.objects.create(name="draft-ietf-mars-bar",
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
rev="00", rev="00",
state_id="grp-appr") state_id="grp-appr")
Submission.objects.create(name="draft-ietf-mars-quux", Submission.objects.create(name="draft-ietf-mars-quux",
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
rev="00", rev="00",
state_id="ad-appr") state_id="ad-appr")
@ -2295,11 +2296,11 @@ class ManualPostsTestCase(BaseSubmitTestCase):
Submission.objects.create(name="draft-ietf-mars-foo", Submission.objects.create(name="draft-ietf-mars-foo",
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
state_id="manual") state_id="manual")
Submission.objects.create(name="draft-ietf-mars-bar", Submission.objects.create(name="draft-ietf-mars-bar",
group=Group.objects.get(acronym="mars"), group=Group.objects.get(acronym="mars"),
submission_date=datetime.date.today(), submission_date=date_today(),
rev="00", rev="00",
state_id="grp-appr") state_id="grp-appr")
@ -2885,7 +2886,7 @@ class ApiSubmissionTests(BaseSubmitTestCase):
class SubmissionUploadFormTests(BaseSubmitTestCase): class SubmissionUploadFormTests(BaseSubmitTestCase):
def test_check_submission_thresholds(self): def test_check_submission_thresholds(self):
today = datetime.date.today() today = date_today()
yesterday = today - datetime.timedelta(days=1) yesterday = today - datetime.timedelta(days=1)
(this_group, that_group) = GroupFactory.create_batch(2, type_id='wg') (this_group, that_group) = GroupFactory.create_batch(2, type_id='wg')
this_ip = '10.0.0.1' this_ip = '10.0.0.1'
@ -3101,7 +3102,7 @@ class AsyncSubmissionTests(BaseSubmitTestCase):
"""Tests of async submission-related tasks""" """Tests of async submission-related tasks"""
def test_process_uploaded_submission(self): def test_process_uploaded_submission(self):
"""process_uploaded_submission should properly process a submission""" """process_uploaded_submission should properly process a submission"""
_today = datetime.date.today() _today = date_today()
xml, author = submission_file('draft-somebody-test-00', 'draft-somebody-test-00.xml', None, 'test_submission.xml') xml, author = submission_file('draft-somebody-test-00', 'draft-somebody-test-00.xml', None, 'test_submission.xml')
xml_data = xml.read() xml_data = xml.read()
xml.close() xml.close()
@ -3389,7 +3390,7 @@ class ApiSubmitTests(BaseSubmitTestCase):
super().setUp() super().setUp()
# break early in case of missing configuration # break early in case of missing configuration
self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY)) self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY))
MeetingFactory(type_id='ietf', date=datetime.date.today()+datetime.timedelta(days=60)) MeetingFactory(type_id='ietf', date=date_today()+datetime.timedelta(days=60))
def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None): def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
url = urlreverse('ietf.submit.views.api_submit') url = urlreverse('ietf.submit.views.api_submit')

View file

@ -48,6 +48,7 @@ from ietf.utils.accesstoken import generate_random_key
from ietf.utils.draft import PlaintextDraft from ietf.utils.draft import PlaintextDraft
from ietf.utils.mail import is_valid_email from ietf.utils.mail import is_valid_email
from ietf.utils.text import parse_unicode, normalize_text from ietf.utils.text import parse_unicode, normalize_text
from ietf.utils.timezone import date_today
from ietf.utils.xmldraft import XMLDraft from ietf.utils.xmldraft import XMLDraft
from ietf.person.name import unidecode_name from ietf.person.name import unidecode_name
@ -726,7 +727,7 @@ def recently_approved_by_user(user, since):
) )
def expirable_submissions(older_than_days): def expirable_submissions(older_than_days):
cutoff = datetime.date.today() - datetime.timedelta(days=older_than_days) cutoff = date_today() - datetime.timedelta(days=older_than_days)
return Submission.objects.exclude(state__in=("cancel", "posted")).filter(submission_date__lt=cutoff) return Submission.objects.exclude(state__in=("cancel", "posted")).filter(submission_date__lt=cutoff)
def expire_submission(submission, by): def expire_submission(submission, by):
@ -849,7 +850,7 @@ def fill_in_submission(form, submission, authors, abstract, file_size):
submission.file_size = file_size submission.file_size = file_size
submission.file_types = ','.join(form.file_types) submission.file_types = ','.join(form.file_types)
submission.xml_version = form.xml_version submission.xml_version = form.xml_version
submission.submission_date = datetime.date.today() submission.submission_date = date_today()
submission.replaces = "" submission.replaces = ""
if form.parsed_draft is not None: if form.parsed_draft is not None:
submission.pages = form.parsed_draft.get_pagecount() submission.pages = form.parsed_draft.get_pagecount()

View file

@ -48,6 +48,8 @@ from ietf.utils.accesstoken import generate_access_token
from ietf.utils.log import log from ietf.utils.log import log
from ietf.utils.mail import parseaddr, send_mail_message from ietf.utils.mail import parseaddr, send_mail_message
from ietf.utils.response import permission_denied from ietf.utils.response import permission_denied
from ietf.utils.timezone import date_today
def upload_submission(request): def upload_submission(request):
if request.method == 'POST': if request.method == 'POST':
@ -723,7 +725,7 @@ def approvals(request):
preapprovals = preapprovals_for_user(request.user) preapprovals = preapprovals_for_user(request.user)
days = 30 days = 30
recently_approved = recently_approved_by_user(request.user, datetime.date.today() - datetime.timedelta(days=days)) recently_approved = recently_approved_by_user(request.user, date_today() - datetime.timedelta(days=days))
return render(request, 'submit/approvals.html', return render(request, 'submit/approvals.html',
{'selected': 'approvals', {'selected': 'approvals',

View file

@ -62,7 +62,7 @@
</tbody> </tbody>
</table> </table>
{% else %} {% else %}
<p>{{ person.first_name }} has no active roles as of {{ today }}.</p> <p>{{ person.first_name }} has no active roles as of {{ today|date:"Y-m-d" }}.</p>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if person.personextresource_set.exists %} {% if person.personextresource_set.exists %}
@ -123,7 +123,7 @@
</tbody> </tbody>
</table> </table>
{% else %} {% else %}
{{ person.first_name }} has no RFCs as of {{ today }}. {{ person.first_name }} has no RFCs as of {{ today|date:"Y-m-d" }}.
{% endif %} {% endif %}
<h2 class="mt-5" id="drafts-{{ forloop.counter }}"> <h2 class="mt-5" id="drafts-{{ forloop.counter }}">
Active Drafts <small class="text-muted">({{ person.active_drafts|length }})</small> Active Drafts <small class="text-muted">({{ person.active_drafts|length }})</small>
@ -137,7 +137,7 @@
{% endfor %} {% endfor %}
</ul> </ul>
{% else %} {% else %}
{{ person.first_name }} has no active drafts as of {{ today }}. {{ person.first_name }} has no active drafts as of {{ today|date:"Y-m-d" }}.
{% endif %} {% endif %}
<h2 class="mt-5"> <h2 class="mt-5">
Expired Drafts <small class="text-muted">({{ person.expired_drafts|length }})</small> Expired Drafts <small class="text-muted">({{ person.expired_drafts|length }})</small>
@ -156,7 +156,7 @@
</ul> </ul>
(Excluding replaced drafts.) (Excluding replaced drafts.)
{% else %} {% else %}
{{ person.first_name }} has no expired drafts as of {{ today }}. {{ person.first_name }} has no expired drafts as of {{ today|date:"Y-m-d" }}.
{% endif %} {% endif %}
{% if person.has_drafts %} {% if person.has_drafts %}
<h2 class="mt-5"> <h2 class="mt-5">

View file

@ -21,6 +21,7 @@ from ietf.person.models import Person, Email
from ietf.group.utils import setup_default_community_list_for_group from ietf.group.utils import setup_default_community_list_for_group
from ietf.review.models import (ReviewRequest, ReviewerSettings, ReviewResultName, ReviewTypeName, ReviewTeamSettings ) from ietf.review.models import (ReviewRequest, ReviewerSettings, ReviewResultName, ReviewTypeName, ReviewTeamSettings )
from ietf.person.name import unidecode_name from ietf.person.name import unidecode_name
from ietf.utils.timezone import date_today
def create_person(group, role_name, name=None, username=None, email_address=None, password=None, is_staff=False, is_superuser=False): def create_person(group, role_name, name=None, username=None, email_address=None, password=None, is_staff=False, is_superuser=False):
@ -52,7 +53,7 @@ def make_immutable_base_data():
all tests in a run.""" all tests in a run."""
# telechat dates # telechat dates
t = datetime.date.today() + datetime.timedelta(days=1) t = date_today() + datetime.timedelta(days=1)
old = TelechatDate.objects.create(date=t - datetime.timedelta(days=14)).date # pyflakes:ignore old = TelechatDate.objects.create(date=t - datetime.timedelta(days=14)).date # pyflakes:ignore
date1 = TelechatDate.objects.create(date=t).date # pyflakes:ignore date1 = TelechatDate.objects.create(date=t).date # pyflakes:ignore
date2 = TelechatDate.objects.create(date=t + datetime.timedelta(days=14)).date # pyflakes:ignore date2 = TelechatDate.objects.create(date=t + datetime.timedelta(days=14)).date # pyflakes:ignore
@ -365,7 +366,7 @@ def make_test_data():
ietf72 = Meeting.objects.create( ietf72 = Meeting.objects.create(
number="72", number="72",
type_id="ietf", type_id="ietf",
date=datetime.date.today() + datetime.timedelta(days=180), date=date_today() + datetime.timedelta(days=180),
city="New York", city="New York",
country="US", country="US",
time_zone="US/Eastern", time_zone="US/Eastern",

View file

@ -40,7 +40,6 @@ import os
import sys import sys
import time import time
import json import json
import pytz
import importlib import importlib
import socket import socket
import gzip import gzip
@ -754,7 +753,7 @@ class IetfTestRunner(DiscoverRunner):
with io.open(self.coverage_file, encoding='utf-8') as file: with io.open(self.coverage_file, encoding='utf-8') as file:
self.coverage_master = json.load(file) self.coverage_master = json.load(file)
self.coverage_data = { self.coverage_data = {
"time": timezone.now().astimezone(pytz.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), "time": timezone.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
"template": { "template": {
"coverage": 0.0, "coverage": 0.0,
"covered": {}, "covered": {},