
    kj	                        d dl m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
  ej                  e      Zdd	Z G d
 deee	f         Zy)    )annotationsN)Mapping   )signals   )Contentview)Metadatac                     y N )views    i/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/contentviews/_registry.py
_on_changer      s        c                  R    e Zd Zd Zd	dZd
dZ	 d	 	 	 	 	 	 	 ddZddZddZd Z	y)ContentviewRegistryc                N    i | _         t        j                  t              | _        y r   )_by_namer   
SyncSignalr   	on_changeselfs    r   __init__zContentviewRegistry.__init__   s    02 ++J7r   c                   t        |t              r |       }|j                  j                         }|| j                  v rt
        j                  d| d       || j                  |<   | j                  j                  |       y )NzReplacing existing z contentview.)	
isinstancetypenamelowerr   loggerinfor   send)r   instancer   s      r   registerzContentviewRegistry.register   sg    h%zH}}""$4== KK-dV=AB&dH%r   c                N    dgt        | j                  j                               S )Nauto)sortedr   keysr   s    r   available_viewsz#ContentviewRegistry.available_views   s"    6 2 2 4566r   c                   |dk7  r	 | |j                            S d}| j                  j                         D ]S  \  }}	 |j                  ||      }t        |t        t        f      sJ d|j                   d       	 |	|d   |k  sP||f}U |sJ d
       |d   S # t        $ r t        j                  d|d       Y w xY w# t        $ r& t        j                  d|j                   d	       Y w xY w)z
        Get the best contentview for the given data and metadata.

        If `view_name` is "auto" or the provided view not found,
        the best matching contentview based on `render_priority` will be returned.
        r%   zUnknown contentview z, selecting best match instead.Nzrender_priority for z did not return a number.r   z	Error in z.render_priorityz<At least one view needs to have a working `render_priority`.r   )r   KeyErrorr   warningr   itemsrender_priorityr   intfloatr   	Exception	exception)r   datametadata	view_namemax_prior   r   prioritys           r   get_viewzContentviewRegistry.get_view"   s    IOO-.. 6:----/ 
	0JD$	0//h?!(S%L9 *499+5NO9 #x{X'= ($/H
	0 WWWx{%  *9-7VW  J  9TYYK7G!HIJs"   B =C"B?>B?,C10C1c                ,    t        | j                        S r   )iterr   r   s    r   __iter__zContentviewRegistry.__iter__B   s    DMM""r   c                <    | j                   |j                            S r   )r   r   )r   items     r   __getitem__zContentviewRegistry.__getitem__E   s    }}TZZ\**r   c                ,    t        | j                        S r   )lenr   r   s    r   __len__zContentviewRegistry.__len__H   s    4==!!r   N)r"   zContentview | type[Contentview]returnNone)rA   z	list[str])r%   )r2   bytesr3   r	   r4   strrA   r   )rA   ztyping.Iterator[str])r<   rD   rA   r   )
__name__
__module____qualname__r   r#   r(   r7   r:   r=   r@   r   r   r   r   r      sM    8&7 AG%-:=	@#+"r   r   )r   r   rA   rB   )
__future__r   loggingtypingcollections.abcr   utilsr   _apir   r	   	getLoggerrE   r   r   rD   r   r   r   r   <module>rO      sG    "   #   			8	$ /8"'#{"23 8"r   