
    Xwg5                       U d dl mZ d dlZd dlZd dlm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 d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
l m!Z! erd dlm"Z" d dlm#Z#  ejH                  e%      Z&de
jN                  v Z(de)d<   e(reefneejT                  fZ+de)d<    G d dejX                        Z- e-       Z.de)d<    G d d      Z/ G d d      Z0 G d de0      Z1 G d de0      Z2 G d de0      Z3 G d d e0      Z4 G d! d"e0      Z5 G d# d$e0      Z6 G d% d&      Z7 G d' d(      Z8d+d)Z9d,d*Z:y)-    )annotationsN)abstractmethod)BytesIO)Path)_TemporaryFileWrapper)TYPE_CHECKINGAnyCallableClassVar)request)unquote)
httpConfig)HTTPResponse)SplitResultzgoogle.appengineboolGAEztuple[type, Any]
STRATEGIESc                  ,    e Zd ZU g Zded<   ddZddZy)TmpFilesz,ClassVar[list[_TemporaryFileWrapper[bytes]]]filesc                :    | j                   j                  |       y N)r   appendselffiles     F/var/www/horilla/myenv/lib/python3.12/site-packages/xhtml2pdf/files.pyr   zTmpFiles.append&   s    

$    c                z    | j                   D ]  }|j                           | j                   j                          y r   )r   closeclearr   s     r   
cleanFileszTmpFiles.cleanFiles)   s.    JJ 	DJJL	

r   NreturnNone)__name__
__module____qualname__r   __annotations__r   r"    r   r   r   r   #   s    :<E7< r   r   	files_tmpc                  b    e Zd ZU dZeZdZded<   defddZddZddZ	dd	Z
dd
ZddZddZy)pisaTempFileaX  
    A temporary file implementation that uses memory unless
    either capacity is breached or fileno is requested, at which
    point a real temporary file will be created and the relevant
    details returned
    If capacity is -1 the second strategy will never be used.
    Inspired by:
    http://code.activestate.com/recipes/496744/.
    i (  intCAPACITY c                H   d| _         || _        t        t        |      | j                  kD        | _        	  | j
                  | j                            | _        | j                  |       | j                  d       y# t        $ r  | j
                  d          | _        Y Gw xY w)z
        Creates a TempFile object containing the specified buffer.
        If capacity is specified, we use a real temporary file once the
        file gets larger than that size.  Otherwise, the data is stored
        in memory.
        Nr   )
namecapacityr.   lenstrategyr   	_delegate
IndexErrorwriteseek)r   bufferr3   s      r   __init__zpisaTempFile.__init__A   s     !%	% Vt}}!<=	2;T__T]];=DN 	

6		!  	2/T__Q/1DN	2s   #A< <"B! B!c                   | j                   dk(  rc	  | j                  d          }|j                  | j                                || _        d| _         t
        j                  d| j                         yy# t        $ r
 d| _	        Y yw xY w)zf
        Switch to next strategy. If an error occurred,
        stay with the first strategy.
        r      zCreated temporary file %sN)
r5   r   r8   getvaluer6   logwarningr2   	Exceptionr3   )r   new_delegates     r   makeTempFilezpisaTempFile.makeTempFileT   sz    
 ==A#1tq13""4==?3!- !7C   # "#s   A!A4 4BBc                :    | j                          | j                  S )zGet a named temporary file.)rD   r2   r   s    r   getFileNamezpisaTempFile.getFileNamec   s    yyr   c                V    | j                          | j                  j                         S )z
        Forces this buffer to use a temporary file as the underlying.
        object and returns the fileno associated with it.
        )rD   r6   filenorF   s    r   rI   zpisaTempFile.filenoh   s#    
 	~~$$&&r   c                8   | j                   dk(  r| j                  j                         S | j                  j                          | j                  j	                  d       | j                  j                         }t        |t              s|j                  d      }|S )zc
        Get value of file. Work around for second strategy.
        Always returns bytes.
        r   utf-8)	r5   r6   r?   flushr9   read
isinstancebytesencode)r   values     r   r?   zpisaTempFile.getvaluep   st    
 ==A>>**,,A##%%'LL)Er   c                z   | j                   dkD  rp| j                  dk(  rat        |      }|| j                   k\  rd}n2| j                  dd       | j	                         |z   | j                   k\  }|r| j                          t        |t              s|j                  d      }| j                  j                  |       y)zEIf capacity != -1 and length of file > capacity it is time to switch.r   T   rK   N)r3   r5   r4   r9   tellrD   rN   rO   rP   r6   r8   )r   rQ   	len_valueneeds_new_strategys       r   r8   zpisaTempFile.write~   s    ==1!!3E
IDMM)%)"		!Q&*iikI&=$--%O"!!!#%'LL)EU#r   c                    	 t        | j                  |      S # t        $ r-}dt        |       j                   d| d}t        |      |d }~ww xY w)Nzobject 'z' has no attribute '')getattrr6   AttributeErrortyper&   )r   r2   emsgs       r   __getattr__zpisaTempFile.__getattr__   sU    	-4>>400 	-T$Z0011EdV1MC %1,	-s    	A(A		AN)r:   strr3   r.   r$   r%   r#   r$   
str | None)r$   r.   )r$   rO   )rQ   zbytes | str)r2   r_   r$   r	   )r&   r'   r(   __doc__r   r/   r)   r;   rD   rG   rI   r?   r8   r^   r*   r   r   r-   r-   2   s@     JHc%' &#
'$"-r   r-   c                  N    e Zd Zd	dZed
d       Zd
dZddZddZddZ	ddZ
y)BaseFilec                J    || _         || _        d | _        d | _        d | _        y r   pathbasepathmimetypesuffixurir   rg   rh   s      r   r;   zBaseFile.__init__   s%    	$,$("&&*r   c                    t         r   )NotImplementedErrorrF   s    r   extract_datazBaseFile.extract_data   s    !!r   c           	         	 | j                         S # t        $ rS}t        j                  dt	        |      j
                  |t	        |       j
                  | j                         Y d }~y d }~ww xY w)Nz(%s: %s while extracting data from %s: %r)ro   rB   r@   errorr[   r&   rk   )r   r\   s     r   get_datazBaseFile.get_data   sc    		$$&& 	II:Q  T
##  	s    	A.A	A))A.c                    | j                   S r   )rk   rF   s    r   get_urizBaseFile.get_uri   s    xxr   c                    | j                   S r   )ri   rF   s    r   get_mimetypezBaseFile.get_mimetype   s    }}r   c                   | j                         }t        j                  | j                        }|r6|j	                  |       |j                          t        j                  |       | j                  |j                  | _        |S )N)rj   )
rr   tempfileNamedTemporaryFilerj   r8   rL   r+   r   rg   r2   )r   datatmp_files      r   get_named_tmp_filezBaseFile.get_named_tmp_file   sb    !]]_..dkkBNN4 NNX&99 DIr   c                >    | j                         }|rt        |      S y r   )rr   r   )r   rz   s     r   get_BytesIOzBaseFile.get_BytesIO   s    !]]_4= r   Nrg   r_   rh   ra   r$   r%   r$   zbytes | None)r$   str | Path | Noner`   )r$   z_TemporaryFileWrapper[bytes])r$   zBytesIO | None)r&   r'   r(   r;   r   ro   rr   rt   rv   r|   r~   r*   r   r   rd   rd      s4    + " "
r   rd   c                  h    e Zd Z ej                  dej
                  ej                  z        ZddZy)B64InlineURIz2^data:(?P<mime>[a-z]+/[a-z]+);base64,(?P<data>.*)$c                   | j                   j                  | j                        }|sd}t        |      |j	                  d      | _        t        |j	                  d            j                  d      }t        j                  |      S )NzInline data could not be parsedmimerz   rK   )
_rx_dataurimatchrg   RuntimeErrorgroupri   urllib_unquoterP   base64	b64decode)r   mr]   b64s       r   ro   zB64InlineURI.extract_data   sn    ""499-3Cs## $AGGFO4;;GD$$r   Nr   )	r&   r'   r(   recompileMDOTALLr   ro   r*   r   r   r   r      s)    "**<bddRYY>NK
%r   r   c                      e Zd ZddZy)LocalProtocolURIc                   | j                   r| j                  j                  d      rt        j                  | j                   | j                  dd        | _        t        j                  | j
                        }|j                         j                  dd      j                  d      d   | _        |j                         S y )N/r=   Content-Typer0   ;r   )rh   rg   
startswithurlparseurljoinrk   r   urlopeninfogetsplitri   rM   )r   urlResponses     r   ro   zLocalProtocolURI.extract_data   s    ==TYY11#6''tyy}EDH!//$((3K',,.22>2FLLSQRSTDM##%%r   Nr   r&   r'   r(   ro   r*   r   r   r   r      s    r   r   c                  8     e Zd Zd fdZddZddZddZ xZS )NetworkFileUric                B    t         |   ||       d| _        d| _        y )N   r   )superr;   attemptsactual_attempts)r   rg   rh   	__class__s      r   r;   zNetworkFileUri.__init__   s!    x($%r   c           	        d }| j                   | j                  kD  rD|B| xj                  dz  c_        	 | j                         }| j                   | j                  kD  r|B|S # t        $ r^}t        j                  dt        |      j                  |t        |       j                  | j                  | j                         Y d }~d }~ww xY w)Nr=   z6%s: %s while extracting data from %s: %r on attempt %d)	r   r   ro   rB   r@   rq   r[   r&   rk   )r   rz   r\   s      r   rr   zNetworkFileUri.get_data   s    mmd222t|  A% 
((* mmd222t|   		LG$$J''HH(( s   A" "	C	+ACC	c                   t         j                  d|       d }d}t        j                  |      }|d   }|d   }||d   rd|d    ndz  }d }|j	                  d      rt        j                  |fi t        }nt        j                  |      }|j                  d	|       |j                         }|j                  |j                  fd
k(  rS|j                  dd      j                  d      d   | _        |j!                         }|j                  d      dk(  rd}||fS t         j                  d|j                  |j                         ||fS )Nz#Sending request for %r with httplibFr=   rS   r   ?r0   zhttps://GET)   OKr   r   r   zcontent-encodinggzipTzReceived non-200 status: %d %s)r@   debugr   urlsplitr   httplibHTTPSConnectionr   HTTPConnectionr   getresponsestatusreason	getheaderr   ri   rM   )	r   rk   rz   is_gzipurl_splittedserverrg   connr1s	            r   get_httplibzNetworkFileUri.get_httplib   s7   		7=!$,$5$5c$:"1o Oa!LO$%b@HL>>*%**6@Z@D))&1DUD!++-IIryy![0LL<BB3GJDM779D||./69 W} II6		299MW}r   c                   | j                   rF| j                  j                  d      s+t        j                  | j                   | j                        }n| j                  }|| _        | j                  |      \  }}|r0|r.t        j                  dt        |            j                         }t        j                  d|       |S )Nhttprb)modefileobjzUri parsed: %r)rh   rg   r   r   r   rk   r   r   GzipFiler   rM   r@   r   )r   rk   rz   r   s       r   ro   zNetworkFileUri.extract_data  s    ==!5!5f!=""4==$))<C))C((-gt==dGDMBGGID		"C(r   r   r   )r$   ztuple[bytes | None, bool])r&   r'   r(   r;   rr   r   ro   __classcell__r   s   @r   r   r      s    &
$0r   r   c                  &    e Zd Zedd       ZddZy)LocalFileURIc                t    t        j                  t        |             d   }||j                  d      d   }|S )zGuess the mime type.r   r   )	mimetypes
guess_typer_   r   )r2   ri   s     r   guess_mimetypezLocalFileURI.guess_mimetype$  s;     ''D	215~~c*1-Hr   c                   d }t         j                  d       t        | j                        }d }| j                  t        | j                        |z  nt               |z  }|j                         r|j                         s|}|j                         r|| _        |j                  | _        | j                  |      | _
        | j                  rP| j                  j                  d      r5t        |      5 }|j                         j                  d      }d d d        |S t        |d      5 }|j                         }d d d        |S |S # 1 sw Y   |S xY w# 1 sw Y   |S xY w)Nz-Unrecognized scheme, assuming local file pathtextrK   r   )r@   r   r   rg   rh   existsis_filerk   rj   r   ri   r   openrM   rP   )r   rz   rg   rk   file_handlers        r   ro   zLocalFileURI.extract_data,  s   		ABDII,0MM,Ed4==!D(46TX=;;=C;;=DH**DK //4DM}}!9!9&!A#Y ?,',,.55g>D?
  #t_ /',,.D/t?
 /s   2 E(EEENr`   r   )r&   r'   r(   staticmethodr   ro   r*   r   r   r   r   #  s     r   r   c                      e Zd ZddZy)BytesFileUric                Z    | j                   | _        | j                   j                  d      S )NrK   )rg   rk   rP   rF   s    r   ro   zBytesFileUri.extract_dataB  s"    99yy((r   Nr   r   r*   r   r   r   r   A  s    )r   r   c                  .     e Zd ZddZ fdZddZ xZS )LocalTmpFilec                J    || _         d | _        || _        d | _        d | _        y r   rf   rl   s      r   r;   zLocalTmpFile.__init__H  s%    	$($,"&&*r   c                ^    t         |          }| j                  |j                  | _        |S r   )r   r|   rg   r2   )r   r{   r   s     r   r|   zLocalTmpFile.get_named_tmp_fileO  s*    7-/99 DIr   c                    | j                   y | j                   | _        t        | j                   d      5 }|j                         cd d d        S # 1 sw Y   y xY w)Nr   )rg   rk   r   rM   )r   archs     r   ro   zLocalTmpFile.extract_dataU  sH    9999$))T" 	d99;	 	 	s   AAr#   r   )r&   r'   r(   r;   r|   ro   r   r   s   @r   r   r   G  s    +r   r   c                      e Zd Zedd       Zy)FileNetworkManagerNc                    | t        | |      S t        | t              rt        | |      }|S | j	                  d      rt        | |      }|S |r5t        j                  |       j                  st        j                  |      }nt        j                  |       }t        j                  d||j                         |j                  dk(  rt        | |      }|S |j                  dv rt        | |      }|S t        | |      }|S )Nzdata:zURLParts: %r, %rr   )r   https)r   rN   rO   r   r   r   r   schemer@   r   r   r   r   )rk   rh   instanceurlPartss       r   get_managerzFileNetworkManager.get_manager^  s    ;X..c5!#C2H   ^^G$#C2H   1 1# 6 = =#,,X6#,,S1II((HOOD&(+C:
 	 $55)#x8  (X6r   r   )r&   r'   r(   r   r   r*   r   r   r   r   ]  s     r   r   c                  d    e Zd Z	 	 d	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	d	 Z
d
 Zy)pisaFileObjectNc                   || _         || _        |r |||      x}r|| _         d | _        t        j                  d| j                   | j                         t        j                  | j                   | j                        | _        y )NzFileObject %r, Basepath: %r)rh   )rk   rh   r@   r   r   r   r   )r   rk   rh   callbacknews        r   r;   zpisaFileObject.__init__w  sr     '*$,h 777DH DM		/4==I"4"@"@HHt}} #A #
r   c                6    | j                   j                         S r   r   rr   rF   s    r   getFileContentzpisaFileObject.getFileContent      }}%%''r   c                V    | j                   j                         }|r|j                  S d S r   )r   r|   r2   )r   fs     r   getNamedFilezpisaFileObject.getNamedFile  s%    MM,,.qvv$$r   c                6    | j                   j                         S r   r   rF   s    r   getDatazpisaFileObject.getData  r   r   c                v    t         r| j                  j                         S | j                  j                         S r   )r   r   r~   r|   rF   s    r   getFilezpisaFileObject.getFile  s+    ==,,..}}//11r   c                6    | j                   j                         S r   )r   rv   rF   s    r   getMimeTypezpisaFileObject.getMimeType  s    }}))++r   c                &    | j                         d u S r   )r   rF   s    r   notFoundzpisaFileObject.notFound  s    ||~%%r   c                6    | j                   j                         S r   )r   rt   rF   s    r   
getAbsPathzpisaFileObject.getAbsPath  s    }}$$&&r   c                6    | j                   j                         S r   )r   r~   rF   s    r   
getBytesIOzpisaFileObject.getBytesIO  s    }}((**r   )NN)rk   r   rh   ra   r   zCallable | Noner$   r%   r   r`   )r$   z&BytesIO | _TemporaryFileWrapper | None)r$   r   )r&   r'   r(   r;   r   r   r   r   r   r   r   r   r*   r   r   r   r   v  s]      $$(	

 
 "	

 

$(%(2
,&'+r   r   c                     t        | i |S r   )r   )akws     r   r   r     s    1###r   c                 ,    t         j                          y r   )r+   r"   r*   r   r   r"   r"     s    r   )r$   r   r#   );
__future__r   r   r   http.clientclientr   loggingr   r   sysrx   	threadingurllib.parseparser   abcr   ior   pathlibr   r   typingr   r	   r
   r   urllibr   r   r   xhtml2pdf.config.httpconfigr   r   r   	getLoggerr&   r@   modulesr   r)   ry   r   localr   r+   r-   rd   r   r   r   r   r   r   r   r   r   r"   r*   r   r   <module>r     s1   "      	 
       * 9 9  2 2((g!#++-T -WgGX-H-H#I  
	y 	 j	8  b- b-J/ /d%8 %$x ;X ;|8 <)8 )8 , 2,+ ,+^$r   