o
    h                     @   sn  d Z dZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ d	d
lmZmZmZmZ ddlmZ G dd dZe ZzddlZe dkZ W n   dZ Y dd Z!G dd dZ"e#e"j$fddZ%["dd Z&e'e(ffddZ)dd Z*e#dZ+e,e-fZ.dd Z/ddd Z0dd!d"Z1dd#d$Z2dd%d&Z3d'd( Z4d)d* Z5d+d, Z6d-d. Z7d/d0 Z8d1d2 Z9d3d4 Z:dd5d6Z;d7d8 Z<d9d: Z=d;d< Z>d=d> Z?ddl@Z@eAe@d?ZB[@d@dA ZCddBdCZDdDdE ZEddFdGZFddIdJZGG dKdL dLeHZIejJdMkr5ddlKZKddlLZLdNdOdOdPdQdQdRdRdSdTdUdUdVdWdXZMddZd[ZNndd\d[ZNddlOZOejPQeOjRZSejPTeSrOeSpTejPUeSZV[OzeR W n	   ejWd ZRY ddlXZXddlYZYz^eZZ[e[ Z\eFe[d]s~e]d^e[ ejP^ejP_e[j`Zaeaejb ZcejPQeaZdedejb ZeefecZgefeeZheceeeaedejPj_ejPj^ejiejbefejbf	d_d`Zjdadb ZkeXjXeYjYeVejPjlfdcddZmW n   ejPneRZ\dZ[dedb ZkeXjXfdfddZmY [X[Ye\oejPnejPoeRd dg Zpdhdi Zqdjdk Zrdldm Zsdndo ZteAedpdqdr ZuddsdtZveduZwG dudv dvZxdwdx ZyddydzZzd{d| Z{dd~dZ|ddl}m~Z~mZ ddlmZ dd ZdddZdddZdddZejPjnfddZejPjejPj_fddZejPjejPj_ejfddZejPjnejPj_ejPjejfddZddlmZ dd Zdd Zdd ZG dd dZG dd deZdd ZG dd dZdd Zdd ZdddZG dd dZG dd dZdd Zdd Zdd Zdd ZddlZdd Zdd Zdd ZdddZdddZdd ZG ddĄ de,ZG ddƄ de,ZddȄ ZG ddʄ dejZG dd̄ d̃Zddd΄ZddЄ Zdd҄ ZddԄ Zddք ZG dd؄ d؃ZdS )z3.5.34z6Gazillions of miscellaneous internal utility functions    N)literal_eval)decodebytesencodebytes)BytesIO)md5)get_rl_tempfileget_rl_tempdir   )rl_safe_execrl_safe_evalsafer_globalsrl_extended_literal_eval)Imagec                   @   s(   e Zd Zedd Zedd ZeZdS )	__UNSET__c                   C      dS )NF r   r   r   J/var/www/html/pos/venv/lib/python3.10/site-packages/reportlab/lib/utils.py__bool__      z__UNSET__.__bool__c                   C   r   )Nr   r   r   r   r   r   __str__   r   z__UNSET__.__str__N)__name__
__module____qualname__staticmethodr   r   __repr__r   r   r   r   r      s    

r   PyPyFc                 C      t | t tkS N)type
isFunctionvr   r   r   r   !      r   c                   @   s   e Zd Zdd ZdS )cc                 C      d S r   r   selfr   r   r   m%       zc.mN)r   r   r   r'   r   r   r   r   r#   $   s    r#   c                 C   s   t | |kS r   )r   )r!   mtr   r   r   isMethod'      r*   c                 C   r   r   )r   sysr    r   r   r   isModule+   r"   r-   c                 C   s
   t | |S r   )
isinstance)r!   _str   r   r   isSeq.      
r0   c                 C   
   t | tS r   r.   strr    r   r   r   isNative1   r1   r5   c                 C   s$   t t| r
|  S | d S )Nutf8)r   isBytesencode	hexdigestsr   r   r   	_digester9   s   $r<   r6   c                 C   @   t | tr| S z| |W S    tdt| t|f  Y d S )NzasBytes(%s,enc=%s) error: )r.   bytesr8   annotateExceptionasciir!   encr   r   r   asBytes<   
   rC   c                 C   r=   )NzasUnicode(%s,enc=%s) error: )r.   r4   decoder?   r@   rA   r   r   r   	asUnicodeC   rD   rF   c                 C   sT   t | tr| S zt | tr| |W S t| W S    tdt| t|f  Y d S )NzasUnicodeEx(%s,enc=%s) error: )r.   r4   r>   rE   r?   r@   rA   r   r   r   asUnicodeExJ   s
    rG   c                 C   s   t | |dS )N)rB   )rF   rA   r   r   r   asNativeQ   r+   rH   c                 C   s
   t | gS r   )r>   )ir   r   r   int2ByteT   r1   rJ   c                 C   s   t | ttfS r   )r.   r4   r>   r    r   r   r   isStrW      rK   c                 C   r2   r   )r.   r>   r    r   r   r   r7   Z   r1   r7   c                 C   r2   r   r3   r    r   r   r   	isUnicode]   r1   rM   c                 C   r2   r   r.   r   r    r   r   r   isClass`   r1   rO   c                 C   s\   t | ttttttttt	t
tttjtjtjtjtjtjtjtjtjtjtjtjtjtjf S r   )r.   floatintr   tuplelistdictr4   r>   complexboolslice_rl_NoneTypetypesFunctionType
LambdaTypeCodeTypeMappingProxyTypeSimpleNamespaceGeneratorType
MethodTypeBuiltinFunctionTypeBuiltinMethodType
ModuleTypeTracebackType	FrameTypeGetSetDescriptorTypeMemberDescriptorType)xr   r   r   isNonPrimitiveInstancec   s   ri   c                 C   s   t | t S r   rN   r    r   r   r   instantiatedk   r+   rj   c                 C   s0   t | tr
| |S t | tr| S t| |S r   )r.   r4   r8   r>   )rh   rB   r   r   r   bytestrn   s
   


rk   c                 C   s   t t|  dS Nlatin1)base64_encodebytespickledumpsstriprE   )argsr   r   r   encode_labelv   s   rs   c                 C   s   t t| dS rl   )ro   loadsbase64_decodebytesr8   )labelr   r   r   decode_labely      rw   c                 C   s   t | ts
| dS | S zconverts first 256 unicodes 1-1rm   )r.   r4   rE   r:   r   r   r   
rawUnicode|      rz   c                 C   s   t | tr
| dS | S ry   )r.   r4   r8   r:   r   r   r   rawBytes   r{   r|   execc                 C   s*   t | tr| S tt | tr| n| dS rl   )r.   rQ   ordr4   rE   r:   r   r   r   char2int   s   *r   c                 C   s   |j |ur
|||r   )__traceback__with_traceback)tr!   br   r   r   
rl_reraise   s   

r   c                  K   s*   dd l }|  D ]
\}}t||| qd S Nr   )builtinsitemssetattr)kwdr   kr!   r   r   r   rl_add_builtins   s   r   c                 C   sN   z | st djd } ddlm} t| |rt| jr| W S d W S    Y d S )Nr	   
__loader__r   )zipimporter)r,   	_getframe	f_globals	zipimportr   r.   len_files)ldrr   r   r   r   zipImported   s    r   .ttfc           
      C   s   ddl m}m}m} ddlm} | }g }|j}| D ]$}||s"q||D ]}	|||	}	||	r>|r:|	 |r>||	 q&q|S )Nr   )isfileisdirjoin)listdir)	os.pathr   r   r   osr   lowerappendendswith)
dirListextr   r   	path_joinr   RADfnr   r   r   
_findFiles   s   

"r   c                   @   sV   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
dd ZdS )CIDictc                 O   s"   |D ]}|  | q|  | d S r   )update)r&   rr   kwdsar   r   r   __init__   s   zCIDict.__init__c                 C   s   |  D ]\}}|| |< qd S r   )r   )r&   r   r   r!   r   r   r   r         zCIDict.updatec                 C   s(   z|  }W n   Y t| || d S r   )r   rT   __setitem__r&   r   r!   r   r   r   r      
   zCIDict.__setitem__c                 C   "   z|  }W n   Y t| |S r   )r   rT   __getitem__r&   r   r   r   r   r      
   zCIDict.__getitem__c                 C   r   r   )r   rT   __delitem__r   r   r   r   r      r   zCIDict.__delitem__Nc                 C   s"   z| | W S  t y   | Y S w r   )KeyError)r&   r   dvr   r   r   get   s
   
z
CIDict.getc                 C   s   z| |  W dS    Y dS )NTFr   r   r   r   r   __contains__   s
   zCIDict.__contains__c                 G   (   z|  }W n   Y tj| |f|  S r   )r   rT   popr&   r   r   r   r   r   r      r   z
CIDict.popc                 G   r   r   )r   rT   
setdefaultr   r   r   r   r      r   zCIDict.setdefaultr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
r   mac)oglezBMP )r   EPSF)r   GIFf)r   JPEG)ttxtPICT)r   PNGf)r   z.PPM)r   TIFF)CAROzPDF )MSIETEXT)BMPEPSr   GIFJPGr   PCTr   PNGPPMTIFr   PDFHTMLr   c                 C   sl   z/|d u s|d u r|d urz
t |  \}}W n   Y W d S t| || t|  W d S    Y d S r   )_KNOWN_MAC_EXTuppermacfsFSSpecSetCreatorType
macostoolstouched)filenamecreatorcodefiletyper   r   r   r   markfilename   s   r   c                 C   r$   r   r   )r   r   r   r   r   r   r         )r   z#can't handle compact distro type %rc
                 C   s   ||  d|} || }
|
||fv rdS |
|r!d| td fS |
|r.d| td fS || }t|}|
|rW| |d |rOd| ||	 d fS |t| krWdS tj|  | fS )z3if the name starts with a known prefix strip it off/)r	    r	   N)replace
startswith_archivepfxlen_archivedirpfxlenr   r   pathisabs)r   _archivepfx_archivedirpfx_archive_archivediros_path_normpathos_path_normcase	os_getcwdos_sep
os_sep_lennfncwdnr   r   r   __startswith_rl  s   

&r   c                 C   s   t | d S )Nr	   )r   r   r   r   r   _startswith_rl3  r+   r   c              
   C   s^   t | \}}||}|s|g kr-|ttt|fddtt||fddttj 7 }|S )Nc                 S   s
   |t | S r   )r   )rh   r   pjoinr   r   r   <lambda>:     
 zrl_glob.<locals>.<lambda>c                 S   s
   || |S r   r   )rh   pfnfnmatchr   r   r   r   :  r   )r   rS   mapr   filter__rl_loader__r   keys)patternglobr   _RL_DIRr   r#   r   rr   r   r   rl_glob6  s
   :r  c                 C   s   | S r   r   r   r   r   r   r   ?  r   c                 C   s   || S r   r   )r   r   r   r   r   r  A  s   .pyc                   C      t S )z*return truth if a file system distribution_isFSDr   r   r   r   isFileSystemDistroF  r   r  c                   C   s   t  S )z.return truth if not a file system distributionr  r   r   r   r   isCompactDistroJ  s   r	  c                   C   r  )z1return truth if a source file system distribution)_isFSSDr   r   r   r   isSourceDistroN  r   r  c                 C   s   t jt jt j| S r   )r   r   normcaseabspathnormpath)pr   r   r   normalize_pathR  s   r  invalidate_cachesc                   C   r$   r   r   r   r   r   r   r   U  r(   r   c              
   C   s&  dd t jD }|r)t|ttfr|n|fD ]}|r(t|}||vr(|d| q|rKddtdfD ]}||v rI|r@td|  || ||v s8q2nt	
 }||vrY|d| t j}zzb|t _t  |rt  td tdt|   td	tt	
   td
tt j  tdtd|  tt	jd|  f  tdt|  td t| W W |t _t  |rtdt|  S S  ty   td| t jt	
 f  Y n   tdtt  d | t jt	
 f  Y W |t _t  |rtdt|  dS dS |t _t  |rtdt|  w w )zEDynamically imports possible packagized module, or raises ImportErrorc                 S   s   g | ]}t |qS r   )r  ).0r  r   r   r   
<listcomp>Y      z#recursiveImport.<locals>.<listcomp>r   r   .zremoved "%s" from pathz++++++++++++++++++++z+++++ modulename=%sz+++++ cwd=%sz+++++ sys.path=%sz+++++ os.paths.isfile(%s)=%sz./%s.pyz+++++ opath=%sz--------------------z===== restore sys.path=%sz/Could not import %r
using sys.path %r in cwd=%rz;Exception %s while importing %r
using sys.path %r in cwd=%rr	   N)r,   r   r.   rS   rR   r  insertprintremover   getcwd_importlib_invalidate_cachesr@   r   	importlibimport_modulereprImportErrorr?   r4   exc_info)
modulenamebaseDirnoCWDdebugr   r  opathr   r   r   recursiveImportW  sp   
(	
r%  c                   @      e Zd ZdZdd ZdS )ArgvDictValuezGA type to allow clients of getArgvDict to specify a conversion functionc                 C      || _ || _d S r   )valuefunc)r&   r)  r*  r   r   r   r        
zArgvDictValue.__init__N)r   r   r   __doc__r   r   r   r   r   r'        r'  c                  K   s   dd }t jdd }i }|  D ]F\}}t|tr"|j|j}}nd}d}|d }|D ] }	|	|rL|	t|d }
|	|	 |||
|||< d} nq,|sW||||||< q|S )z Builds a dictionary from its keyword arguments with overrides from sys.argv.
        Attempts to be smart about conversions, but the value can be an instance
        of ArgDictValue to allow specifying a conversion function.
    c                 S   s   |r||} | S t | r|} | S t| trt|} | S t| tr&t|} | S t| tr4tt|i } | S t| trBtt|i } | S td|t| f )NzCan't convert string %r to %s)	rK   r.   rP   rQ   rS   r   rR   	TypeErrorr   )r!   avr*  r   r   r   handleValue  s&   
	


z getArgvDict.<locals>.handleValuer	   Nr   =)
r,   argvr   r.   r'  r)  r*  r   r   r  )kwr0  r   r   r   r!   r*  handledker   r/  r   r   r   getArgvDict  s(   


r6  c              
   C   sj   zddl m} | d u rtjtjtd} || W S  ty4 } zt|dkr) W Y d }~d S d }~ww )Nr   )Hyphenzhyphen.mashedzNo module named pyHnj)	reportlab.lib.pyHnjr7  r   r   r   dirname__file__r  r4   )hDictr7  errMsgr   r   r   getHyphenater  s   
r=  c                 C   sN   z| j j}|d}|dkr||d d W S |W S  ty&   t|  Y S w )zReturn a shortened class namer  r   r	   N)	__class__r   rfindAttributeErrorr4   )r&   namerI   r   r   r   
_className  s   
rB  r   c                 C   sx   d|vrd| }zt | |W S  ty;   tstd u r t| } t| }d|vr5tjdkr5|tjd}t	| Y S w )Nr  r   
)
openIOErrorr  r   r   get_datar   linesepr   r   )rA  moder;   r   r   r   open_for_read_by_name  s   
 rI  )unquoteurlparse)urlopenc                 C   s   t |  S r   )rL  read)rA  r   r   r   	rlUrlRead  r+   rN  c              
      s   t fdd ddlmm r/dd l}dd lfdd}|ddd	t|d
fd fdd	}|t	 d< || |S )Nc                 S   s   z
|  dd\}}W n ty   tddw |sd}|d}|dkr;d||d	 vr;||d d	 }|d	| }nd
}|dkrJt|d}|S ||d}|S )zUse "data" URL.,r	   z
data errorzbad data URLztext/plain;charset=US-ASCII;r   r1  Nr   base64r@   zlatin-1)split
ValueErrorrE  r?  ru   r8   )urlrJ  typdatasemiencodingr   r   r   
datareader  s"   	

z!open_for_read.<locals>.datareaderr   )trustedHoststrustedSchemesc                    s,     | } | dr| dd S | d d S )Nz(?s:   i)	translater   r:   )r   r   r   xre  s   
"zopen_for_read.<locals>.xrer   z^(?:|z)\Zr   c              	      s   t | dr| S zt| |W S    z8dur5t| }|d r5|d dv s+|d r1|d v s5tdt| dd  dkrB nt| W  Y S    td	|  )
z)attempt to open a file or URL for readingrM  Nr   )rV  filer	   zAttempted untrusted host access   zdata:zCannot open resource "%s")	hasattrrI  rK  matchrS  r   r   rN  rE  )rA  rH  purl)rY  rZ  r[  r   r   open_for_read  s   .*z$open_for_read.<locals>.open_for_readrf  r   )
rJ  reportlab.rl_configrZ  r[  rer   compiler   r   globals)rA  rH  ri  r_  rf  r   )rY  r   rZ  r[  r   rf    s   


rf  c                 C   sT   t | |}| |ur&t|dr&| | W  d    S 1 sw   Y  d S | S )N__exit__)rf  rc  rM  )rA  rH  fr   r   r   open_and_read  s   
$rn  r   c                 C   s   t | |dS NrC  )rn  rR  )rA  rH  r   r   r   open_and_readlines   r"   rp  c                 C   sD   t | drdS || rdS tstd u rdS t| } | ttj v S )NrM  TF)rc  r  r   r   rS   r   r   )r   os_path_isfiler   r   r   	rl_isfile#  s
   rr  c                 C   sf   || rdS t std u rdS t|| } | tjs| tj7 } ttt| fddttj	
 dkS )NTFc                 S   s
   |  |S r   )r   )rh   pnr   r   r   r   /  r   zrl_isdir.<locals>.<lambda>r   )r  r   r   r   r   sepr   rS   r   r   r   )rs  os_path_isdirr   r   r   r   rl_isdir*  s
   (rv  c                    sV   | s
t s
td u r| S t|   tjs tj7   fddtj D S )Nc                    s&   g | ]}|  r|t d  qS r   )r   r   r  rh   rs  r   r   r  5  s   & zrl_listdir.<locals>.<listcomp>)r  r   r   r   r   rt  r   r   )rs  ru  r   
os_listdirr   rx  r   
rl_listdir1  s   rz  c           	   
   C   s   || s
t s
td u r|| S t|| }ztj| }W n ty(   ||  Y S w |d }|d }||d? d@ d |d? d@ |d@ |d? d@ |d? d	@ |d@ d
> dddf	S )Nrb     	      i           ?   r	   r   )r  r   r   r   r   )	rs  rq  r   os_path_getmtimetime_mktimer  er;   dr   r   r   rl_getmtime7  s   Jr  )utilc                 C   sJ   dD ]}t j|| | }t j|r t| |}|j   S qtd)N)r  z.pywz.pyoz.pycz.pydzno suitable file found)	r   r   r   r   importlib_utilspec_from_file_locationloaderload_moduler  )rA  dirr   r   specr   r   r   __rl_get_module__C  s   r  c              
   C   s   | t jv rt j|  }t j| = nd }zPzt| |W W |r!|t j| < S S    t rZdd l}t|}|dks7| r9tpDtj	t|
dtj}||}||  Y W |rY|t j| < S S td| |f |ri|t j| < w )Nr   r  r   z%s[%s])r,   modulesr  r	  r   r   r   r   r   r   r   rt  r   r  r  )rA  r  omr   zir   r   r   rl_get_moduleK  s$   


*
r  c                 C   s$   zt | tjW S  ty   Y dS w r   )r.   r   r@  )imr   r   r   _isPILImage`  s
   r  c                   @   s|   e Zd ZdZi ZdZdddZdd Zdd Ze	d	d
 Z
e	dddZdd Zdd Zdd Zdd Zdd Zdd ZdS )ImageReaderz%Wraps up PIL to get data from bitmapsNc                 C   s^  t |tr|j| _d S || _|| _d | _d | _d | _d | _d | _	t
|rH|| _t|dd | _z| jj| _W d S  tyG   dt|  | _Y d S w zVddlm} |dkrWtdt|d}t |tso|t| }}|  ~|| _| | j| _t |tr|nt|| j_| | j t| jdd dkr| j| _W d S W d S    td	||  f  Y d S )
NfpzPILIMAGE_%dr   )imageReaderFlagszYimageReaderFlags values other than 0 are no longer supported; all images are interned nowr   formatr   z
fileName=%r identity=%s)r.   r  __dict___identfileName_image_width_height_transparent_datar  getattrr  r@  idrh  r  rS  rf  r   rM  close_read_imager4   r  check_pil_image_size_jpeg_fhjpeg_fhr?   identity)r&   r  identr  r  tfpr   r   r   r   j  sH   


zImageReader.__init__c                 C   s\   | j }t|stt| dddd}| j}d| jjtt| |r#d| p$d|r*d| p+df S )z9try to return information that will identify the instancer  NrA  z[%s@%s%s%s]z	 ident=%rr   z filename=%r)r  rK   r  r  r>  r   hexr  )r&   r   r  r   r   r   r    s
   4zImageReader.identityc                 C   s
   t |S r   )r   rD  r&   r  r   r   r   r    r1   zImageReader._read_imagec                 C   sn   | j }|d u r	d S |j\}}|j}td|dkrdndt| | | d? }||kr5td|||||f d S )Nr	   1      z,PIL %s %s x %s image would use %s > %s bytes)_max_image_sizesizerH  maxr   MemoryError)clsr  max_image_sizewhr'   r  r   r   r   r    s   
*z ImageReader.check_pil_image_sizec                 C   s,   || _ |d urddlm} || j d S d S )Nr   )register_reset)r  rh  r  set_max_image_size)r  r  r  r   r   r   r    s
   zImageReader.set_max_image_sizec                 C   s   | j }|d |S r   )r  seekr  r   r   r   r    s   
zImageReader._jpeg_fhc                 C   r$   r   r   r%   r   r   r   r    r   zImageReader.jpeg_fhc                 C   s0   | j d u s
| jd u r| jj\| _ | _| j | jfS r   )r  r  r  r  r%   r   r   r   getSize  s   zImageReader.getSizec                 C   s  z| j du r}d| _| j}|j }| _|dv rAttdddr#|  t|	 |dkr-dnd | _|dd	 }|
|}|| _n/|d
vrp|jdkrh|jdkrhd|jv rh|
d}t|	 d | _|
d}n|
d}d| _t|drx|jn|j | _ | j W S    td|    Y dS )z'Return byte array of RGB data as stringN)LARGBAVERSIONr   z1.1.7r  r  r	   )LRGBCMYKr   Ptransparencyr  tobytesz
identity=%s)r  _dataAr  rH  r  r   r   loadr  rR  convertr  inforc  r  tostringr?   r  )r&   r  rH  nmr   r   r   
getRGBData  s.   



zImageReader.getRGBDatac                 C   s   |   \}}|||  fS r   )r  r  )r&   widthheightr   r   r   getImageData  s   zImageReader.getImageDatac              	   C   sf   d| j jv r1| j jd d }| j j}z|j}W n   z|j}W n   Y Y d S Y |||d  S d S )Nr  r  )r  r  paletterV  )r&   r  r  r   r   r   getTransparent  s   

zImageReader.getTransparentr   )r   r   r   r,  _cacher  r   r  r  classmethodr  r  r  r  r  r  r  r  r   r   r   r   r  f  s"    
'
	r  c                   @   s   e Zd ZdS )LazyImageReaderN)r   r   r   r   r   r   r   r    s    r  c                 C   s*   z|   W S  ty   t|    Y S w )z<Get width, height and RGB pixels from image file.  Wraps PIL)r  r@  r  )imageFileNamer   r   r   r    s
   
r  c                   @   s   e Zd ZdZd4d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d Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zeeeed)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS )5	DebugMemoa  Intended as a simple report back encapsulator

    Typical usages:
        
    1. To record error data::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',myVar=value)
        dbg.add(anotherPayload='aaaa',andagain='bbb')
        dbg.dump()

    2. To show the recorded info::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
        dbg.load()
        dbg.show()

    3. To re-use recorded information::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
            dbg.load()
        myTestFunc(dbg.payload('myVar'),dbg.payload('andagain'))

    In addition to the payload variables the dump records many useful bits
    of information which are also printed in the show() method.
    rl_dbgmemo.dbgr  r	   r   Nc              
      s  dd l }|| _|stj| _nt|dr|| _nt|d| _|dkr#d S i  | _}	|rCt dkrCdd l}
t	 }|

d | | |	d< t }t|}tj|}|rYt|pZd}tjtjtjd }d}d }zdd l}|td}|d }W n   Y tj t  }|  |	i d	ttt d
tjdtj dt!tj"dtj#dtj$dtj%dtjdtjd|d|& d|d|dtj'dt(tdddt(tdddt(tddt(tddd)dg fdd |D  t*t||d! td"ftd#ffD ]#\}}|D ]}t||r,zt(|| |	|< W q   Y qqq||krGz|	|t|d$ W n   Y |rltjtjd }tj+|rlz|t|d%, f|	d&< W n   Y i }tj-. D ]H\}|d'ks|d(ks|d d) d*ks|d d+ d,krfd-d d.D }d/d  |D r|d gd0d  |d1d  D  }t/|||< qs||	d2< i | jd3< | 0| d S )4Nr   writer  )NNN__tracebackz???zmeta_data.marproject_versiongmtplatformversion
hexversion
executableexec_prefixprefixr   r2  r   hostnamelcwdlpcwd	byteordermaxint
maxunicodez????api_versionversion_infowinverz
			r   c                    s   g | ]
}d | | f qS )%s=%rr   )r  r   )envr   r   r  ?  s    z&DebugMemo.__init__.<locals>.<listcomp>)r  environmentr   project_meta_datar  )getwindowsversiongetfilesystemencoding)unamectermidgetgidgetuidgetegidgeteuidgetlogin	getgroupsgetpgrpgetpidgetppid)exedlexedr  __script	reportlabrlextra
   z
reportlab.r  zrlextra.c                    s   g | ]}t  |d qS r   )r  rw  )r'   r   r   r  _  s    )__version____path__r:  c                 S      g | ]}|r|qS r   r   r  _fr   r   r   r  `  r  c                 S   r  r   r   r  r   r   r   r  a  r  r	   __module_versions	__payload)1socketr   r,   stdoutrc  rD  storer  	tracebackr   	print_excgetvaluer   r  r   r   r9  r  r2  marshalrt   r   rF  environrS   r   sortr   timeasctimegmtimer  r  r  r  r  r  r  gethostnamer  r  r   r  r   rM  r  r   rR   _add)r&   r   rH  	getScriptr  capture_tracebackr
  r3  r	  r  r  r;   r   r  pcwdr  r  r  mdr  KMr   r   module_versionsr   r!   r   )r  r'   r   r     s   




	



8 
zDebugMemo.__init__c                 C   s(   | j d }| D ]\}}|||< q	d S Nr  )r  r   )r&   r   payloadr   r!   r   r   r   r  g  s   

zDebugMemo._addc                 K   s   |  | d S r   )r  )r&   r3  r   r   r   addl  rL   zDebugMemo.addc              
   C   s   z|  }t| j| W d S    | j }t }| D ]\}}z
t||i| W q   d| ||< Y q||d t|| Y d S )Nz<unpicklable object %r>r   )tellro   dumpr  copyr   r   r  )r&   rm  posSffr   r!   r   r   r   _dumpo  s   
zDebugMemo._dumpc                 C   0   t | jd}z| | W |  d S |  w )Nwb)rD  r   r'  r  r&   rm  r   r   r   r"  ~     zDebugMemo.dumpc                 C   s   t  }| | | S r   )r   r'  r  r*  r   r   r   rp     s   
zDebugMemo.dumpsc                 C   s   t || _d S r   )ro   r  r  r*  r   r   r   _load  r"   zDebugMemo._loadc                 C   r(  )Nrb)rD  r   r,  r  r*  r   r   r   r    r+  zDebugMemo.loadc                 C   s   |  t| d S r   )r,  r   )r&   r;   r   r   r   rt        zDebugMemo.loadsc                 C   s   |  |dd   t| }|  |D ];}||  }}t|tr&|d }zt| tj| }t	|dd |kr:dp;d}W n   d }d}Y |  d|||f  qd S )N   r   r  SAME	DIFFERENTz??????unknown??????z  %s = %s (%s))
_writelnrS   r   r  r.   rR   
__import__r,   r  r  )r&   r   r!   r  vkvk0r'   r  r   r   r   _show_module_versions  s   
zDebugMemo._show_module_versionsc                 C   s   |  d||dd  f  d S )Nz*###################%s %s##################r/  )r2  )r&   r   whatr   r   r   _banner  r   zDebugMemo._bannerc                 C      |  |d d S )NzStart  r8  r   r   r   r   _start  r"   zDebugMemo._startc                 C   r9  )NzFinish r:  r   r   r   r   _finish  r"   zDebugMemo._finishc                 C   s"   |  | | | | | d S r   )r;  r2  r<  r   r   r   r   _show_lines  s   

zDebugMemo._show_linesc                 C   s,   d|t j|d f }| ||d  d S )Nz%s %sr   r	   )r   r   basenamer=  r   r   r   r   
_show_file  s   zDebugMemo._show_filec                 C   s6   |rdd l }| | | || j | | d S d S r   )pprintr;  r
  r<  )r&   r   r!   r@  r   r   r   _show_payload  s   
zDebugMemo._show_payloadc                 C   s   dD ]?}z)|gj }t| tj| }||j dD ]}t||r+|d|t||f  qW n   |d Y | dd|j	  qd S )N)	_rl_accel	_renderPMsgmloppyRXPpyRXPU_imagingr   )r  r  _versionr  r  z	not found )
r   r3  r,   r  r:  rc  r  r2  r   __self__)r&   mnr   r'   vnr   r   r   _show_extensions  s   



zDebugMemo._show_extensions)r  r  r  r  c                 C   s   t | j }|  |D ]}|t | j vr$| d|| j| f  q|D ]}|t | j v r>| j| | || j|  q'|   d S )Nz
%-15s = %s)rS   r  r   r  specialsr2  rM  )r&   r  r   r   r   r   show  s   **zDebugMemo.showc                 C      | j d | S r  r  r&   rA  r   r   r   r    rL   zDebugMemo.payloadc                 C   s   || j d |< d S r  rQ  )r&   rA  r)  r   r   r   r     r.  zDebugMemo.__setitem__c                 C   rP  r  rQ  rR  r   r   r   r     rL   zDebugMemo.__getitem__c                 C   s   | j |d  d S ro  )r
  r  )r&   msgr   r   r   r2    rx   zDebugMemo._writeln)r  r  r	   r   r	   N)r   r   r   r,  r   r  r   r'  r"  rp   r,  r  rt   r6  r8  r;  r<  r=  r?  rA  rM  rN  rO  r  r   r   r2  r   r   r   r   r    s:    
[	r  c                 C   s*   | D ]}t |rt|| q|| qd S r   )r0   _flatten)r  r   rh   r   r   r   rT    s   
rT  c                 C   s   g }t | |j |S )z'recursively flatten the list or tuple L)rT  r   )r  r   r   r   r   flatten  s   rU  c                 C   s$   	 | t |j}|r|S |d7 }q)zPapply func to the locals at each stack frame till func returns a non false valuer	   )r,   r   f_locals)r*  depth_r   r   r   find_locals  s
   rY  c                   @   s   e Zd Zdd Zdd ZdS )_FmtSelfDictc                 C   r(  r   )obj_overrideArgs)r&   r[  overrideArgsr   r   r   r     r+  z_FmtSelfDict.__init__c                 C   sR   z| j | W S  ty(   z	| jj| W  Y S  ty'   t| j| Y  Y S w w r   )r\  r   r[  r  r  r   r   r   r   r     s   z_FmtSelfDict.__getitem__N)r   r   r   r   r   r   r   r   r   rZ    s    rZ  c                   @   r&  )FmtSelfDictz mixin to provide the _fmt methodc                 K   s   t | |}|| S r   )rZ  )r&   fmtr]  r   r   r   r   _fmt	  s   
zFmtSelfDict._fmtN)r   r   r   r,  r`  r   r   r   r   r^    r-  r^  c           	      C   s   g }|d}g }| }|   D ]+}||}|| | |ks!|g kr-|| || | }q|d| |g}|}q|g krG|d| |S )NrI  )rR  r   r   )	txtmWSWr  wsOr  r   ltr   r   r   _simpleSplit  s   
rg  c                    sX   ddl m  t| d}||f fdd	}|r*g }|D ]}|t||| q|}|S )Nr   stringWidthrC  c                    s    | ||S r   r   )textfNfSrh  r   r   r   !  s    zsimpleSplit.<locals>.<lambda>)reportlab.pdfbase.pdfmetricsri  rF   rR  extendrg  )rj  fontNamefontSizemaxWidthlinesrc  r  lr   rh  r   simpleSplit  s   rt  c                 C   sZ   ddl m} | du r| S t| r| d}|| } | dd} | dd} | d	d
} | S )zEscapes once onlyr   )escapeNr6   	&amp;amp;&amp;&amp;gt;&gt;&amp;lt;&lt;)xml.sax.saxutilsru  r7   rE   r   )rj  ru  r;   r   r   r   escapeTextOnce)  s   r}  c                 C   s<   t | r| S tD ]}z| |W   S    Y qtd|  )Nz(cannot convert %r to filesystem encoding)rM   fsEncodingsrE   rS  )r   rB   r   r   r   fileName2FSEnc5  s   r  c                 C   s`   t dg| dg}t |d\}}}z|| || || W n	 ty)   Y nw t|||S )a  
    Loop over a collection with look-ahead and look-back.
    
    From Thomas Guest, 
    http://wordaligned.org/articles/zippy-triples-served-with-python
    
    Seriously useful looping tool (Google "zippy triples")
    lets you loop a collection and see the previous and next items,
    which get set to None at the ends.
    
    To be used in layout algorithms where one wants a peek at the
    next item coming down the pipe.

    Nr  )	itertoolschainteeStopIterationzip)r   rn  prevthisnextr   r   r   prev_this_nextA  s   r  c                 C   s   t | r	| d} t| d }| d7 } d}dg}||kr[| | dkrI| |d  dkr7|d  d7  < |d7 }n|d  |d< ||krH|d n
|d  | | 7  < |d7 }||ks|d  |d< |S )a  
    Splits the string s at every unescaped comma and returns the result as a list.
    To escape a comma, double it. Individual items are stripped.
    To avoid the ambiguity of 3 successive commas to denote a comma at the beginning
    or end of an item, add a space between the item seperator and the escaped comma.
    
    >>> commasplit(u'a,b,c') == [u'a', u'b', u'c']
    True
    >>> commasplit('a,, , b , c    ') == [u'a,', u'b', u'c']
    True
    >>> commasplit(u'a, ,,b, c') == [u'a', u',b', u'c']
    r6   r	   rI  r   r   rO  r  )r7   rE   r   rq   r   )r;   r   rI   r  r   r   r   
commasplit[  s$   
r  c                 C   s   d dd | D S )a  
    Inverse of commasplit, except that whitespace around items is not conserved.
    Adds more whitespace than needed for simplicity and performance.
    
    >>> commasplit(commajoin(['a', 'b', 'c'])) == [u'a', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a,', u' b ', u'c'])) == [u'a,', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a ', u',b', u'c'])) == [u'a', u',b', u'c'] 
    rO  c                 S   s$   g | ]}d t |dd d  qS )rI  rO  z,,)rF   r   )r  rI   r   r   r   r    s   $ zcommajoin.<locals>.<listcomp>)r   )rs  r   r   r   	commajoin{  s   r  Tc                 C   sp   |rt jjp	t jj}|| r| S t jj}t j| s,|D ]}||| }||r+|  S q|r6td| |f | S )z*search for relative files in likely placeszcannot locate %r with paths=%r)r   r   r   r   r   r   rS  )r   pathsr   failexistsr   r  r   r   r   r   findInPaths  s   
r  r   rI  c              	   C   s<   t  \}}}t|||dd | t||fD | dS )z,add msg to the args of an existing exceptionc                 s   s    | ]}|r|V  qd S r   r   r  rX  r   r   r   	<genexpr>      z$annotateException.<locals>.<genexpr>N)r,   r  r   r   r4   )rS  rB   postMsgrt  r   r!   r   r   r   r   r?     s   .r?   c                 C   sd   |  dd} |  dd} |  dd} |  dd} |  dd	} |  dd} |  dd} |  dd} | S )
zEnsure XML output is escaped just once, irrespective of input

    >>> escapeOnce('A & B')
    'A &amp; B'
    >>> escapeOnce('C &amp; D')
    'C &amp; D'
    >>> escapeOnce('E &amp;amp; F')
    'E &amp; F'

    &rw  rv  rx  ry  rz  r{  z&amp;#z&#)r   )rV  r   r   r   
escapeOnce  s   r  c                   @   r&  )IdentStrz,useful for identifying things that get splitc                 C   sZ   t |tr|j}|d dtt|   }|d7 }nd}|d| 7 }t| |}||_|S )Nr/  r	   r   z[%d])r.   r  _IdentStr__incr   r4   __new__)r  r)  incr&   r   r   r   r    s   

zIdentStr.__new__Nr   r   r   r,  r  r   r   r   r   r    r-  r  c                   @   r&  )RLStringzallows specification of extra properties of a string using a dictionary of extra attributes
    eg fontName = RLString('proxima-nova-bold',
                    svgAttrs=dict(family='"proxima-nova"',weight='bold'))
    c                 K   s.   t | |}| D ]
\}}t||| q
|S r   )r4   r  r   r   )r  r!   r   r&   r   r   r   r   r    s   zRLString.__new__Nr  r   r   r   r   r    s    r  c                 C   s   t | s	| d} | S )zEforce filename strings to unicode so python can handle encoding stuffr6   )rM   rE   r:   r   r   r   makeFileName  s   
r  c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )FixedOffsetTZz&Fixed offset in minutes east from UTC.c                 C   s   t j||d| _|| _d S )N)hoursminutes)datetime	timedelta_FixedOffsetTZ__offset_FixedOffsetTZ__name)r&   r  r'   rA  r   r   r   r     s   
zFixedOffsetTZ.__init__c                 C      | j S r   )r  r&   dtr   r   r   	utcoffset     zFixedOffsetTZ.utcoffsetc                 C   r  r   )r  r  r   r   r   tzname  r  zFixedOffsetTZ.tznamec                 C   s
   t dS r   )r  r  r  r   r   r   dst  r1   zFixedOffsetTZ.dstN)r   r   r   r,  r   r  r  r  r   r   r   r   r    s    r  c                   @   s.   e Zd ZdddZedd Zedd ZdS )		TimeStampNc                 C   s   |d u r
ddl m} tjdd }|s|r,|rt|nd}t|}d }}d| _	nt }t
|}t|}t|jd }|jd d	 }|j| _	|| _|| _t|d d
 | _|| _|| _d S )Nr   )	invariantSOURCE_DATE_EPOCHr   g   6AUTCg      @i  <   r{  )rh  r  r   r  r   rq   rQ   r  r  r  	localtimerR   	tm_gmtofftm_zoner   rf  YMDhmsdhhdmm)r&   r  r   rf  r  r  
local_timer   r   r   r     s&   


zTimeStamp.__init__c                 C   s.   | j rtj| jt| j| j| j S tj S r   )r  r  fromtimestampr   r  r  r  nowr%   r   r   r   r    s   
zTimeStamp.datetimec                 C   s   t | jS r   )r  r  rf  r%   r   r   r   r    s   zTimeStamp.asctimer   )r   r   r   r   propertyr  r  r   r   r   r   r    s    

r  c                 C   st   t |stdt| |f t|}| }|s tdt|  |r*|d dvr*dnd}td||f i t| dd	S )
z/Can call down into e.g. object1.object2[4].attrz!invalid recursive access of %s.%szempty recursive access of %sr   z[.(r  r   zobj%s%s)r[  )grs  )rK   r.  r  rH   rq   rS  r   rT   )r[  rA  r  dotr   r   r   recursiveGetAttr  s   r  c                 C   sZ   | d}t|dkrt| || dS d|dd }|d }t| |}t||| dS )z7Can call down into e.g. object1.object2[4].attr = valuer  r	   Nr  )rR  r   r   r   r  )r[  rA  r)  tokensmostlastparentr   r   r   recursiveSetAttr  s   

r  c                 C   sV   | d}t|dkrt| | d S d|d d }|d }t| |}t|| d S )Nr  r	   r  )rR  r   delattrr   r  )r[  rA  r  r  r  r  r   r   r   recursiveDelAttr  s   

r  c                 c   sz    d}t | }||k r;z| d|}| || V  |d }| s"W dS W n ty4   | |d V  Y dS w ||k sdS dS )z:yield sublists of L separated by None; the Nones disappearr   Nr	   )r   indexrS  )r  rI   r   jr   r   r   yieldNoneSplits%  s   r  c                 C   s   d dd | dD S )NrC  c                 s   s    | ]}|  V  qd S r   )lstripr  r   r   r   r  4  r  z_rl_docdent.<locals>.<genexpr>)r   rR  r:   r   r   r   _rl_docdent3  s   r  c                   @   s8   e Zd ZdddZdd Zdd Zdd	 ZdddZd
S )
KlassStorer}  c                 C   s   || _ i | _d S r   )limr  )r&   r  r   r   r   r   7  r+  zKlassStore.__init__c                 C   s   t |tr
t |tst| jj dt|t|f d| j}|||< t|| jkr<t	|
 d | j  D ]}||= q6d S d S )Nz%.add takes (str,type) arguments not ())r.   r4   r   rS  r>  r   r  r   r  rS   r   )r&   r   r!   r  rX  r   r   r   r   ;  s   $zKlassStore.addc                 C   s
   || j v S r   rQ  r   r   r   r   r   D  r1   zKlassStore.__contains__c                 C   s
   | j | S r   rQ  r   r   r   r   r   G  r1   zKlassStore.__getitem__Nc                 C   s   | j ||S r   )r  r   )r&   r   defaultr   r   r   r   J  rL   zKlassStore.get)r}  r   )r   r   r   r   r   r   r   r   r   r   r   r   r  6  s    
	r  )r6   r   )r   )NNr   )NN)Nr   r   rg  )r   )r   )TF)r6   r   rI  )r  r,  r   ro   r,   r  rY   r  r  astr   rQ  r   ru   r   rn   ior   hashlibr   reportlab.lib.rltempfiler   r   r   r
   r   r   PILr   r   r  python_implementationisPyPyr   r#   r   r'   r*   r-   rR   rS   r0   r5   rX   r4   r>   strTypesr<   rC   rF   rG   rH   rJ   rK   r7   rM   rO   ri   rj   rk   rs   rw   rz   r|   r   r  rl_execr   r   r   r   r   rT   r   rA  r   r   r   r   r  r   r9  r:  __RL_DIRr   r  r  r2  r   r   r   r   r  NotImplementedErrorr  r  archiver   rt  r   r   r   r   r   r   r  r   r   r   r  r   splitextr
  r  r	  r  r  r  r%  
haveImagesr'  r6  r=  rB  rI  urllib.parserJ  rK  urllib.requestrL  rN  rf  rn  rp  rr  r   rv  r   rz  getmtimemktimer  r  r  r  r  r  r  r  r  r  rT  rU  rY  rZ  r^  rg  rt  r}  r  r  r  r  r  r  r?   r  r  r  r  tzinfor  r  r  r  r  r  r  r  r   r   r   r   <module>   sR  8








	8
 


"
.
,	



:
   w
 


"	
