ó
ì™xTc        
   @   sª  d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z e j d d ƒ Z d „  Z	 d „  Z
 e j d d	 ƒ Z e j d d
 ƒ Z d „  Z e j d d ƒ Z e d d d d d d d d d g	 ƒ Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e j d d d d g ƒ Z d „  Z d  „  Z e j d d! ƒ Z e j d d" ƒ Z e j d d# ƒ Z d$ „  Z e j d d% ƒ Z e Z d& „  Z d' „  Z  d S((   iÿÿÿÿ(   t   divisionN(   t   util(   t   errorst   patterns   Following jobs do not existc         C   s7   | r/ t  ƒ  j | ƒ r t St j d | ‚ n t Sd S(   s(   Evaluates SGE text output in single modes   SGE error:
%sN(   t	   SGE_REGEXt   searcht   TrueR   t   AbnormalExitErrort   False(   t   outt   err(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   sge_single_evaluate   s
    c         C   s   | r
 t  St Sd S(   s(   Evaluates LSF text output in single modeN(   R   R   (   R	   R
   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   lsf_single_evaluate   s    s   Unknown Job Ids   job_state\s*=\s*(\w+)c         C   sm   | r/ t  ƒ  j | ƒ r t St j d | ‚ n  t ƒ  j |  ƒ } | sZ t j d |  ‚ n  | j d ƒ d k S(   s(   Evaluates PBS text output in single modes   PBS error:
%ss    Unexpected response from PBS: %ri   t   C(   t   PBS_SEARCH_REGEXR   R   R   R   t   PBS_EVAL_REGEXt   ExtractionErrort   group(   R	   R
   t   state(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   pbs_single_evaluate)   s    s/   slurm_load_jobs error: Invalid job id specifiedt   PDt   Rt   CAt   CFt   CGt   CDt   Ft   TOt   NFc         C   sd   | r/ t  ƒ  j | ƒ r t St j d | ‚ n  |  j ƒ  } | t k rZ t j d |  ‚ n  | d k S(   s*   Evaluates Slurm text output in single modes   Slurm error:
%ss"   Unexpected response from Slurm: %rR   (   t   SLURM_SEARCH_REGEXR   R   R   R   t   stript   SLURM_CODESR   (   R	   R
   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   slurm_single_evaluate@   s    t   SinglePollerc           B   se   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 RS(   s"   
  Polls status for single jobs
  c         C   s   | |  _  | |  _ d  S(   N(   t   commandt   evaluate(   t   selfR"   R#   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   __init__W   s    	c         C   sœ   y/ t  j |  j | g d t  j d t  j ƒ} WnB t k
 rs } d j |  j | g ƒ } t j d | | f ‚ n X| j ƒ  \ } } |  j	 d | d | ƒ S(   Nt   stdoutt   stderrt    s   '%s': %sR	   R
   (
   t
   subprocesst   PopenR"   t   PIPEt   OSErrort   joinR   t   ExecutableErrort   communicateR#   (   R$   t   jobidt   processt   et   cmdlineR	   R
   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   is_finished]   s    	c         C   s   d  S(   N(    (   R$   R0   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   new_job_submittedo   s    c         C   s   |  d d d g d t  ƒ S(   NR"   t   qstats   -jR#   (   R   (   t   cls(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   SGEt   s    c         C   s   |  d d g d t  ƒ S(   NR"   t   bjobsR#   (   R   (   R7   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   LSFz   s    c         C   s   |  d d d g d t  ƒ S(   NR"   R6   s   -fR#   (   R   (   R7   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   PBS€   s    c         C   s"   |  d d d d d d g d t  ƒ S(   NR"   t   squeues   -os   %ts   -hs   -jR#   (   R    (   R7   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   Slurm†   s    (   t   __name__t
   __module__t   __doc__R%   R4   R5   t   classmethodR8   R:   R;   R=   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR!   R   s   			t   CentralPollerc           B   s¡   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z e d d „ ƒ Z e d d „ ƒ Z	 e d d „ ƒ Z
 e d d	 „ ƒ Z e d d
 „ ƒ Z e d d „ ƒ Z RS(   s   
  Polls job status in batch
  i   c         C   sA   | |  _  | |  _ | |  _ t ƒ  |  _ t ƒ  |  _ |  j ƒ  d  S(   N(   t   waittimeR"   R#   t   sett   runningt	   completedt   update(   R$   R"   R#   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR%   ”   s    			c         C   s  y( t  j |  j d t  j d t  j ƒ} Wn5 t k
 r_ } t j d d j |  j ƒ | f ‚ n X| j ƒ  \ } } | j	 ƒ  r² d d j |  j ƒ | j	 ƒ  | f } t j
 | ‚ n  |  j j ƒ  |  j j ƒ  |  j d | d |  j d |  j ƒ t j ƒ  |  _ d  S(	   NR&   R'   s   '%s': %sR(   s8   Poll error: '%s' exited abnormally (code %s, message %s)R	   RE   RF   (   R)   R*   R"   R+   R,   R   R.   R-   R/   t   pollR   RE   t   clearRF   R#   t   timet   polltime(   R$   R1   R2   R	   R
   t   message(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRG   ž   s$    		&	
"c         C   sq   t  j  ƒ  } |  j | |  j k  s1 | |  j k  r> |  j ƒ  n  | |  j k rQ t S| |  j k rd t St d ‚ d  S(   Ns   Unknown job id(	   RJ   RC   RK   RG   RE   R   RF   R   t
   ValueError(   R$   R0   t   now(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR4   »   s    %c         C   s   |  j  j | ƒ d  S(   N(   RE   t   add(   R$   R0   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR5   Ì   s    c         C   s   |  d d d g d t  d | ƒ S(   NR"   R6   s   -xmlR#   RC   (   t   sge_xml_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR8   Ñ   s    c         C   s   |  d d g d t  d | ƒ S(   NR"   R9   R#   RC   (   t   lsf_text_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR:   Û   s    	c         C   s   |  d d d g d t  d | ƒ S(   NR"   R6   s   -xR#   RC   (   t   pbs_xml_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR;   å   s    c         C   s   |  d d g d t  d | ƒ S(   NR"   R6   R#   RC   (   t   pbspro_text_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   PBSProï   s    	c         C   s   |  d d d g d t  d | ƒ S(   NR"   t   condor_qs   -xmlR#   RC   (   t   condor_xml_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   Condorù   s    g      à?c         C   s%   |  d d d d d g d t  d | ƒ S(   NR"   R<   s   -hs   -os   %i %tR#   RC   (   t   slurm_text_evaluate(   R7   RC   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyR=     s    (   R>   R?   R@   R%   RG   R4   R5   RA   R8   R:   R;   RT   RW   R=   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRB   �   s"   
								c         C   sp   d d l  j j } | j |  ƒ } xH | j d ƒ D]7 } | j d ƒ } | d k	 sX t ‚ | j | j	 ƒ q1 Wd S(   s   Parses SGE xml outputiÿÿÿÿNt   job_listt   JB_job_number(
   t   xml.etree.ElementTreet   etreet   ElementTreet
   fromstringt   itert   findt   Nonet   AssertionErrorRO   t   text(   R	   RE   RF   t   ETt   roott   nt   status_node(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRP     s    s   ^.*?(?=<\?xml)t   flagst   DOTALLc   
      C   sÏ   t  ƒ  j d |  ƒ } d d l j j } | j | ƒ } x’ | j d ƒ D]� } g  | j d ƒ D]$ } | j j d ƒ d k r\ | ^ q\ } | s’ t	 ‚ | d j
 d ƒ }	 |	 d k	 s· t	 ‚ | j |	 j ƒ qF Wd S(	   s   Parses Condor xml outputt    iÿÿÿÿNt   ct   aRf   t	   ClusterIdt   i(   t   CONDOR_XML_OUTPUT_REGEXt   subR[   R\   R]   R^   R_   t   attribt   getRb   R`   Ra   RO   Rc   (
   R	   RE   RF   t   xmlRd   Re   t   job_nodeR2   t   rest   number_node(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRV     s    :c         C   sœ   |  s
 d Sd d l  j j } | j |  ƒ } xj | j d ƒ D]Y } | j d ƒ } | d k	 sb t ‚ | j d k r„ | j	 | j ƒ q; | j	 | j ƒ q; Wd S(   s   Parses PBS xml outputNiÿÿÿÿt   Jobt	   job_stateR   (
   R[   R\   R]   R^   R_   R`   Ra   Rb   Rc   RO   (   R	   RE   RF   Rd   Re   Rf   Rg   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRR   /  s    s   No unfinished job foundsL   JOBID\s+USER\s+STAT\s+QUEUE\s+FROM_HOST\s+EXEC_HOST\s+JOB_NAME\s+SUBMIT_TIMEs   \s*(\S+)\s.+c         C   s§   t  ƒ  j |  ƒ r d St ƒ  j |  ƒ s; t j d |  ‚ n  t ƒ  } x\ |  j ƒ  d D]J } | j | ƒ } | sƒ t j d |  ‚ n  | j d ƒ } | j	 | ƒ qU Wd S(   s   Parses LSF bjobs text outputNs    Unexpected response from LSF: %ri   (
   t   LSF_CENTRAL_NO_RESULTS_REGEXR   t   LSF_CENTRAL_HEADER_REGEXt   matchR   R   t   LSF_CENTRAL_JOBID_REGEXt
   splitlinesR   RO   (   R	   RE   RF   t   regext   lineR{   R0   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRQ   L  s    	s5   Job id\s+Name\s+User\s+Time Use\s+S\s+Queue\s*\n[ -]*c         C   s¡   |  j  ƒ  s d St ƒ  j |  ƒ s5 t j d |  ‚ n  t ƒ  } x\ |  j ƒ  d D]J } | j | ƒ } | s} t j d |  ‚ n  | j d ƒ } | j | ƒ qO Wd S(   s   Parses PBSPro qstat text outputNs#   Unexpected response from PBSPro: %ri   i   (	   R   t   PBSPRO_CENTRAL_HEADER_REGEXR{   R   R   t   PBSPRO_CENTRAL_JOBID_REGEXR}   R   RO   (   R	   RE   RF   R~   R   R{   R0   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRS   f  s    	c         C   s“   xŒ |  j  ƒ  D]~ } | j ƒ  } t | ƒ d k rD t j d | ‚ n  | \ } } | t k sb t ‚ | d k r~ | j | ƒ q | j | ƒ q Wd S(   s   Parses Slurm squeue text outputi   s"   Unexpected response from Slurm: %rR   N(   R}   t   splitt   lenR   R   R   Rb   RO   (   R	   RE   RF   R   t   piecesR0   t   status(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyRX   {  s    (!   t
   __future__R    R)   RJ   t&   libtbx.queuing_system_utils.processingR   R   t   get_lazy_initialized_regexR   R   R   R   R   R   R   RD   R   R    t   objectR!   RB   RP   Ro   RV   RR   Ry   Rz   R|   RQ   R€   R�   RS   RX   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/processing/polling.pyt   <module>   sD   		
			'	=~														