o
    rri                     @   s2  d dl Z d dlZd dlZd dlZd dlmZ d dlZddlm	Z	m
Z
 ddlmZ ejde
  deddfdd	Zejd
e
  d
eje	j ddfddZd"ddZd"ddZdd Zd"ddZG dd dZd"ddZejdddedeje fddZdeddfddZdeddfd d!Z dS )#    N)Path   )coreplugins)JobEnvironmentenvreturnc                 C   s6   t | tsJ |  rJ t| jtjusJ dd S )Nz_requeue need to be overridden)
isinstancer   	activatedtype_requeue)r    r   N/home/ubuntu/.local/lib/python3.10/site-packages/submitit/core/test_plugins.pytest_env   s   r   exc                 C   s2   t | tsJ t| tjsJ |  dksJ d S )N)r	   r   
issubclassr   Executoraffinityr   r   r   r   test_executors   s   r   c                  C   @   t  } t| dksJ d| v sJ d| v sJ d| v sJ d S N   slurmlocaldebug)r   get_job_environmentslen)envsr   r   r   test_finds_default_environments"   
   r    c                  C   r   r   )r   get_executorsr   r   r   r   r   test_finds_default_executors*   r!   r#   c                 C   s^   |  dd t }|jdksJ t|jdksJ t }|jdks$J t|jdks-J d S )N_TEST_CLUSTER_r   SlurmJobEnvironment)setenvr   get_job_environmentclusterr   __name__r   )monkeypatchr   env2r   r   r   test_job_environment_works2   s   r,   c                   C   s<   t jtdd t  W d    d S 1 sw   Y  d S )Nz&which environment.*slurm.*local.*debug)match)pytestraisesRuntimeErrorr   r'   r   r   r   r   *test_job_environment_raises_outside_of_job=   s   
"r1   c                   @   sN   e Zd ZdefddZdededefddZdddZdej	d	d
fddZ
d
S )PluginCreatortmp_pathc                 C   s   || _ || _d S N)r3   r*   )selfr3   r*   r   r   r   __init__C   s   
zPluginCreator.__init__nameentry_pointsinitc                 C   s   d}t d|}|r|d}| j| }|jdd |d | | j| d| d }|jdd |d	 d
| d| d |d | t  d S )Nz0.0.0z%__version__\s*=\s*["\']([^"\']+)["\']r   i  )modez__init__.py-z
.dist-infoMETADATAzName: z

Version: 
zentry_points.txt)researchgroupr3   mkdir
write_text	importlibinvalidate_caches)r5   r7   r8   r9   versionversion_matchpkg_dirdistr   r   r   
add_pluginG   s   

zPluginCreator.add_pluginr   Nc                 C   s   t   | j| j d S r4   )_clear_plugin_cacher*   syspath_prependr3   )r5   r   r   r   	__enter__Z   s   zPluginCreator.__enter__	exceptionc                 G   s
   t   d S r4   )rJ   )r5   rM   r   r   r   __exit__^   s   
zPluginCreator.__exit__r   N)r)   
__module____qualname__r   r6   strrI   rL   tpAnyrN   r   r   r   r   r2   B   s
    
r2   c                   C   s   t j  t j  d S r4   )r   _get_pluginscache_clearr"   r   r   r   r   rJ   b   s   
rJ   plugin_creator)r7   r3   c                 c   s<    t | |}| |V  W d    d S 1 sw   Y  d S r4   )r2   )r3   r*   creatorr   r   r   _plugin_creatorg   s
   
"rY   c                 C   s4   | j dddd t  }t|h dksJ d S )Nsubmitit_goodz[submitit]
executor = submitit_good:GoodExecutor
job_environment = submitit_good:GoodJobEnvironment
unsupported_key = submitit_good:SomethingElse
zf
import submitit

class GoodExecutor(submitit.Executor):
    pass

class GoodJobEnvironment:
    pass
r8   r9   >   goodr   r   r   )rI   r   r"   keysset)rW   	executorsr   r   r   test_find_good_pluginn   s   r`   c                 C   s   | j tjdd |jdddd t  }h dt|ks J d|vs&J tjd	ftjd
ftjdfg}t	| j
t	|ks?J t| j
|D ] \}}|jdksPJ |j|d ksYJ t|d | seJ qEd S )Nsubmitit)loggersubmitit_badz[submitit]
executor = submitit_bad:NonExisitingExecutor
job_environment = submitit_bad:BadEnvironment
unsupported_key = submitit_bad:SomethingElse
z
import submitit

class BadEnvironment:
    name = "bad"

    def __init__(self):
        raise Exception("this is a bad environment")
r[   >   r   r   r   badz3'submitit_bad'.*no attribute 'NonExisitingExecutor'z)'submitit_bad'.*this is a bad environmentz,unsupported_key = submitit_bad:SomethingElser   r   )	set_levelloggingWARNINGrI   r   r"   r]   r^   ERRORr   recordszipr7   levelnor>   r?   
getMessage)caplogrW   r_   expectedrecord	ex_recordr   r   r   test_skip_bad_plugin   s&   rq   rO   )!rC   rf   r>   typingrS   pathlibr   r.    r   r   job_environmentr   markparametrizer   valuesr   r"   Typer   r   r    r#   r,   r1   r2   rJ   fixtureIteratorrY   r`   rq   r   r   r   r   <module>   s,   



 
