Skip to content

Commit 6b2e5ae

Browse files
committed
use Z isoformat in UTC timestamps
instead of +00:00
1 parent 3f21dc2 commit 6b2e5ae

File tree

4 files changed

+26
-25
lines changed

4 files changed

+26
-25
lines changed

notebook/services/contents/tz.py

+9-13
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,11 @@
55
Just UTC-awareness right now
66
"""
77

8-
#-----------------------------------------------------------------------------
9-
# Copyright (C) 2013 The IPython Development Team
10-
#
11-
# Distributed under the terms of the BSD License. The full license is in
12-
# the file COPYING, distributed as part of this software.
13-
#-----------------------------------------------------------------------------
14-
15-
#-----------------------------------------------------------------------------
16-
# Imports
17-
#-----------------------------------------------------------------------------
8+
# Copyright (c) Jupyter Development Team.
9+
# Distributed under the terms of the Modified BSD License.
1810

1911
from datetime import tzinfo, timedelta, datetime
2012

21-
#-----------------------------------------------------------------------------
22-
# Code
23-
#-----------------------------------------------------------------------------
2413
# constant for zero offset
2514
ZERO = timedelta(0)
2615

@@ -44,3 +33,10 @@ def utc_method(*args, **kwargs):
4433

4534
utcfromtimestamp = utc_aware(datetime.utcfromtimestamp)
4635
utcnow = utc_aware(datetime.utcnow)
36+
37+
def isoformat(dt):
38+
"""Return iso-formatted timestamp
39+
40+
Like .isoformat(), but uses Z for UTC instead of +00:00
41+
"""
42+
return dt.isoformat().replace('+00:00', 'Z')

notebook/services/kernels/kernelmanager.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from traitlets import Dict, List, Unicode, TraitError, default, validate
1818

1919
from notebook.utils import to_os_path
20-
from notebook.services.contents.tz import utcnow
20+
from notebook.services.contents.tz import utcnow, isoformat
2121
from ipython_genutils.py3compat import getcwd
2222

2323

@@ -177,7 +177,7 @@ def kernel_model(self, kernel_id):
177177
model = {
178178
"id":kernel_id,
179179
"name": kernel.kernel_name,
180-
"last_activity": kernel.last_activity,
180+
"last_activity": isoformat(kernel.last_activity),
181181
"execution_state": kernel.execution_state,
182182
"connections": self._kernel_connections[kernel_id],
183183
}

notebook/services/sessions/tests/test_sessionmanager.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
from ..sessionmanager import SessionManager
1010
from notebook.services.kernels.kernelmanager import MappingKernelManager
1111
from notebook.services.contents.manager import ContentsManager
12-
from notebook.services.contents.tz import utcnow
12+
from notebook.services.contents.tz import utcnow, isoformat
1313

1414
class DummyKernel(object):
1515
def __init__(self, kernel_name='python'):
1616
self.kernel_name = kernel_name
1717

1818
dummy_date = utcnow()
19-
dummy_date_s = dummy_date.isoformat()
19+
dummy_date_s = isoformat(dummy_date)
2020

2121
class DummyMKM(MappingKernelManager):
2222
"""MappingKernelManager interface that doesn't start kernels, for testing"""
@@ -74,7 +74,7 @@ def test_get_session(self):
7474
'kernel': {
7575
'id': 'A',
7676
'name': 'bar',
77-
'last_activity': dummy_date,
77+
'last_activity': dummy_date_s,
7878
'execution_state': 'idle',
7979
}}
8080
self.assertEqual(model, expected)
@@ -116,7 +116,7 @@ def test_list_sessions(self):
116116
'kernel': {
117117
'id': 'A',
118118
'name':'python',
119-
'last_activity': dummy_date,
119+
'last_activity': dummy_date_s,
120120
'execution_state': 'idle',
121121
}
122122
}, {
@@ -127,7 +127,7 @@ def test_list_sessions(self):
127127
'kernel': {
128128
'id': 'B',
129129
'name':'python',
130-
'last_activity': dummy_date,
130+
'last_activity': dummy_date_s,
131131
'execution_state': 'idle',
132132
}
133133
}, {
@@ -138,7 +138,7 @@ def test_list_sessions(self):
138138
'kernel': {
139139
'id': 'C',
140140
'name':'python',
141-
'last_activity': dummy_date,
141+
'last_activity': dummy_date_s,
142142
'execution_state': 'idle',
143143
}
144144
}
@@ -164,7 +164,7 @@ def test_list_sessions_dead_kernel(self):
164164
'kernel': {
165165
'id': 'B',
166166
'name':'python',
167-
'last_activity': dummy_date,
167+
'last_activity': dummy_date_s,
168168
'execution_state': 'idle',
169169
}
170170
}
@@ -185,7 +185,7 @@ def test_update_session(self):
185185
'kernel': {
186186
'id': 'A',
187187
'name':'julia',
188-
'last_activity': dummy_date,
188+
'last_activity': dummy_date_s,
189189
'execution_state': 'idle',
190190
}
191191
}
@@ -216,7 +216,7 @@ def test_delete_session(self):
216216
'kernel': {
217217
'id': 'A',
218218
'name':'python',
219-
'last_activity': dummy_date,
219+
'last_activity': dummy_date_s,
220220
'execution_state': 'idle',
221221
}
222222
}, {
@@ -227,7 +227,7 @@ def test_delete_session(self):
227227
'kernel': {
228228
'id': 'C',
229229
'name':'python',
230-
'last_activity': dummy_date,
230+
'last_activity': dummy_date_s,
231231
'execution_state': 'idle',
232232
}
233233
}

notebook/services/sessions/tests/test_sessions_api.py

+5
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ def test_modify_kernel_name(self):
225225
r = requests.get(url_path_join(self.base_url(), 'api/kernels'))
226226
r.raise_for_status()
227227
kernel_list = r.json()
228+
after['kernel'].pop('last_activity')
229+
[ k.pop('last_activity') for k in kernel_list ]
228230
self.assertEqual(kernel_list, [after['kernel']])
229231

230232
def test_modify_kernel_id(self):
@@ -248,4 +250,7 @@ def test_modify_kernel_id(self):
248250
r = requests.get(url_path_join(self.base_url(), 'api/kernels'))
249251
r.raise_for_status()
250252
kernel_list = r.json()
253+
254+
kernel.pop('last_activity')
255+
[ k.pop('last_activity') for k in kernel_list ]
251256
self.assertEqual(kernel_list, [kernel])

0 commit comments

Comments
 (0)