Skip to content

Commit 8577d70

Browse files
committed
added integration tests for timezone aware pandas dataframe and series
1 parent 2e780bd commit 8577d70

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

arctic/store/_pandas_ndarray_store.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ast
22
import logging
33

4+
from arctic._util import NP_OBJECT_DTYPE
45
from bson.binary import Binary
56
from pandas import DataFrame, Series, Panel
67
import numpy as np

tests/integration/store/test_version_store.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import struct
44
from datetime import datetime as dt, timedelta as dtd
55
import pandas as pd
6-
from arctic import VERSION_STORE
6+
from arctic import VERSION_STORE, PandasDataFrameStore, PandasSeriesStore
77
from pandas.util.testing import assert_frame_equal, assert_series_equal
88
from pymongo.errors import OperationFailure
99
from pymongo.server_type import SERVER_TYPE
@@ -1587,3 +1587,23 @@ def test_write_series_with_some_objects(library, input_series):
15871587
library.write(symbol='symX', data=input_series)
15881588
read_data = library.read(symbol='symX').data
15891589
assert_series_equal(input_series, read_data)
1590+
1591+
1592+
def test_can_write_tz_aware_data_df(library):
1593+
mydf = _mixed_test_data()['index_tz_aware'][0]
1594+
library.write(symbol='symTz', data=mydf)
1595+
read_data = library.read(symbol='symTz').data
1596+
# Arctic converts by default the data to UTC, convert back
1597+
read_data.colB = read_data.colB.dt.tz_localize('UTC').dt.tz_convert(read_data.index.tzinfo)
1598+
assert library._versions.find_one({'symbol': 'symTz'})['type'] == PandasDataFrameStore.TYPE
1599+
assert_frame_equal(mydf, read_data)
1600+
1601+
1602+
def test_can_write_tz_aware_data_series(library):
1603+
myseries = _mixed_test_data()['index_tz_aware'][0]['colB']
1604+
library.write(symbol='symTzSer', data=myseries)
1605+
read_data = library.read(symbol='symTzSer').data
1606+
# Arctic converts by default the data to UTC, convert back
1607+
read_data = read_data.dt.tz_localize('UTC').dt.tz_convert(read_data.index.tzinfo)
1608+
assert library._versions.find_one({'symbol': 'symTzSer'})['type'] == PandasSeriesStore.TYPE
1609+
assert_series_equal(myseries, read_data)

tests/unit/serialization/serialization_test_data.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ def _new_np_nd_array(val):
105105
multi_column_with_some_objects = multi_column_no_multiindex.copy()
106106
multi_column_with_some_objects.iloc[1:, 1:2] = 'Convert this columnt dtype to object'
107107

108+
# Index with timezone-aware datetime
109+
index_tz_aware = pd.DataFrame(data={'colA': range(10),
110+
'colB': pd.date_range('20130101', periods=10, tz='US/Eastern')},
111+
index=pd.date_range('20130101', periods=10, tz='US/Eastern'))
112+
index_tz_aware.index.name = 'index'
113+
108114
_TEST_DATA = {
109115
'onerow': (onerow_ts, df_serializer.serialize(onerow_ts),
110116
df_serializer.can_convert_to_records_without_objects(small_ts, 'symA')),
@@ -156,7 +162,9 @@ def _new_np_nd_array(val):
156162
df_serializer.can_convert_to_records_without_objects(multi_column_with_some_objects, 'symA')),
157163
'n_dimensional_df': (n_dimensional_df, Exception, None),
158164
'mixed_dtypes_df': (mixed_dtypes_df, df_serializer.serialize(mixed_dtypes_df),
159-
df_serializer.can_convert_to_records_without_objects(mixed_dtypes_df, 'symA'))
165+
df_serializer.can_convert_to_records_without_objects(mixed_dtypes_df, 'symA')),
166+
'index_tz_aware': (index_tz_aware, df_serializer.serialize(index_tz_aware),
167+
df_serializer.can_convert_to_records_without_objects(index_tz_aware, 'symA'))
160168
}
161169
return _TEST_DATA
162170

0 commit comments

Comments
 (0)