99######################################################################
1010
1111from random import random
12+ from contextlib import contextmanager
13+ import datetime
1214import io
1315import json
16+ import locale
1417import logging
1518import socket
19+ import threading
1620
17- import arrow
1821import requests
1922from requests .adapters import HTTPAdapter
2023import time
3033from .requests import NotDecompressingResponse
3134from .version import USER_AGENT
3235
36+ LOCALE_LOCK = threading .Lock ()
3337logger = logging .getLogger (__name__ )
3438
3539
@@ -47,6 +51,16 @@ def _print_exception(e, indent=''):
4751 _print_exception (a , indent + ' ' )
4852
4953
54+ @contextmanager
55+ def setlocale (name ):
56+ with LOCALE_LOCK :
57+ saved = locale .setlocale (locale .LC_ALL )
58+ try :
59+ yield locale .setlocale (locale .LC_ALL , name )
60+ finally :
61+ locale .setlocale (locale .LC_ALL , saved )
62+
63+
5064class ResponseContextManager :
5165 """
5266 A context manager that closes a requests.Response when done.
@@ -114,15 +128,16 @@ def post_request(self, method, url, headers, response):
114128
115129 # Convert the server time to a datetime object
116130 try :
117- server_time = arrow .get (
118- server_date_str , 'ddd, DD MMM YYYY HH:mm:ss ZZZ'
119- ) # this, unlike datetime.datetime.strptime, always uses English locale
120- except arrow .parser .ParserError :
131+ with setlocale ("C" ):
132+ server_time = datetime .datetime .strptime (
133+ server_date_str , '%a, %d %b %Y %H:%M:%S %Z'
134+ )
135+ except ValueError :
121136 logger .exception ('server returned date in an inappropriate format' )
122137 raise BadDateFormat (server_date_str )
123138
124139 # Get the local time
125- local_time = arrow .utcnow ()
140+ local_time = datetime . datetime .utcnow ()
126141
127142 # Check the difference.
128143 max_allowed = 10 * 60 # ten minutes, in seconds
0 commit comments