fix: timezone fixes from last few comparisons with tzaware-obe
This commit is contained in:
parent
448cfbb13d
commit
a653582cf7
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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())
|
||||||
|
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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):
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": {},
|
||||||
|
|
Loading…
Reference in a new issue