a
    ¥Q•hî¨  ã                   @   sd  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 n0 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�rnddlKZKddlLZLdNdOdOdPdQdQdRdRdSdTdUdUdVdWdXœZMdÝdZd[„ZNn
dÞd\d[„ZNddlOZOejP QeOjR¡ZSejP TeS¡�r¢eS�p¬ejP UeS¡ZV[OzeR W n   ejWd ZRY n0 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 n2   ejP neR¡Z\dZ[dedb„ ZkeXjXfdfdd„ZmY n0 [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� 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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   s   dS )NF© r   r   r   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/lib/utils.pyÚ__bool__   s    z__UNSET__.__bool__c                   C   s   dS )Nr   r   r   r   r   r   Ú__str__   s    z__UNSET__.__str__N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   Ú__repr__r   r   r   r   r      s
   

r   ÚPyPyFc                 C   s   t | ƒt tƒkS ©N)ÚtypeÚ
isFunction©Úvr   r   r   r   !   s    r   c                   @   s   e Zd Zdd„ ZdS )Úcc                 C   s   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'   s    r%   c                 C   s   t | ƒt tƒkS r   )r   Úsysr   r   r   r   ÚisModule+   s    r'   c                 C   s
   t | |ƒS r   )Ú
isinstance)r   Z_str   r   r   ÚisSeq.   s    r)   c                 C   s
   t | tƒS r   ©r(   Ústrr   r   r   r   ÚisNative1   s    r,   c                 C   s   t t| ƒr| n|  d¡ƒ ¡ S )NÚutf8)r   ÚisBytesÚencodeÚ	hexdigest©Úsr   r   r   Ú	_digester9   s    r3   r-   c                 C   sD   t | tƒr| S z|  |¡W S    tdt| ƒt|ƒf ƒ Y n0 d S )NzasBytes(%s,enc=%s) error: )r(   Úbytesr/   ÚannotateExceptionÚascii©r   Úencr   r   r   ÚasBytes<   s
    r9   c                 C   sD   t | tƒr| S z|  |¡W S    tdt| ƒt|ƒf ƒ Y n0 d S )NzasUnicode(%s,enc=%s) error: )r(   r+   Údecoder5   r6   r7   r   r   r   Ú	asUnicodeC   s
    r;   c                 C   sV   t | tƒr| S zt | tƒr$|  |¡nt| ƒW S    tdt| ƒt|ƒf ƒ Y n0 d S )NzasUnicodeEx(%s,enc=%s) error: )r(   r+   r4   r:   r5   r6   r7   r   r   r   ÚasUnicodeExJ   s
    r<   c                 C   s   t | |d�S )N)r8   )r;   r7   r   r   r   ÚasNativeQ   s    r=   c                 C   s
   t | gƒS r   )r4   )Úir   r   r   Úint2ByteT   s    r?   c                 C   s   t | ttfƒS r   )r(   r+   r4   r   r   r   r   ÚisStrW   s    r@   c                 C   s
   t | tƒS r   )r(   r4   r   r   r   r   r.   Z   s    r.   c                 C   s
   t | tƒS r   r*   r   r   r   r   Ú	isUnicode]   s    rA   c                 C   s
   t | tƒS r   ©r(   r   r   r   r   r   ÚisClass`   s    rC   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Údictr+   r4   Ú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    ûr]   c                 C   s   t | tƒ S r   rB   r   r   r   r   Úinstantiatedk   s    r^   c                 C   s4   t | tƒr|  |¡S t | tƒr"| S t| ƒ |¡S d S r   )r(   r+   r/   r4   )r\   r8   r   r   r   Úbytestrn   s
    


r_   c                 C   s   t t | ¡ƒ ¡  d¡S ©NÚlatin1)Úbase64_encodebytesÚpickleÚdumpsÚstripr:   )Úargsr   r   r   Úencode_labelv   s    rg   c                 C   s   t  t|  d¡ƒ¡S r`   )rc   ÚloadsÚbase64_decodebytesr/   )Úlabelr   r   r   Údecode_labely   s    rk   c                 C   s   t | tƒs|  d¡S | S ©zconverts first 256 unicodes 1-1ra   )r(   r+   r:   r1   r   r   r   Ú
rawUnicode|   s    rm   c                 C   s   t | tƒr|  d¡S | S rl   )r(   r+   r/   r1   r   r   r   ÚrawBytes€   s    rn   Úexecc                 C   s*   t | tƒr| S tt | tƒr| n|  d¡ƒS r`   )r(   rE   Úordr+   r:   r1   r   r   r   Úchar2int†   s    rq   c                 C   s   |j |ur| |¡‚|‚d S r   )Ú__traceback__Úwith_traceback)Útr   Úbr   r   r   Ú
rl_reraiseˆ   s    

rv   c                  K   s*   dd l }|  ¡ D ]\}}t|||ƒ qd S ©Nr   )ÚbuiltinsÚitemsÚsetattr)Zkwdrx   Úkr   r   r   r   Úrl_add_builtinsŒ   s    r|   c                 C   sR   z>| st  d¡jd } ddlm} t| |ƒr:t| jƒr:| nd W S    Y d S 0 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 ]H}||ƒsDq6||ƒD ]0}	|||	ƒ}	||	ƒrL|rt|	 ¡  |¡rL||	ƒ qLq6|S )Nr   )ÚisfileÚisdirÚjoin)Úlistdir)	Zos.pathr‡   rˆ   r‰   ÚosrŠ   ÚlowerÚappendÚendswith)
ZdirListÚextr‡   rˆ   Z	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!   rf   ÚkwdsÚar   r   r   Ú__init__¨   s    zCIDict.__init__c                 C   s   |  ¡ D ]\}}|| |< qd S r   )ry   )r!   r’   r{   r   r   r   r   r–   ¬   s    zCIDict.updatec                 C   s,   z|  ¡ }W n   Y n0 t | ||¡ d S r   )rŒ   rH   Ú__setitem__©r!   r{   r   r   r   r   rš   ¯   s
    zCIDict.__setitem__c                 C   s&   z|  ¡ }W n   Y n0 t | |¡S r   )rŒ   rH   Ú__getitem__©r!   r{   r   r   r   rœ   ¶   s
    zCIDict.__getitem__c                 C   s&   z|  ¡ }W n   Y n0 t | |¡S r   )rŒ   rH   Ú__delitem__r�   r   r   r   rž   ½   s
    zCIDict.__delitem__Nc                 C   s&   z
| | W S  t y    | Y S 0 d S r   )ÚKeyError)r!   r{   Údvr   r   r   ÚgetÄ   s    
z
CIDict.getc                 C   s"   z| |  W dS    Y dS 0 d S )NTFr   r�   r   r   r   Ú__contains__Ê   s
    zCIDict.__contains__c                 G   s,   z|  ¡ }W n   Y n0 tj| |f| Ž S r   )rŒ   rH   Úpop©r!   r{   r˜   r   r   r   r£   Ñ   s
    z
CIDict.popc                 G   s,   z|  ¡ }W n   Y n0 tj| |f| Ž S r   )rŒ   rH   Ú
setdefaultr¤   r   r   r   r¥   Ø   s
    zCIDict.setdefault)N)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§   ZGIFf)r§   ÚJPEG)ZttxtÚPICT)r§   ZPNGf)r§   z.PPM)r§   ÚTIFF)ZCAROzPDF )ZMSIEÚTEXT)ZBMPZEPSr¨   ZGIFZJPGr©   ZPCTrª   ÚPNGÚPPMZTIFr«   ÚPDFZHTMLr¯   c                 C   sp   z^|d u s|d u r@|d ur@zt | ¡  \}}W n   Y W d S 0 t | ¡ ||¡ t | ¡ W n   Y n0 d S r   )Ú_KNOWN_MAC_EXTÚupperÚmacfsZFSSpecZSetCreatorTypeÚ
macostoolsZtouched)ÚfilenameÚcreatorcodeÚfiletyper�   r   r   r   Úmarkfilenameô   s    
r·   c                 C   s   d S r   r   )r´   rµ   r¶   r   r   r   r·      s    )r„   z#can't handle compact distro type %rc
                 C   sÀ   ||   d|¡ƒ} || ƒ}
|
||fv r(dS |
 |¡rBd| td… fS |
 |¡r\d| td… fS ||ƒ ƒ}t|ƒ}|
 |¡r®| |d…  |¡ržd| ||	 d… fS |t| ƒkr®d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_normpathZos_path_normcaseZ	os_getcwdZos_sepZ
os_sep_lenZnfnÚcwdÚnr   r   r   Ú__startswith_rl  s    

&rÇ   c                 C   s   t | ƒd S )Nr	   )rÇ   ©r“   r   r   r   Ú_startswith_rl3  s    rÉ   c              
   C   s^   t | ƒ\}}||ƒ}|s |g krZ|ttt|fdd„tt||fdd„ttj ¡ ƒƒƒƒƒ7 }|S )Nc                 S   s
   |t | ƒS r   )rÀ   )r\   r’   Úpjoinr   r   r   Ú<lambda>:  r#   zrl_glob.<locals>.<lambda>c                 S   s
   || |ƒS r   r   )r\   ÚpfnÚfnmatchr   r   r   rË   :  r#   )rÇ   rG   Ú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É   ?  s    c                 C   s   || ƒS r   r   )rÒ   rÓ   r   r   r   rÖ   A  s    ú.pyc                   C   s   t S )z*return truth if a file system distribution©Ú_isFSDr   r   r   r   ÚisFileSystemDistroF  s    rÚ   c                   C   s   t  S )z.return truth if not a file system distributionrØ   r   r   r   r   ÚisCompactDistroJ  s    rÛ   c                   C   s   t S )z1return truth if a source file system distribution)Ú_isFSSDr   r   r   r   ÚisSourceDistroN  s    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   s   d S r   r   r   r   r   r   rË   U  r#   rË   c              
   C   s(  dd„ t jD ƒ}|rRt|ttfƒr&|n|fD ]$}|r,t|ƒ}||vr,| d|¡ q,|r�ddtdƒfD ](}||v rd|r€td| ƒ | |¡ qhqdnt	 
¡ }||vr¬| d|¡ t j}�zJzÆ|t _tƒ  |�rNtƒ  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  t�y¨   td| t jt	 
¡ f ƒ Y n2   tdtt  ¡ d ƒ| t jt	 
¡ f ƒ Y n0 W |t _tƒ  |�r$tdt|ƒ ƒ n$|t _tƒ  |�r"tdt|ƒ ƒ 0 dS )zEDynamically imports possible packagized module, or raises ImportErrorc                 S   s   g | ]}t |ƒ‘qS r   )râ   )Ú.0rá   r   r   r   Ú
<listcomp>Y  r#   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(   rG   rF   râ   ÚinsertÚprintÚremover‹   ÚgetcwdÚ_importlib_invalidate_cachesr6   r‡   Ú	importlibÚimport_moduleÚreprÚImportErrorr5   r+   Úexc_info)Z
modulenameZbaseDirZnoCWDÚdebugr¾   rá   Zopathr   r   r   ÚrecursiveImportW  sb    (	ôÿÿýrò   c                   @   s   e Zd ZdZdd„ ZdS )ÚArgvDictValuezGA type to allow clients of getArgvDict to specify a conversion functionc                 C   s   || _ || _d S r   )ÚvalueÚfunc)r!   rô   rõ   r   r   r   r™   ‰  s    zArgvDictValue.__init__N)r   r   r   Ú__doc__r™   r   r   r   r   ró   ‡  s   ró   c                  K   s´   dd„ }t jdd… }i }|  ¡ D ]Œ\}}t|tƒrD|j|j }}nd}d}|d }|D ]@}	|	 |¡rX|	t|ƒd… }
| 	|	¡ |||
|ƒ||< d} qšqX|s"||||ƒ||< 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||ƒ} n~t | ƒr|} npt| tƒr0t|ƒ} n\t| tƒrDt|ƒ} nHt| tƒr^tt|ƒi ƒ} n.t| tƒrxtt|ƒi ƒ} ntd|t| ƒf ƒ‚| S )NzCan't convert string %r to %s)	r@   r(   rD   rE   rG   r   rF   Ú	TypeErrorr   )r   Úavrõ   r   r   r   ÚhandleValue’  s    






z getArgvDict.<locals>.handleValuer	   Nr   ú=)
r&   Úargvry   r(   ró   rô   rõ   r»   r‚   ré   )Úkwrù   r‘   r�   r{   r   rõ   ZhandledZker˜   rø   r   r   r   ÚgetArgvDict�  s$    


rý   c              
   C   sn   z4ddl m} | d u r,tj tj t¡d¡} || ƒW S  tyh } zt|ƒdkrR‚ W Y d }~d S d }~0 0 d S )Nr   )ÚHyphenzhyphen.mashedzNo module named pyHnj)	Zreportlab.lib.pyHnjrþ   r‹   r¾   r‰   ÚdirnameÚ__file__rï   r+   )ZhDictrþ   ZerrMsgr   r   r   ÚgetHyphenater¹  s    
r  c                 C   sR   z2| j j}| d¡}|dkr.||d d… W S |W S  tyL   t| ƒ Y S 0 dS )zReturn a shortened class nameræ   r   r	   N)Ú	__class__r   ÚrfindÚAttributeErrorr+   )r!   Únamer>   r   r   r   Ú
_classNameÂ  s    
r  ru   c                 C   s|   d|vrd| }zt | |ƒW S  tyv   ts6td u r8‚ t| ƒ} t | ¡}d|vrjtjdkrj| tjd¡}t	|ƒ Y S 0 d S )NrÕ   ru   Ú
)
ÚopenÚIOErrorrÙ   rÐ   rÉ   Úget_datar‹   Úlineseprº   r   )r  Úmoder2   r   r   r   Úopen_for_read_by_nameÌ  s    
 r  )ÚunquoteÚurlparse)Úurlopenc                 C   s   t | ƒ ¡ S r   )r  Úread)r  r   r   r   Ú	rlUrlReadÛ  s    r  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y0   tddƒ‚Y n0 |s:d}| d¡}|dkrzd||d	… vrz||d d	… }|d	|… }nd
}|dkr–t| d¡ƒ}n||ƒ d¡}|S )zUse "data" URL.ú,r	   z
data errorzbad data URLztext/plain;charset=US-ASCIIú;r   rú   Nr¹   Úbase64r6   zlatin-1)ÚsplitÚ
ValueErrorr	  r  ri   r/   )Úurlr  Ú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»   r1   )rÍ   r   r   Úxre  s    
zopen_for_read.<locals>.xrer¹   z^(?:ú|z)\Zru   c              	      s¶   t | dƒr| S zt| |ƒW S    zpˆdurjt| ƒ}|d rj|d dv sVˆ |d ¡rb|d ˆv sjtdƒ‚t| dd…  ¡ dkr„ˆ nt| ƒƒW  Y S    td	|  ƒ‚Y n0 Y n0 dS )
z)attempt to open a file or URL for readingr  Nr   )r  Úfiler	   zAttempted untrusted host accessé   zdata:zCannot open resource "%s")	Úhasattrr  r  Úmatchr  r   rŒ   r  r	  )r  r  Zpurl)r  r  r  r   r   Úopen_for_read  s    .*z$open_for_read.<locals>.open_for_readr)  )ru   )
r  Úreportlab.rl_configr  r  ÚrerÍ   Úcompiler‰   rÎ   Úglobals)r  r  r+  r#  r)  r   )r  rÍ   r  r  r   r)  Þ  s    
þ
r)  c                 C   sV   t | |ƒ}| |urJt|dƒrJ|� | ¡ W  d   ƒ S 1 s>0    Y  n| ¡ S d S )NÚ__exit__)r)  r'  r  )r  r  Úfr   r   r   Úopen_and_read  s
    
(r0  rt   c                 C   s   t | |ƒ d¡S ©Nr  )r0  r  )r  r  r   r   r   Úopen_and_readlines   s    r2  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 )Nr  TF)r'  rÙ   rÐ   rÉ   rG   rƒ   rÑ   )r“   Úos_path_isfiler   r   r   Ú	rl_isfile#  s
    r4  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»   )r\   Úpnr   r   r   rË   /  r#   zrl_isdir.<locals>.<lambda>r   )rÙ   rÐ   rÉ   rŽ   r‹   Úsepr‚   rG   rÏ   rƒ   rÑ   )r5  Úos_path_isdirrÄ   r   r   r   Úrl_isdir*  s
    r8  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ä   r\   ©r5  r   r   rå   5  r#   zrl_listdir.<locals>.<listcomp>)rÙ   rÐ   rÉ   rŽ   r‹   r6  rƒ   rÑ   )r5  r7  rÄ   Z
os_listdirr   r:  r   Ú
rl_listdir1  s    r;  c           	   
   C   s¬   || ƒst std u r|| ƒS t|| ƒƒ}ztj| }W n tyP   || ƒ Y S 0 |d }|d }||d? d@ d |d? d@ |d@ |d? d@ |d? d	@ |d@ d
> dddf	ƒS )Nr&  é   é	   é   i¼  é   é   é   é?   r	   r   )rÙ   rÐ   rÉ   rƒ   rŸ   )	r5  r3  rÄ   Zos_path_getmtimeZtime_mktimerá   Úer2   Údr   r   r   Úrl_getmtime7  s    rE  )Úutilc                 C   sN   dD ]<}t j || | ¡}t j |¡rt | |¡}|j ¡   S qtdƒ‚d S )N)r×   z.pywz.pyoz.pycz.pydzno suitable file found)	r‹   r¾   r‰   r‡   Úimportlib_utilÚspec_from_file_locationÚloaderÚload_modulerï   )r  Údirr�   r¾   Úspecr   r   r   Ú__rl_get_module__C  s    rM  c              
   C   sì   | t jv rt j|  }t j| = nd }z´zt| |ƒW W |r@|t j| < S    tƒ r°dd l}t|ƒ}|dksl| rptp†tj 	t| 
dtj¡¡}| |¡}| | ¡ Y W |r®|t j| < S td| |f ƒ‚Y n0 W |rè|t j| < n|ræ|t j| < 0 d S )Nr   ræ   r¸   z%s[%s])r&   ÚmodulesrM  rÛ   r�   rÉ   rÂ   r‹   r¾   r‰   rº   r6  r~   rJ  rï   )r  rK  Zomr�   Zzir   r   r   Úrl_get_moduleK  s(    


õ*
ýrO  c                 C   s(   zt | tjƒW S  ty"   Y dS 0 d S rw   )r(   r   r  )Úimr   r   r   Ú_isPILImage`  s    rQ  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
|ƒrŽ|| _t|dd ƒ| _z| jj| _W n  tyŠ   dt| ƒ | _Y n0 nÊz¨ddlm} |dkr¬tdƒ‚t|dƒ}t |tƒsÜ|t| ¡ ƒ }}| ¡  ~|| _|  | j¡| _t |tƒ�r |nt|ƒ| j_|  | j¡ t| jdd ƒdk�r4| j| _W n    td	||  ¡ f ƒ Y n0 d S )
NÚfpzPILIMAGE_%dr   )ÚimageReaderFlagszYimageReaderFlags values other than 0 are no longer supported; all images are interned nowru   Úformatr©   z
fileName=%r identity=%s)r(   rR  Ú__dict__Ú_identÚfileNameÚ_imageÚ_widthÚ_heightZ_transparentÚ_datarQ  ÚgetattrrS  r  Úidr*  rT  r  r)  r   r  ÚcloseÚ_read_imager+   rî   Úcheck_pil_image_sizeÚ_jpeg_fhÚjpeg_fhr5   Úidentity)r!   rX  ÚidentrT  rS  Útfpr   r   r   r™   j  sD    


zImageReader.__init__c                 C   s\   | j }t|ƒs"tt| ddƒddƒ}| j}d| jjtt| ƒƒ|rFd| pHd|rTd| pVdf S )z9try to return information that will identify the instancerS  Nr  z[%s@%s%s%s]z	 ident=%rr¹   z filename=%r)rX  r@   r]  rW  r  r   Úhexr^  )r!   r“   re  r   r   r   rd  ‘  s
    zImageReader.identityc                 C   s
   t  |¡S r   )r   r  ©r!   rS  r   r   r   r`  ™  s    zImageReader._read_imagec                 C   sn   | j }|d u rd S |j\}}|j}td|dkr2dn
dt|ƒ | | d? ƒ}||krjtd|||||f ƒ‚d S )Nr	   Ú1é   é   z,PIL %s %s x %s image would use %s > %s bytes)Ú_max_image_sizeÚsizer  Úmaxr‚   ÚMemoryError)ÚclsrP  Úmax_image_sizeÚwÚhr"   rm  r   r   r   ra  œ  s    
*ÿz ImageReader.check_pil_image_sizec                 C   s(   || _ |d ur$ddlm} || jƒ d S )Nr   )Úregister_reset)rl  r*  rt  Úset_max_image_size)rp  rq  rt  r   r   r   ru  ¦  s    zImageReader.set_max_image_sizec                 C   s   | j }| d¡ |S rw   )rS  Úseekrh  r   r   r   rb  ­  s    
zImageReader._jpeg_fhc                 C   s   d S r   r   r    r   r   r   rc  ²  s    zImageReader.jpeg_fhc                 C   s0   | j d u s| jd u r$| jj\| _ | _| j | jfS r   )rZ  r[  rY  rm  r    r   r   r   ÚgetSizeµ  s    zImageReader.getSizec                 C   s$  �z | j du rüd| _| j}|j }| _|dv r„ttddƒ d¡rH| ¡  t| 	¡ |dkr\dnd ƒ| _|dd	… }| 
|¡}|| _n^|d
vrâ|jdkrÒ|jdkrÒd|jv rÒ| 
d¡}t| 	¡ d ƒ| _| 
d¡}n
| 
d¡}d| _t|dƒrò|jn|jƒ | _ | j W S    td|  ¡  ƒ Y n0 dS )z'Return byte array of RGB data as stringN)ÚLAÚRGBAÚVERSIONr¹   z1.1.7ry  rk  r	   éÿÿÿÿ)ÚLÚRGBÚCMYKr­   ÚPÚtransparencyr}  Útobytesz
identity=%s)r\  Z_dataArY  r  r]  r   r»   ÚloadrR  r  ÚconvertrU  Úinfor'  r�  Útostringr5   rd  )r!   rP  r  Únmr   r   r   Ú
getRGBDataº  s.    



zImageReader.getRGBDatac                 C   s   |   ¡ \}}|||  ¡ fS r   )rw  r‡  )r!   ÚwidthÚheightr   r   r   ÚgetImageDataÕ  s    zImageReader.getImageDatac              	   C   sp   d| j jv rh| j jd d }| j j}z
|j}W n(   z
|j}W n   Y Y d S 0 Y n0 |||d … S d S d S )Nr€  rk  )rY  r„  Úpaletter  )r!   r€  r‹  r   r   r   ÚgetTransparentÙ  s    

zImageReader.getTransparent)N)N)r   r   r   rö   Ú_cacherl  r™   rd  r`  Úclassmethodra  ru  rb  rc  rw  r‡  rŠ  rŒ  r   r   r   r   rR  f  s    
'
	rR  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 0 dS )z<Get width, height and RGB pixels from image file.  Wraps PILN)rŠ  r  rR  )Z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.dbgrr  r	   r   Nc                    sZ  dd l }|| _|stj| _nt|dƒr.|| _nt|dƒ| _|dkrFd S i  | _}	|r†t ¡ dkr†dd l}
t	ƒ }|
 
d |¡ | ¡ |	d< t ¡ }t |¡}tj |¡}|r²t |¡p´d}tj tj tjd ¡¡}d}d }z$dd l}| t d¡¡}|d }W n   Y n0 tj‰ tˆ  ¡ ƒ}| ¡  |	 t t t ¡ ¡¡tjtj t!tj"ƒtj#tj$tj%tjtj|| &¡ ||tj't(td	d
ƒt(t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\}}|D ]4}t||ƒ�ràzt(||ƒƒ |	|< W n   Y n0 �qà�qÔ||k�rLz|	 |t |¡dœ¡ W n   Y n0 |�rštj tjd ¡}tj +|¡�ršz|t|dƒ ,¡ f|	d< W n   Y n0 i }tj- .¡ D ]�\}‰|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d!d„ |d"d … D ƒ }t/|ƒ||< �q¨||	d#< i | jd$< |  0|¡ d S )%Nr   Úwriterr  )NNNÚ__tracebackz???zmeta_data.marÚproject_versionÚ
maxunicodez????Úapi_versionÚversion_infoÚwinverz
			r¹   c                    s   g | ]}d |ˆ | f ‘qS )ú%s=%rr   )rä   r{   )Úenvr   r   rå   ?  r#   z&DebugMemo.__init__.<locals>.<listcomp>)ZgmtÚplatformÚversionÚ
hexversionÚ
executableÚexec_prefixÚprefixr¾   rû   rÅ   ÚhostnameÚlcwdÚlpcwdÚ	byteorderZmaxintr–  r—  r˜  ÚenvironmentrÐ   Zproject_meta_datar”  )ÚgetwindowsversionÚgetfilesystemencoding)ÚunameÚctermidÚgetgidÚgetuidÚgetegidÚgeteuidÚgetloginÚ	getgroupsÚgetpgrpÚgetpidÚgetppid)ÚexedZlexedrÕ   Ú__scriptÚ	reportlabZrlextraé
   z
reportlab.rj  zrlextra.c                    s   g | ]}t ˆ |d ƒ‘qS r   )r]  r9  )r"   r   r   rå   _  r#   )Ú__version__Ú__path__r   c                 S   s   g | ]}|r|‘qS r   r   ©rä   Z_fr   r   r   rå   `  r#   c                 S   s   g | ]}|r|‘qS r   r   r¹  r   r   r   rå   a  r#   r	   Ú__module_versionsÚ	__payload)1Úsocketr“   r&   Ústdoutr'  r  Ústorerð   Ú	tracebackr   Ú	print_excÚgetvaluer‹   rê   rŠ   r¾   rÿ   rß   rû   Úmarshalrh   rÐ   r
  ÚenvironrG   rÑ   Úsortr–   ÚtimeÚasctimeÚgmtimer›  rœ  rg  r�  rž  rŸ  r   Úgethostnamer¤  r]  r‰   rî   r‡   r  rN  ry   rF   Ú_add)r!   r“   r  Z	getScriptrN  Zcapture_tracebackr½  rü   r¼  r¾  r¿  r2   rÅ   r¢  Zpcwdr£  r³  r”  ZmdrÂ  ÚKÚMr‘   r˜   Zmodule_versionsrÆ   r   r   )rš  r"   r   r™     s¨    







ëþ
8 
zDebugMemo.__init__c                 C   s(   | j d }| ¡ D ]\}}|||< qd S ©Nr»  )r¾  ry   )r!   r’   Úpayloadr{   r   r   r   r   rÉ  g  s    
zDebugMemo._addc                 K   s   |   |¡ d S r   )rÉ  )r!   rü   r   r   r   Úaddl  s    zDebugMemo.addc              
   C   s”   z|  ¡ }t | j|¡ W nt   | j ¡ }tƒ }| ¡ D ]6\}}zt ||i|¡ W q:   d| ||< Y q:0 q:| |d¡ t ||¡ Y n0 d S )Nz<unpicklable object %r>r   )Útellrc   Údumpr¾  Úcopyr   ry   rv  )r!   r/  ÚposÚSZffr{   r   r   r   r   Ú_dumpo  s    
zDebugMemo._dumpc                 C   s2   t | jdƒ}z|  |¡ W | ¡  n
| ¡  0 d S )NÚwb)r  r“   rÔ  r_  ©r!   r/  r   r   r   rÐ  ~  s    zDebugMemo.dumpc                 C   s   t ƒ }|  |¡ | ¡ S r   )r   rÔ  rÁ  rÖ  r   r   r   rd   …  s    
zDebugMemo.dumpsc                 C   s   t  |¡| _d S r   )rc   r‚  r¾  rÖ  r   r   r   Ú_loadŠ  s    zDebugMemo._loadc                 C   s2   t | jdƒ}z|  |¡ W | ¡  n
| ¡  0 d S )NÚrb)r  r“   r×  r_  rÖ  r   r   r   r‚  �  s    zDebugMemo.loadc                 C   s   |   t|ƒ¡ d S r   )r×  r   )r!   r2   r   r   r   rh   ”  s    zDebugMemo.loadsc                 C   sª   |   |dd … ¡ t| ¡ ƒ}| ¡  |D ]z}||  }}t|tƒrL|d }z.t|ƒ tj| }t	|dd ƒ|krtdpvd}W n   d }d}Y n0 |   d|||f ¡ q*d S )Né   r   r·  ZSAMEZ	DIFFERENTz??????unknown??????z  %s = %s (%s))
Ú_writelnrG   rÑ   rÄ  r(   rF   Ú
__import__r&   rN  r]  )r!   r{   r   rÊ  ZvkZvk0r"   rD  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§  s    zDebugMemo._bannerc                 C   s   |   |d¡ d S )NzStart  ©rÞ  r�   r   r   r   Ú_startª  s    zDebugMemo._startc                 C   s   |   |d¡ d S )NzFinish rß  r�   r   r   r   Ú_finish­  s    zDebugMemo._finishc                 C   s"   |   |¡ |  |¡ |  |¡ d S r   )rà  rÚ  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   s2   |r.dd l }|  |¡ |  || j¡ |  |¡ d S rw   )Úpprintrà  r½  rá  )r!   r{   r   rå  r   r   r   Ú_show_payload¹  s
    
zDebugMemo._show_payloadc                 C   sŒ   dD ]‚}zR|gj }t|ƒ tj| }||jƒ dD ]$}t||ƒr2|d|t||ƒf ƒ q2W n   |dƒ Y n0 |  dd |j	¡ ¡ qd S )N)Ú	_rl_accelZ	_renderPMZsgmlopZpyRXPZpyRXPUÚ_imagingr   )r·  rz  Ú_versionrœ  r™  z	not foundú )
r�   rÛ  r&   rN  r   r'  r]  rÚ  r‰   Ú__self__)r!   Úmnr‘   r"   Z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 rN| j| | || j| ƒ qN|  ¡  d S )Nz
%-15s = %s)rG   r¾  rÑ   rÄ  ÚspecialsrÚ  rí  )r!   rÊ  r{   r   r   r   ÚshowÓ  s    ,,zDebugMemo.showc                 C   s   | j d | S rÌ  ©r¾  ©r!   r  r   r   r   rÍ  Ü  s    zDebugMemo.payloadc                 C   s   || j d |< d S rÌ  rð  )r!   r  rô   r   r   r   rš   ß  s    zDebugMemo.__setitem__c                 C   s   | j d | S rÌ  rð  rñ  r   r   r   rœ   â  s    zDebugMemo.__getitem__c                 C   s   | j  |d ¡ d S r1  )r½  r’  )r!   Úmsgr   r   r   rÚ  å  s    zDebugMemo._writeln)r‘  rr  r	   r   r	   N)r   r   r   rö   r™   rÉ  rÎ  rÔ  rÐ  rd   r×  r‚  rh   rÜ  rÞ  rà  rá  râ  rä  ræ  rí  rî  rï  rÍ  rš   rœ   rÚ  r   r   r   r   r�  ò  s8   
[ý	r�  c                 C   s*   | D ] }t |ƒrt||ƒ q||ƒ qd S r   )r)   Ú_flatten)r|  r˜   r\   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 dS )zPapply func to the locals at each stack frame till func returns a non false valuer	   N)r&   r   Úf_locals)rõ   ÚdepthÚ_r   r   r   Úfind_localsó  s    rø  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_FmtSelfDictc                 C   s   || _ || _d S r   )ÚobjÚ_overrideArgs)r!   rú  ÚoverrideArgsr   r   r   r™   û  s    z_FmtSelfDict.__init__c                 C   sZ   z| j | W S  tyT   z| jj| W  Y S  tyN   t| j|ƒ Y  Y S 0 Y n0 d S r   )rû  rŸ   rú  rV  r]  r�   r   r   r   rœ   þ  s    z_FmtSelfDict.__getitem__N)r   r   r   r™   rœ   r   r   r   r   rù  ú  s   rù  c                   @   s   e Zd ZdZdd„ ZdS )ÚFmtSelfDictz mixin to provide the _fmt methodc                 K   s   t | |ƒ}|| S r   )rù  )r!   Úfmtrü  r’   r   r   r   Ú_fmt	  s    
zFmtSelfDict._fmtN)r   r   r   rö   rÿ  r   r   r   r   rý    s   rý  c           	      C   s’   g }|dƒ}g }| }|   ¡ D ]V}||ƒ}|| | |ksB|g krZ| |¡ || | }q| d |¡¡ |g}|}q|g krŽ| d |¡¡ |S )Nrê  )r  r�   r‰   )	ÚtxtZmWÚSWr|  ÚwsÚOrr  rt   Últr   r   r   Ú_simpleSplit  s    
r  c                    sX   ddl m‰  t| ƒ d¡}||f‡ fdd„	}|rTg }|D ]}| t|||ƒ¡ q8|}|S )Nr   ©ÚstringWidthr  c                    s   ˆ | ||ƒS r   r   )ÚtextZfNZfSr  r   r   rË   !  r#   zsimpleSplit.<locals>.<lambda>)Zreportlab.pdfbase.pdfmetricsr  r;   r  Úextendr  )r  ÚfontNameÚfontSizeZmaxWidthÚlinesr  r|  Úlr   r  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   )ÚescapeNr-   ú	&amp;amp;ú&amp;ú&amp;gt;ú&gt;ú&amp;lt;ú&lt;)Zxml.sax.saxutilsr  r.   r:   rº   )r  r  r2   r   r   r   ÚescapeTextOnce)  s    r  c                 C   sD   t | ƒr| S tD ]"}z|  |¡W   S    Y q0 qtd|  ƒ‚d S )Nz(cannot convert %r to filesystem encoding)rA   ZfsEncodingsr:   r  )r“   r8   r   r   r   ÚfileName2FSEnc5  s    r  c                 C   s`   t  dg| dg¡}t  |d¡\}}}z||ƒ ||ƒ ||ƒ W n tyR   Y n0 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.

    Nrk  )Ú	itertoolsÚchainÚteeÚStopIterationÚzip)ry   r	  Ú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r’| |d  dkrn|d  d7  < |d7 }q¦|d  ¡ |d< ||kr¦| d¡ n|d  | | 7  < |d7 }q0|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']
    r-   r	   rê  r   r¹   r  r{  )r.   r:   r‚   re   r�   )r2   rÆ   r>   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'] 
    r  c                 S   s$   g | ]}d t |ƒ dd¡ d  ‘qS )rê  r  z,,)r;   rº   )rä   r>   r   r   r   rå   †  r#   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 | ¡sX|D ]}||| ƒ}||ƒr8|  S q8|rltd| |f ƒ‚| S )z*search for relative files in likely placeszcannot locate %r with paths=%r)r‹   r¾   r‡   rˆ   r‰   r¿   r  )r“   Úpathsr‡   ZfailÚexistsrÊ   rá   rÌ   r   r   r   ÚfindInPathsˆ  s    

r%  r¹   rê  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>˜  r#   z$annotateException.<locals>.<genexpr>N)r&   rð   rv   r‰   r+   )rò  r8   ZpostMsgr6  rt   r   ru   r   r   r   r5   •  s    r5   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º   )r  r   r   r   Ú
escapeOnceš  s    r(  c                   @   s   e Zd ZdZdd„ ZdS )ÚIdentStrz,useful for identifying things that get splitc                 C   sZ   t |tƒr4|j}|d dtt|ƒƒ  … }|d7 }nd}|d| 7 }t | |¡}||_|S )NrÙ  r	   r   z[%d])r(   r)  Z_IdentStr__incr‚   r+   Ú__new__)rp  rô   Zincr!   r   r   r   r*  ·  s    

zIdentStr.__new__N©r   r   r   rö   r*  r   r   r   r   r)  µ  s   r)  c                   @   s   e Zd ZdZdd„ ZdS )Ú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   )r+   r*  ry   rz   )rp  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 stuffr-   )rA   r:   r1   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!   rs  r"   r  r   r   r   r™   ×  s    zFixedOffsetTZ.__init__c                 C   s   | j S r   )r3  ©r!   Údtr   r   r   Ú	utcoffsetÛ  s    zFixedOffsetTZ.utcoffsetc                 C   s   | j S r   )r4  r5  r   r   r   ÚtznameÞ  s    zFixedOffsetTZ.tznamec                 C   s
   t  d¡S rw   )r1  r2  r5  r   r   r   Údstá  s    zFixedOffsetTZ.dstN)r   r   r   rö   r™   r7  r8  r9  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.|rX|r:t|ƒnd}t |¡}d }}d| _	n8t ¡ }t
t |¡ƒ}ttjd ƒ}tjd d	 }d| _	|| _|| _t
|ƒd d
… | _|| _|| _d S )Nr   )Ú	invariantZSOURCE_DATE_EPOCHr¹   g   À¡6ÌAÚUTCg      ¬@i  é<   r<  )r*  r;  r‹   rÃ  r¡   re   rE   rÅ  rÇ  r8  rF   Ú	localtimeÚtimezonert   r  ZYMDhmsÚdhhÚdmm)r!   r;  rt   r  r@  rA  r   r   r   r™   å  s$    
zTimeStamp.__init__c                 C   s2   | j r$tj | jt| j| j| j ƒ¡S tj ¡ S d S r   )r8  r1  Úfromtimestamprt   r.  r@  rA  Únowr    r   r   r   r1  ú  s    zTimeStamp.datetimec                 C   s   t  | j¡S r   )rÅ  rÆ  r  r    r   r   r   rÆ    s    zTimeStamp.asctime)N)r   r   r   r™   Úpropertyr1  rÆ  r   r   r   r   r:  ä  s
   

r:  c                 C   st   t |ƒstdt| ƒ|f ƒ‚t|ƒ}| ¡ }|s@tdt| ƒ ƒ‚|rT|d dvrTd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ú  )Úgr  )r@   r÷   rî   r=   re   r  r   rH   )rú  r  rE  Údotr   r   r   ÚrecursiveGetAttr  s    rG  c                 C   sX   |  d¡}t|ƒdkr$t| ||ƒ n0d |dd… ¡}|d }t| |ƒ}t|||ƒ dS )z7Can call down into e.g. object1.object2[4].attr = valueræ   r	   Nr{  )r  r‚   rz   r‰   rG  )rú  r  rô   ÚtokensÚmostÚlastÚparentr   r   r   ÚrecursiveSetAttr  s    

rL  c                 C   sT   |  d¡}t|ƒdkr"t| |ƒ n.d |d d… ¡}|d }t| |ƒ}t||ƒ d S )Nræ   r	   r{  )r  r‚   Údelattrr‰   rG  )rú  r  rH  rI  rJ  rK  r   r   r   ÚrecursiveDelAttr  s    

rN  c                 c   sn   d}t | ƒ}||k rjz.|  d|¡}| ||… V  |d }| s@W qjW q tyf   | |d… V  Y qjY q0 qdS )z:yield sublists of L separated by None; the Nones disappearr   Nr	   )r‚   Úindexr  )r|  r>   rÆ   Újr   r   r   ÚyieldNoneSplits$  s    rQ  )r-   )r-   )r-   )r-   )r-   )N)N)r†   )NNr¯   )NN)Nr   r   )N)ru   )ru   )ru   )rt   )r   )TF)r-   r¹   rê  )N)±r·  rö   r‹   rc   r&   rÅ  rM   r1  rì   Úastr   r  r   ri   r   rb   Úior   Úhashlibr   Zreportlab.lib.rltempfiler   r   r   r
   r   r   ÚPILr   r   r›  Úpython_implementationZisPyPyr   r   r   r"   r%   r'   rF   rG   r)   r,   rL   r+   r4   ZstrTypesr3   r9   r;   r<   r=   r?   r@   r.   rA   rC   r]   r^   r_   rg   rk   rm   rn   rx   r]  Zrl_execrq   rv   r|   r…   r”   rH   r•   r  r²   r³   r°   r·   rµ  r¾   rÿ   r   Z__RL_DIRr¿   rß   rÔ   rû   rÓ   rÍ   r}   rÐ   rÙ   ÚNotImplementedErrorrÞ   rà   ÚarchiverÂ   r6  rÀ   rÃ   rÁ   r‚   r¼   r½   rê   rÇ   rÉ   r‰   rÖ   r‡   ÚsplitextrÜ   rÚ   rÛ   rÝ   râ   rë   rò   Z
haveImagesró   rý   r  r  r  Úurllib.parser  r  Úurllib.requestr  r  r)  r0  r2  r4  rˆ   r8  rŠ   r;  ÚgetmtimeÚmktimerE  rF  rG  rM  rO  rQ  rR  r�  rŠ  r�  ró  rô  rø  rù  rý  r  r  r  r  r  r   r!  r"  r%  r5   r(  r)  r,  r-  Útzinfor.  r:  rG  rL  rN  rQ  r   r   r   r   Ú<module>   sL  8








	
8ò
 

÷
"
.,
	

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