Closed
Description
An s3 / pyarrow test is failing on master. Does anyone have time to debug it?
https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=31733&view=logs&j=a3a13ea8-7cf0-5bdb-71bb-6ac8830ae35c&t=add65f64-6c25-5783-8fd6-d9aa1b63d9d4&l=115.
There was an s3fs release earlier today, if that's related.
2020-03-27T18:16:37.6354466Z =================================== FAILURES ===================================
2020-03-27T18:16:37.6354971Z _____________________ TestParquetPyArrow.test_s3_roundtrip _____________________
2020-03-27T18:16:37.6356687Z [gw1] linux -- Python 3.7.6 /home/vsts/miniconda3/envs/pandas-dev/bin/python
2020-03-27T18:16:37.6357366Z
2020-03-27T18:16:37.6358186Z value = '五, 27 3月 2020 18:11:53 GMT', tzinfo = <class 'dateutil.tz.tz.tzlocal'>
2020-03-27T18:16:37.6358700Z
2020-03-27T18:16:37.6359050Z def _parse_timestamp_with_tzinfo(value, tzinfo):
2020-03-27T18:16:37.6359491Z """Parse timestamp with pluggable tzinfo options."""
2020-03-27T18:16:37.6359936Z if isinstance(value, (int, float)):
2020-03-27T18:16:37.6360574Z # Possibly an epoch time.
2020-03-27T18:16:37.6361048Z return datetime.datetime.fromtimestamp(value, tzinfo())
2020-03-27T18:16:37.6361681Z else:
2020-03-27T18:16:37.6362073Z try:
2020-03-27T18:16:37.6362431Z return datetime.datetime.fromtimestamp(float(value), tzinfo())
2020-03-27T18:16:37.6362828Z except (TypeError, ValueError):
2020-03-27T18:16:37.6363153Z pass
2020-03-27T18:16:37.6363414Z try:
2020-03-27T18:16:37.6363776Z # In certain cases, a timestamp marked with GMT can be parsed into a
2020-03-27T18:16:37.6364222Z # different time zone, so here we provide a context which will
2020-03-27T18:16:37.6364618Z # enforce that GMT == UTC.
2020-03-27T18:16:37.6365341Z > return dateutil.parser.parse(value, tzinfos={'GMT': tzutc()})
2020-03-27T18:16:37.6365750Z
2020-03-27T18:16:37.6366507Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/utils.py:607:
2020-03-27T18:16:37.6367110Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2020-03-27T18:16:37.6367487Z
2020-03-27T18:16:37.6368063Z timestr = '五, 27 3月 2020 18:11:53 GMT', parserinfo = None
2020-03-27T18:16:37.6368765Z kwargs = {'tzinfos': {'GMT': tzutc()}}
2020-03-27T18:16:37.6369118Z
2020-03-27T18:16:37.6369430Z def parse(timestr, parserinfo=None, **kwargs):
2020-03-27T18:16:37.6369874Z """
2020-03-27T18:16:37.6370113Z
2020-03-27T18:16:37.6370427Z Parse a string in one of the supported formats, using the
2020-03-27T18:16:37.6370810Z ``parserinfo`` parameters.
2020-03-27T18:16:37.6371081Z
2020-03-27T18:16:37.6371354Z :param timestr:
2020-03-27T18:16:37.6371687Z A string containing a date/time stamp.
2020-03-27T18:16:37.6371991Z
2020-03-27T18:16:37.6372246Z :param parserinfo:
2020-03-27T18:16:37.6372622Z A :class:`parserinfo` object containing parameters for the parser.
2020-03-27T18:16:37.6373134Z If ``None``, the default arguments to the :class:`parserinfo`
2020-03-27T18:16:37.6373533Z constructor are used.
2020-03-27T18:16:37.6373811Z
2020-03-27T18:16:37.6374133Z The ``**kwargs`` parameter takes the following keyword arguments:
2020-03-27T18:16:37.6374471Z
2020-03-27T18:16:37.6374723Z :param default:
2020-03-27T18:16:37.6375085Z The default datetime object, if this is a datetime object and not
2020-03-27T18:16:37.6375578Z ``None``, elements specified in ``timestr`` replace elements in the
2020-03-27T18:16:37.6375955Z default object.
2020-03-27T18:16:37.6376228Z
2020-03-27T18:16:37.6376479Z :param ignoretz:
2020-03-27T18:16:37.6376863Z If set ``True``, time zones in parsed strings are ignored and a naive
2020-03-27T18:16:37.6377278Z :class:`datetime` object is returned.
2020-03-27T18:16:37.6377589Z
2020-03-27T18:16:37.6378571Z :param tzinfos:
2020-03-27T18:16:37.6379161Z Additional time zone names / aliases which may be present in the
2020-03-27T18:16:37.6379643Z string. This argument maps time zone names (and optionally offsets
2020-03-27T18:16:37.6380091Z from those time zones) to time zones. This parameter can be a
2020-03-27T18:16:37.6380546Z dictionary with timezone aliases mapping time zone names to time
2020-03-27T18:16:37.6380981Z zones or a function taking two parameters (``tzname`` and
2020-03-27T18:16:37.6381394Z ``tzoffset``) and returning a time zone.
2020-03-27T18:16:37.6381699Z
2020-03-27T18:16:37.6382025Z The timezones to which the names are mapped can be an integer
2020-03-27T18:16:37.6382494Z offset from UTC in seconds or a :class:`tzinfo` object.
2020-03-27T18:16:37.6382838Z
2020-03-27T18:16:37.6383237Z .. doctest::
2020-03-27T18:16:37.6383606Z :options: +NORMALIZE_WHITESPACE
2020-03-27T18:16:37.6384047Z
2020-03-27T18:16:37.6384378Z >>> from dateutil.parser import parse
2020-03-27T18:16:37.6384771Z >>> from dateutil.tz import gettz
2020-03-27T18:16:37.6385594Z >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")}
2020-03-27T18:16:37.6386479Z >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos)
2020-03-27T18:16:37.6387401Z datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200))
2020-03-27T18:16:37.6388159Z >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos)
2020-03-27T18:16:37.6388663Z datetime.datetime(2012, 1, 19, 17, 21,
2020-03-27T18:16:37.6389349Z tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago'))
2020-03-27T18:16:37.6390349Z
2020-03-27T18:16:37.6390823Z This parameter is ignored if ``ignoretz`` is set.
2020-03-27T18:16:37.6391283Z
2020-03-27T18:16:37.6391595Z :param dayfirst:
2020-03-27T18:16:37.6392353Z Whether to interpret the first value in an ambiguous 3-integer date
2020-03-27T18:16:37.6393105Z (e.g. 01/05/09) as the day (``True``) or month (``False``). If
2020-03-27T18:16:37.6393685Z ``yearfirst`` is set to ``True``, this distinguishes between YDM and
2020-03-27T18:16:37.6394156Z YMD. If set to ``None``, this value is retrieved from the current
2020-03-27T18:16:37.6394610Z :class:`parserinfo` object (which itself defaults to ``False``).
2020-03-27T18:16:37.6394968Z
2020-03-27T18:16:37.6395226Z :param yearfirst:
2020-03-27T18:16:37.6395841Z Whether to interpret the first value in an ambiguous 3-integer date
2020-03-27T18:16:37.6396511Z (e.g. 01/05/09) as the year. If ``True``, the first number is taken to
2020-03-27T18:16:37.6397349Z be the year, otherwise the last number is taken to be the year. If
2020-03-27T18:16:37.6398069Z this is set to ``None``, the value is retrieved from the current
2020-03-27T18:16:37.6398617Z :class:`parserinfo` object (which itself defaults to ``False``).
2020-03-27T18:16:37.6399037Z
2020-03-27T18:16:37.6399333Z :param fuzzy:
2020-03-27T18:16:37.6399809Z Whether to allow fuzzy parsing, allowing for string like "Today is
2020-03-27T18:16:37.6400291Z January 1, 2047 at 8:21:00AM".
2020-03-27T18:16:37.6400628Z
2020-03-27T18:16:37.6400954Z :param fuzzy_with_tokens:
2020-03-27T18:16:37.6401391Z If ``True``, ``fuzzy`` is automatically set to True, and the parser
2020-03-27T18:16:37.6401903Z will return a tuple where the first element is the parsed
2020-03-27T18:16:37.6402536Z :class:`datetime.datetime` datetimestamp and the second element is
2020-03-27T18:16:37.6403633Z a tuple containing the portions of the string which were ignored:
2020-03-27T18:16:37.6404036Z
2020-03-27T18:16:37.6404341Z .. doctest::
2020-03-27T18:16:37.6404638Z
2020-03-27T18:16:37.6405107Z >>> from dateutil.parser import parse
2020-03-27T18:16:37.6405634Z >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True)
2020-03-27T18:16:37.6406513Z (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at '))
2020-03-27T18:16:37.6407199Z
2020-03-27T18:16:37.6407464Z :return:
2020-03-27T18:16:37.6407834Z Returns a :class:`datetime.datetime` object or, if the
2020-03-27T18:16:37.6408278Z ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the
2020-03-27T18:16:37.6408981Z first element being a :class:`datetime.datetime` object, the second
2020-03-27T18:16:37.6409472Z a tuple containing the fuzzy tokens.
2020-03-27T18:16:37.6409793Z
2020-03-27T18:16:37.6416049Z :raises ValueError:
2020-03-27T18:16:37.6416719Z Raised for invalid or unknown string format, if the provided
2020-03-27T18:16:37.6417444Z :class:`tzinfo` is not in a valid format, or if an invalid date
2020-03-27T18:16:37.6417891Z would be created.
2020-03-27T18:16:37.6418311Z
2020-03-27T18:16:37.6418726Z :raises OverflowError:
2020-03-27T18:16:37.6419273Z Raised if the parsed date exceeds the largest valid C integer on
2020-03-27T18:16:37.6419711Z your system.
2020-03-27T18:16:37.6420018Z """
2020-03-27T18:16:37.6420330Z if parserinfo:
2020-03-27T18:16:37.6420877Z return parser(parserinfo).parse(timestr, **kwargs)
2020-03-27T18:16:37.6421255Z else:
2020-03-27T18:16:37.6421644Z > return DEFAULTPARSER.parse(timestr, **kwargs)
2020-03-27T18:16:37.6422091Z
2020-03-27T18:16:37.6423228Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/dateutil/parser/_parser.py:1374:
2020-03-27T18:16:37.6423959Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2020-03-27T18:16:37.6424342Z
2020-03-27T18:16:37.6424658Z self = <dateutil.parser._parser.parser object at 0x7f1de46b9350>
2020-03-27T18:16:37.6425310Z timestr = '五, 27 3月 2020 18:11:53 GMT'
2020-03-27T18:16:37.6425800Z default = datetime.datetime(2020, 3, 27, 0, 0), ignoretz = False
2020-03-27T18:16:37.6426475Z tzinfos = {'GMT': tzutc()}, kwargs = {}, res = None, skipped_tokens = None
2020-03-27T18:16:37.6426876Z
2020-03-27T18:16:37.6427164Z def parse(self, timestr, default=None,
2020-03-27T18:16:37.6427538Z ignoretz=False, tzinfos=None, **kwargs):
2020-03-27T18:16:37.6427849Z """
2020-03-27T18:16:37.6428204Z Parse the date/time string into a :class:`datetime.datetime` object.
2020-03-27T18:16:37.6428565Z
2020-03-27T18:16:37.6428819Z :param timestr:
2020-03-27T18:16:37.6429210Z Any date/time string using the supported formats.
2020-03-27T18:16:37.6429526Z
2020-03-27T18:16:37.6429779Z :param default:
2020-03-27T18:16:37.6430167Z The default datetime object, if this is a datetime object and not
2020-03-27T18:16:37.6430776Z ``None``, elements specified in ``timestr`` replace elements in the
2020-03-27T18:16:37.6431441Z default object.
2020-03-27T18:16:37.6431742Z
2020-03-27T18:16:37.6432049Z :param ignoretz:
2020-03-27T18:16:37.6432467Z If set ``True``, time zones in parsed strings are ignored and a
2020-03-27T18:16:37.6432975Z naive :class:`datetime.datetime` object is returned.
2020-03-27T18:16:37.6433343Z
2020-03-27T18:16:37.6433628Z :param tzinfos:
2020-03-27T18:16:37.6434055Z Additional time zone names / aliases which may be present in the
2020-03-27T18:16:37.6434682Z string. This argument maps time zone names (and optionally offsets
2020-03-27T18:16:37.6435260Z from those time zones) to time zones. This parameter can be a
2020-03-27T18:16:37.6435702Z dictionary with timezone aliases mapping time zone names to time
2020-03-27T18:16:37.6436155Z zones or a function taking two parameters (``tzname`` and
2020-03-27T18:16:37.6436696Z ``tzoffset``) and returning a time zone.
2020-03-27T18:16:37.6437208Z
2020-03-27T18:16:37.6437620Z The timezones to which the names are mapped can be an integer
2020-03-27T18:16:37.6438077Z offset from UTC in seconds or a :class:`tzinfo` object.
2020-03-27T18:16:37.6438437Z
2020-03-27T18:16:37.6438699Z .. doctest::
2020-03-27T18:16:37.6439054Z :options: +NORMALIZE_WHITESPACE
2020-03-27T18:16:37.6439354Z
2020-03-27T18:16:37.6439678Z >>> from dateutil.parser import parse
2020-03-27T18:16:37.6440070Z >>> from dateutil.tz import gettz
2020-03-27T18:16:37.6440793Z >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")}
2020-03-27T18:16:37.6441604Z >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos)
2020-03-27T18:16:37.6442377Z datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200))
2020-03-27T18:16:37.6443465Z >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos)
2020-03-27T18:16:37.6443989Z datetime.datetime(2012, 1, 19, 17, 21,
2020-03-27T18:16:37.6444715Z tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago'))
2020-03-27T18:16:37.6445160Z
2020-03-27T18:16:37.6445519Z This parameter is ignored if ``ignoretz`` is set.
2020-03-27T18:16:37.6445856Z
2020-03-27T18:16:37.6446238Z :param \\*\\*kwargs:
2020-03-27T18:16:37.6447528Z Keyword arguments as passed to ``_parse()``.
2020-03-27T18:16:37.6448032Z
2020-03-27T18:16:37.6448353Z :return:
2020-03-27T18:16:37.6448768Z Returns a :class:`datetime.datetime` object or, if the
2020-03-27T18:16:37.6449286Z ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the
2020-03-27T18:16:37.6449817Z first element being a :class:`datetime.datetime` object, the second
2020-03-27T18:16:37.6450310Z a tuple containing the fuzzy tokens.
2020-03-27T18:16:37.6450667Z
2020-03-27T18:16:37.6450965Z :raises ParserError:
2020-03-27T18:16:37.6451396Z Raised for invalid or unknown string format, if the provided
2020-03-27T18:16:37.6451904Z :class:`tzinfo` is not in a valid format, or if an invalid date
2020-03-27T18:16:37.6452350Z would be created.
2020-03-27T18:16:37.6452800Z
2020-03-27T18:16:37.6453091Z :raises TypeError:
2020-03-27T18:16:37.6453885Z Raised for non-string or character stream input.
2020-03-27T18:16:37.6454326Z
2020-03-27T18:16:37.6454656Z :raises OverflowError:
2020-03-27T18:16:37.6455085Z Raised if the parsed date exceeds the largest valid C integer on
2020-03-27T18:16:37.6455507Z your system.
2020-03-27T18:16:37.6455922Z """
2020-03-27T18:16:37.6456431Z
2020-03-27T18:16:37.6456744Z if default is None:
2020-03-27T18:16:37.6457160Z default = datetime.datetime.now().replace(hour=0, minute=0,
2020-03-27T18:16:37.6457686Z second=0, microsecond=0)
2020-03-27T18:16:37.6458066Z
2020-03-27T18:16:37.6458428Z res, skipped_tokens = self._parse(timestr, **kwargs)
2020-03-27T18:16:37.6458778Z
2020-03-27T18:16:37.6459191Z if res is None:
2020-03-27T18:16:37.6459743Z > raise ParserError("Unknown string format: %s", timestr)
2020-03-27T18:16:37.6460612Z E dateutil.parser._parser.ParserError: Unknown string format: 五, 27 3月 2020 18:11:53 GMT
2020-03-27T18:16:37.6461135Z
2020-03-27T18:16:37.6461831Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/dateutil/parser/_parser.py:649: ParserError
2020-03-27T18:16:37.6462294Z
2020-03-27T18:16:37.6462654Z During handling of the above exception, another exception occurred:
2020-03-27T18:16:37.6463101Z
2020-03-27T18:16:37.6463488Z self = <pandas.tests.io.test_parquet.TestParquetPyArrow object at 0x7f1d76d75210>
2020-03-27T18:16:37.6464218Z df_compat = A B
2020-03-27T18:16:37.6464554Z 0 1 foo
2020-03-27T18:16:37.6464841Z 1 2 foo
2020-03-27T18:16:37.6465108Z 2 3 foo
2020-03-27T18:16:37.6465977Z s3_resource = s3.ServiceResource(), pa = 'pyarrow'
2020-03-27T18:16:37.6466419Z
2020-03-27T18:16:37.6466772Z def test_s3_roundtrip(self, df_compat, s3_resource, pa):
2020-03-27T18:16:37.6467176Z # GH #19134
2020-03-27T18:16:37.6467888Z > check_round_trip(df_compat, pa, path="s3://pandas-test/pyarrow.parquet")
2020-03-27T18:16:37.6468598Z
2020-03-27T18:16:37.6468923Z pandas/tests/io/test_parquet.py:488:
2020-03-27T18:16:37.6469382Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2020-03-27T18:16:37.6469883Z pandas/tests/io/test_parquet.py:176: in check_round_trip
2020-03-27T18:16:37.6470262Z compare(repeat)
2020-03-27T18:16:37.6470636Z pandas/tests/io/test_parquet.py:168: in compare
2020-03-27T18:16:37.6471190Z actual = read_parquet(path, **read_kwargs)
2020-03-27T18:16:37.6471616Z pandas/io/parquet.py:300: in read_parquet
2020-03-27T18:16:37.6472030Z return impl.read(path, columns=columns, **kwargs)
2020-03-27T18:16:37.6472668Z pandas/io/parquet.py:113: in read
2020-03-27T18:16:37.6473217Z path, _, _, should_close = get_filepath_or_buffer(path)
2020-03-27T18:16:37.6473645Z pandas/io/common.py:201: in get_filepath_or_buffer
2020-03-27T18:16:37.6474112Z filepath_or_buffer, encoding=encoding, compression=compression, mode=mode
2020-03-27T18:16:37.6474560Z pandas/io/s3.py:48: in get_filepath_or_buffer
2020-03-27T18:16:37.6475000Z file, _fs = get_file_and_filesystem(filepath_or_buffer, mode=mode)
2020-03-27T18:16:37.6475436Z pandas/io/s3.py:29: in get_file_and_filesystem
2020-03-27T18:16:37.6475860Z file = fs.open(_strip_schema(filepath_or_buffer), mode)
2020-03-27T18:16:37.6476799Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/fsspec/spec.py:774: in open
2020-03-27T18:16:37.6477280Z **kwargs
2020-03-27T18:16:37.6478236Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/s3fs/core.py:377: in _open
2020-03-27T18:16:37.6478798Z autocommit=autocommit, requester_pays=requester_pays)
2020-03-27T18:16:37.6479601Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/s3fs/core.py:1095: in __init__
2020-03-27T18:16:37.6480120Z cache_type=cache_type)
2020-03-27T18:16:37.6480867Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/fsspec/spec.py:1056: in __init__
2020-03-27T18:16:37.6481404Z self.details = fs.info(path)
2020-03-27T18:16:37.6482347Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/s3fs/core.py:528: in info
2020-03-27T18:16:37.6483012Z Key=key, **version_id_kw(version_id), **self.req_kw)
2020-03-27T18:16:37.6484814Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/s3fs/core.py:199: in _call_s3
2020-03-27T18:16:37.6485427Z return method(**additional_kwargs)
2020-03-27T18:16:37.6486423Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/client.py:316: in _api_call
2020-03-27T18:16:37.6487194Z return self._make_api_call(operation_name, kwargs)
2020-03-27T18:16:37.6488049Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/client.py:613: in _make_api_call
2020-03-27T18:16:37.6488645Z operation_model, request_dict, request_context)
2020-03-27T18:16:37.6489404Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/client.py:632: in _make_request
2020-03-27T18:16:37.6489999Z return self._endpoint.make_request(operation_model, request_dict)
2020-03-27T18:16:37.6491059Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/endpoint.py:102: in make_request
2020-03-27T18:16:37.6491692Z return self._send_request(request_dict, operation_model)
2020-03-27T18:16:37.6492529Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/endpoint.py:135: in _send_request
2020-03-27T18:16:37.6493171Z request, operation_model, context)
2020-03-27T18:16:37.6494139Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/endpoint.py:167: in _get_response
2020-03-27T18:16:37.6494730Z request, operation_model)
2020-03-27T18:16:37.6495541Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/endpoint.py:218: in _do_get_response
2020-03-27T18:16:37.6496167Z response_dict, operation_model.output_shape)
2020-03-27T18:16:37.6497203Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:242: in parse
2020-03-27T18:16:37.6497800Z parsed = self._do_parse(response, shape)
2020-03-27T18:16:37.6498590Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:774: in _do_parse
2020-03-27T18:16:37.6499160Z member_shapes, final_parsed)
2020-03-27T18:16:37.6499969Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:833: in _parse_non_payload_attrs
2020-03-27T18:16:37.6500723Z member_shape, headers[header_name])
2020-03-27T18:16:37.6501547Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:302: in _parse_shape
2020-03-27T18:16:37.6502128Z return handler(shape, node)
2020-03-27T18:16:37.6502916Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:175: in _get_text_content
2020-03-27T18:16:37.6503488Z return func(self, shape, text)
2020-03-27T18:16:37.6504298Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/parsers.py:462: in _handle_timestamp
2020-03-27T18:16:37.6504870Z return self._timestamp_parser(text)
2020-03-27T18:16:37.6505668Z ../../../miniconda3/envs/pandas-dev/lib/python3.7/site-packages/botocore/utils.py:626: in parse_timestamp
2020-03-27T18:16:37.6506266Z return _parse_timestamp_with_tzinfo(value, tzinfo)
2020-03-27T18:16:37.6506771Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2020-03-27T18:16:37.6507148Z
2020-03-27T18:16:37.6507825Z value = '五, 27 3月 2020 18:11:53 GMT', tzinfo = <class 'dateutil.tz.tz.tzlocal'>
2020-03-27T18:16:37.6508344Z
2020-03-27T18:16:37.6508684Z def _parse_timestamp_with_tzinfo(value, tzinfo):
2020-03-27T18:16:37.6509139Z """Parse timestamp with pluggable tzinfo options."""
2020-03-27T18:16:37.6509563Z if isinstance(value, (int, float)):
2020-03-27T18:16:37.6509962Z # Possibly an epoch time.
2020-03-27T18:16:37.6510383Z return datetime.datetime.fromtimestamp(value, tzinfo())
2020-03-27T18:16:37.6510764Z else:
2020-03-27T18:16:37.6511070Z try:
2020-03-27T18:16:37.6511478Z return datetime.datetime.fromtimestamp(float(value), tzinfo())
2020-03-27T18:16:37.6511946Z except (TypeError, ValueError):
2020-03-27T18:16:37.6512297Z pass
2020-03-27T18:16:37.6512606Z try:
2020-03-27T18:16:37.6513006Z # In certain cases, a timestamp marked with GMT can be parsed into a
2020-03-27T18:16:37.6513528Z # different time zone, so here we provide a context which will
2020-03-27T18:16:37.6513992Z # enforce that GMT == UTC.
2020-03-27T18:16:37.6514846Z return dateutil.parser.parse(value, tzinfos={'GMT': tzutc()})
2020-03-27T18:16:37.6515508Z except (TypeError, ValueError) as e:
2020-03-27T18:16:37.6516237Z > raise ValueError('Invalid timestamp "%s": %s' % (value, e))
2020-03-27T18:16:37.6517538Z E ValueError: Invalid timestamp "五, 27 3月 2020 18:11:53 GMT": Unknown string format: 五, 27 3月 2020 18:11:53 GMT