Source code for tstore.archive.ts.utility
#!/usr/bin/env python3
"""
Created on Mon Apr 8 16:31:23 2024.
@author: ghiggi
"""
from datetime import datetime
from typing import Optional, Union
from pandas._typing import IntervalClosedType
# FilterDateTimeType = datetime | str
FilterDateTimeType = Union[datetime, str]
[docs]
def get_time_filters(
*,
start_time: Optional[FilterDateTimeType] = None,
end_time: Optional[FilterDateTimeType] = None,
inclusive: IntervalClosedType = "both",
) -> Union[list[tuple[str, str, FilterDateTimeType]], None]:
"""
Define filters for Parquet Dataset subsetting at read-time.
Parameters
----------
start_time, end_time : datetime.datetime or str, optional
Start and end time to filter the dataset. The default value of None means no
filtering.
inclusive : {"both", "neither", "left", "right"}, default "both"
Define which bounds of the range are included.
Returns
-------
filters : list of tuples or None
List of tuples of the form (column_name, operator, value) to filter the dataset
at read time. Returns None if `start_time` and `end_time` are both None.
"""
filters = []
if start_time is not None:
start_op = ">"
if inclusive in ["both", "left"]:
start_op += "="
# TODO: avoid hardcoding "time" here?
filters.append(("time", start_op, start_time))
if end_time is not None:
end_op = "<"
if inclusive in ["both", "right"]:
end_op += "="
# TODO: avoid hardcoding "time" here?
filters.append(("time", end_op, end_time))
if filters:
return filters
return None