
    jg                         d Z ddlZddlZddlZddlmZmZmZ ddlmZm	Z	 dZ
e	sddlm
Z
  G d de      Z G d d	e      Z G d
 de      ZedfedfedfedfedfedfedfgZ G d de      Zy)zF
The crontabs manager will list all available crontabs on the system.
    N)stataccessX_OK)CronTabWINOS)getpwuidc                   *    e Zd ZdZddZd Zd Zd Zy)	UserSpoolzAGenerates all user crontabs, yields both owned and abandoned tabsNc                     | j                  |      D ](  }| j                  ||      }|s| j                  |       * | s!t        d      }|r| j                  |       y y y )NTuser)listdirgenerateappendr   )selfloctabsusernametabs        C/var/www/html/Stanley/venv/lib/python3.12/site-packages/crontabs.py__init__zUserSpool.__init__"   s\    S)H--X.CC  * t$CC       c                 P    	 t        j                  |      S # t        $ r g cY S w xY wN)osr   OSErrorr   r   s     r   r   zUserSpool.listdir,   s)    	::c?" 	I	s    %%c                     t         st        d      	 t        t        |      j                        j                  S # t
        $ r Y yw xY w)zReturns user file at pathz.This functionality is not available on WindowsN)r   r   r   st_uidpw_nameKeyError)r   paths     r   	get_ownerzUserSpool.get_owner2   sC    JKK	DJ--.666 		s   '; 	AAc                     t         j                  j                  ||      }|| j                  |      k7  rt	        |      S t	        |      S )N)tabfiler   )r   r"   joinr#   r   )r   r   r   r"   s       r   r   zUserSpool.generate;   s=    ww||C*t~~d++4((H%%r   r   )__name__
__module____qualname____doc__r   r   r#   r    r   r   r
   r
       s    K!&r   r
   c                       e Zd ZdZddZy)	SystemTabzGenerates all system tabsNc                 z   t         j                  j                  |      r`t        j                  |      D ]G  }|d   dk(  rt         j                  j	                  ||      }| j                  t        d|             I y t         j                  j                  |      r| j                  t        d|             y y )Nr   .F)r   r%   )r   r"   isdirr   r&   r   r   isfile)r   r   r   itemr"   s        r   r   zSystemTab.__init__E   s    77==

37c>ww||C.G=>	 (
 WW^^C KKUC89 !r   r   )r'   r(   r)   r*   r   r+   r   r   r-   r-   C   s
    #:r   r-   c                       e Zd ZdZddZd Zy)
AnaCronTabz0Attempts to digest anacron entries (if possible)Nc                 T   |rt         j                  j                  |      r| j                  t	        d             t        |j                  j                  |            }|rDt        j                  |      D ]  }| j                  |||d           |d   j                          y y y y )NFr   r   )r   r"   r0   r   r   listallfind_commandr   adddelete)r   r   r   jobsr2   s        r   r   zAnaCronTab.__init__R   s    BGGMM#&KKU+,--c23DJJsODHHS$Q0 ,Q   '4r   c                 .   t         j                  j                  ||      }|dv s|d   dk(  st        |t              sy | d   j                  ||j                        }|j                  d|j                  d      d   z         |j                  |       |S )N)0anacronr   r/   )commandr   z
Anacron %s)
r   r"   r&   r   r   newr   set_commentsplitsetall)r   r   r2   anajobr"   jobs         r   r9   zAnaCronTab.add[   s}    ww||C&<47c>d9K1gkk$V[[k9syy~b'99:

6
r   r   )r'   r(   r)   r*   r   r9   r+   r   r   r4   r4   P   s    :!r   r4   z/var/spool/cron/crontabs/z/etc/crontabz/etc/cron.d/z/etc/cron.hourlyz/etc/cron.dailyz/etc/cron.weeklyz/etc/cron.monthlyc                   F     e Zd ZdZdZdZ fdZd Zd Ze	d        Z
 xZS )CronTabsz/Singleton dictionary of all detectable crontabsNc                 l    | j                   st        t        |   | g|i || _         | j                   S r   )_selfsuperrG   __new__)clsargskw	__class__s      r   rK   zCronTabs.__new__{   s1    yyh4SF4F2FCIyyr   c                 >    | st         D ]  } | j                  |   y y r   )KNOWN_LOCATIONSr9   r   s     r   r   zCronTabs.__init__   s!    &# ' r   c                 N     ||d| iD ]  }| j                  |       d | _         y )Nr   )r   _all)r   rL   rM   r   s       r   r9   zCronTabs.add   s)    (4(CKKDI )r   c                     | j                   [t        d      | _         | D ]E  }|D ]>  }|j                  |j                  xs d|_        | j                   j                  |       @ G | j                   S )z1Return a CronTab object with all jobs (read-only)Fr   unknown)rS   r   r   r   )r   r   rE   s      r   r7   zCronTabs.all   sf     99U+DICxx'#&88#8yII$$S)  
 yyr   )r'   r(   r)   r*   rS   rI   rK   r   r9   propertyr7   __classcell__)rO   s   @r   rG   rG   v   s3    9DE


 	 	r   rG   )r*   r   sys	itertoolsr   r   r   crontabr   r   r   pwdr6   r
   r-   r4   rQ   rG   r+   r   r   <module>r\      s   " 
 
  ! ! " &  &F
: 
: 0 )*nn!" !!""# t r   