Skip to content

Commit 774e752

Browse files
committed
Snapshot of timezone-aware datatracker code. Tests pass, and the test-crawler shows only expected differences. Trunk changes merged in up to r18768.
- Legacy-Id: 18770
1 parent 2347daf commit 774e752

180 files changed

Lines changed: 2899 additions & 2519 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.

bin/add-old-drafts-from-archive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env python
2-
# Copyright The IETF Trust 2017-2019, All Rights Reserved
2+
# Copyright The IETF Trust 2017-2020, All Rights Reserved
33

44
import datetime
55
import os
@@ -140,7 +140,7 @@ def turn_into_unicode(s):
140140
doc = doc,
141141
rev = rev,
142142
by = system,
143-
desc = "Revision added from id-archive on %s by %s"%(datetime.date.today(),sys.argv[0]),
143+
desc = "Revision added from id-archive on %s by %s"%(timezone.now().date(),sys.argv[0]),
144144
time=time,
145145
)
146146
events.append(e)

bin/check-copyright

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def get_first_commit(path):
162162
else:
163163
pass
164164
except OSError:
165-
rev, who, when = None, None, datetime.datetime.now()
165+
rev, who, when = None, None, timezone.now()
166166
return { path: { 'rev': rev, 'who': who, 'date': when.strftime('%Y-%m-%d %H:%M:%S'), }, }
167167

168168

bin/test-crawl

Lines changed: 323 additions & 515 deletions
Large diffs are not rendered by default.

ietf/api/__init__.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from tastypie.api import Api
1818
from tastypie.bundle import Bundle
1919
from tastypie.exceptions import ApiFieldError
20-
from tastypie.serializers import Serializer # pyflakes:ignore (we're re-exporting this)
20+
from tastypie.serializers import Serializer as TastypieSerializer
2121
from tastypie.fields import ApiField
2222

2323
_api_list = []
@@ -152,3 +152,19 @@ def dehydrate(self, bundle, for_list=True):
152152
dehydrated = self.dehydrate_related(fk_bundle, fk_resource, for_list=for_list)
153153
fk_resource._meta.cache.set(cache_key, dehydrated)
154154
return dehydrated
155+
156+
class Serializer(TastypieSerializer):
157+
158+
def format_datetime(self, data):
159+
"""
160+
Subclassed to let tastypie produce timezone-aware serialization of
161+
datetime objects.
162+
"""
163+
from tastypie.utils.formatting import format_datetime
164+
if self.datetime_formatting == 'rfc-2822':
165+
return format_datetime(data)
166+
if self.datetime_formatting == 'iso-8601-strict':
167+
# Remove microseconds to strictly adhere to iso-8601
168+
data = data - datetime.timedelta(microseconds=data.microsecond)
169+
return data.isoformat()
170+

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/api/tests.py

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

44

55
import json
6-
import html
76
import os
87
import shutil
98
import sys
@@ -15,7 +14,7 @@
1514
from django.conf import settings
1615
from django.test import Client
1716
from django.urls import reverse as urlreverse
18-
from django.utils import timezone
17+
from django.utils import html, timezone
1918

2019
from tastypie.test import ResourceTestCaseMixin
2120

@@ -56,10 +55,10 @@ def test_notify_meeting_import_audio_files(self, mock_import_audio):
5655
# try invalid method GET
5756
url = urlreverse('ietf.meeting.views.api_import_recordings', kwargs={'number':meeting.number})
5857
r = client.get(url)
59-
self.assertEqual(r.status_code, 405)
58+
self.assertResponseStatus(r, 405)
6059
# try valid method POST
6160
r = client.post(url)
62-
self.assertEqual(r.status_code, 201)
61+
self.assertResponseStatus(r, 201)
6362

6463
def test_api_help_page(self):
6564
url = urlreverse('ietf.api.views.api_help')
@@ -282,7 +281,7 @@ def test_api_v2_person_export_view(self):
282281

283282
# working case
284283
r = self.client.post(url, {'apikey': apikey.hash(), 'email': secretariat.email().address, '_expand': 'user'})
285-
self.assertEqual(r.status_code, 200)
284+
self.assertResponseStatus(r, 200)
286285
jsondata = r.json()
287286
data = jsondata['person.person'][str(secretariat.id)]
288287
self.assertEqual(data['name'], secretariat.name)

ietf/api/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2017, All Rights Reserved
1+
# Copyright The IETF Trust 2017-2020, All Rights Reserved
22

33
from django.conf.urls import include
44
from django.views.generic import TemplateView

ietf/api/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def err(code, text):
205205

206206
def version(request):
207207
dumpinfo = DumpInfo.objects.order_by('-date').first()
208-
dumptime = pytz.timezone(dumpinfo.tz).localize(dumpinfo.date).strftime('%Y-%m-%d %H:%M:%S %z') if dumpinfo else None
208+
dumptime = dumpinfo.date.astimezone(pytz.timezone(dumpinfo.tz)).strftime('%Y-%m-%d %H:%M:%S %z') if dumpinfo else None
209209
return HttpResponse(
210210
json.dumps({
211211
'version': ietf.__version__+ietf.__patch__,

ietf/bin/generate-draft-aliases

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ if __name__ == '__main__':
116116
import time
117117

118118
# Year ago?
119-
show_since = datetime.datetime.now() - datetime.timedelta(2*365)
119+
show_since = timezone.now() - datetime.timedelta(2*365)
120120
# 10 years ago?
121-
#show_since = datetime.datetime.now() - datetime.timedelta(10 * 365)
121+
#show_since = timezone.now() - datetime.timedelta(10 * 365)
122122

123123
date = time.strftime("%Y-%m-%d_%H:%M:%S")
124124
signature = '# Generated by %s at %s\n' % (filename, date)
@@ -144,7 +144,7 @@ if __name__ == '__main__':
144144
for draft in interesting_drafts.distinct().iterator():
145145
# Omit RFCs, we care only about drafts
146146
if draft.docalias.filter(name__startswith='rfc'):
147-
if (datetime.datetime.now() - draft.latest_event(type='published_rfc').time) > datetime.timedelta(days= 365 * 3 ):
147+
if (timezone.now() - draft.latest_event(type='published_rfc').time) > datetime.timedelta(days= 365 * 3 ):
148148
continue
149149

150150
alias = draft.name

ietf/bin/generate-wg-aliases

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ if __name__ == '__main__':
4444
import time
4545

4646
# Year ago?
47-
#show_since = datetime.datetime.now() - datetime.timedelta(365)
47+
#show_since = timezone.now() - datetime.timedelta(365)
4848

4949
# 2 years ago?
50-
#show_since = datetime.datetime.now() - datetime.timedelta(2 * 365)
50+
#show_since = timezone.now() - datetime.timedelta(2 * 365)
5151

5252
# 3 years ago?
53-
#show_since = datetime.datetime.now() - datetime.timedelta(3 * 365)
53+
#show_since = timezone.now() - datetime.timedelta(3 * 365)
5454

5555
# 5 years ago?
56-
show_since = datetime.datetime.now() - datetime.timedelta(5 * 365)
56+
show_since = timezone.now() - datetime.timedelta(5 * 365)
5757

5858
date = time.strftime("%Y-%m-%d_%H:%M:%S")
5959
signature = '# Generated by %s at %s\n' % (filename, date)

0 commit comments

Comments
 (0)