U
    Jh
                     @   s   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	m
Z
mZmZ e	 ZeeeZG dd dZG dd dZG dd	 d	eZdS )
    N)AnyDictOptional)defaultsevent_logger
exceptionssystemutilc                   @   s~   e Zd ZejdfeeedddZeedddZ	eeddd	Z
ed
d ZedddZee dddZdd ZdS )UAFileT)name	directoryprivatec                 C   s*   || _ || _|| _tj| j | j| _d S N)
_directoryZ
_file_name_is_privateospathjoin_path)selfr   r   r    r   6/usr/lib/python3/dist-packages/uaclient/files/files.py__init__   s    zUAFile.__init__returnc                 C   s   | j S r   )r   r   r   r   r   r      s    zUAFile.pathc                 C   s   | j S r   )r   r   r   r   r   
is_private   s    zUAFile.is_privatec                 C   s   t j| jS r   )r   r   existsr   r   r   r   
is_present    s    zUAFile.is_presentcontentc                 C   sr   | j rtjntj}z6tj| jtjkr:tj	| jdd nt	| j W n t
k
r\   Y nX t| j|| d S )Ni  )mode)r   r   ZROOT_READABLE_MODEZWORLD_READABLE_MODEr   r   basenamer   ZPRIVATE_SUBDIRmakedirsOSErrorr   Z
write_file)r   r    Z	file_moder   r   r   write$   s    zUAFile.writec                 C   s<   d }zt | j}W n" tk
r6   td| j Y nX |S )Nz(Tried to load %s but file does not exist)r   Z	load_filer   FileNotFoundErrorLOGdebugr   r    r   r   r   read5   s    zUAFile.readc                 C   s   t | j d S r   )r   Zensure_file_absentr   r   r   r   r   delete=   s    zUAFile.deleteN)__name__
__module____qualname__r   ZDEFAULT_DATA_DIRstrboolr   propertyr   r   r   r%   r   r*   r+   r   r   r   r   r
      s    
r
   c                   @   s^   e Zd ZedddZeeef dddZe	eeef  ddd	Z
d
d Zedd ZdS )ProJSONFilepro_filec                 C   s
   || _ d S r   r3   )r   r4   r   r   r   r   B   s    zProJSONFile.__init__r   c                 C   s   | j jtj|tjdd d S )Nclsr   )r4   r%   jsondumpsr	   ZDatetimeAwareJSONEncoderr)   r   r   r   r%   H   s    zProJSONFile.writer   c              
   C   sd   | j  }|r`ztj|tjdW S  tjk
r^ } ztj| j j	dt
| dW 5 d }~X Y nX d S )Nr5   
)sourceout)r4   r*   r7   loadsr	   ZDatetimeAwareJSONDecoderZJSONDecodeErrorr   ZInvalidJsonr   r/   )r   r    er   r   r   r*   M   s    
 
zProJSONFile.readc                 C   s
   | j  S r   )r4   r+   r   r   r   r   r+   Z   s    zProJSONFile.deletec                 C   s   | j jS r   )r4   r   r   r   r   r   r   ]   s    zProJSONFile.is_presentN)r,   r-   r.   r
   r   r   r/   r   r%   r   r*   r+   r1   r   r   r   r   r   r2   A   s   r2   c                       s"   e Zd Zed fddZ  ZS )UserCacheFile)r   c                    s   t  j|t dd d S )NF)r   r   )superr   r   Zget_user_cache_dir)r   r   	__class__r   r   r   c   s
      zUserCacheFile.__init__)r,   r-   r.   r/   r   __classcell__r   r   r@   r   r>   b   s   r>   )r7   Zloggingr   typingr   r   r   Zuaclientr   r   r   r   r	   Zget_event_loggerZeventZ	getLoggerZreplace_top_level_logger_namer,   r'   r
   r2   r>   r   r   r   r   <module>   s   5!