
    PU-ha              	          d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlZd dlmZmZ d dlmZmZmZ d dlmZmZmZ d dlZd dlmZ d dlmZ d dlZg Zd	efd
Zd	efdZd Z  G d de          Z!d Z"ded	e#fdZ$defdZ%dBdedefdZ&defdZ'ded	efdZ(e&Z)e(Z*e'Z+e%Z,d Z-d Z.i fdZ/dCdefdZ0dCdefdZ1dDd ed!e#d"e2d	e3fd#Z4d$ Z5d!ed	efd%Z6d!ed	efd&Z7dEd'Z8d	efd(Z9d	e3fd)Z:dFd+Z;d,ed-ed	e#fd.Z<d	efd/Z=dGd1ed!ee>z  d2e2fd3Z?e	 G d4 d5                      Z@ G d6 d7eA          ZBd	efd8ZCd9 ZDd: ZEd!e3d	efd;ZFd!ed	efd<ZGd=ed	e2fd>ZH G d? d@          ZId aJdA ZKdS )H    )FlaskjsonifyResponsesessionrequestmake_responseg)	dataclassfieldN)dumpsJSONEncoder)OptionalAnySelf)datetime	timedeltadate)parser)Decimalreturnc                  p    t          t          j        di                               d          pd          S )NUserID)ir   get     /var/www/io_vulcan/Utils.py	getUserIDr       s/    	'+fR
 
 
$
$T
*
*
0b111r   c                  p    t          t          j        di                               d          pd          S )Nr   Name )sr   r   r   r   r   getUserNamer%      s/    	'+fR
 
 
$
$V
,
,
2333r   c                      t           j                            d          r&t           j                            d          d         } nt           j        } | S )NzX-Forwarded-Forr   )r   headersgetlistremote_addr)ips    r   getIPr+      sE    O-.. 011!4"""
r   c                       e Zd Zd ZdS )json_encoderc                 R   	 t          |t          t          t          f          r|                                S t          |t
                    r`|j        dk    rA|j        r d                    |j        |j                  S d                    |j                  S t          |j                  S 	 t          j                            | |          S #  	 |                                cY S #  t          |          cY cY S xY wxY w# t          $ r}t!          |           Y d }~d S d }~ww xY w)Nr   z{} days {} secondsz
{} seconds)
isinstancer   r   IODate	isoformatr   secondsdaysformatintjsonr   defaultto_JSONstr	Exceptionprint)selfoes      r   r7   zjson_encoder.default   s)   Xd6*++ ;;==
 	1i   y1}}	 ,!((	:::  +++KK$$T1---YY[[VVmmmmm 
   888888888se   5D AD ?D D .C C?C'$C?%D 'C<8C?:D <C??D 
D&D!!D&N)__name__
__module____qualname__r7   r   r   r   r-   r-      s#        " " " " "r   r-   c                 6    	 t          |            dS #  Y dS xY w)NTFfloatvals    r   
is_numericrG   @   s'    ***		s    ldatac                 4    | x g S t           d x\   | S  	 | gS Nr   )list)rH   s    r   toListrL   G   s2    tt
9vvvvv
< '>r   numc                     | x dS t           d x\   | S  	 	 t          |           S # t          $ r}t          d          cY d }~S d }~ww xY w)Ng        r   r   )rD   r:   rM   r>   s     r   toFloatrP   P   sp    
tt
$wwwww
: ::
   88OOOOOOs   ' 
A
AA
A
r7   c                 `    | x |S t           d x\   | S  	 	 t          |           S #  |cY S xY wrJ   r5   )rM   r7   s     r   toIntrS   \   sM    
tt
>
uuuuu
: s88ONNNs   ' -itemc                 L    | x dS t           d x\   | S  	 t          |           S )Nr#   r   r9   )rT   s    r   toStrrW   h   s7    tt
"
uuuuu
; 
d))r   c                     	 | t          d          S 	 t          t          t          |                     d          S # t          $ r}t          d          cY d }~S d }~ww xY w)Nz0.00   )r   roundr9   r:   rO   s     r   toMoneyr[   r   st    6??	S""1%%%   	s   > *> 
A!AA!A!c                 r    	 t          |          t          |           z
  t          |           z  S #  Y dS xY wNr   rC   )beforeafters     r   changer`      s9    
,,v
&%--	77	
s   .1 6c                     	 | dS t          | dt                    S # t          $ r9}t          d|           t          |            t	          |           cY d }~S d }~ww xY w)Nr#   T)skipkeysclszJSON troubletitledata)r   r-   r:   Debugr9   )rf   r>   s     r   toJSONrh      s~    		\
"
d|
4
4
44   n!$$$$+++	Ts     
A .AA A c                    t          |           t          |          k    r| S t          | t                    s| S | s|S 	 t          j        |           S # t
          $ r}	 |                     d          dk    r dd l}|                    |           p|cY d }~S n#  Y nxY wt          dt          |           | g           t          d|           |cY d }~S d }~ww xY w)N'r   zTrouble Parsing JSONrd   z
JSON Error)
typer/   r9   r6   loadsr:   findastliteral_evalrg   )rf   dr>   rn   s       r   getJSONrq      s   JJ$q''	,4 	+ 	
(	D		   
iinnaJJJD!!&Q&&&&&& 4$4::d*;<<<<l""""	
((((((s5   A 
C3BCCB7CCCr#   c                 &    	 | d         S #  |cY S xY wr]   r   rf   r7   s     r   firstrt      s"    	a.	...   
 c                 &    	 | d         S #  |cY S xY w)Nr   r   rs   s     r   lastrw      s"    	b/	...ru   Fr   rf   drop_keyc                 R    i }|D ]!}|                     |           }|r|| = |||<   "|S N)r   )r   rf   rx   rdatarowkeys         r   group_byr~      sD    	  S# 
5z%**r   c                      dS )Nz<h2>Woohoo!</h2><p>Debug:</p>r   r   r   r   tstr      s    ((r   c                 >    dd l }|j                            |           S r]   )urllib.parseparse
quote_plusrf   urllibs     r   
url_encoder      s$    %%%r   c                 >    dd l }|j                            |           S r]   )r   r   unquoter   s     r   
url_decoder      s$    T"""r   c                    dd l }dd l}ddlm} |                                }d}	 t          |           dk    s
J d            | d                                         }|                    ||d          }|                                 | D ]}	|                    |	           |                                }|r^t          d
                    |                     t          |          5 }
|
                    |           d d d            n# 1 swxY w Y   n(# t          $ r}t          d|	           Y d }~nd }~ww xY w|S )
Nr   )StringIOr#   z
Empty Dataz	excel-tab)
fieldnamesdialectzWriting file {}Troublerd   )csvior   lenkeys
DictWriterwriteheaderwriterowgetvaluer;   r4   openwriter:   rg   )rf   fnamer   r   r   csvfilerF   colswriterrT   fr>   s               r   mk_csvr      s   
;;==	 	T1l	a$>>'T+>FF&  d	??4#
 		!	!%	(	()))U qGGCLLL               	      iQ  	s<   CD *D D DD DD 
D="D88D=c                 6    	 t          |            S #  | cY S xY wrz   absrE   s    r   negr      s'    
c((	***s    c                     i } t           j                                        D ]
\  }}|| |<   t           j                                        D ]
\  }}|| |<   	 t           j                                        D ]
\  }}|| |<   n(# t
          $ r}t          d|           Y d }~nd }~ww xY w	 t           j                                        D ]
\  }}|| |<   n#  Y nxY w| S )NzTrouble with file uploadrd   )r   formitemsargsfilesr:   rg   r6   )rf   kvr   r>   s        r   parmsr      s    
L    SQq
$q''L    SQq
$q''1]  ""  ca477 1 1 1(a0000000001\!!  ca477$s$   )B   
B%
B  B%))C CrY   c                     	 t          t          |           t          |          z  |          }|dk    rt          |          S t          |          S #  t          d          cY S xY wr]   )rZ   rD   r5   )leftrightrndresults       r   divr     s`    tuU||+C00&AXX
f++
--	q///s   AA A A&r$   delimc                 B    	 |                      |          S #  | gcY S xY wrz   )split)r$   r   s     r   r   r     s+    	

***s    c                 x   dd l }dd l}	 |                                \  }}}|
J d            |j        }|j        }|j        j        }|                    |           |                    |||j	                  }	d
                    |||	                                |          }
n#  t          |           }
Y nxY w|
S )Nr   zNo framez#EXCEPTION IN ({}, LINE {} "{}"): {})	linecachesysexc_infotb_frame	tb_linenof_codeco_filename
checkcachegetline	f_globalsr4   stripr9   )errorr   r   _exc_objtbr   linenofilenamelinee_strs              r   errorStrr     s    
<<>>.!Wb	k!<&X!(x   			8VQ[	9	9$
/
6
6xW^
_
_%%
e**%%%s   BB$ $B7Tre   debugc                 `   dd l }|                    d          }|pd}|sd S d}|xt          d xS\    dd l}dd l}|                                \  }}}	|                    |	          d         }
|                                }n xxt          d x\   n xt          d x\   n  n  t          |ddt                    }nGxxt          d x\   n! xt          d x\   n xt          d x\   n  n  |}nn	 t          |          }|st          |          }t          d	|  d
           t          |           t          dt!          |           d           |                    d	|  d
           |                    |           |                    dt!          |           d           d S )Nr   werkzeugr#   r   r      T)indentensure_asciirc   z*************************z***********************z***************z**********************)logging	getLoggerr:   	tracebackr   r   
extract_tb
format_excdictrK   r   r-   r9   r5   tupler;   rk   info)re   rf   r   r   loggerrp   r   r   r   r   tbinfos              r   rg   rg   %  s    


J
'
'
 	
 	&y{{{{{{:::llnn81a  $$R(6 1' ( vtvvvvvvvT>>>1>usuuuuuuuusuuuuuuuwuwwwwwwwwwww18
4yy1	 	$ii!A5AAABBBq;d;;;<<<GGGGHHHQAtDzzAAABBBBBr   c                       e Zd ZU  ee          Zeeef         ed<   dZe	ed<   dZ
eed<   d Zed             Zed	             Zed
             ZdS )Output)default_factoryrf      statusr#   messagec                     | j         S rz   r6   r<   s    r   __str__zOutput.__str__a  s
    	r   c                 ,    | j         | j        | j        dS )Nrf   r   r   r   r   s    r   objz
Output.objd  s    DK$,	G	GGr   c                 *    t          | j                  S rz   )r   r   r   s    r   r6   zOutput.jsonh  s    			r   c                     | j         S rz   r   r   s    r   responsezOutput.responsel  s
    	r   N)r?   r@   rA   r   r   rf   r9   __annotations__r   r5   r   r   propertyr   r6   r   r   r   r   r   r   [  s         uT222tCG}222#   H H (H   (   (  r   r   c                      e Zd ZU dddddZdddd	d
dddZg dZg dZdZdZe	e
d<   dkdZd Zedefd            Zedefd            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed              Zed!             Zedld"            Zed#             Zedmd%            Zedmd&            Zed'             Z d( Z!d) Z"dnd*Z#dld+Z$dld,Z%dld-Z&dld.Z'd/ Z(d0 Z)d1 Z*d2 Z+dkd3Z,dod4Z-dnde.fd5Z/d6 Z0defd7Z1defd8Z2d9 Z3defd:Z4d; Z	defd<Z5dpd>Z6dpdefd?Z7dqde.fd@Z8drdAZ9dB Z:dC Z;dD Z<dE Z=dF Z>dG Z?dH Z@dI ZAdJ ZBdK ZCdL ZDdpdMZEdN ZFdpdOZGdP ZHedQ             ZIdR ZJdS ZKdsdTZLdldUZdV ZMdW ZNdX ZOdY ZPdodZZQdod[ZRd\ ZSd] ZTed^             ZUdeVfd_ZWdefd`ZXdeVfdaZYdefdbZZdc Z[dd Z\de Z]df Z^dg Z_dh Z`di ZadpdjZbdS )tr0   )z1-1z3-31)z4-1z6-30)z7-1z9-30)z10-1z12-31r   rY         r   r   rY   r   r   r      )MondayTuesday	WednesdayThursdayFridaySaturdaySunday)JanuaryFebruaryMarchAprilMayJuneJulyAugust	SeptemberOctoberNovemberDecember)JanFebMarAprr   JunJuAugSepOctNovDec   Fr   Nc                     |                      |           |                                                                  |r|                     |           d S d S rz   )setutcpsttz)r<   dStrtzones      r   __init__zIODate.__init__x  sN    ((4...((**..
 775>>>>> r   c                 *    |                                  S rz   dateStrr   s    r   r   zIODate._~      	r   r   c                 :    |                                  dd         S )Nr      r  r   s    r   ymz	IODate.ym  s    	!	r   c                 .    |                      d          S )NFr   )daysFromNowr   s    r   agez
IODate.age  s    			e		$	$$r   c                     |                                                      |                                 dz
             }|                                                     d          }||fS )Nr   r3   r   )clonedelta	dayOfWeekr<   rt   rw   s      r   	work_weekzIODate.work_week  sZ    
**,,

DNN$4$4Q$6"7

8
8%			!		$	$$	tr   c                 B    | j         \  }}d                    ||          S )Nz{}::{})r(  r4   r'  s      r   work_week_idzIODate.work_week_id  s!    ~*%	t	$	$$r   c                 t    	 | j         
J d            | j                                         d         S #  Y dS xY w)NzNo date setr   r   )r   isocalendarr   s    r   weekzIODate.week  sF    
)





)


!
!!
$$
""s   /2 7c                     t          |          }t          |          }g }|j        |j        k    rM|                    |                                           |                    d           |j        |j        k    M|S )Nr   r#  )r0   	timestampappendr  r%  )rc   startend	startDateendDater3   s         r   
list_rangezIODate.list_range  sz    Umm)3KK'	$w000;;y  ""###??? 	w000 
+r   c                 d    t          t          j        t          |          dz                      S )N  )r0   r   fromtimestampr   )rc   tstamps     r   fromTimestampzIODate.fromTimestamp  s%    	&&		$88	9	99r   c                 Z    t          |dz            }t          |dz  dz            }||dS )Ni  <   )hoursminutesrR   )rc   r2   r=  r>  s       r   unStampzIODate.unStamp  s7    
gdl

%r!""''	*	**r   c                 p    |                      |          }d                    |d         |d                   S )Nz{}h {}mr=  r>  )r?  r4   )rc   r2   ts      r   
unStampStrzIODate.unStampStr  s1    	kk'!			!G*Qy\	2	22r   c                 @    t          j        |          } | |          S rz   )r   r8  )rc   r/  rp   s      r   withtimestampzIODate.withtimestamp  s    Y''!	Q-r   c                 (    |t          |          S d S rz   )r0   )rc   r  s     r   optionalzIODate.optional  s    
//
$r   c                     t          |          }|dk    r:|t          | j                  k     r$|r| j        |dz
           S | j        |dz
           S d S d S )Nr   r   )r5   r   
monthNamesshortMonthNames)rc   rM   shorts      r   	monthNamezIODate.monthName  sb    C#!VVc#.)))) !s1u%%>#a%  	 V))r   c                 "    | j         dz
  dz  dz   S )Nr   r   )monthr   s    r   quarterzIODate.quarter  s    
*Q,	Q	r   c                 t   t          |          }t          |          }d}g }|sd                    |j        |j                  }||vr5t	          |          t	          |          k    r|                    |           t	          |          t	          |          k    rd}|                    d           ||S NFz{}-{}Tr   r#  )r0   r4   yearrM  r5   r0  r%  )rc   r1  r2  r4  curdonemonthsq_strs           r   listMonthRangezIODate.listMonthRange  s    3KK'u#	$& >>#(39--5F??C#g,, 6 6
MM%	#hhs7||D99!9   
-r   c                 x   t          |          }t          |          }d}g }|s|j        }d                    |j        |          }||vr5t	          |          t	          |          k    r|                    |           t	          |          t	          |          k    rd}|                    d           ||S rQ  )r0   rN  r4   rR  r5   r0  r%  )	rc   r1  r2  r4  rS  rT  quartersrN  rV  s	            r   listQuarterRangezIODate.listQuarterRange  s     3KK'u#	$( 	[7>>#(7++5H#c((CLL"8"8OOE	#hhs7||D99!9  	 
/r   c                    t          |          }t          |          }g }t          t          |j        |j        z
            dz             D ]9}|                    t          |j                  t          |          z              :|S )Nr   )r0   ranger   rR  r0  r5   )rc   r1  r2  yearsr   s        r   
year_rangezIODate.year_range  sw    
--%s#
%UZ())!+,, ( (a<<EJA&''''	,r   c                 N   t          |t                    r|j        | _        d S t          |t                    r	|| _        d S t	          |          r<t          j                    | _        |                     t          |                     d S |r~	 t          j	        t          |                    | _        d S # t          $ rH}t          ||           t          j                    | _        |                                  Y d }~d S d }~ww xY wt          j                    | _        d S )Nrd   )r/   r0   r   r   rG   nowr%  r5   r   r   r9   r:   rg   r  )r<   r  r>   s      r   r  z
IODate.set  s   f y4999$x   4999$ |~~49::c$ii 	SYY''DIII
   	!DIHHJJJJJJJJJ	 |~~4999s   &B8 8
D
=DD
c                 h    	 | j         
J d             | j         j        |i || _         n#  Y nxY w| S NNo Dater   replace)r<   argcargvs      r   setDatezIODate.setDate  sM    
)




 ty $...4994	+s   (+ /c                 6    |                      |||           | S )Nhourminutesecondtimer<   rk  rl  rm  s       r   setTimezIODate.setTime  s    ))V6)222	,r   c                 6    |                      ddd           | S )Nr   rj  rn  r<   rh  s     r   r1  zIODate.start  s    ))!1)%%%	,r   c                 6    |                      ddd           | S )N   ;   rj  rn  rs  s     r   r2  z
IODate.end  s    ))2R)(((	+r   c                     | j         s| S | j                             d          | _         |r|                                  | S )Nr   day)r   re  r1  )r<   ro  s     r   
first_datezIODate.first_date#  sE    	 
;iA&&$)	 ::<<<	+r   c                     	 | j         
J d            |                                 }| j                             |          | _         |r|                                  n#  Y nxY w| S )Nrc  rx  )r   daysInMonthre  r2  )r<   ro  
month_dayss      r   	last_datezIODate.last_date+  sq    
)




  "":y  Z 0049
 HHJJJ4	+s   AA A"c                 j    	 | j         
J d            | j                             d          S #  Y dS xY w)Nrc  %Y-%m-%d %H:%M:%Sr#   r   strftimer   s    r   	sqlformatzIODate.sqlformat6  sD    
)





)

0
1
12
""   *- 2c                 *    |                                  S rz   )r  r   s    r   sqlz
IODate.sql=  s    			r   c                      t          |           S rz   rV   r   s    r   __repr__zIODate.__repr__@  s    	Tr   c                 ~    t          |          }t          |          }| j        |j        k    o| j        |j        k    S rz   )r0   r/  )r<   r1  r2  s      r   
is_betweenzIODate.is_betweenC  s5    
--%s#
.5?
*
Lt~s}/LMr   c           	      8   t          || j                  }	 | j        
J d            |r|n| j        j        }t	          d                    |          d           |dk    s|dk     rt	          dd|i	           | j        }t          t          j        d
                    || j	        |         d                   d                    }t          t          j        d
                    || j	        |         d                   d                    }||fS #  Y dS xY w)Nrc  zQuarter: {}Quarter)rf   re   r   r   zquarterDate: bad quarterrN  rd   {} {}r   %Y %m-%d)r   r   )
rS   rN  r   rR  rg   r4   r0   r   strptimequarterDates)r<   rN  rR  r1  r2  s        r   quarterDatezIODate.quarterDateH  s   '$,'''
)





*$$DIN4$$W--i@@@@kkWq[[	*70CDDDDlG(#GNN48I'8RST8U$V$VWabbcc5	!'..d6G6PQR6S"T"TU_``	a	a3+	s   C<D Dc                 H   ddddd}|r|n| j         }g }	 | j        
J d            t          | j                            d                    }t	          d          D ]}|d	z
  }|d
k    r|d	z
  }d}||         d
         }t          dd|i           |                    t          j        d	                    || j
        |         d
                   d          t          j        d	                    || j
        |         d	                   d          f           n#  Y nxY w|S )N)r   Z   )[      )   i  )i  im  r   rc  z%Yr   r   r   zgetQuarterDates=>daysr3   rd   r  r  )rN  r   rS   r  r\  rg   r0  r   r  r4   r  )r<   rN  qcurQdatesrR  r   r3   s           r   getQuarterDateszIODate.getQuarterDatesZ  sH   	(Y33!	-$
%
)





	""4((
)
)4!HH  q!8Dqyy1HTTT71:D	'fT];;;;	LLtD,=d,CA,FGG
SStD,=d,CA,FGG
SS    4	,s   DD Dc                 ~    	 | j         
J d            | j                             |||          | _         n#  Y nxY w| S )Nrc  rj  rd  rp  s       r   ro  zIODate.timet  sP    
)




y  d& GG4994	+s   36 :c                 4    dd l }|                    |           S r]   )copydeepcopy)r<   r  s     r   r$  zIODate.clone|  s    +++	t		r   c                     	 | j         
J d            t          | j                             d                    S #  Y dS xY w)NNo datez%ur   )r   r5   r  r   s    r   r&  zIODate.dayOfWeek  sK    
)





di  &&
'
''
""   7: ?c                 j    	 | j         
J d            | j                             d          S #  Y dS xY w)Nr  %ar#   r  r   s    r   dayOfWeekStrzIODate.dayOfWeekStr  C    
)





)

T
"
""
""r  c                     dd l }	 | j        
J d            |                    | j        j        | j        j                  d         S #  Y dS xY w)Nr   rc  r   r   )calendarr   
monthrangerR  rM  )r<   r  s     r   r|  zIODate.daysInMonth  sY    ///
)







dindio
>
>q
AA
""s   A A Ac                     	 | j         
J d            t          | j                                         d                   S #  Y dS xY w)Nrc  r   r   )r   r5   r,  r   s    r   week_of_yearzIODate.week_of_year  sN    
)





di##%%a(
)
))
""s	   <? Ac                 *    t          | j                  S rz   )r9   r   r   s    r   r   zIODate.datetime  s    	TYr   c                 j    	 | j         
J d            | j                             d          S #  Y dS xY w)Nrc  z%b %e %Yr#   r  r   s    r   display_datezIODate.display_date  sC    
)





)

Z
(
((
""r  Tc                     	 | j         
J d            |r| j                             d          S | j                             d          S #  Y dS xY w)Nrc  z%y-%m-%d%m-%dr#   r  r<   rR  s     r   
short_datezIODate.short_date  a    
)





 '9j)))9g&&&
""   ,A	 A	 	Ac                     	 | j         
J d            |r| j                             d          S | j                             d          S #  Y dS xY w)Nrc  %Y-%m-%dr  r#   r  r  s     r   dayStrzIODate.dayStr  r  r  c                 x    	 | j         
J d            | j         t          |||          z   | _         n#  Y nxY w| S )Nrc  r3   r=  r2   )r   r   )r<   r3   r=  r2   tdeltas        r   travelzIODate.travel  sO    
)




y9DwOOOO4994	+s   03 7c                     |r||dz  z  }| j         t          |||          z   | _         |dk    r1ddlm} | j                                          ||          z   | _         | S )Nr<  r  r   )relativedelta)rU  )r   r   dateutil.relativedeltar  today)r<   r3   r=  r2   r>  r  rU  r  s           r   r%  zIODate.delta  sz     
gbj7i)4gNNNN$)AXX333333y  ==#?#?#??49	+r   c                 4   	 | j         
J d            n	#  |cY S xY wt          |          t          u r|j         |j         | j         z
  j        }nIt          |          t          u r|| j         z
  j        }n#t          |          }|j         | j         z
  j        }|S rb  )r   rk   r0   r3   r   )r<   dateValdiffr   s       r   	deltaDayszIODate.deltaDays  s    
)






>>>	']]f!9<$)#
)44G}}  TY
$44g16TY
$4	+    c                    	 | j         
J d            n	#  |cY S xY wt          |t                    r(|r&|j         t          |           t          |          z   S t	          |                              d          dk    s&t	          |                              d          dk    r,t          |           t          t          |                    z   S t          | j         t          t          |                    z             S )Nrc  -r   /r   r#  )r   r/   r0   r5   r9   rm   r   r<   rF   s     r   __add__zIODate.__add__  s    
)






:::V 7 7)=
d))c#hh

3xx}}S1Cc 2 2Q 6 6
d))c&++&&
&&
YCHH5555
6
66r  c                    	 | j         
J d            n	#  |cY S xY wt          |t                    r|j         |j         | j         z
  S t          |                              d          dk    s&t          |                              d          dk    r>	 t          |          }|j         
J d            |j         | j         z
  S #  | j         cY S xY wt          | j         t          t          |                    z
            S )Nrc  r  r   r  zNo val.dater#  )r   r/   r0   r9   rm   r   r5   )r<   rF   r   s      r   __sub__zIODate.__sub__  s   
)






:::V 
7!5
(TY

3xx}}SASs!3!3a!7!7sA6}6DI9
YCHH5555
6
66s    .C 	Cc                     	 | j         
J d            n	#  |cY S xY wt          |t                    r| j         |z   | _         | j         S | j         t          |          z   | _         | j         S Nrc  r#  r   r/   r   r  s     r   __iadd__zIODate.__iadd__   sz    
)






:::Y y349
)y9#....49
)r  c                     	 | j         
J d            n#  | j         cY S xY wt          |t                    r| j         |z
  | _         n| j         t          |          z
  | _         | S r  r  r  s     r   __isub__zIODate.__isub__  sv    
)






)Y /y3499y9#....49	+s    	c                 L    |                                  t          |          k    S rz   )__int__r5   r  s     r   __eq__zIODate.__eq__  s    	3s88	##r   c                 ,    |                      |          S rz   )r  r  s     r   addz
IODate.add      	c		r   c                 ,    |                      |          S rz   )r  r  s     r   subz
IODate.sub  r  r   c                 ,    |                      |          S rz   )r  r  s     r   iaddzIODate.iadd"      	s		r   c                 ,    |                      |          S rz   )r  r  s     r   isubzIODate.isub%  r  r   c                 *    |                                  S rz   )r   r   s    r   r8   zIODate.to_JSON(  r  r   c                    t                                                      }|                                                                 }|j        |j        z
  j        }|s t          |          t          |          k     r|S | S rz   )r0   r  r$  r   r3   r5   )r<   r   r  cdater3   s        r   r   zIODate.daysFromNow+  sg    
((,,..%
**,,



%
*uz
!	'$ CJJU##
;%<r   c                 *    |                                  S rz   r  r   s    r   r  zIODate.today5  r  r   c                     |r't          | j                            d                    S t          | j                            d                    S )Nr  z%m/%dr9   r   r  r  s     r   r  zIODate.dateStr8  sF    	 +
di  ,,
-
--
di  ))
*
**r   c                 D    t          |                                           S rz   )r9   fullr   s    r   datetimeStrzIODate.datetimeStr>  s    	TYY[[		r   c                 N    t          j                                        d          S Nr  )r   r`  r  )rc   s    r   Nowz
IODate.NowA  s    		 	 !4	5	55r   c                 *    |                                  S rz   )r  r   s    r   r`  z
IODate.nowE  s    	r   c                 P    t          | j                            d                    S r  r  r   s    r   r  zIODate.fullH  s!    	TY 344	5	55r   c                 R    |rd}nd}|r|dz  }| j                             |          S )Nz%H:%M:%Sz%l:%Mz %pr  )r<   showSeconds	showDelimr$   s       r   timeStrzIODate.timeStrK  s=     111 e81			A		r   c                 L    |r|                                  S t          |           S rz   )r  r9   r<   r  s     r   r9   z
IODate.strV  s$    	 
))++	Tr   c                     |                                                                   | j                            d          S )Nz%Y-%m-%dT%H:%M:%SZ)r  r  r   r  r   s    r   amz_strzIODate.amz_str\  s1    ((**..			0	1	12r   c                 R    |                                                                   | S rz   )r  r  r   s    r   
amz_adjustzIODate.amz_adjust`  s    ((**..	+r   c                 v    |                                                                                                   | S rz   )r  r1  r  r   s    r   amz_adjust_startzIODate.amz_adjust_startd  s-    ((**	+r   c                 v    |                                                                                                   | S rz   )r  r2  r  r   s    r   amz_adjust_endzIODate.amz_adjust_endh  s+    ((**..	+r   c                     |                                   |dk    r|                                  n|dk    r|                                  |                                 S Nr1  r2  )r  r1  r2  r  r<   modes     r   to_local_timezIODate.to_local_timel  K    ((***	7]]::<<<<e||88:::	r   c                     |                                   |dk    r|                                  n|dk    r|                                  |                                 S r  )r  r1  r2  r  r  s     r   to_amz_timezIODate.to_amz_timet  r  r   c                     dd l }ddlm} |                                }|                    || j                  \  }}t          j         ||                    | _        | S )Nr   )mktime)parsedatetimero  r  Calendarr   r   r   r8  )r<   r  pdtr  caltime_structr   s          r   	str_deltazIODate.str_delta|  sg    #99WTY//.+q$VVK%8%899$)	+r   c                 ,    t          | j        |          S rz   )getattrr   )r<   names     r   __getattr__zIODate.__getattr__  s    	D	!	!!r   c                 *    |                                  S rz   )r  r   s    r   r/  zIODate.timestamp  s    	r   c                     	 | j         
J d            | j         t          ddd          z
                                  S #  Y dS xY w)Nrc    r   r   )r   r   total_secondsr   s    r   r9  zIODate.tstamp  sR    
)




9xa+++
:
:
<
<<
""s	   ;> Ac                 v   	 | j         
J d            | j        rat          j        d          }|                    t          ddd                    }t          | j         |z
                                            S t          | j         t          ddd          z
                                            S #  Y dS xY w)Nrc  UTCr  r   r   )r   tzinfopytztimezonelocalizer   r5   r  r<   TZepochs      r   r  zIODate.__int__  s    
)





k C	u		BKKq!,,--E	E!0022333 	HT1a000??AABBB
""   A8B3 ;7B3 3B8c                 v   	 | j         
J d            | j        rat          j        d          }|                    t          ddd                    }t          | j         |z
                                            S t          | j         t          ddd          z
                                            S #  Y dS xY w)Nrc  r  r  r   g       )r   r  r  r  r  r   rD   r  r  s      r   	__float__zIODate.__float__  s    	
)





k E	u		BKKq!,,--E$)e#2244555$)htQ222AACCDDD
%%r  c                     	 | j         
J d            t          | j                             d                    S #  Y dS xY w)Nrc  r  r#   )r   r9   r  r   s    r   r   zIODate.__str__  sK    
)





di  ,,
-
--
""r  c                 j    	 | j         
J d            | j                             d          S #  Y dS xY w)Nrc  r  r#   r  r   s    r   week_day_namezIODate.week_day_name  r  r  c                     t          j        |          }	 | j        
J d            |                    | j                  | _        n&#  | j                            |          | _        Y nxY w| S rb  )r  r  r   r  
astimezone)r<   zoner  s      r   r  z	IODate.tz  sl    }T"(
)




{{49%%499(y##B''4999	+s   0A !A*c                 b    	 |                      d           n# t          $ r
}Y d }~nd }~ww xY w| S )Nz
US/Pacific)r  r:   )r<   r>   s     r   r  z
IODate.pst  sK    77<	   4444	+s    
,,c                 B    	 |                      d           n#  Y nxY w| S )Nr  )r  r   s    r   r  z
IODate.utc  s+    775>>>>4	+s    c                 6    t          t          j                  S )N)r=  )r   r0   daylightDeltar   s    r   	dst_deltazIODate.dst_delta  s    	-	.	.	..r   c                 z    	 | j         
J d            | j         |                                 z
  S #  | j         cY S xY wrb  )r   r(  r   s    r   amazon_timezIODate.amazon_time  sK    
)





)dnn&&
&&
)s   ,/ 	:c                 j    	 | j         
J d            | j                             d          S #  Y dS xY w)Nrc  z%Y-%m-%dT%H:%M:%S.%f0%zr#   r  r   s    r   iso_extzIODate.iso_ext  sD    
)





)

6
7
77
""r  c                     	 | j         
J d            |r| j                                         S | j                             d          S #  Y dS xY w)Nrc  z%Y-%m-%dT%k:%M:%Sr#   )r   r1   r  r  s     r   amzz
IODate.amz  s`    
)





 39   91222
""s   +A A A)NNF)rO  r   )r   r   r   rz   )T)r   r   r   N)r   r   r   r   Nr   )FT)cr?   r@   rA   r  dayNameIntsrH  rI  r'  useDayLightr   r   r  r   r   r9   r  r5   r!  r(  r*  r-  classmethodr5  r:  r?  rB  rD  rF  rK  rN  rW  rZ  r^  r  rh  rq  r1  r2  rz  r~  r  r  r  r  r  r  r   ro  r$  r&  r  r|  r  r  r  r  r  r%  r  r  r  r  r  r  r  r  r  r  r8   r   r  r  r  r  r`  r  r  r  r  r  r  r  r  r	  r  r/  rD   r9  r  r  r   r   r  r  r  r(  r*  r,  r.  r   r   r   r0   r0   p  s@        !N^FVWWQ11XYcdee}}}[[[          ( %# % % % (%   (
 % % (%   (   + : : +: + + ++
 3 3 +3   +   + ! ! ! +!   (    +     +$   +  &              	 	 	 	      N N N
   $   4 $          3                    c     4         "7 7 77 7 7$  
 
 
$ $ $               + + + +   6 6 +6  6 6 6	 	 	 	   3 3 3              " " "   (U    S    
u 
 
 
 
:C            / / /         r   r0   c                 t   dd l }dd l}d }	 |                                \  }}}|
J d            |j        }|j        }|j        j        }|                    |           |                    |||j	                  }	d| d| d|	
                                 d| S # t          $ r} d|  d| cY d } ~ S d } ~ ww xY w)	Nr   zNo TBzEXCEPTION IN (z, LINE z "z"): zTrouble getting Debug: z::>>)r   r   r   r   r   r   r   r   r   r   r   r:   )
r>   r   r   r   exc_typer   r   r   r   r   s
             r   exception_infor5    s    

0,,..(GR	k!<&X!(x   			8VQ[	9	9$	P(	P	P6	P	PTZZ\\	P	Pw	P	PQ 0 0 0	.1	.	."	.	.//////0s   BB 
B7%B2,B72B7c                 b    dd l }|                    |           }|                    d          }|S )Nr   UTF-8)base64	b64encodedecode)inputr8  
dataBase64dataBase64Ps       r   
b64_encoder>    s7    u%%  ))r   c                 Z    dd l }|                    |                     d                    S )Nr   ascii)r8  decodebytesencode)r;  r8  s     r   
b64_decoderC    s+    5<<00111r   c                 Z   ddl m} d}t          |           }t          |d          }	 | sdS d}|                    ||j        |          }||                    |          z   }t          |          S # t          $ r.}t          |           t          d| |d	           Y d }~dS d }~ww xY w)
Nr   AES   7313377313377311r7  r#      ϼ)"X]6nEncryptrf   Errorrd   )Crypto.CipherrF  r   bytesnewMODE_CFBencryptr>  r:   r;   rg   )	rf   rF  secretjr$   ivciphermsgr>   s	            r   encrrV    s    

4[[
1W	 
" 9"7763<,,&
V^^A#	C   (((iT!445555	s   A2 AA2 2
B*<#B%%B*c                 j   ddl m} d}t          |           }	 | sdS d}|                    ||j        |          }|                    |          t          |          d                              d          }|S # t          $ r.}t          |           t          d| |d	           Y d }~dS d }~ww xY w)
Nr   rE  rG  r#   rH  r7  DecryptrJ  rd   )rL  rF  rC  rN  rO  decryptr   r:  r:   r;   rg   )rf   rF  rQ  rp   rS  rT  rU  r>   s           r   decrrZ  .  s     	 
"8"7763<,,&q#b''((#**733#	*   (((iT!445555	s   A: AA: :
B2#B--B2varc                 f    	 t          | t                    r| t                      v S | d uS #  Y dS xY w)NF)r/   r9   globals)r[  s    r   issetr^  C  sB    C 

d?	s   $+ + 0c                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )bcolorsz[95mz[94mz[96mz[92mz[93mz[91mz[0mz[1mz[4mN)r?   r@   rA   HEADEROKBLUEOKCYANOKGREENWARNINGFAILENDCBOLD	UNDERLINEr   r   r   r`  r`  L  s;        FFFGGDDDIIIr   r`  c                  :   t                      } 	 t          t                    r
J d            t          
J d            t          d          s
J d            t          j                    }|t          z
  dz  }t
          j                            d|                                  dt          j
         d|dd	t          j         d
t          j         dt          j         dt          j         d           d S # t          $ r}t!          d|           Y d }~d S d }~ww xY w)NzNo timer START_TIMEappzNo app for loggerr7  z[IO] z |  z.4fzms z| z |zPrint Request Troublerd   )r0   r^  
START_TIMEro  perf_counterrk  r   warningr  r`  rb  rg  rd  r   pathr:   rg   )dtEND_TIMEmsr>   s       r   print_requestrt  Z  sx   hh.:55 5555			!6				u******  (:%"*  IRWWYY  I  I7>  I  IB  I  I  Iw|  I  IW^Wf  I  Iipiu  I  Ix  yE  I  I  I  J  J  J  J  J . . .%1----------.s   C"C4 4
D>DD)r   )r#   r/  rz   )rY   )r#   NT)Lflaskr   r   r   r   r   r   r	   dataclassesr
   r   r6   r   r   typingr   r   r   r   r   r   r  dateutilr   decimalr   ro  
_debug_logr5   r    r9   r%   r+   r-   rG   rK   rL   rP   rS   rW   r[   r   mr$   r   r`   rh   rq   rt   rw   boolr   r~   r   r   r   r   r   r   r   r   r   r:   rg   r   objectr0   r5  r>  rC  rV  rZ  r^  r`  rm  rt  r   r   r   <module>r~     sK   H H H H H H H H H H H H H H H H H H ' ' ' ' ' ' ' '  " " " " " " " " $ $ $ $ $ $ $ $ $ $ - - - - - - - - - -              
23 2 2 2 24S 4 4 4 4  # # # # #; # # #J       
 
 
 
 

 
c 
# 
 
 
 
s          
	  
 
 
     6      s     3 T 4 $    ) ) )&C &C & & & &#C #C # # # #   2    t    .   C c d    s    "3C 3C 3CC)O 3C 3C 3C 3C 3Cl        (J
 J
 J
 J
 J
V J
 J
 J
Z0 0 0 0 0   2 2 2d s    ,c c    *c T    	 	 	 	 	 	 	 	 
. . . . .r   