
    >i                    V   U d Z ddlmZ ddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZmZ  eej                   ej"                  ej$                  ej&                  ej(                  ej*                  h      Zded<   i d	d
ddddddddddddddddddddddddd d!d"d#d$d!d%d#d&d'd&d'd(d)d*d+d,d-d-d.Zd/ed0<    ej2                  d1ej4                        Z	 	 	 	 	 	 d;d2Z	 	 	 	 d<d3Zd=d4Z	 	 	 	 	 	 	 	 d>d5Z	 	 	 	 	 	 	 	 d>d6Z d?d7Z!d@d8Z"	 	 	 	 	 	 dAd9Z#	 	 	 	 	 	 dAd:Z$y)BzBUtility functions for saving page bundles (HTML + assets as .zip).    )annotationsN)urljoinurlparse)ResourceType)FrameResourceFrameResourceTreezfrozenset[ResourceType]_BUNDLEABLE_RESOURCE_TYPESztext/cssz.cssztext/javascriptz.jszapplication/javascriptzapplication/x-javascriptz	text/htmlz.htmlz
text/plainz.txtz	image/pngz.pngz
image/jpegz.jpgz	image/gifz.gifzimage/svg+xmlz.svgz
image/webpz.webpzimage/x-iconz.icozimage/vnd.microsoft.iconz	font/woffz.woffz
font/woff2z.woff2zapplication/font-woffzapplication/font-woff2z.ttfz.otfz.mp4z.webmz.mp3z.oggz.jsonz.xml)zfont/ttfzfont/otfzapplication/x-font-ttfzapplication/x-font-otfz	video/mp4z
video/webmz
audio/mpegz	audio/oggzapplication/jsonzapplication/xmlztext/xmlzdict[str, str]_MIME_TO_EXTzurl\(\s*(["\']?)(.*?)\1\s*\)c                    g }| D ]c  \  }}|j                  d      s|j                  d      r)|d   }||k(  s|j                  d      rE|d   t        vrQ|j                  ||f       e |S )z6Filter resources to only those that should be bundled.failedcanceledurldata:type)get
startswithr	   append)all_resourcespage_url	fetchablefidresr   s         Y/var/www/python/tenders/Scrapper/venv/lib/python3.12/site-packages/pydoll/utils/bundle.pyfilter_fetchable_resourcesr   8   s~    
 24I! %S778
 3%j(?cnnW5v;88#s$%     c                    | d   d   }| j                  dg       D cg c]  }||f }}| j                  dg       D ]  }|j                  t        |              |S c c}w )z4Recursively collect all resources from a frame tree.frameid	resourceschildFrames)r   extendcollect_frame_resources)
frame_treeframe_idr   resultchilds        r   r"   r"   J   st     '"4(H#->>+r#B/3/F / r2 6-e456M/s   Ac                   t        |       }|j                  rt        j                  |j                        nd}|r|dk(  rd}d|vr<t        j                  |j                  d      d   j                         d      }| | }|dd| S )	z9Build a unique filename from a URL, MIME type, and index. /resource.;r   04d_)r   path	posixpathbasenamer
   r   splitstrip)r   	mime_typeindexparsedr1   exts         r   build_asset_filenamer8   W   s    c]F28++y!!&++.2Hx3
(ys3A6<<>CZu%C[($$r   c                @    dfd}t         j                  ||       S )z>Rewrite url() references in CSS to point to local asset paths.c                    | j                  d      }|j                  d      r| j                  d      S t        |      }j                  |      }|| j                  d      S |d   }d| dS )N   r   r   zurl(""))groupr   r   r   )matchraw_urlabsoluteentryfilename	asset_mapcss_urls        r   _replacez"rewrite_css_urls.<locals>._replacej   sq    ++a.g&;;q>!7G,h'=;;q>!8xj##r   r>   zre.Match[str]returnstr_CSS_URL_REsubcss_textrD   rC   rE   s    `` r   rewrite_css_urlsrN   c   s    	$ ??8X..r   c                @    dfd}t         j                  ||       S )z/Replace url() references in CSS with data URIs.c                2   | j                  d      }|j                  d      r| j                  d      S t        
|      }	j                  |      }|| j                  d      S |\  }}}}t	        j
                  |      j                  d      }d| d| dS )Nr;   r   r   asciiz
url("data:;base64,r<   )r=   r   r   r   _b64	b64encodedecode)r>   r?   r@   rA   _fnamedatamime_rtypeb64rC   rD   s            r   rE   z!inline_css_urls.<locals>._replace   s    ++a.g&;;q>!7G,h'=;;q>!%*"dFnnT"))'2D6#b11r   rF   rI   rL   s    `` r   inline_css_urlsr[   x   s    
2 ??8X..r   c                    t        j                  |      }t        j                  d| dt         j                        }d| d|j	                  fd| d      S )z=Replace a <link> stylesheet tag with an inline <style> block.z<link\b[^>]*href=["\']?z["\']?[^>]*/?>z<style>z</style>c                    S N r.   replacements    r   <lambda>z0replace_stylesheet_with_inline.<locals>.<lambda>        r      count)reescapecompile
IGNORECASErK   )htmlr   rM   escapedpatternra   s        @r   replace_stylesheet_with_inlinern      sW    iinGjj"7)>:
G H:X.K;;,d!;<<r   c                    t        j                  |      }t        j                  d| dt         j                        }|j	                  dd      }d| d|j                  fd| d      S )	z=Replace a <script src=...> tag with an inline <script> block.z<script\b[^>]*src=["\']?z["\']?[^>]*>\s*</script>z	</script>z
<\/script>z<script>c                    S r^   r_   r`   s    r   rb   z,replace_script_with_inline.<locals>.<lambda>   rc   r   rd   re   )rg   rh   ri   rj   replacerK   )rk   r   js_textrl   rm   safe_jsra   s         @r   replace_script_with_inlinert      sh    iinGjj#G9,DE
G ook=9GWIY/K;;,d!;<<r   c                    |j                         D ]j  \  }\  }}}}|t        j                  k(  r8|j                  dd      }t	        |||      }||j                  d      ||f||<   | j                  |d|       } l | S )z?Rewrite asset URLs in HTML to point to local assets/ directory.utf-8rq   errorszassets/)itemsr   
STYLESHEETrU   rN   encoderq   )	rk   rC   r   rB   rW   rX   rtyperM   rewritten_csss	            r   rewrite_html_urlsr~      s    
 /8oo.? 7**hdEL+++{{79{=H,XsIFM&(<(<W(EtUSIcN||C78*!567 Kr   c                   |j                         D ]  \  }\  }}}}|t        j                  k(  r.|j                  dd      }t	        |||      }t        | ||      } L|t        j                  k(  r!|j                  dd      }t        | ||      } t        j                  |      j                  d      }	d| d|	 }
| j                  ||
      }  | S )z&Embed all assets inline into the HTML.rv   rq   rw   rQ   r   rR   )ry   r   rz   rU   r[   rn   SCRIPTrt   rS   rT   rq   )rk   rC   r   r.   rW   rX   r|   rM   rr   rZ   data_uris              r   inline_all_assetsr      s    
 (1'8 /##atUL+++{{79{=H&xi@H1$XFDl)))kk')k<G-dCAD..&--g6CtfHSE2H<<X.D/ Kr   )r   list[tuple[str, FrameResource]]r   rH   rG   r   )r#   r   rG   r   )r   rH   r4   rH   r5   intrG   rH   )rM   rH   rD   rH   rC   /dict[str, tuple[str, bytes, str, ResourceType]]rG   rH   )rk   rH   r   rH   rM   rH   rG   rH   )rk   rH   r   rH   rr   rH   rG   rH   )rk   rH   rC   r   rG   rH   )%__doc__
__future__r   base64rS   r0   rg   urllib.parser   r   pydoll.protocol.network.typesr   pydoll.protocol.page.typesr   r   	frozensetDOCUMENTrz   r   IMAGEFONTMEDIAr	   __annotations__r
   ri   rj   rJ   r   r"   r8   rN   r[   rn   rt   r~   r   r_   r   r   <module>r      sV   H "   	 * 6 G6?A 7 3   u  e  	 
   &    &    V  '  F      (   W! " h# $ $$9 n > bjj8"--H2 %$
!
$
	%/// ?/ 		/*/// ?/ 		/,=	=
> 	
> 	r   