o
    i                     @   s   d dl m Z mZ d dlmZ d dlZd dlZd dlmZ d dlZdddZ	dddZ
d	d
 Zdd Zdd Zdd ZG dd deZedZdd Zdd Zdd ZdddZdS )    )datetime	timedelta)ArgumentTypeErrorN)force_to_epoch_secondsc                    s0   | st d pdd   fdd| dD S )NzInvalid comma listc                 S      | S N )ir   r   D/home/ubuntu/.local/lib/python3.10/site-packages/datadog/util/cli.py<lambda>   s    zcomma_list.<locals>.<lambda>c                    s    g | ]}|  r |  qS r   )strip.0r	   	item_funcr   r
   
<listcomp>   s     zcomma_list.<locals>.<listcomp>,)r   splitlist_strr   r   r   r
   
comma_list   s   r   c                 C   s   t t| |dS )Nr   )setr   r   r   r   r
   	comma_set   s   r   c                 C   s   | sg S t | S r   r   )r   r   r   r
   comma_list_or_empty   s   r   c                 C   s   | st dzt| }t|ttfrdd |D }|W S W n	 ty'   Y nw zdd |  dD W S  tyC   t d	| w )NzInvalid list of intsc                 S   s   g | ]}t |qS r   )intr   r   r   r
   r   %   s    z list_of_ints.<locals>.<listcomp>c                 S   s   g | ]}t | qS r   )r   r   r   r   r   r
   r   +   s    r   zInvalid list of ints: {0})
r   jsonloads
isinstancelistr   	Exceptionr   r   format)int_csvjr   r   r
   list_of_ints   s    
r$   c                 C   s   dd }t | |S )Nc                 S   s"   zt | W S  ty   |  Y S w r   )r   
ValueError)itemr   r   r
   
int_or_str1   s
   
z)list_of_ints_and_strs.<locals>.int_or_strr   )csvr'   r   r   r
   list_of_ints_and_strs0   s   
r)   c                 C   s   t t| S r   )r   r$   )r"   r   r   r
   set_of_ints:      r*   c                   @   s   e Zd ZdZdS )DateParsingErrorz?Thrown if parse_date exhausts all possible parsings of a stringN)__name__
__module____qualname____doc__r   r   r   r
   r,   >   s    r,   z(\d+)\s?(\w+) (ago|ahead)c                   C   s   t  jdddddS )z< Truncate a date to midnight. Default to UTC midnight today.r   )hourminutesecondmicrosecond)r   utcnowreplacer   r   r   r
   	_midnightE   s   r7   c                 C   s   t | ddS )NT)to_epoch_ts)
parse_date)date_strr   r   r
   parse_date_as_epoch_timestampJ   r+   r;   c                 C   r   )z NOOP - only here for pylint r   dr   r   r
   _parse_date_noop_formatterN   s   r>   Fc                    s  t }|rt}t| tr|| S t| tjr|tt| S | dkr(|t S | dkr6|t t	dd S | dkrD|t t	dd S | 
drt| }|rU| }n	| ddd  }t|d }|d }d	dd|d
  }|swJ |g d}tdd |D }	|	||}
|
d	 dkr|
d7 }
|
|v sJ d|
|f |t |t	d i |
|i  S | dkr|t S dd   fdd}dd dd dd dd dd dd dd dd dd  |g}|D ]}z	||| W   S  ty   Y qw td| )!Ntoday	yesterday   )daystomorrow)agoahead r      )weeksrB   hoursminutessecondsc                 S   s   g | ]
}|d d |fqS )NrA   r   )r   ur   r   r
   r   p   s    zparse_date.<locals>.<listcomp>sz'%s' not in %snowc                 S   s   t d|  tt| S )Nz_from_epoch_timestamp({}))printr!   r   utcfromtimestampfloat)rL   r   r   r
   _from_epoch_timestampz   s   z)parse_date.<locals>._from_epoch_timestampc                    s2   t d|  t| d }t d| |  |S )Nz_from_epoch_ms_timestamp({})g     @@z"_from_epoch_ms_timestamp({}) -> {})rP   r!   rR   )millisin_secrS   r   r
   _from_epoch_ms_timestamp~   s   z,parse_date.<locals>._from_epoch_ms_timestampc                 S      t | dS )Nz%Y-%m-%d %H:%M:%S.%fr   strptimer<   r   r   r
   r          zparse_date.<locals>.<lambda>c                 S   rX   )Nz%Y-%m-%d %H:%M:%SrY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%m-%dT%H:%M:%S.%frY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%m-%dT%H:%M:%SrY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%m-%d %H:%MrY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%m-%d-%HrY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%m-%drY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%Y-%mrY   r<   r   r   r
   r      r[   c                 S   rX   )Nz%YrY   r<   r   r   r
   r      r[   zCould not parse {0} as dater   )r>   r   r   r   timestruct_timefromtimestampmktimer7   r   endswith_date_fieldrematchgroupsr   r   dictgetr5   r    r,   r!   )r:   r8   	formattermfieldsnum
short_unittime_directionunitsshort_unitsunitrW   parse_funcs
parse_funcr   rV   r
   r9   S   sh   




"r9   r   )F)r   r   argparser   r   redatadog.util.formatr   r\   r   r   r   r$   r)   r*   r    r,   compilera   r7   r;   r>   r9   r   r   r   r
   <module>   s$   



