o
    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	s*d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   sR   |  |D ]}| ||}|r| | q| s%tdd}|r'| | d S d S d S )NTuser)listdirgenerateappendr   )selfloctabsusernametab r   ;/var/www/html/venv/lib/python3.10/site-packages/crontabs.py__init__"   s   

zUserSpool.__init__c                 C   s$   zt |W S  ty   g  Y S w N)osr   OSErrorr   r   r   r   r   r   ,   s
   zUserSpool.listdirc                 C   s4   t stdz	t t|jjW S  ty   Y dS w )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.generater   )__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   st   t j|r't |D ]}|d dkrqt j||}| td|d qd S t j|r8| td|d d S 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__r   )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   sr   |r3t j|r5| tdd t|j|}|r7t |D ]}| 	|||d  q|d 
  d S d S d S d S )NFr	   r   )r   r   r'   r   r   listall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sd S | d j||jd}|d|dd   |	| |S )N)0anacronr   r&   )commandr
   z
Anacron %s)
r   r   r    r   r   newr
   set_commentsplitsetall)r   r   r)   anajobr   jobr   r   r   r.   [   s   
zAnaCronTab.addr   )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superr:   __new__)clsargskw	__class__r   r   r=   {   s    zCronTabs.__new__c                 C   s    | st D ]	}| j|  qd S 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   r>   r?   r   r   r   r   r.      s   
zCronTabs.addc                 C   sR   | j du r&tdd| _ | D ]}|D ]}|jdu r|jpd|_| j | qq| j S )z1Return a CronTab object with all jobs (read-only)NFr	   unknown)rD   r   r
   r   )r   r   r9   r   r   r   r,      s   

zCronTabs.all)r!   r"   r#   r$   rD   r;   r=   r   r.   propertyr,   __classcell__r   r   rA   r   r:   v   s    r:   )r$   r   sys	itertoolsr   r   r   crontabr   r   r   pwdr+   r   r%   r*   rC   r:   r   r   r   r   <module>   s*   #