a
    xdV                     @   s   d Z ddl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 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)getpwuid)CronTabc                   @   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   @/var/www/html/Ranjet/env/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   s,   zt t|jjW S  ty&   Y dS 0 dS )zReturns user file at pathN)r   r   st_uidpw_nameKeyError)r   pathr   r   r   	get_owner0   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   7   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   A   s    zSystemTab.__init__)N)r    r!   r"   r#   r   r   r   r   r   r$   ?   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   N   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,   W   s    
zAnaCronTab.add)N)r    r!   r"   r#   r   r,   r   r   r   r   r)   L   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superr4   __new__)clsargskw	__class__r   r   r7   w   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   r8   r9   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   r3   r   r   r   r+      s    

zCronTabs.all)r    r!   r"   r#   r>   r5   r7   r   r,   propertyr+   __classcell__r   r   r;   r   r4   r   s   r4   )r#   r   syspwd	itertoolsr   r   r   r   Zcrontabr   r*   r   r$   r)   r=   r4   r   r   r   r   <module>   s&   !