ó
ë™xTc           @   s!  d  d l  m Z d  d l  m Z d  d l Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ	 d e f d „  ƒ  YZ
 d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d  d l m Z e j d d ƒ Z e j d d ƒ Z e j d d ƒ Z d S(   iÿÿÿÿ(   t   division(   t   with_statementN(   t   errorst
   Submissionc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s   
  Handles job submissions
  c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   cmdst   namet   outt   errt
   namelength(   t   selfR   R   R   R   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   __init__   s
    				c         C   sY   d | } d | } |  j  |  j | |  j  |  j | |  j | g } t d | ƒ | | f S(   Ns   %s.outs   %s.errt   args(   R   R   R   R   R   t   execute(   R	   R   t   outfilet   errfilet   commands(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   create   s    

	N(   t   __name__t
   __module__t   __doc__t   NoneR
   R   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR   	   s   	t   Synchronousc           B   sG   e  Z d  Z d Z d „  Z e d g d „ ƒ Z e d g d „ ƒ Z RS(   s    
  Submits jobs synchronously
  s   source %s
%s << EOF
%s
EOF
c   
   	   C   sz   |  j  d | ƒ \ } } } | j j |  j | | | f ƒ | j j ƒ  d d l m }	 |	 j d | d | d | d | ƒ S(   NR   iÿÿÿÿ(   t   statusR   R   t
   additionalt   process(   R   t   stdint   writet   SCRIPTt   closet&   libtbx.queuing_system_utils.processingR   R   (
   R	   R   t
   executablet   scriptt   includet   cleanupR   R   R   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   __call__1   s     	t   qsubc      	   C   s2   |  d | d d d d d g d d d	 d
 d d ƒ S(   NR   s   -Ss   /bin/shs   -cwds   -synct   yR   s   -NR   s   -oR   s   -e(    (   t   clst   command(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   SGEA   s
    t   bsubc      	   C   s&   |  d | d g d d d d d d ƒ S(	   NR   s   -KR   s   -JR   s   -oR   s   -e(    (   R%   R&   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   LSFL   s
    (   R   R   R   R   R"   t   classmethodR'   R)   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR   $   s   	
t   SlurmStreamc           B   s    e  Z d  Z d „  Z d „  Z RS(   sd   
  Submits jobs synchronously to Slurm srun, using redirected file handles for
  standard streams
  c         C   s   | d g |  _  d  S(   Ns   -Q(   R   (   R	   R&   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR
   ]   s    c         C   s\   t  d |  j | g ƒ } | j j | ƒ | j j ƒ  d d l m } | j d | d | ƒ S(   NR   iÿÿÿÿ(   R   R   R   (   R   R   R   R   R   R   R   R+   (   R	   R   R   R   R    R!   R   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR"   b   s
    (   R   R   R   R
   R"   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR+   W   s   	t   AsynchronousCmdLinec           B   s�   e  Z d  Z d d d „ Z d „  Z e d g d „ ƒ Z e d g d „ ƒ Z e d g d „ ƒ Z	 e d g d	 „ ƒ Z
 e d
 g d „ ƒ Z RS(   s!   
  Submits jobs asynchronously
  t   .c         C   sb   t  t |  ƒ j d | d | d | d | d |	 ƒ | |  _ | |  _ | |  _ | |  _ |
 |  _ d  S(   NR   R   R   R   R   (   t   superR,   R
   t   qdelt   extractt   pollert   handlert   cwd(   R	   R   R/   R   R   R   R0   R1   R2   R   R3   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR
   r   s    				c         C   s×   |  j  d | ƒ \ } } } | j d |  j j d | d | d | d |  j ƒ ƒ \ }	 }
 | j ƒ  r— d d j |  j ƒ | j ƒ  |
 f } t j	 | ‚ n  |  j d	 |  j
 d
 |	 ƒ d |  j d | d | d | d |  j ƒ S(   NR   t   inputR    R   R   R3   s>   Submission error: '%s' exited abnormally (code %s, message %s)t    t   jobidt   outputR1   R   R   R   R/   (   R   t   communicateR2   R   R3   t   pollt   joinR   R   t   AbnormalExitErrorR0   R1   R/   (   R	   R   R   R   R    R!   R   R   R   R   R   t   message(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR"   ‚   s     	3	
		R#   c         C   sJ   |  d | d d d d g d d g d d d	 d
 d d d t  d | d | ƒ S(   NR   s   -Ss   /bin/shs   -cwds   -terseR/   R   s   -NR   s   -oR   s   -eR0   R1   R2   (   t   generic_jobid_extract(   R%   R1   R2   R&   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR'   œ   s    	R(   c         C   sM   d d l  m } |  d | d d g d d d d	 d
 d d t d | d | j ƒ S(   Niÿÿÿÿ(   R   R   R/   t   bkillR   s   -JR   s   -oR   s   -eR0   R1   R2   (   R   R   t   lsf_jobid_extractt   StdStreamStrategy(   R%   R1   R&   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR)   «   s    	c         C   sW   d d l  m } |  d | d d g d d g d d d	 d
 d d d t d | d | j ƒ S(   Niÿÿÿÿ(   R   R   s   -dR-   R/   R   s   -NR   s   -oR   s   -eR0   R1   R2   (   R   R   R=   R@   (   R%   R1   R&   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   PBS¼   s    	c         C   sk   d d l  m } d d  l } |  d | d d g d d d d d	 d
 d t d | d | j d d d | j ƒ  ƒ 
S(   Niÿÿÿÿ(   R   R   R/   R   s   -NR   s   -oR   s   -eR0   R1   R2   R   i   R3   (   R   R   t   osR=   R@   t   getcwd(   R%   R1   R&   R   RB   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   PBSProÍ   s    		t   sbatchc         C   sM   d d l  m } |  d | d d g d d d d	 d
 d d t d | d | j ƒ S(   Niÿÿÿÿ(   R   R   R/   t   scancelR   s   -JR   s   -oR   s   -eR0   R1   R2   (   R   R   t   slurm_jobid_extractt   SlurmStdStreamStrategy(   R%   R1   R&   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   Slurmá   s    	N(   R   R   R   R   R
   R"   R*   R'   R)   RA   RD   RI   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR,   m   s   	t   AsynchronousScriptc           B   sG   e  Z d  Z d Z d „  Z d „  Z d „  Z e d g e d „ ƒ Z RS(   sD   
  Submits jobs asynchronously. Options are passed using a script
  s‹   
Executable     = %s
Universe       = vanilla
initialdir = .

Output  = %s
Error   = %s
Log = %s
Log_xml = True
Notification = Never
Queue
c         C   s:   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R/   R   R0   R1   R2   (   R	   R   R/   R   R0   R1   R2   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR
     s    					c         C   s   t  d |  j ƒ S(   NR   (   R   R   (   R	   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR     s    c         C   se  d | } d | } d | } d | }	 t  | d ƒ �/ }
 |
 j |  j j d | d | d | ƒ ƒ Wd  QXd	 d  l } d	 d  l } | j | | j | j B| j	 Bƒ |  j
 ƒ  } | j d
 |  j | | | |	 f ƒ \ } } | j ƒ  rd d j |  j ƒ | j ƒ  | f } t j | ‚ n  |  j d |  j d | ƒ d |  j d | d | d |	 d | | g d |  j ƒ S(   Ns   %s.outs   %s.errs   %s.condor.scripts   %s.condor.xmlt   wR    R   R   iÿÿÿÿR4   s>   Submission error: '%s' exited abnormally (code %s, message %s)R5   R6   R7   R1   R   R   t   logfileR   R/   (   t   openR   R2   R   RB   t   statt   chmodt   S_IRUSRt   S_IWUSRt   S_IXUSRR   R8   R9   R:   R   R   R;   R0   R1   R/   (   R	   R   R   R   R    R!   R   R   t
   scriptfileRL   t   ofileRB   RN   R   R   R   R<   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR"     s6    



(!	"	
		t   condor_submitc         C   sA   d d l  m } |  d | d d g d | d t d | d	 | j ƒ S(
   Niÿÿÿÿ(   R   R   R/   t	   condor_rmR   R0   R1   R2   (   R   R   t   condor_jobid_extractt   LogfileStrategy(   R%   R1   R&   R   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   Condor<  s    	(	   R   R   R   t   CONDOR_SCRIPTR
   R   R"   R*   RY   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyRJ   ò   s   	
		(c         C   sg   y. t  j |  d t  j d t  j d t  j ƒ} Wn2 t k
 rb } t j d d j |  ƒ | f ‚ n X| S(   NR   t   stdoutt   stderrs   '%s': %sR5   (   t
   subprocesst   Popent   PIPEt   OSErrorR   t   ExecutableErrorR:   (   R   R   t   e(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR   L  s    		#c         C   s8   t  ƒ  j |  ƒ } | s+ t j d |  ‚ n  | j d ƒ S(   Ns    Unexpected response from LSF: %ri   (   t   LSF_JOBID_EXTRACT_REGEXt   searchR   t   ExtractionErrort   group(   R7   t   match(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR?   \  s    c         C   s
   |  j  ƒ  S(   N(   t   strip(   R7   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyR=   f  s    c         C   s8   t  ƒ  j |  ƒ } | s+ t j d |  ‚ n  | j d ƒ S(   Ns#   Unexpected response from Condor: %ri   (   t   CONDOR_JOBID_EXTRACT_REGEXRd   R   Re   Rf   (   R7   Rg   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyRW   k  s    c         C   s8   t  ƒ  j |  ƒ } | s+ t j d |  ‚ n  | j d ƒ S(   Ns"   Unexpected response from Slurm: %ri   (   t   SLURM_JOBID_EXTRACT_REGEXRd   R   Re   Rf   (   R7   Rg   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyRG   u  s    (   t   utilt   patterns   Job <(\d+)> is submitteds)   \d+ job\(s\) submitted to cluster (\d+)\.s   Submitted batch job (\d+)(   t
   __future__R    R   R]   R   R   t   objectR   R   R+   R,   RJ   R   R?   R=   RW   RG   Rk   t   get_lazy_initialized_regexRc   Ri   Rj   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/submission.pyt   <module>   s(   3…Z		
		
						