U vi @sddZddlZddlmZddlZddlmZddlmZda e Z GdddZ e dd d Z dS) z)Utils to get right Date parsing function.N) version_infotimezone)parserc@sLeZdZdZejfejddddZe dddZ d d Z ed d d Z dS) DateHelperax DateHelper to groups different implementations of date operations. If you would like to serialize the query results to custom timezone, you can use following code: .. code-block:: python from influxdb_client.client.util import date_utils from influxdb_client.client.util.date_utils import DateHelper import dateutil.parser from dateutil import tz def parse_date(date_string: str): return dateutil.parser.parse(date_string).astimezone(tz.gettz('ETC/GMT+2')) date_utils.date_helper = DateHelper() date_utils.date_helper.parse_date = parse_date N)rreturncCs ||_dS)z Initialize defaults. :param timezone: Default timezone used for serialization "datetime" without "tzinfo". Default value is "UTC". Nr)selfrr W/opt/alt/python38/lib/python3.8/site-packages/influxdb_client/client/util/date_utils.py__init__"szDateHelper.__init__) date_stringcCsdS)z Parse string into Date or Timestamp. :return: Returns a :class:`datetime.datetime` object or compliant implementation like :class:`class 'pandas._libs.tslibs.timestamps.Timestamp` Nr )rr r r r parse_date+szDateHelper.parse_datecCs.|jdd}|jd}|jd}|||S)z Get number of nanoseconds in timedelta. Solution comes from v1 client. Thx. https://github.com/influxdata/influxdb-python/pull/811 iQiʚ;i)daysseconds microseconds)rdeltaZnanoseconds_in_daysZnanoseconds_in_secondsZnanoseconds_in_microsr r r to_nanoseconds4s  zDateHelper.to_nanoseconds)valuecCs*|js||j|jdS|tjSdS)zt Convert datetime to UTC timezone. :param value: datetime :return: datetime in UTC )tzinfoN)rto_utcreplacer astimezonetzutc)rrr r r rAszDateHelper.to_utc) __name__ __module__ __qualname____doc__rrdatetimerr strr rrr r r r rs    r)rc Cs|tdkrxtftdkrnt}zddl}|j|_Wn8tk rhtjtj fdkr\t j j |_nt j |_YnX|aW5QRXtS)z Return DateHelper with proper implementation. If there is a 'ciso8601' than use 'ciso8601.parse_datetime' else use 'datetime.fromisoformat' (Python >= 3.11) or 'dateutil.parse' (Python < 3.11). Nr) ) date_helperlock_rciso8601Zparse_datetimer ModuleNotFoundErrorrmajorminorr fromisoformatrparse)Z _date_helperr$r r r get_date_helperNs  r*)rrsysr threadingrrZdateutilrr"Lockr#rr*r r r r s   @