Skip to content

Commit eac8daf

Browse files
author
Ace Nassri
authored
Change-Id: Ic1fece4ad23523038702068a87b5ec2f1857f18f
1 parent 172ee1d commit eac8daf

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

functions/tips/main.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
# [START functions_tips_infinite_retries]
16-
from datetime import datetime
16+
from datetime import datetime, timezone
1717
# [END functions_tips_infinite_retries]
1818

1919
# [START functions_tips_gcp_apis]
@@ -150,19 +150,20 @@ def avoid_infinite_retries(data, context):
150150
None; output is written to Stackdriver Logging
151151
"""
152152

153-
timestamp = data.timestamp
153+
timestamp = context.timestamp
154154

155155
event_time = parser.parse(timestamp)
156-
event_age = (datetime.now() - event_time).total_seconds() * 1000
156+
event_age = (datetime.now(timezone.utc) - event_time).total_seconds()
157+
event_age_ms = event_age * 1000
157158

158159
# Ignore events that are too old
159160
max_age_ms = 10000
160-
if event_age > max_age_ms:
161-
print('Dropped {} (age {}ms)'.format(context.event_id, event_age))
161+
if event_age_ms > max_age_ms:
162+
print('Dropped {} (age {}ms)'.format(context.event_id, event_age_ms))
162163
return 'Timeout'
163164

164165
# Do what the function is supposed to do
165-
print('Processed {} (age {}ms)'.format(context.event_id, event_age))
166+
print('Processed {} (age {}ms)'.format(context.event_id, event_age_ms))
166167
return
167168
# [END functions_tips_infinite_retries]
168169

functions/tips/main_test.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import datetime
15+
from collections import UserDict
16+
from datetime import datetime, timedelta, timezone
1617
from unittest.mock import MagicMock, Mock, patch
1718

1819
import flask
@@ -52,23 +53,26 @@ def test_connection_pooling_404(app):
5253

5354

5455
def test_avoid_infinite_retries(capsys):
55-
now = datetime.datetime.now()
56+
now = datetime.now(timezone.utc)
5657

57-
with patch('main.datetime', wraps=datetime.datetime) as datetime_mock:
58+
with patch('main.datetime', wraps=datetime) as datetime_mock:
5859
datetime_mock.now = Mock(return_value=now)
59-
old_event = Mock(
60-
timestamp=(now - datetime.timedelta(seconds=15)).isoformat())
61-
young_event = Mock(
62-
timestamp=(now - datetime.timedelta(seconds=5)).isoformat())
63-
context = Mock(event_id='fake_event_id')
6460

65-
main.avoid_infinite_retries(old_event, context)
61+
old_context = UserDict()
62+
old_context.timestamp = (now - timedelta(seconds=15)).isoformat()
63+
old_context.event_id = 'old_event_id'
64+
65+
young_context = UserDict()
66+
young_context.timestamp = (now - timedelta(seconds=5)).isoformat()
67+
young_context.event_id = 'young_event_id'
68+
69+
main.avoid_infinite_retries(None, old_context)
6670
out, _ = capsys.readouterr()
67-
assert 'Dropped {} (age 15000.0ms)'.format(context.event_id) in out
71+
assert f"Dropped {old_context.event_id} (age 15000.0ms)" in out
6872

69-
main.avoid_infinite_retries(young_event, context)
73+
main.avoid_infinite_retries(None, young_context)
7074
out, _ = capsys.readouterr()
71-
assert 'Processed {} (age 5000.0ms)'.format(context.event_id) in out
75+
assert f"Processed {young_context.event_id} (age 5000.0ms)" in out
7276

7377

7478
def test_retry_or_not():

0 commit comments

Comments
 (0)