
    Bh+                    <   d Z ddlmZ 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
m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 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 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& ddl'm(Z( ddl)m*Z*  e*e+e,e-f             Z.ed   Z/eej`                   G d d                    Z1d+dZ2d,d Z3d-d!Z4 e!d"#      d.d$       Z5d/d%Z6e!	 	 	 	 	 	 d0d&       Z7d1d'Z8 ed(d()      	 	 	 	 d2d*       Z9y)3z>Support for providing temporary directories to test functions.    )annotations)	GeneratorN)Path)rmtree)Any)final)Literal   )cleanup_dead_symlinks)LOCK_TIMEOUT)make_numbered_dir)make_numbered_dir_with_cleanup)rm_rf)get_user_id)Config)ExitCode)hookimpl)Parser)check_ispytest)fixture)FixtureRequest)MonkeyPatch)Item)
TestReport)StashKeyallfailednonec                      e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   	 ddd	 	 	 	 	 	 	 	 	 	 	 ddZedd	 	 	 	 	 dd       ZddZdddZ	ddZ
y)TempPathFactoryzFactory for temporary directories under the common base temp directory,
    as discussed at :ref:`temporary directory location and retention`.
    Path | None_given_basetempr   _trace	_basetempint_retention_countRetentionType_retention_policyNF	_ispytestc                   t        |       |d | _        n6t        t        j                  j                  t        |                  | _        || _        || _        || _	        || _
        y N)r   r#   r   ospathabspathstrr$   r'   r)   r%   )selfgiven_basetempretention_countretention_policytracebasetempr+   s          Y/var/www/html/Telegram-Engagement-Pod-/env/lib/python3.12/site-packages/_pytest/tmpdir.py__init__zTempPathFactory.__init__6   sY     	y!!#'D 
 $(N8K(L#MD  /!1!    c               0   t        |       t        |j                  d            }|dk  rt        d| d      |j                  d      }|dvrt        d| d       | |j                  j
                  |j                  j                  d      ||d	
      S )zTCreate a factory according to pytest configuration.

        :meta private:
        tmp_path_retention_countr   z6tmp_path_retention_count must be >= 0. Current input: .tmp_path_retention_policyr   zKtmp_path_retention_policy must be either all, failed, none. Current input: tmpdirT)r3   r6   r4   r5   r+   )r   r&   getini
ValueErroroptionr7   r6   get)clsconfigr+   countpolicys        r8   from_configzTempPathFactory.from_configM   s     	y!FMM"<=>19HqQ  :;22]^d]eefg  !==11,,""8,!#
 	
r:   c                    t         j                  j                  |      }| j                         |z  j	                         j
                  | j                         k7  rt        | d      |S )Nz& is not a normalized and relative path)r.   r/   normpathgetbasetempresolveparentrA   )r2   basenames     r8   _ensure_relative_to_basetempz,TempPathFactory._ensure_relative_to_basetempm   s\    77##H-)224;;t?O?O?QQz)OPQQr:   c                    | j                  |      }|s3| j                         j                  |      }|j                  d       |S t	        | j                         |d      }| j                  d|       |S )a  Create a new temporary directory managed by the factory.

        :param basename:
            Directory base name, must be a relative path.

        :param numbered:
            If ``True``, ensure the directory is unique by adding a numbered
            suffix greater than any existing one: ``basename="foo-"`` and ``numbered=True``
            means that this function will create directories named ``"foo-0"``,
            ``"foo-1"``, ``"foo-2"`` and so on.

        :returns:
            The path to the new directory.
          mode)rootprefixrS   mktemp)rO   rK   joinpathmkdirr   r$   )r2   rN   numberedps       r8   rV   zTempPathFactory.mktemps   sr     44X>  "++H5AGGG  "t'7'7'9(QVWAKK!$r:   c                   | j                   | j                   S | j                  K| j                  }|j                         rt        |       |j	                  d       |j                         }n$t        j                  j                  d      }t        |xs t        j                               j                         }t               xs d}|j                  d|       }	 |j	                  dd       t               }|c|j!                         }|j"                  |k7  rt        d	| d
      |j$                  dz  dk7  r#t        j&                  ||j$                  dz         | j(                  }| j*                  dk(  rd}t-        d||t.        d      }|J |       || _         | j1                  d|       |S # t        $ r' |j                  d      }|j	                  dd       Y w xY w)zReturn the base temporary directory, creating it if needed.

        :returns:
            The base temporary directory.
        rQ   rR   PYTEST_DEBUG_TEMPROOTunknownz
pytest-of-T)rS   exist_okzpytest-of-unknownzThe temporary directory z: is not owned by the current user. Fix this and try again.?   r   ir   zpytest-)rU   rT   keeplock_timeoutrS   znew basetemp)r%   r#   existsr   rX   rL   r.   environrC   r   tempfile
gettempdirget_userrW   OSErrorr   statst_uidst_modechmodr'   r)   r   r   r$   )	r2   r7   from_envtemprootuserrootdiruidrootdir_statr`   s	            r8   rK   zTempPathFactory.getbasetemp   s    >>%>>!+++H hNNN&'')Hzz~~&=>HH=(;(;(=>FFHH:*D ''*TF(;<G9548 -C&||~&&#-!27) <2 2  !((50Q6HHWl&:&:V&CD((D%%/5 )H #-X-#!NH-C  9"++,?@5489s   !F8 8-G('G(r-   )r3   r"   r4   r&   r5   r(   r7   r"   r+   boolreturnNone)rE   r   r+   rr   rs   r!   )rN   r1   rs   r1   )T)rN   r1   rY   rr   rs   r   )rs   r   )__name__
__module____qualname____doc____annotations__r9   classmethodrH   rO   rV   rK    r:   r8   r!   r!   (   s     ! K$$ !%"  "#" " (	" " " 
". 
  	

 	

 

 
>09r:   r!   c                 `    	 ddl } | j                         S # t        t        t        f$ r Y yw xY w)zlReturn the current user name, or None if getuser() does not work
    in the current environment (see #1010).r   N)getpassgetuserImportErrorrg   KeyError)r}   s    r8   rf   rf      s0      (+ s    --c                    t               }| j                  |j                         t        j	                  | d      }|j                  | d|d       y)a  Create a TempPathFactory and attach it to the config object.

    This is to comply with existing plugins which expect the handler to be
    available at pytest_configure time, but ideally should be moved entirely
    to the tmp_path_factory session fixture.
    Tr*   _tmp_path_factoryF)raisingN)r   add_cleanupundor!   rH   setattr)rE   mpr   s      r8   pytest_configurer      sI     
B
rww'33Fd3KJJv*,=uJMr:   c                T    | j                  ddd       | j                  ddd       y )Nr<   zfHow many sessions should we keep the `tmp_path` directories, according to `tmp_path_retention_policy`.   )helpdefaultr>   zvControls which directories created by the `tmp_path` fixture are kept around, based on test outcome. (all/failed/none)r   )addini)parsers    r8   pytest_addoptionr      s:    
MM"u   MM#	  r:   session)scopec                .    | j                   j                  S )zGReturn a :class:`pytest.TempPathFactory` instance for the test session.)rE   r   )requests    r8   tmp_path_factoryr      s     >>+++r:   c                    | j                   j                  }t        j                  dd|      }d}|d | }|j	                  |d      S )Nz[\W]_   T)rY   )nodenameresubrV   )r   factoryr   MAXVALs       r8   _mk_tmpr      sF    <<D66'3%DF=D>>$>..r:   c              #     K   t        | |      }| |j                  }| j                  j                  t           }|dk(  r|j                  dd      rt        |d       | j                  j                  t        = yw)a;  Return a temporary directory (as :class:`pathlib.Path` object)
    which is unique to each test function invocation.
    The temporary directory is created as a subdirectory
    of the base temporary directory, with configurable retention,
    as discussed in :ref:`temporary directory location and retention`.
    r   callTignore_errorsN)r   r)   r   stashtmppath_result_keyrC   r   )r   r   r/   rG   result_dicts        r8   tmp_pathr      sp      7,-D
J //F,,$$%78Kkoofd; 	t4(-.s   A:A<c                   | j                   j                  }|j                  }|y|j                  }|dk(  r.|dk(  r)|j                  |j                         rt        |d       |j                         rt        |       yy)zAfter each session, remove base directory if all the tests passed,
    the policy is "failed", and the basetemp is not specified by a user.
    Nr   r   Tr   )rE   r   r%   r)   r#   is_dirr   r   )r   
exitstatusr   r7   rG   s        r8   pytest_sessionfinishr     s}     )0(H(H))H//Fah,,4?? 840 h' r:   T)wrappertryfirstc              #     K   d }|j                   J i }|j                  | j                  j                  t        |      |j                   <   |S wr-   )whenpassedr   
setdefaultr   )itemr   repemptys       r8   pytest_runtest_makereportr   0  sK      C88EADDJJ,e4SXX>Js   AA)rs   z
str | None)rE   r   rs   rt   )r   r   rs   rt   )r   r   rs   r!   )r   r   r   r!   rs   r   )r   r   r   r!   rs   zGenerator[Path])r   zint | ExitCode)r   r   rs   z'Generator[None, TestReport, TestReport]):rx   
__future__r   collections.abcr   dataclassesr.   pathlibr   r   shutilr   rd   typingr   r   r	   r   r   r   r   r   _pytest.compatr   _pytest.configr   r   r   _pytest.config.argparsingr   _pytest.deprecatedr   _pytest.fixturesr   r   _pytest.monkeypatchr   _pytest.nodesr   _pytest.reportsr   _pytest.stashr   dictr1   rr   r   r(   	dataclassr!   rf   r   r   r   r   r   r   r   r{   r:   r8   <module>r      s6   D " %  	  	      * ! & 3  & ! # # , - $ + +  & " /Xd39o.0 /0 Z Z  Zz	
N 	y, ,/ 	///>// 	/0(2 
$&
, 'r:   