o
    g                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlZd dlmZmZ e dZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd ZdefddZG dd deZdd ZdS )    N)defaultdict)datedatetimetimezone)Decimal)UUID)tzlocaltzutcposthogc                 C   s   | j du p| j | du S )z1Determines if a given datetime.datetime is naive.N)tzinfo	utcoffset)dt r   D/var/www/visachat/venv/lib/python3.10/site-packages/posthog/utils.pyis_naive   s   r   c                 C   s"   | j | j| jd d  d  d S )z2Determines total seconds with python < 2.7 compat.   i  g    .A)microsecondssecondsdays)deltar   r   r   total_seconds   s   "r   c                 C   s@   t | rt |  }t|dk r| jt dS | jt dS | S )z:Attempts to convert a naive datetime to an aware datetime.   r   )r   r   nowr   replacer   r	   )r   r   r   r   r   guess_timezone   s   r   c                 C   s   |  dr| d d S | S )N/)endswith)hostr   r   r   remove_trailing_slash+   s   
r    c              
   C   s   t | tr	t| S t | trt| S t | tjttj	t
ttd fr#| S t | tttfr/t| S zt| dr?t| jr?|  } nt| drMt| jrM|  } W n tyh } ztd|  W Y d }~nd }~ww t | trrt| S t| S )N
model_dumpdictz)Could not serialize Pydantic-like model: )
isinstancer   floatr   strsixstring_typesboolnumbersNumberr   r   typesetlisttuple_clean_listhasattrcallabler!   r"   	TypeErrorlogdebug_clean_dict_coerce_unicode)itemer   r   r   clean1   s,   



r9   c                 C   s   dd | D S )Nc                 S   s   g | ]}t |qS r   )r9   ).0r7   r   r   r   
<listcomp>K   s    z_clean_list.<locals>.<listcomp>r   )list_r   r   r   r/   J   s   r/   c                 C   sR   i }t | D ]\}}zt|||< W q ty&   td||t| Y qw |S )NzXDictionary values must be serializeable to JSON "%s" value %s of type %s is unsupported.)r&   	iteritemsr9   r2   r3   warningr+   )dict_datakvr   r   r   r5   N   s   r5   c              
   C   s\   z	|  dd}W |S  ty- } zd|}| dd td| W Y d }~d S d }~ww )Nzutf-8strict:zError decoding: %s)decodeAttributeErrorjoinr3   r>   )cmplxr7   	exceptionr   r   r   r6   ]   s   
r6   returnc                 C   s(   zt |  W dS  t jy   Y dS w )NTF)recompileerror)valuer   r   r   is_valid_regexh   s   
rO   c                       s(   e Zd Z fddZ fddZ  ZS )SizeLimitedDictc                    s   t  j|i | || _d S N)super__init__max_size)selfrT   argskwargs	__class__r   r   rS   q   s   
zSizeLimitedDict.__init__c                    s(   t | | jkr|   t || d S rQ   )lenrT   clearrR   __setitem__)rU   keyrN   rX   r   r   r\   u   s   zSizeLimitedDict.__setitem__)__name__
__module____qualname__rS   r\   __classcell__r   r   rX   r   rP   p   s    rP   c                 C   s   | j d u r| jtjd} | S )Nr   )r   r   r   utc)date_objr   r   r   convert_to_datetime_aware|   s   
rd   )loggingr)   rK   collectionsr   r   r   r   decimalr   uuidr   r&   dateutil.tzr   r	   	getLoggerr3   r   r   r   r    r9   r/   r5   r6   r(   rO   rP   rd   r   r   r   r   <module>   s*    
