Skip to content

Commit ebebdbe

Browse files
refactor: replace datetime.now and datetime.today with timezone.now (ietf-tools#4211)
* refactor: replace datetime.now with timezone.now * refactor: migrate model fields to use timezone.now as default * refactor: replace datetime.today with timezone.now datetime.datetime.today() is equivalent to datetime.datetime.now(); both return a naive datetime with the current local time. * refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz) This is effectively the same, but is less likely to encourage accidental use of naive datetimes. * refactor: revert datetime.today() change to old migrations * refactor: change a missed datetime.now to timezone.now * chore: renumber timezone_now migration * chore: renumber migrations
1 parent a94a87f commit ebebdbe

88 files changed

Lines changed: 547 additions & 270 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ietf/api/management/commands/makeresources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44

55
import os
6-
import datetime
76
import collections
87
import io
98

@@ -14,6 +13,7 @@
1413
from django.core.management.base import AppCommand
1514
from django.db import models
1615
from django.template import Template, Context
16+
from django.utils import timezone
1717

1818
from tastypie.resources import ModelResource
1919

@@ -89,7 +89,7 @@ def handle_app_config(self, app, **options):
8989
info = dict(
9090
app=app.name,
9191
app_label=app.label,
92-
date=datetime.datetime.now()
92+
date=timezone.now()
9393
)
9494
new_models = {}
9595
for model, rclass_name in missing_resources:

ietf/bin/send-scheduled-mail

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# This script requires that the proper virtual python environment has been
44
# invoked before start
55

6-
import datetime, os, sys
6+
import os, sys
77
import syslog
88

99
# boilerplate
@@ -16,6 +16,7 @@ syslog.openlog(os.path.basename(__file__), syslog.LOG_PID, syslog.LOG_USER)
1616

1717
import django
1818
django.setup()
19+
from django.utils import timezone
1920

2021
from ietf.utils.mail import log_smtp_exception, send_error_email
2122
from smtplib import SMTPException
@@ -32,7 +33,7 @@ from ietf.message.models import SendQueue
3233

3334
mode = sys.argv[1]
3435

35-
now = datetime.datetime.now()
36+
now = timezone.now()
3637

3738
needs_sending = SendQueue.objects.filter(sent_at=None).select_related("message")
3839
if mode == "specific":

ietf/community/views.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.http import HttpResponse, HttpResponseRedirect, Http404
1111
from django.shortcuts import get_object_or_404, render
1212
from django.contrib.auth.decorators import login_required
13+
from django.utils import timezone
1314
from django.utils.html import strip_tags
1415

1516
import debug # pyflakes:ignore
@@ -218,7 +219,7 @@ def feed(request, username=None, acronym=None, group_type=None):
218219
significant = request.GET.get('significant', '') == '1'
219220

220221
documents = docs_tracked_by_community_list(clist).values_list('pk', flat=True)
221-
since = datetime.datetime.now() - datetime.timedelta(days=14)
222+
since = timezone.now() - datetime.timedelta(days=14)
222223

223224
events = DocEvent.objects.filter(
224225
doc__id__in=documents,
@@ -243,7 +244,7 @@ def feed(request, username=None, acronym=None, group_type=None):
243244
'title': title,
244245
'subtitle': subtitle,
245246
'id': feed_id.urn,
246-
'updated': datetime.datetime.now(),
247+
'updated': timezone.now(),
247248
}, content_type='text/xml')
248249

249250

ietf/doc/expire.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55

66
from django.conf import settings
7+
from django.utils import timezone
78

89
import datetime, os, shutil, glob, re
910
from pathlib import Path
@@ -62,7 +63,7 @@ def get_expired_drafts():
6263

6364
def in_draft_expire_freeze(when=None):
6465
if when == None:
65-
when = datetime.datetime.now()
66+
when = timezone.now()
6667

6768
meeting = Meeting.objects.filter(type='ietf', date__gte=when-datetime.timedelta(days=7)).order_by('date').first()
6869

ietf/doc/factories.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from typing import Optional # pyflakes:ignore
1111

1212
from django.conf import settings
13+
from django.utils import timezone
1314

1415
from ietf.doc.models import ( Document, DocEvent, NewRevisionDocEvent, DocAlias, State, DocumentAuthor,
1516
StateDocEvent, BallotPositionDocEvent, BallotDocEvent, BallotType, IRSGBallotDocEvent, TelechatDocEvent,
@@ -38,7 +39,7 @@ class Meta:
3839
rev = '00'
3940
std_level_id = None # type: Optional[str]
4041
intended_std_level_id = None
41-
time = datetime.datetime.now()
42+
time = timezone.now()
4243
expires = factory.LazyAttribute(lambda o: o.time+datetime.timedelta(days=settings.INTERNET_DRAFT_DAYS_TO_EXPIRE))
4344
pages = factory.fuzzy.FuzzyInteger(2,400)
4445

@@ -357,7 +358,8 @@ class TelechatDocEventFactory(DocEventFactory):
357358
class Meta:
358359
model = TelechatDocEvent
359360

360-
telechat_date = datetime.datetime.today()+datetime.timedelta(days=14)
361+
# note: this is evaluated at import time and not updated - all events will have the same telechat_date
362+
telechat_date = timezone.now()+datetime.timedelta(days=14)
361363
type = 'scheduled_for_telechat'
362364

363365
class NewRevisionDocEventFactory(DocEventFactory):
@@ -410,7 +412,7 @@ class IRSGBallotDocEventFactory(BallotDocEventFactory):
410412
class Meta:
411413
model = IRSGBallotDocEvent
412414

413-
duedate = datetime.datetime.now() + datetime.timedelta(days=14)
415+
duedate = timezone.now() + datetime.timedelta(days=14)
414416
ballot_type = factory.SubFactory(BallotTypeFactory, slug='irsg-approve')
415417

416418
class BallotPositionDocEventFactory(DocEventFactory):

ietf/doc/feeds.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.urls import reverse as urlreverse
1111
from django.template.defaultfilters import truncatewords, truncatewords_html, date as datefilter
1212
from django.template.defaultfilters import linebreaks # type: ignore
13+
from django.utils import timezone
1314
from django.utils.html import strip_tags
1415

1516
from ietf.doc.models import Document, State, LastCallDocEvent, DocEvent
@@ -135,7 +136,7 @@ def items(self):
135136
if self.year:
136137
rfc_events = DocEvent.objects.filter(type='published_rfc',time__year=self.year).order_by('-time')
137138
else:
138-
cutoff = datetime.datetime.now() - datetime.timedelta(days=8)
139+
cutoff = timezone.now() - datetime.timedelta(days=8)
139140
rfc_events = DocEvent.objects.filter(type='published_rfc',time__gte=cutoff).order_by('-time')
140141
results = [(e.doc, e.time) for e in rfc_events]
141142
for doc,time in results:

ietf/doc/mails.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.utils.html import strip_tags
1111
from django.conf import settings
1212
from django.urls import reverse as urlreverse
13+
from django.utils import timezone
1314
from django.utils.encoding import force_text
1415

1516
import debug # pyflakes:ignore
@@ -418,7 +419,7 @@ def generate_issue_ballot_mail(request, doc, ballot):
418419

419420
e = doc.latest_event(LastCallDocEvent, type="sent_last_call")
420421
last_call_expires = e.expires if e else None
421-
last_call_has_expired = last_call_expires and last_call_expires < datetime.datetime.now()
422+
last_call_has_expired = last_call_expires and last_call_expires < timezone.now()
422423

423424
return render_to_string("doc/mail/issue_iesg_ballot_mail.txt",
424425
dict(doc=doc,
@@ -437,7 +438,7 @@ def _send_irsg_ballot_email(request, doc, ballot, subject, template):
437438
(to, cc) = gather_address_lists('irsg_ballot_issued', doc=doc)
438439
sender = 'IESG Secretary <iesg-secretary@ietf.org>'
439440

440-
ballot_expired = ballot.duedate < datetime.datetime.now()
441+
ballot_expired = ballot.duedate < timezone.now()
441442
active_ballot = doc.active_ballot()
442443
if active_ballot is None:
443444
needed_bps = ''

ietf/doc/management/commands/generate_draft_aliases.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
from django.conf import settings
1818
from django.core.management.base import BaseCommand
19+
from django.utils import timezone
1920

2021
import debug # pyflakes:ignore
2122

@@ -101,7 +102,7 @@ class Command(BaseCommand):
101102
'that have seen activity in the last %s years.' % (DEFAULT_YEARS))
102103

103104
def handle(self, *args, **options):
104-
show_since = datetime.datetime.now() - datetime.timedelta(DEFAULT_YEARS*365)
105+
show_since = timezone.now() - datetime.timedelta(DEFAULT_YEARS*365)
105106

106107
date = time.strftime("%Y-%m-%d_%H:%M:%S")
107108
signature = '# Generated by %s at %s\n' % (os.path.abspath(__file__), date)

ietf/doc/management/commands/generate_draft_bibxml_files.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from django.conf import settings
1212
from django.core.management.base import BaseCommand
1313
from django.template.loader import render_to_string
14+
from django.utils import timezone
1415

1516
import debug # pyflakes:ignore
1617

@@ -68,7 +69,7 @@ def handle(self, *args, **options):
6869
if process_all:
6970
doc_events = NewRevisionDocEvent.objects.filter(type='new_revision', doc__type_id='draft')
7071
else:
71-
start = datetime.datetime.now() - datetime.timedelta(days=days)
72+
start = timezone.now() - datetime.timedelta(days=days)
7273
doc_events = NewRevisionDocEvent.objects.filter(type='new_revision', doc__type_id='draft', time__gte=start)
7374
doc_events = doc_events.order_by('time')
7475

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Generated by Django 2.2.28 on 2022-07-12 11:24
2+
3+
from django.db import migrations, models
4+
import django.utils.timezone
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('doc', '0044_procmaterials_states'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='deletedevent',
16+
name='time',
17+
field=models.DateTimeField(default=django.utils.timezone.now),
18+
),
19+
migrations.AlterField(
20+
model_name='docevent',
21+
name='time',
22+
field=models.DateTimeField(db_index=True, default=django.utils.timezone.now, help_text='When the event happened'),
23+
),
24+
migrations.AlterField(
25+
model_name='dochistory',
26+
name='time',
27+
field=models.DateTimeField(default=django.utils.timezone.now),
28+
),
29+
migrations.AlterField(
30+
model_name='document',
31+
name='time',
32+
field=models.DateTimeField(default=django.utils.timezone.now),
33+
),
34+
migrations.AlterField(
35+
model_name='documentactionholder',
36+
name='time_added',
37+
field=models.DateTimeField(default=django.utils.timezone.now),
38+
),
39+
]

0 commit comments

Comments
 (0)