o
    $if&                     @   s  d dl Z d dlZd dlZd dlZd dlZd dl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 e
jjddd e
jjd	d
d e
jjdde
jjd e
jejdd	 dejd< ejdkruejddZeruee dd ZG dd dZdd Zdd Zejdd Z ejdddd  Z!ejd!d"d#d$ Z"ejddd%d& Z#ejddd'd( Z$d;d,d-Z%ejddd.d/ Z&ejddd0d1 Z'ejddd2d3 Z(ejd4d5gdd6d7d8 Z)ejddd9d4 Z*ejddd:d5 Z+dS )<    N   )groupsdefaults)set_timezone_db_pathfind_free_portcii  )max_examplesdev2   debug
   )r	   	verbosityHYPOTHESIS_PROFILEz	/dev/nullAWS_CONFIG_FILEwin32PYARROW_TZDATA_PATHc                 C   sh   ddd}t D ]*}|d|t| }| jd|d|d|d | jd|dd	d
|d qd S )Nc                 S   sL   t j|  }|s|S | }|dv rdS |dv rdS td|  |)N>   1yonyestrueT>   0nnoofffalseFz {}={} is not parsable as boolean)osenvirongetupperlower
ValueErrorformat)namedefaultvalue r'   O/var/www/html/corbot_env/lib/python3.10/site-packages/pyarrow/tests/conftest.pybool_env;   s   z"pytest_addoption.<locals>.bool_envzPYARROW_TEST_{}--enable-{}
store_truezEnable the {} test group)actionr%   help--disable-{}FzDisable the {} test groupN)r   r#   r   	addoption)parserr)   groupr%   r'   r'   r(   pytest_addoption9   s   
r3   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )PyArrowConfigc                 C   s
   i | _ d S r/   )
is_enabled)selfr'   r'   r(   __init__S   s   
zPyArrowConfig.__init__c                 C   s    |j }|tv r| | d S d S r/   )r$   r   requires)r6   markr2   r'   r'   r(   
apply_markV   s   zPyArrowConfig.apply_markc                 C   s"   | j | std| d S d S )Nz{} NOT enabled)r5   pytestskipr#   )r6   r2   r'   r'   r(   r8   [   s   
zPyArrowConfig.requiresN)__name__
__module____qualname__r7   r:   r8   r'   r'   r'   r(   r4   R   s    r4   c                 C   sX   t  | _tD ]#}| d| d|}d|}| |o"| | }|| jj|< qd S )Nmarkersr*   r.   )r4   pyarrowr   addinivalue_liner#   	getoptionr5   )configr9   enable_flagdisable_flagr5   r'   r'   r(   pytest_configure`   s   


rG   c                 C   s    |   D ]	}| jj| qd S r/   )iter_markersrD   rA   r:   )itemr9   r'   r'   r(   pytest_runtest_setupq   s   rJ   c                 C   s   t | jS r/   )pathlibPathstrpath)tmpdirr'   r'   r(   tempdirw   s   rO   session)scopec                   C   s   t tjd S )Ndata)rK   rL   __file__parentr'   r'   r'   r(   base_datadir}   s   rU   T)autousec                 C   s   |  dd dS )zStop the AWS SDK from trying to contact the EC2 metadata server.

    Otherwise, this causes a 5 second delay in tests that exercise the
    S3 filesystem.
    AWS_EC2_METADATA_DISABLEDr   N)setenv)monkeypatchr'   r'   r(   disable_aws_metadata   s   rZ   c                  C   s8   t jdd} tt jdd}t jdd}| ||fS )NARROW_HDFS_TEST_HOSTr%   ARROW_HDFS_TEST_PORTr   ARROW_HDFS_TEST_USERhdfs)r   r   r   int)hostportuserr'   r'   r(   hdfs_connection   s   
rc   c                  C   s    dt  } }d\}}| |||fS )N	localhost)arrowapachearrowr   )r`   ra   
access_key
secret_keyr'   r'   r(   s3_connection   s   ri            ?   c                    s    fdd}|S )aP  
    Retry decorator

    Parameters
    ----------
    attempts : int, default 3
        The number of attempts.
    delay : float, default 1
        Initial delay in seconds.
    max_delay : float, optional
        The max delay between attempts.
    backoff : float, default 1
        The multiplier to delay after each attempt.
    c                    s"   t   fdd}|S )Nc               
      s~    }}|dkr=z| i |W S  t y8 } z|d8 }|}|9 }r)t|}t| W Y d }~nd }~ww |dks|)Nr   rl   )	Exceptionmintimesleep)argskwargsremaining_attempts
curr_delayerrlast_exception)attemptsbackoffdelayfunc	max_delayr'   r(   wrapper   s    

z(retry.<locals>.decorate.<locals>.wrapper)	functoolswraps)rz   r|   rw   rx   ry   r{   )rz   r(   decorate   s   zretry.<locals>.decorater'   )rw   ry   r{   rx   r   r'   r   r(   retry   s   r   c                 c   s    t dddddd }| }| \}}}}d||}tj }	|	||d d	d
ddd||g}
d }z4z	tj|
|	d}W n t	yL   t
d Y nw || | ||dV  W |d urg|  |  d S d S |d urv|  |  w w )N   g?r   )rw   ry   rx   c                 S   s(   t jd|  d}| dksJ d S )Nzhttp://z/minio/health/cluster   )urllibrequesturlopengetcode)addressrespr'   r'   r(   minio_server_health_check   s   z,s3_server.<locals>.minio_server_health_checkz{}:{})MINIO_ACCESS_KEYMINIO_SECRET_KEYminioz--compatserverz--quietz	--addressenvz!`minio` command cannot be located
connectionprocessrO   )r   getbasetempr#   r   r   copyupdate
subprocessPopenOSErrorr;   r<   killwait)ri   tmpdir_factoryr   rN   r`   ra   rg   rh   r   r   rq   procr'   r'   r(   	s3_server   sB   



r   c               
   c   s    t  } tj }tjdddt| g}d }zUzdd l}tj	||d}|
 d ur1td| d W n ttfyQ } ztd| d|  W Y d }~nd }~ww d	| f|d
V  W |d uri|  |  d S d S |d urx|  |  w w )Nz-m	testbenchz--portr   r   Command # did not start server successfully! failed to execute: rd   )r   r   )r   r   r   r   sys
executablestrr   r   r   pollr;   r<   ModuleNotFoundErrorr   r   r   )ra   r   rq   r   r   er'   r'   r(   
gcs_server   s4   
"
r   c              
   c   s    t  }tj }|  }dd|dt|g}d }zTztj||d}| d ur0t	
d| d W n ttfyP } zt	
d| d|  W Y d }~nd }~ww d|d	d
f||dV  W |d urk|  |  d S d S |d urz|  |  w w )Nzazurite-blobz
--locationz
--blobPortr   r   r   r   z	127.0.0.1devstoreaccount1zXEby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==r   )r   r   r   r   r   r   r   r   r   r;   r<   r   r   r   r   )r   ra   r   rN   rq   r   r   r'   r'   r(   azure_server  s:   
"

r   builtin_picklecloudpickle)paramsrQ   c                 C   s   |  | jS r/   )getfixturevalueparam)r   r'   r'   r(   pickle_module"  s   r   c                  C   s   dd l } | S )Nr   pickler   r'   r'   r(   r   -  s   c                  C   s    t d} d| jvr| j| _| S )Nr   HIGHEST_PROTOCOL)r;   importorskip__dict__DEFAULT_PROTOCOLr   )cpr'   r'   r(   r   3  s   

)rj   rk   Nrl   ),r}   r   rK   r   r   ro   urllib.requestr   r;   
hypothesishconftestr   r   rA   r   pyarrow.utilr   settingsregister_profile	Verbosityverboseload_profiler   r   platformtzdata_set_pathr3   r4   rG   rJ   fixturerO   rU   rZ   rc   ri   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   sn   













#

&






