
    j                         S SK r S SKrS SKJrJr  S SKJr  \" S5      r\S-  r\S-  r	\S-  r
\S-  r\	S	-  r\	S
-  r\
S-  r\
S-  rSrSrS rS r " S S\5      r\S:X  a  \" \\4\5      r\R/                  5         gg)    N)BaseHTTPRequestHandlerThreadingHTTPServer)Pathz/home/sebas/work/gastos-europaappderiveddatazanalysis.htmlztransactions.jsonzsummary.jsonzallocations.jsonzexcluded.jsonz	127.0.0.1iI  c                 p     [         R                  " U R                  5       5      $ ! [         a    Us $ f = fN)jsonloads	read_text	Exception)pathdefaults     ,/home/sebas/work/gastos-europa/app/server.py	read_jsonr      s1    zz$..*++ s   #& 55c                     U R                   R                  SSS9  U R                  U R                  S-   5      nUR	                  [
        R                  " USSS9S-   5        [        R                  " X 5        g )NT)parentsexist_okz.tmp   F)indentensure_ascii
)	parentmkdirwith_suffixsuffix
write_textr   dumpsosreplace)r   objtmps      r   
write_jsonr$      s\    KKdT2


4;;/
0CNN4::c!%@4GHJJs    c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
Handler"   c                 \   [        U[        5      (       a  UR                  S5      OUnU R                  U5        U R	                  SU5        U R	                  S[        [        U5      5      5        U R	                  SS5        U R                  5         U R                  R                  U5        g )Nutf-8zContent-TypeContent-LengthzCache-Controlzno-store)	
isinstancestrencodesend_responsesend_headerlenend_headerswfilewrite)selfcodebodyctypebody_bs        r   _sendHandler._send#   s    )3D#)>)>W%D4 /)3s6{+;<*5

 r%   c                 P    U R                  U[        R                  " USS9S5        g )NF)r   application/json; charset=utf-8)r:   r   r   )r5   r6   r"   s      r   _jsonHandler._json,   s    

4Ce<>_`r%   c                 ^   U R                   S;   a%  U R                  S[        R                  5       S5      $ U R                   S:X  aQ  [	        [
        / 5      [	        [        0 5      [	        [        0 5      [	        [        / 5      S.nU R                  SU5      $ U R                   S:X  a   U R                  S[	        [        0 5      5      $ U R                   S:X  a   U R                  S[	        [        / 5      5      $ U R                   S:X  a  U R                  SS	S
05      $ U R                  SSS05      $ )N)/z/index.html   ztext/html; charset=utf-8z	/api/data)transactionssummaryallocationsexcluded/api/allocations/api/excludedz/healthzokT  error	not found)
r   r:   HTMLr   r   TXSUMMARYALLOCEXCLUDEDr>   )r5   payloads     r   do_GETHandler.do_GET/   s    99,,::c4>>#35OPP99# )"b 1$Wb1(3%h3	G ::c7++99**::c9UB#78899'::c9Xr#:;;99
"::cD$<00zz#566r%   c                     [        U R                  R                  SS5      5      nU(       a*  U R                  R	                  U5      R                  S5      OSn[        R                  " U=(       d    S5      nU R                  S:X  Ga  [        [        0 5      n[        U[        5      (       a  S	U;   a  [        UR                  S	S
5      5      R!                  5       n[        UR                  SS
5      5      R!                  5       nU(       d  U R                  SSS05      $ U(       a  XuU'   OUR#                  US 5        [%        [        U5        U R                  SSUS.5      $ [        U[        5      (       a  SU;   a  [        US   [        5      (       a  US   R'                  5        VV	s0 s H:  u  p[        U	5      R!                  5       (       d  M%  [        U5      [        U	5      _M<     n
nn	[%        [        U
5        U R                  SSU
S.5      $ U R                  SSS05      $ U R                  S:X  a  [        [(        / 5      n[        U[*        5      (       d  / nU Vs/ s H.  n[        U5      R!                  5       (       d  M#  [        U5      PM0     nn[        U[        5      (       a)  [        UR                  SS
5      5      R!                  5       OS
nU(       d  U R                  SSS05      $ X;  a!  UR-                  U5        [%        [(        U5        U R                  SSUS.5      $ U R                  SSS05      $ ! [         a(  nU R                  SS[        U5      S.5      s S nA$ S nAff = fs  sn	nf s  snf )Nr+   0r*   z{}i  zbad json)rK   detailrG   id 
allocationrK   z
missing idrB   T)rI   rE   rE   z*expected {id, allocation} or {allocations}rH   tx_keyzmissing tx_key)rI   rF   rJ   rL   )intheadersgetrfilereaddecoder   r   r   r>   r-   r   r   rP   r,   dictstrippopr$   itemsrQ   listappend)r5   lengthrawr7   ecurrentidentvalkvcleanxkeys                r   do_POSTHandler.do_POSTB   s   	L))*:C@AF=C$**//&)009C::ckT*D 99**r*G$%%$$,DHHT2./557$((<45;;=::cG\+BCC%(ENKKt,5'*zz#d7'KLL$%%-4*?JtTaObdhDiDi484G4M4M4Ob4ODASVWXSYS_S_SaQQ4Ob5%(zz#d5'IJJ::cG-Y#Z[[99'"-Ggt,,'.Aw!#a&,,.vs1vwGA9CD$9O9O#dhhx,-335UWCzz#1A'BCC!s#8W-::c$G#DEEzz#566A  	L::cZ3q6#JKK	L  c Bs6   A7M .$M<M<&"NN
M9M4.M94M9c                     g r
    )r5   fmtargss      r   log_messageHandler.log_messagei   s    r%   rv   N)r=   )
__name__
__module____qualname____firstlineno__r:   r>   rS   rs   ry   __static_attributes__rv   r%   r   r'   r'   "   s    !a7&%7Nr%   r'   __main__)r   r    http.serverr   r   pathlibr   BASEAPPDERIVEDDATArM   rN   rO   rP   rQ   HOSTPORTr   r$   r'   r{   serverserve_foreverrv   r%   r   <module>r      s     	 C ,-
Ul

f}o""
N
"!!/!H$ HV z $w7F
 r%   