2
2
pynamodb attributes tests
3
3
"""
4
4
import json
5
- import time
6
5
7
6
from base64 import b64encode
8
7
from datetime import datetime
9
-
10
8
from datetime import timedelta
11
- from dateutil . tz import tzutc
9
+ from datetime import timezone
12
10
13
- from unittest .mock import patch , Mock , call
11
+ from unittest .mock import patch , call
14
12
import pytest
15
13
16
14
from pynamodb .attributes import (
25
23
from pynamodb .models import Model
26
24
27
25
28
- UTC = tzutc ()
29
-
30
-
31
26
class AttributeTestModel (Model ):
32
27
33
28
class Meta :
@@ -148,15 +143,15 @@ def test_utc_date_time_deserialize(self):
148
143
"""
149
144
UTCDateTimeAttribute.deserialize
150
145
"""
151
- tstamp = datetime .now (UTC )
146
+ tstamp = datetime .now (timezone . utc )
152
147
attr = UTCDateTimeAttribute ()
153
148
assert attr .deserialize (tstamp .strftime (DATETIME_FORMAT )) == tstamp
154
149
155
150
def test_dateutil_parser_fallback (self ):
156
151
"""
157
152
UTCDateTimeAttribute.deserialize
158
153
"""
159
- expected_value = datetime (2047 , 1 , 6 , 8 , 21 , tzinfo = tzutc () )
154
+ expected_value = datetime (2047 , 1 , 6 , 8 , 21 , tzinfo = timezone . utc )
160
155
attr = UTCDateTimeAttribute ()
161
156
assert attr .deserialize ('January 6, 2047 at 8:21:00AM UTC' ) == expected_value
162
157
@@ -166,7 +161,7 @@ def test_utc_date_time_deserialize_parse_args(self, parse_mock, datetime_mock):
166
161
"""
167
162
UTCDateTimeAttribute.deserialize
168
163
"""
169
- tstamp = datetime .now (UTC )
164
+ tstamp = datetime .now (timezone . utc )
170
165
attr = UTCDateTimeAttribute ()
171
166
172
167
tstamp_str = tstamp .strftime (DATETIME_FORMAT )
@@ -181,15 +176,15 @@ def test_utc_date_time_serialize(self):
181
176
"""
182
177
tstamp = datetime .now ()
183
178
attr = UTCDateTimeAttribute ()
184
- assert attr .serialize (tstamp ) == tstamp .replace (tzinfo = UTC ).strftime (DATETIME_FORMAT )
179
+ assert attr .serialize (tstamp ) == tstamp .replace (tzinfo = timezone . utc ).strftime (DATETIME_FORMAT )
185
180
186
181
def test__fast_parse_utc_datestring_roundtrips (self ):
187
- tstamp = datetime .now (UTC )
182
+ tstamp = datetime .now (timezone . utc )
188
183
tstamp_str = tstamp .strftime (DATETIME_FORMAT )
189
184
assert _fast_parse_utc_datestring (tstamp_str ) == tstamp
190
185
191
186
def test__fast_parse_utc_datestring_no_microseconds (self ):
192
- expected_value = datetime (2047 , 1 , 6 , 8 , 21 , tzinfo = tzutc () )
187
+ expected_value = datetime (2047 , 1 , 6 , 8 , 21 , tzinfo = timezone . utc )
193
188
assert _fast_parse_utc_datestring ('2047-01-06T08:21:00.0+0000' ) == expected_value
194
189
195
190
@pytest .mark .parametrize (
@@ -497,7 +492,7 @@ def test_timedelta_ttl(self, mock_time):
497
492
mock_time .side_effect = [1559692800 ] # 2019-06-05 00:00:00 UTC
498
493
model = AttributeTestModel ()
499
494
model .ttl_attr = timedelta (seconds = 60 )
500
- assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = UTC )
495
+ assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = timezone . utc )
501
496
502
497
def test_datetime_naive_ttl (self ):
503
498
model = AttributeTestModel ()
@@ -507,8 +502,8 @@ def test_datetime_naive_ttl(self):
507
502
508
503
def test_datetime_with_tz_ttl (self ):
509
504
model = AttributeTestModel ()
510
- model .ttl_attr = datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = UTC )
511
- assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = UTC )
505
+ model .ttl_attr = datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = timezone . utc )
506
+ assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = timezone . utc )
512
507
513
508
def test_ttl_attribute_wrong_type (self ):
514
509
with pytest .raises (ValueError , match = 'TTLAttribute value must be a timedelta or datetime' ):
@@ -531,10 +526,10 @@ def test_serialize_deserialize(self, mock_time):
531
526
mock_time .side_effect = [1559692800 , 1559692800 ] # 2019-06-05 00:00:00 UTC
532
527
model = AttributeTestModel ()
533
528
model .ttl_attr = timedelta (minutes = 1 )
534
- assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = UTC )
529
+ assert model .ttl_attr == datetime (2019 , 6 , 5 , 0 , 1 , tzinfo = timezone . utc )
535
530
s = TTLAttribute ().serialize (model .ttl_attr )
536
531
assert s == '1559692860'
537
- assert TTLAttribute ().deserialize (s ) == datetime (2019 , 6 , 5 , 0 , 1 , 0 , tzinfo = UTC )
532
+ assert TTLAttribute ().deserialize (s ) == datetime (2019 , 6 , 5 , 0 , 1 , 0 , tzinfo = timezone . utc )
538
533
539
534
540
535
class TestJSONAttribute :
0 commit comments