o
    à’Ojÿ±  ã                   @   sˆ  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/dÛdd „Z0dÛd!d"„Z1dÛd#d$„Z2dÛd%d&„Z3d'd(„ Z4d)d*„ Z5d+d,„ Z6d-d.„ Z7d/d0„ Z8d1d2„ Z9d3d4„ Z:dÛd5d6„Z;d7d8„ Z<d9d:„ Z=d;d<„ Z>d=d>„ Z?ddl@Z@eAe@d?ƒZB[@d@dA„ ZCdÜdBdC„ZDdDdE„ ZEdÜdFdG„ZFdÝdIdJ„ZGG dKdL„ dLeHƒZIejJdMk�r5ddlKZKddlLZLdNdOdOdPdQdQdRdRdSdTdUdUdVdWdXœZMdÞdZd[„ZNndßd\d[„ZNddlOZOejP QeOjR¡ZSejP TeS¡�rOeS�pTejP UeS¡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jP Qea¡Zdedejb ZeefecƒZgefeeƒZheceeeaedejPj_ejPj^ejiejbefejbƒf	d_d`„Zjdadb„ ZkeXjXeYjYeVejPjlfdcdd„ZmW n   ejP neR¡Z\dZ[dedb„ ZkeXjXfdfdd„ZmY [X[Ye\�oôejP nejP oeR¡d dg ¡Zpdhdi„ Zqdjdk„ Zrdldm„ Zsdndo„ ZteAedpdqdr„ ƒZudàdsdt„ZveduZwG dudv„ dvƒZxdwdx„ ZydÜdydz„Zzd{d|„ Z{dád~d„Z|dd€l}m~Z~mZ dd�l€m�Z�m‚Z‚ dÜd‚dƒ„Zƒdád„d…„Z„dád†d‡„Z…dâd‰dŠ„Z†ejPjnfd‹dŒ„Z‡ejPjˆejPj_fd�dŽ„Z‰ejPjˆejPj_ejŠfd�d�„Z‹ejPjnejPj_ejPjŒej�fd‘d’„ZŽdd“lm�Z� d”d•„ Z‘d–d—„ Z’d˜d™„ Z“G dšd›„ d›ƒZ”G dœd�„ d�e”ƒZ•dždŸ„ Z–G d d¡„ d¡ƒZ—d¢d£„ Z˜d¤d¥„ Z™dãd¦d§„ZšG d¨d©„ d©ƒZ›G dªd«„ d«ƒZœd¬d­„ Z�d®d¯„ Zžd°d±„ ZŸd²d³„ Z ddl¡Z¡d´dµ„ Z¢d¶d·„ Z£d¸d¹„ Z¤däd»d¼„Z¥dåd¿dÀ„Z¦dÁdÂ„ Z§G dÃdÄ„ dÄe,ƒZ¨G dÅdÆ„ dÆe,ƒZ©dÇdÈ„ ZªG dÉdÊ„ dÊej«ƒZ¬G dËdÌ„ dÌƒZ­dÜdÍdÎ„Z®dÏdÐ„ Z¯dÑdÒ„ Z°dÓdÔ„ Z±dÕdÖ„ Z²G d×dØ„ dØƒZ³G dÙdÚ„ dÚƒZ´e´ƒ Z´d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   úY/var/www/html/pharmsmart-cdr-gen/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| n|  d¡dd� ¡ S )NÚutf8F)Úusedforsecurity)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.   Úbytesr9   ÚannotateExceptionÚascii©r!   Úencr   r   r   ÚasBytes<   ó
   rD   c                 C   r>   )NzasUnicode(%s,enc=%s) error: )r.   r4   Údecoder@   rA   rB   r   r   r   Ú	asUnicodeC   rE   rG   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?   rF   r@   rA   rB   r   r   r   ÚasUnicodeExJ   s
    rH   c                 C   s   t | |d�S )N)rC   )rG   rB   r   r   r   ÚasNativeQ   r+   rI   c                 C   s
   t | gƒS r   )r?   )Úir   r   r   Úint2ByteT   r1   rK   c                 C   s   t | ttfƒS r   )r.   r4   r?   r    r   r   r   ÚisStrW   ó   rL   c                 C   r2   r   )r.   r?   r    r   r   r   r8   Z   r1   r8   c                 C   r2   r   r3   r    r   r   r   Ú	isUnicode]   r1   rN   c                 C   r2   r   ©r.   r   r    r   r   r   ÚisClass`   r1   rP   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   ûrj   c                 C   s   t | tƒ S r   rO   r    r   r   r   Úinstantiatedk   r+   rk   c                 C   s0   t | tƒr
|  |¡S t | tƒr| S t| ƒ |¡S r   )r.   r4   r9   r?   )ri   rC   r   r   r   Úbytestrn   s
   


rl   c                 C   s   t t| ƒ d¡ƒ ¡  d¡S ©NrA   )Úbase64_encodebytesrA   r9   ÚstriprF   )Úargsr   r   r   Úencode_labelv   ó   rq   c                 C   s   t t|  d¡ƒ d¡ƒS rm   )r   Úbase64_decodebytesr9   rF   )Úlabelr   r   r   Údecode_labely   s   ru   c                 C   s   t | tƒs
|  d¡S | S ©zconverts first 256 unicodes 1-1Úlatin1)r.   r4   rF   r;   r   r   r   Ú
rawUnicode|   ó   rx   c                 C   s   t | tƒr
|  d¡S | S rv   )r.   r4   r9   r;   r   r   r   ÚrawBytes€   ry   rz   Úexecc                 C   s*   t | tƒr| S tt | tƒr| n|  d¡ƒS )Nrw   )r.   rR   Úordr4   rF   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&   rp   Ú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š   rU   Ú__setitem__©r&   rˆ   r!   r   r   r   r«   ¯   ó
   zCIDict.__setitem__c                 C   ó"   z|  ¡ }W n   Y t | |¡S r   )rš   rU   Ú__getitem__©r&   rˆ   r   r   r   r¯   ¶   ó
   zCIDict.__getitem__c                 C   r®   r   )rš   rU   Ú__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š   rU   Úpop©r&   rˆ   r¨   r   r   r   r¸   Ñ   r­   z
CIDict.popc                 G   r·   r   )rš   rU   Ú
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å   )ri   r¢   Úpjoinr   r   r   Ú<lambda>:  ó   
 zrl_glob.<locals>.<lambda>c                 S   s
   || |ƒS r   r   )ri   ÚpfnÚfnmatchr   r   r   rõ   :  rö   )rñ   rT   Ú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  ó   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  rr   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}z£zb|t _tƒ  |r¨tƒ  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ƒ  |r¿t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ƒ  |rþt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.   rT   rS   r  ÚinsertÚprintÚremover™   ÚgetcwdÚ_importlib_invalidate_cachesrA   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)	rL   r.   rQ   rR   rT   r   rS   Ú	TypeErrorr   )r!   Úavr)  r   r   r   ÚhandleValue’  s&   ô
ö	
ø
ú
üÿz getArgvDict.<locals>.handleValuer	   Nr   ú=)
r,   Úargvr…   r.   r&  r(  r)  rà   r�   r  )Úkwr/  r¡   r    rˆ   r!   r)  ÚhandledÚker¨   r.  r   r   r   ÚgetArgvDict�  s(   


û€r5  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.pyHnjr6  r™   rã   r–   ÚdirnameÚ__file__r  r4   )ÚhDictr6  Ú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&   ÚnamerJ   r   r   r   Ú
_classNameÂ  s   
ÿrA  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   )r@  Úmoder<   r   r   r   Úopen_for_read_by_nameÌ  s   
 ùrH  )ÚunquoteÚurlparse)ÚurlopenÚRequestc                 C   s,   |d kri }|  dd¡ tt| |d�ƒ ¡ S )Nz
User-AgentÚReportLabAgent)Úheaders)rº   rK  rL  Úread)r@  rN  r   r   r   Ú	rlUrlReadÛ  s   rP  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   r0  NrÞ   Úbase64rA   zlatin-1)ÚsplitÚ
ValueErrorrD  r>  rs   r9   )ÚurlrI  Ú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    zFˆst‚t| ƒ}|j}|j ¡ }|rG|ˆvsG|dkr>|dkr5ˆ d¡s>|dkrGˆ |¡rG|dvrIˆ |¡sIt‚t|dkrPˆ nt	| ƒƒW  Y S    t
d| ›�ƒ‚)z)attempt to open a file or URL for readingrO  ÚfilerÞ   Ú	localhost)rX  rc  rX  zCannot open resource )ÚhasattrrH  rU  rJ  ÚschemeÚnetlocrš   Úmatchr   rP  rD  )r@  rG  rg  rf  )r[  r\  r]  r   r   Úopen_for_read
  s<   
ÿþýýûûùùz$open_for_read.<locals>.open_for_readri  ©r�   )
rI  Úreportlab.rl_configr\  r]  Úrerø   Úcompiler–   rù   Úglobals)r@  rG  rl  ra  ri  r   )r[  rø   r\  r]  r   ri  à  s   
þ

ri  c                 C   sT   t | |ƒ}| |ur&t|dƒr&|� | ¡ W  d   ƒ S 1 sw   Y  d S | ¡ S )NÚ__exit__)ri  re  rO  )r@  rG  Úfr   r   r   Úopen_and_read$  s   
$ÿrq  r€   c                 C   s   t | |ƒ d¡S ©NrB  )rq  rT  )r@  rG  r   r   r   Úopen_and_readlines,  r"   rs  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 )NrO  TF)re  r  rû   ró   rT   r�   rü   )r£   Úos_path_isfiler   r   r   Ú	rl_isfile/  s
   ru  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à   )ri   Úpnr   r   r   rõ   ;  rö   zrl_isdir.<locals>.<lambda>r   )r  rû   ró   rœ   r™   Úsepr�   rT   rú   r�   rü   )rv  Úos_path_isdirré   r   r   r   Úrl_isdir6  s
   (ry  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  ri   ©rv  r   r   r  A  s   & zrl_listdir.<locals>.<listcomp>)r  rû   ró   rœ   r™   rw  r�   rü   )rv  rx  ré   Ú
os_listdirr   r{  r   Ú
rl_listdir=  s   r}  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 )Né   é   é	   é   i¼  é   é   é   é?   r	   r   )r  rû   ró   r�   r³   )	rv  rt  ré   Úos_path_getmtimeÚtime_mktimer  Úer<   Údr   r   r   Úrl_getmtimeC  s   ÿJrŠ  )Úutilc                 C   sZ   dD ]&}t j || | ¡}t j |¡r(t | |¡}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Úmodule_from_specÚloaderÚexec_moduler  )r@  Údirrž   rã   ÚspecÚmoduler   r   r   Ú__rl_get_module__O  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ß   rw  r‹   Úload_moduler  )r@  r‘  ÚomrŽ   Úzir   r   r   Úrl_get_moduleY  s$   


ö*
þr™  c                 C   s$   zt | tjƒW S  ty   Y dS w rƒ   )r.   r   r?  )Úimr   r   r   Ú_isPILImagen  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?  Úidrk  rž  rU  ri  r   rO  ÚcloseÚ_read_imager4   r  Úcheck_pil_image_sizeÚ_jpeg_fhÚjpeg_fhr@   Úidentity)r&   r¢  Úidentrž  r�  Útfpr   r   r   r©   x  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�  Nr@  z[%s@%s%s%s]z	 ident=%rrÞ   z filename=%r)r¢  rL   r¨  r¡  r=  r   Úhexr©  )r&   r£   r°  r   r   r   r¯  Ÿ  s
   4zImageReader.identityc                 C   s
   t  |¡S r   )r   rC  ©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ÚsizerG  Ú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·  rk  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£  rG  r¨  r   rà   Úloadrœ  rT  ÚconvertrŸ  Úinfore  rÍ  Útostringr@   r¯  )r&   rš  rG  Ú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Ñ  ÚpaletterX  )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œ  t  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ã   r1  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  M  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¨  rz  )r'   r   r   r  m  s    )Ú__version__Ú__path__r9  c                 S   ó   g | ]}|r|‘qS r   r   ©r  Ú_fr   r   r   r  n  r  c                 S   r  r   r   r  r   r   r   r  o  r  r	   Ú__module_versionsÚ	__payload)1Úsocketr£   r,   Ústdoutre  rC  Ústorer  Ú	tracebackr   Ú	print_excÚgetvaluer™   r  r—   rã   r8  r  r1  ÚmarshalÚloadsrû   rE  ÚenvironrT   rü   Úsortr¦   ÚtimeÚasctimeÚgmtimerä  rå  r²  ræ  rç  rè  ré  Úgethostnamerí  r¨  r–   r  r”   rO  r•  r…   rS   Ú_add)r&   r£   rG  Ú	getScriptr•  Úcapture_tracebackr  r2  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  u  s   

ÿzDebugMemo._addc                 K   s   |   |¡ d S r   )r  )r&   r2  r   r   r   Úaddz  rM   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   )ÚtellÚpickleÚdumpr  Úcopyr   r…   rÂ  )r&   rp  ÚposÚSÚffrˆ   r!   r   r   r   Ú_dump}  s   
zDebugMemo._dumpc                 C   ó0   t | jdƒ}z|  |¡ W | ¡  d S | ¡  w )NÚwb)rC  r£   r1  rª  ©r&   rp  r   r   r   r,  Œ  ó   zDebugMemo.dumpc                 C   s   t ƒ }|  |¡ | ¡ S r   )r   r1  r  r4  r   r   r   Údumps“  s   
zDebugMemo.dumpsc                 C   s   t  |¡| _d S r   )r+  rÏ  r  r4  r   r   r   Ú_load˜  r"   zDebugMemo._loadc                 C   r2  )NÚrb)rC  r£   r7  rª  r4  r   r   r   rÏ  ›  r5  zDebugMemo.loadc                 C   s   |   t|ƒ¡ d S r   )r7  r   )r&   r<   r   r   r   r  ¢  ó   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))
Ú_writelnrT   rü   r  r.   rS   Ú
__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:  )r=  )r&   rˆ   Úwhatr   r   r   Ú_bannerµ  rª   zDebugMemo._bannerc                 C   ó   |   |d¡ d S )NzStart  ©rC  r°   r   r   r   Ú_start¸  r"   zDebugMemo._startc                 C   rD  )NzFinish rE  r°   r   r   r   Ú_finish»  r"   zDebugMemo._finishc                 C   s"   |   |¡ |  |¡ |  |¡ d S r   )rF  r=  rG  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ã   ÚbasenamerH  r¬   r   r   r   Ú
_show_fileÃ  s   zDebugMemo._show_filec                 C   s6   |rdd l }|  |¡ |  || j¡ |  |¡ d S d S rƒ   )ÚpprintrF  r  rG  )r&   rˆ   r!   rK  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ÚsgmlopÚ_imagingr   )r
  rÆ  Ú_versionrå  ró  z	not foundú )
r›   r>  r,   r•  r9  re  r¨  r=  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)rT   r  rü   r  Úspecialsr=  rU  )r&   r$  rˆ   r   r   r   Úshowá  s   *€*€zDebugMemo.showc                 C   ó   | j d | S r'  ©r  ©r&   r@  r   r   r   r(  ê  rM   zDebugMemo.payloadc                 C   s   || j d |< d S r'  rY  )r&   r@  r(  r   r   r   r«   í  r9  zDebugMemo.__setitem__c                 C   rX  r'  rY  rZ  r   r   r   r¯   ð  rM   zDebugMemo.__getitem__c                 C   s   | j  |d ¡ d S rr  )r  rà  )r&   Úmsgr   r   r   r=  ó  s   zDebugMemo._writeln)rß  r½  r	   r   r	   N)r   r   r   r+  r©   r  r)  r1  r,  r6  r7  rÏ  r  rA  rC  rF  rG  rH  rJ  rL  rU  rV  rW  r(  r«   r¯   r=  r   r   r   r   rÞ     s:    
[ý	rÞ  c                 C   s*   | D ]}t |ƒrt||ƒ q||ƒ qd S r   )r0   Ú_flatten)rÈ  r¨   ri   r   r   r   r\  ö  s   
þr\  c                 C   s   g }t | |jƒ |S )z'recursively flatten the list or tuple L)r\  r›   )rÈ  r    r   r   r   Úflattenû  s   r]  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
   ýra  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_FmtSelfDictc                 C   r'  r   )ÚobjÚ_overrideArgs)r&   rc  Ú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   )rd  r³   rc  r   r¨  r°   r   r   r   r¯     s   ÿýz_FmtSelfDict.__getitem__N)r   r   r   r©   r¯   r   r   r   r   rb    s    rb  c                   @   r%  )ÚFmtSelfDictz mixin to provide the _fmt methodc                 K   s   t | |ƒ}|| S r   )rb  )r&   Úfmtre  r¢   r   r   r   Ú_fmt  s   
zFmtSelfDict._fmtN)r   r   r   r+  rh  r   r   r   r   rf    r,  rf  c           	      C   s’   g }|dƒ}g }| }|   ¡ D ]+}||ƒ}|| | |ks!|g kr-| |¡ || | }q| d |¡¡ |g}|}q|g krG| d |¡¡ |S )NrQ  )rT  r›   r–   )	ÚtxtÚmWÚSWrÈ  ÚwsÚOr½  r€   Últr   r   r   Ú_simpleSplit  s   
ro  c                    sX   ddl m‰  t| ƒ d¡}||f‡ fdd„	}|r*g }|D ]}| t|||ƒ¡ q|}|S )Nr   ©ÚstringWidthrB  c                    s   ˆ | ||ƒS r   r   )ÚtextÚfNÚfSrp  r   r   rõ   /  s    zsimpleSplit.<locals>.<lambda>)Úreportlab.pdfbase.pdfmetricsrq  rG   rT  Úextendro  )rr  ÚfontNameÚfontSizeÚmaxWidthÚlinesrk  rÈ  Úlr   rp  r   ÚsimpleSplit,  s   r|  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.saxutilsr}  r8   rF   rß   )rr  r}  r<   r   r   r   ÚescapeTextOnce7  s   r…  c                 C   s<   t | ƒr| S tD ]}z|  |¡W   S    Y qtd|  ƒ‚)Nz(cannot convert %r to filesystem encoding)rN   ÚfsEncodingsrF   rU  )r£   rC   r   r   r   ÚfileName2FSEncC  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…   rv  ÚprevÚthisÚnextr   r   r   Úprev_this_nextO  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	   rQ  r   rÞ   rQ  rÇ  )r8   rF   r�   ro   r›   )r<   rð   rJ   r   r   r   r   Ú
commaspliti  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'] 
    rQ  c                 S   s$   g | ]}d t |ƒ dd¡ d  ‘qS )rQ  rQ  z,,)rG   rß   )r  rJ   r   r   r   r  ”  s   $ zcommajoin.<locals>.<listcomp>)r–   )r{  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ä   rU  )r£   Úpathsr”   ÚfailÚexistsrô   r  r÷   r   r   r   ÚfindInPaths–  s   
ÿr–  rÞ   rQ  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  r`  r   r   r   Ú	<genexpr>¦  ó   € z$annotateException.<locals>.<genexpr>N)r,   r  r‚   r–   r4   )r[  rC   ÚpostMsgrw  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 )
zÔEnsure 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'

    ú&r  r~  r€  r�  r‚  rƒ  z&amp;#z&#)rß   )rX  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%  )ÚRLStringzÚallows 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   )rN   rF   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'   r@  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   À¡6ÌAÚUTCg      ¬@i  é<   r  )rk  r³  r™   r  rµ   ro   rR   r  r  r°  Ú	localtimerS   Ú	tm_gmtoffÚtm_zoner€   rn  ÚYMDhmsÚdhhÚdmm)r&   r³  r€   rn  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  rn  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)rc  )Úgr{  )rL   r-  r  rI   ro   rU  r   rU   )rc  r@  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Ç  )rT  r�   r†   r–   rÃ  )rc  r@  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Ç  )rT  r�   Údelattrr–   rÃ  )rc  r@  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�   ÚindexrU  )rÈ  rJ   rð   Újr   r   r   ÚyieldNoneSplits3  s   €þúrÍ  c                 C   s   d  dd„ |  d¡D ƒ¡S )NrB  c                 s   s   � | ]}|  ¡ V  qd S r   )Úlstripr—  r   r   r   r˜  B  r™  z_rl_docdent.<locals>.<genexpr>)r–   rT  r;   r   r   r   Ú_rl_docdentA  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©   E  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   rU  r=  r   r  r�   rÑ  rT   rü   )r&   rˆ   r!   r  r`  r   r   r   r)  I  s   $þzKlassStore.addc                 C   s
   || j v S r   rY  r°   r   r   r   r¶   R  r1   zKlassStore.__contains__c                 C   s
   | j | S r   rY  r°   r   r   r   r¯   U  r1   zKlassStore.__getitem__Nc                 C   s   | j  ||¡S r   )r  rµ   )r&   rˆ   Údefaultr   r   r   rµ   X  rM   zKlassStore.get)r�  r   )r   r   r   r©   r)  r¶   r¯   rµ   r   r   r   r   rÐ  D  s    
	rÐ  c                   @   s4   e Zd Zi Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	S )
Úrl_warnc                 C   s   | j | _d S r   )Ú_rl_warn__shared_stater   r%   r   r   r   r©   ]  r+   zrl_warn.__init__c                 C   s˜   | j si | _ddlm} || jƒ dd l}dd l}|| _|| _|| jvr,| jj	|dd� | j 
¡ d }| j |tƒ ¡ d|j› d|j› d|j› �¡ d S )	Nr   r¿  r:  )Ú
stacklevelr	   zin z @ ú:)rÕ  Ú_rl_warn__warnings_seenrk  rÀ  Ú_rl_warn__resetÚinspectÚwarningsÚ_rl_warn__inspectÚ_rl_warn__warningsÚwarnÚstackrº   Úsetr)  ÚfunctionrØ   Úlineno)r&   ÚmessagerÀ  rÚ  rÛ  Úframer   r   r   Ú__call__`  s   

ÿzrl_warn.__call__c                 C   s   | j  ¡  d S r   )rØ  Úclearr%   r   r   r   Ú__reseto  rM   zrl_warn.__resetc                 C   r«  r   )rØ  r%   r   r   r   Úwarnings_seenr  r  zrl_warn.warnings_seenN)	r   r   r   rÕ  r©   rå  rÙ  rÀ  rè  r   r   r   r   rÔ  [  s    rÔ  )r6   r   )r“   )NNrÏ   )NN)Nr   r   rj  )r€   )r   )TF)r6   rÞ   rQ  )µr
  r+  r™   r+  r,   r  rZ   r§  r  Úastr   rS  r   rs   r   rn   Úior   Úhashlibr   Úreportlab.lib.rltempfiler   r   r   r
   r   r   ÚPILr   r   rä  Úpython_implementationÚisPyPyr   r#   r   r'   r*   r-   rS   rT   r0   r5   rY   r4   r?   ÚstrTypesr=   rD   rG   rH   rI   rK   rL   r8   rN   rP   rj   rk   rl   rq   ru   rx   rz   r„   r¨  Úrl_execr}   r‚   r‰   r’   r¤   rU   r¥   r@  rÓ   rÖ   rÑ   rÛ   r  rã   r8  r9  Ú__RL_DIRrä   r  rÿ   r1  rþ   rø   rŠ   rû   r  ÚNotImplementedErrorr  r  Úarchiverç   rw  rå   rè   ræ   r�   rá   râ   r  rñ   ró   r–   r  r”   Úsplitextr	  r  r  r
  r  r  r$  Ú
haveImagesr&  r5  r<  rA  rH  Úurllib.parserI  rJ  Úurllib.requestrK  rL  rP  ri  rq  rs  ru  r•   ry  r—   r}  ÚgetmtimeÚmktimerŠ  r‹  rŒ  r”  r™  r›  rœ  rÜ  r×  rÞ  r\  r]  ra  rb  rf  ro  r|  r…  r‡  rˆ  r�  r‘  r’  r–  r@   rœ  r�  r¢  r£  Útzinfor¤  r²  rÃ  rÈ  rÊ  rÍ  rÏ  rÐ  rÔ  r   r   r   r   Ú<module>   sV  8








	8ò
 


÷"
.
,	

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