
    /~h	                    d    d 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ZddZdd	Zy
)z"Determine contexts for coverage.py    )annotations)	FrameType)cast)Sequence)TShouldStartContextFnc                @      syt               dk(  r d   S d fd}|S )a  Create a single context switcher from multiple switchers.

    `context_switchers` is a list of functions that take a frame as an
    argument and return a string to use as the new context label.

    Returns a function that composites `context_switchers` functions, or None
    if `context_switchers` is an empty list.

    When invoked, the combined switcher calls `context_switchers` one-by-one
    until a string is returned.  The combined switcher returns None if all
    `context_switchers` return None.
    N   r   c                0    D ]  } ||       }||c S  y)z,The combiner for multiple context switchers.N )frameswitchernew_contextcontext_switcherss      Y/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/coverage/context.pyshould_start_contextz7combine_context_switchers.<locals>.should_start_context$   s,    ) 	#H"5/K&""	#     r   r   returnz
str | None)len)r   r   s   ` r   combine_context_switchersr      s1     
" ##  r   c                r    | j                   j                  }|j                  d      s|dk(  rt        |       S y)z(Is this frame calling a test_* function?testrunTestN)f_codeco_name
startswithqualname_from_frame)r   r   s     r   "should_start_context_test_functionr   /   s4    ll""G&!W	%9"5))r   c                .   | j                   }|j                  }d}|j                  r;|j                  d   dk(  r)| j                  j                  dd      }t        ||d      }|>| j                  j                  |      }|yt        t        |j                  dz   |z         S t        |dd      }|<j                  }t        t        |j                  dz   |j                  z   dz   |z         S t        t        |j                  dz   |j                  z         S )z5Get a qualified name for the code running in `frame`.Nr   self.__func__)r   r   co_argcountco_varnamesf_localsgetgetattr	f_globalsr   str
__module__	__class____name____qualname__)r   cofnamemethodr    funcclss          r   r   r   7   s    	BJJEF	~~"..+v5~~!!&$/ud+~""5)<C3.6776:t,D|nnC#-<sBUJKKT__s*T->->>??r   N)r   zSequence[TShouldStartContextFn]r   zTShouldStartContextFn | Noner   )__doc__
__future__r   typesr   typingr   collections.abcr   coverage.typesr   r   r   r   r   r   r   <module>r9      s:    ) "   $ 0 6 ! @@r   