U
    Cvf%                     @  s  d dl mZ d dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
 dZG dd de	jZG d	d
 d
e	jZG dd de	jZG dd de	jZejdd ZejdddddZddddZddddZee dejddddddZddddZddd d!Zee dejedddd"d#Zee dejedddd$d%Zed&ejd'e idddd(d)Zed&eji dddd*d+Z ddd,d-Z!dS ).    )annotationsN
EntryPoint)mock)commonpluginszimportlib.metadatac                   @  s   e Zd Zdd ZdS )DummyBackendEntrypointArgsc                 G  s   d S N )filename_or_objargsr
   r
   =/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_plugins.pyopen_dataset   s    z'DummyBackendEntrypointArgs.open_datasetN__name__
__module____qualname__r   r
   r
   r
   r   r      s   r   c                   @  s   e Zd Zdd ZdS )DummyBackendEntrypointKwargsc                 K  s   d S r	   r
   )r   kwargsr
   r
   r   r      s    z)DummyBackendEntrypointKwargs.open_datasetNr   r
   r
   r
   r   r      s   r   c                   @  s   e Zd Zdd ZdS )DummyBackendEntrypoint1c                C  s   d S r	   r
   selfr   decoderr
   r
   r   r      s    z$DummyBackendEntrypoint1.open_datasetNr   r
   r
   r
   r   r      s   r   c                   @  s   e Zd Zdd ZdS )DummyBackendEntrypoint2c                C  s   d S r	   r
   r   r
   r
   r   r      s    z$DummyBackendEntrypoint2.open_datasetNr   r
   r
   r
   r   r      s   r   c                  C  s6   dddgdddgdddgdddgg} dd | D }|S )Nengine1#xarray.tests.test_plugins:backend_1xarray.backends#xarray.tests.test_plugins:backend_2engine2c                 S  s   g | ]\}}}t |||qS r
   r   .0namevaluegroupr
   r
   r   
<listcomp>*   s     z0dummy_duplicated_entrypoints.<locals>.<listcomp>r
   )specsZepsr
   r
   r   dummy_duplicated_entrypoints"   s    r&   zignore:FoundNone)returnc              	   C  s4   t t t| }W 5 Q R X t|dks0td S )N   )pytestwarnsRuntimeWarningr   remove_duplicateslenAssertionError)r&   entrypointsr
   r
   r   test_remove_duplicates.   s    r1   c               	   C  s\   t ddd} tt}t| g}W 5 Q R X t|dks>tt|d j	}d|ksXtd S )Nbroken_backendr   r      r   zEngine 'broken_backend')
r   r*   r+   r,   r   build_enginesr.   r/   strmessage)r2   record_r6   r
   r
   r   test_broken_plugin5   s    r9   c              	   C  sh   t t}t| }W 5 Q R X t|dks0tt|d j}t|d j}d|ksXtd|ksdtd S )Nr)   r   r3   r0   )	r*   r+   r,   r   r-   r.   r/   r5   r6   )r&   r7   r8   Zmessage0Zmessage1r
   r
   r   test_remove_duplicates_warningsB   s    r:   z.EntryPoint.load)Zreturn_valuec                  C  sT   dddgdddgg} dd | D }t |}t|dks<t| ddhksPtd S )	Nr   r   r   r   r   c                 S  s   g | ]\}}}t |||qS r
   r   r   r
   r
   r   r$   V   s     z/test_backends_dict_from_pkg.<locals>.<listcomp>r)   )r   Zbackends_dict_from_pkgr.   r/   keys)r%   r0   enginesr
   r
   r   test_backends_dict_from_pkgN   s    
r=   c                  C  s   t } t}d|_| |d}t| t|dks2t| jdks@t|jdksNtt }d|_td|i |jdksvtt }d|_td|i |jdkstd S )N)r   )Zengine_1Zengine_2r)   r   r   engine)	r   r   open_dataset_parametersr   set_missing_parametersr.   r/   r   r   )Z	backend_1Z	backend_2r<   backendbackend_argsr
   r
   r   test_set_missing_parameters\   s     

rD   c               	   C  sX   t  } tt td| i W 5 Q R X t }tt td|i W 5 Q R X d S )Nr?   )r   r*   raises	TypeErrorr   rA   r   )rB   rC   r
   r
   r   'test_set_missing_parameters_raise_errorr   s    rG   c                  C  s@   t ddd} t| g}t|d ts*t|d jdks<td S )NZcfgribr   Zxarray_backendsr>   )r   r   r4   
isinstancer   r/   r@   )Zdummy_pkg_entrypointbackend_entrypointsr
   r
   r   test_build_engines}   s      rJ   c               	   C  s   t dddt dddg} tt| }g }tjD ]<}z"||}|| || W q0 tk
rj   Y q0X q0t	|ddhk st
t|t|kst
d S )NZdummy2r   r   Zdummy1r   )r   listr   r4   ZSTANDARD_BACKENDS_ORDERindexpopappend
ValueErrorsetr/   sorted)Zdummy_pkg_entrypointsrI   indicesberM   r
   r
   r   test_build_engines_sorted   s    




rU   z$xarray.backends.plugins.list_enginesdummyc                	   C  sL   t jtdd td W 5 Q R X t jtdd td W 5 Q R X d S )Nzdid not find a match in anymatch	not-valid*found the following matches with the inputfoo.ncr*   rE   rP   r   Zguess_enginer
   r
   r
   r   test_no_matching_engine_found   s    r]   c                	   C  sL   t jtdd td W 5 Q R X t jtdd td W 5 Q R X d S )Nzxarray is unable to openrW   rY   rZ   r[   r\   r
   r
   r
   r   test_engines_not_installed   s    r^   c                  C  s   ddddddddd	d
dddddg} i }t tj D ]8}| dg D ](}||rBtj| ||< tj|=  q4qBq4zlddl}ddlm} |  t	 }tjD ]&}| D ]}||r|
|  qqqt|dkst| dW 5 tj| X dS )zTest that some modules are imported in a lazy manner.

    When importing xarray these should not be imported as well.
    Only when running code for the first time that requires them.
    Zh5netcdfZnetCDF4ZPseudoNetCDFZpydapZNioZscipyZzarrZ
matplotlibZnc_time_axisZfloxz
dask.arrayzdask.distributedsparseZcupyZpintxarrayr   N)list_enginesz& have been imported but should be lazy)rL   sysmodulesr;   
startswithupdater`   xarray.backendsra   rQ   addr.   r/   )ZblacklistedZmodules_backuppkgmodr`   ra   Zis_importedr
   r
   r   test_lazy_import   sL    




rj   )"
__future__r   rb   importlib.metadatar   Zunittestr   r*   rf   r   r   Zimportlib_metadata_mockZBackendEntrypointr   r   r   r   Zfixturer&   markfilterwarningsr1   r9   r:   patchZ	MagicMockr=   rD   rG   rJ   rU   r]   r^   rj   r
   r
   r
   r   <module>   sX   

 



