o
    j                     @  s  d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ dWddZdXdYddZdZddZd[ddZd\ddZi ddddddd dd!d"d#d"d$d"d%d&d'd&d(d&d)d*d+d*d,d*d-d*d.d/d0d/d1d2i d3d2d4d2d5d6d7d6d8d6d9d:d;d:d<d:d=d:d>d?d@d?dAd?dBd?dCdDdEdDdFdDdGdHdHdHdIdIdIdIdJZedKZd]dMdNZd^d_dRdSZd`dadUdVZdS )b    )annotationsN)datedatetime)Decimal)Path)Anypathr   returnNonec                 C  s   | j jddd d S )NT)parentsexist_ok)parentmkdir)r    r   ;/var/www/csodoo/proyecto_oportunidades/utils/json_helper.py
ensure_dir   s   r   defaultr   c                 C  sH   |   s|S | jddd}t|W  d    S 1 sw   Y  d S )Nrutf-8encoding)existsopenjsonload)r   r   handler   r   r   	read_json   s
   $r   datac                 C  sh   t |  | | jd }|jddd}tj||ddtd W d   n1 s(w   Y  ||  dS )	z;Write JSON atomically so a crash does not corrupt the file.z.tmpwr   r   F   )ensure_asciiindentr   N)r   with_suffixsuffixr   r   dump_json_defaultreplace)r   r   tmpr   r   r   r   
write_json   s   r(   valuec                 C  s<   t | tr	t| S t | ttfr| dS tdt|  )N%Y-%m-%dzTipo no serializable: )
isinstancer   floatr   r   strftime	TypeErrortype)r)   r   r   r   r%      s
   

r%   payloadkeysstrc                 G  s   | du rdS t | tr| rt| d g|R  S t | tsdS |D ]}|| v r2| | dvr2| |   S q dD ]}| |}t |ttfrSt|g|R  }|dvrS|  S q5dS )z7Return the first matching key in a flat or nested dict.Nr   N )r   cliente	resultadoresultr0   )r+   listpickdictget)r0   r1   keynestinnerfoundr   r   r   r9   '   s$   

r9   jan   januaryeneenerofebr   februaryfebreromar   marchmarzoapr   aprilabrabrilmay   mayojun   junejuniojul   julyjulioaug   augustagoagostosep	   sept	september
septiembreoct
   octoberoctubrenov      )november	noviembredecdecemberdic	diciembrez"^([A-Za-z]+)\s+(\d{1,2})\s+(\d{4})
str | Nonec                 C  s   | dv rd S t | tr| dS t | tr|  S t|  }t|dkr7|d dkr7|d dkr7|d d S t	|}|rat
|d }|rat|dd	d|d
dt|dd
S d S )Nr3   r*   rg   rM   -rY   rA   rI   04d02dr   )r+   r   r-   r   	isoformatr2   striplen_SQLSERVER_DATEmatch_MONTHSr;   grouplowerint)r)   textmatchedmonthr   r   r   as_dateT   s   


$
.r           r,   float | intc              	   C  sb   | dv r|S t | trt| }nzt| }W n ttfy#   | Y S w | r,t|S t|dS )Nr3   r   )r+   r   r,   r.   
ValueError
is_integerr   round)r)   r   numberr   r   r   	as_numberi   s   


r   r   c              	   C  s2   | dv r|S zt | W S  ttfy   | Y S w )Nr3   )r   r.   r   )r)   r   r   r   r   as_intx   s   
r   )r   r   r	   r
   )N)r   r   r   r   r	   r   )r   r   r   r   r	   r
   )r)   r   r	   r   )r0   r   r1   r2   r	   r   )r)   r   r	   rs   )r   )r)   r   r   r,   r	   r   )r   )r)   r   r   r   r	   r   )
__future__r   r   rer   r   decimalr   pathlibr   typingr   r   r   r(   r%   r9   r|   compilerz   r   r   r   r   r   r   r   <module>   s    


	
				



