a
    ¢ÀófÚ  ã                   @   sÆ   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	sTddlm
Z
 G dd„ deƒZG dd	„ d	eƒZG d
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„ deƒZdS )zF
The crontabs manager will list all available crontabs on the system.
é    N)ÚstatÚaccessÚX_OK)ÚCronTabÚWINOS)Úgetpwuidc                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )Ú	UserSpoolzAGenerates all user crontabs, yields both owned and abandoned tabsNc                 C   sJ   |   |¡D ]}|  ||¡}|r
|  |¡ q
| sFtdd�}|rF|  |¡ d S )NT©Úuser)ÚlistdirÚgenerateÚappendr   )ÚselfÚlocÚtabsÚusernameÚtab© r   úE/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/crontabs.pyÚ__init__"   s    
zUserSpool.__init__c                 C   s(   zt  |¡W S  ty"   g  Y S 0 d S ©N)Úosr   ÚOSError©r   r   r   r   r   r   ,   s    zUserSpool.listdirc                 C   s8   t stdƒ‚zt t|ƒjƒjW S  ty2   Y dS 0 dS )zReturns user file at pathz.This functionality is not available on WindowsN)r   r   r   Úst_uidÚpw_nameÚKeyError)r   Úpathr   r   r   Ú	get_owner2   s    zUserSpool.get_ownerc                 C   s0   t j ||¡}||  |¡kr&t|d�S t|d�S )N)Útabfiler	   )r   r   Újoinr   r   )r   r   r   r   r   r   r   r   ;   s    
zUserSpool.generate)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r       s
   

	r   c                   @   s   e Zd ZdZddd„ZdS )Ú	SystemTabzGenerates all system tabsNc                 C   sn   t j |¡rLt  |¡D ]2}|d dkr(qt j ||¡}|  td|d�¡ qnt j |¡rj|  td|d�¡ d S )Nr   Ú.F)r
   r   )r   r   Úisdirr   r    r   r   Úisfile)r   r   r   Úitemr   r   r   r   r   E   s    zSystemTab.__init__)N)r!   r"   r#   r$   r   r   r   r   r   r%   C   s   r%   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú
AnaCronTabz0Attempts to digest anacron entries (if possible)Nc                 C   sf   |rbt j |¡rb|  tdd�¡ t|j |¡ƒ}|rbt  |¡D ]}|  	|||d ¡ q>|d  
¡  d S )NFr	   r   )r   r   r'   r   r   ÚlistÚallZfind_commandr   ÚaddÚdelete)r   r   r   Újobsr)   r   r   r   r   R   s    zAnaCronTab.__init__c                 C   sj   t j ||¡}|dv s,|d dks,t|tƒs0d S | d j||jd�}| d| d¡d  ¡ | 	|¡ |S )N)Z0anacronr   r&   )Úcommandr
   z
Anacron %séÿÿÿÿ)
r   r   r    r   r   Únewr
   Zset_commentÚsplitZsetall)r   r   r)   Zanajobr   Újobr   r   r   r-   [   s    
zAnaCronTab.add)N)r!   r"   r#   r$   r   r-   r   r   r   r   r*   P   s   
	r*   z/var/spool/cron/crontabs/z/etc/crontabz/etc/cron.d/z/etc/cron.hourlyz/etc/cron.dailyz/etc/cron.weeklyz/etc/cron.monthlyc                       sD   e Zd ZdZdZdZ‡ fdd„Zdd„ Zdd„ Ze	d	d
„ ƒZ
‡  ZS )ÚCronTabsz/Singleton dictionary of all detectable crontabsNc                    s,   | j s&tt| ƒj| g|¢R i |¤Ž| _ | j S r   )Ú_selfÚsuperr5   Ú__new__)ÚclsÚargsÚkw©Ú	__class__r   r   r8   {   s     zCronTabs.__new__c                 C   s   | st D ]}| j|Ž  qd S r   )ÚKNOWN_LOCATIONSr-   r   r   r   r   r   €   s    zCronTabs.__init__c                 G   s(   ||d| iŽD ]}|   |¡ d | _qd S )Nr   )r   Ú_all)r   r9   r:   r   r   r   r   r-   …   s    
zCronTabs.addc                 C   sR   | j du rLtdd�| _ | D ]0}|D ]&}|jdu r<|jp8d|_| j  |¡ q"q| j S )z1Return a CronTab object with all jobs (read-only)NFr	   Úunknown)r?   r   r
   r   )r   r   r4   r   r   r   r,   Š   s    

zCronTabs.all)r!   r"   r#   r$   r?   r6   r8   r   r-   Úpropertyr,   Ú__classcell__r   r   r<   r   r5   v   s   r5   )r$   r   ÚsysÚ	itertoolsr   r   r   Zcrontabr   r   r   Úpwdr+   r   r%   r*   r>   r5   r   r   r   r   Ú<module>   s(   #÷