
    ǯei                         d Z ddlZddlZddlmZ 	 ddlmZmZ ddl	Z	ddl
mZ ddgZdd	iZg d
ZddgZ ej                   dej"                        Z edg d      Zd Zd Zd Zd Zd Zy# e$ r ddlmZmZ Y bw xY w)z[favicon
:copyright: (c) 2019 by Scott Werner.
:license: MIT, see LICENSE for more details.
    N)
namedtuple)urljoinurlparse)BeautifulSoupgetIconz
User-AgentzxMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36)iconzshortcut iconzapple-touch-iconzapple-touch-icon-precomposedzmsapplication-TileImagezog:imagez&(?P<width>\d{2,4})x(?P<height>\d{2,4}))flags)urlwidthheightformatc                    |r|j                  d|d          |j                  dt               |j                  dd       t        j                  | fi |}|j	                          t               }t        |j                  fi |}|r|j                  |       t        |j                  |j                        }|r|j                  |       t        |d d      S )a  Get all fav icons for a url.

    :param url: Homepage.
    :type url: str

    :param request_kwargs: Request headers argument.
    :type request_kwargs: Dict

    :return: List of fav icons found sorted by icon dimension.
    :rtype: list[:class:`Icon`]
    headersr   allow_redirectsTc                 4    | j                   | j                  z   S N)r   r   )is    Q/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/favicon/favicon.py<lambda>zget.<locals>.<lambda>F   s    qww'9     )keyreverse)
setdefaultHEADERSrequestsr   raise_for_statussetdefaultr   addtagstextupdatesorted)r   argsrequest_kwargsresponseiconsdefault_icon
link_iconss          r   r   r   (   s     !!)T!W5i1/6||C2>2HEE8<<:>:L		,hllHMM2JZ %94HHr   c                     t        | d      }t        j                  |fi |}|j                  dk(  rt	        |j
                  ddd      S y)zGet icon using default filename favicon.ico.

    :param url: Url for site.
    :type url: str

    :param request_kwargs: Request headers argument.
    :type request_kwargs: Dict

    :return: Icon or None.
    :rtype: :class:`Icon` or None
    zfavicon.ico   r   icoN)r   r   headstatus_coder   r   )r   r&   favicon_urlr'   s       r   r   r   I   sK     #}-K}}[;N;Hs"HLL!Q.. #r   c           	         t        |d      }t               }t        D ]1  |j                  dfddd      D ]  }|j	                  |        3 t               }|j                  dd	di      D ]j  }|j                  d
      xs |j                  d      xs d}|j                         }t        D ]'  }||j                         k(  s|j	                  |       ) l t               }	||z  D ]  }
|
j                  dd      xs |
j                  d	d      }|j                         }|r|j                  d      rNt        |      r|}nt        | |      }t        |       j                  }t        ||      }t        |
      \  }}t        j                   j#                  |j                         \  }}t%        |j'                         |||dd j                               }|	j	                  |        |	S )ak  Get icons from link and meta tags.

    .. code-block:: html

       <link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon.png">
       <meta name="msapplication-TileImage" content="favicon.png">

    :param url: Url for site.
    :type url: str

    :param html: Body of homepage.
    :type html: str

    :return: Icons found.
    :rtype: set
    zhtml.parser)featureslinkc                 2    | xr | j                         k(  S r   )lower)rrels    r   r   ztags.<locals>.<lambda>q   s    A,B!'')s2B r   T)r7   href)attrsmetacontentnameproperty r8   zdata:image/)scheme   N)r   r   	LINK_RELSfind_allr    r   r5   
META_NAMESstrip
startswithis_absoluter   r   r?   
dimensionsospathsplitextr   geturl)r   htmlsoup	link_tagslink_tag	meta_tagsmeta_tag	meta_typer<   r(   tagr8   
url_parsedr?   r   r   _extr	   r7   s                      @r   r!   r!   [   s   " 6DI $"BDQ & 
 	$H MM(#	$$ IMM&D0AMB (LL(JHLL,DJ	OO%	 	(DDJJL(h'	(( EE9$ wwvr"<cggi&<zz|t}5tJ d+J #%%j8
"3v!!*//23J%%'ABH		$), Lr   c                 >    t        t        |       j                        S )zCheck if url is absolute.

    :param url: Url for site.
    :type url: str

    :return: True if homepage and false if it has a path.
    :rtype: bool
    )boolr   netloc)r   s    r   rF   rF      s     $$%%r   c                    | j                  dd      }|rE|dk7  r@|j                  d      }|j                  d       t        j                  d|d         \  }}nc| j                  d	      xs | j                  d
      }t        j                  |      }|r#|j                  d      |j                  d      }}nd\  }}dj                  d |D              }dj                  d |D              }t        |      t        |      fS )zGet icon dimensions from size attribute or icon filename.

    :param tag: Link or meta tag.
    :type tag: :class:`bs4.element.Tag`

    :return: If found, width and height, else (0,0).
    :rtype: tuple(int, int)
    sizesr>   any T)r   z[x\xd7]r   r8   r;   r   r   )0r^   c              3   B   K   | ]  }|j                         s|  y wr   isdigit.0cs     r   	<genexpr>zdimensions.<locals>.<genexpr>   s     4!		A4   c              3   B   K   | ]  }|j                         s|  y wr   r`   rb   s     r   re   zdimensions.<locals>.<genexpr>   s     61!))+Q6rf   )	r   splitsortreSIZE_REsearchgroupjoinint)rS   r[   sizer   r   filenames         r   rG   rG      s     GGGR E%{{3		$	T!W5v776?8cggi&8~~h' JJw/H1E6E$ME6 GG4u44EWW666Fu:s6{""r   )__doc__rH   rj   collectionsr   urllib.parser   r   ImportErrorr   bs4r   __all__r   rA   rC   compile
IGNORECASErk   r   r   r   r!   rF   rG    r   r   <module>r{      s    
 	 "+.  &/  )	 (4

"**>bmm
T&>?IB/$9x	&#o  +**+s   A- -A=<A=