o
    (f
                     @   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dededefddZedefdd	Z	edefd
dZ
edd ZdefddZdee fddZdd ZdS )UAFileTname	directoryprivatec                 C   s*   || _ || _|| _tj| j | j| _d S N)
_directory
_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      | j S r   )r   r   r   r   r   r         zUAFile.pathc                 C   r   r   )r   r   r   r   r   
is_private   r   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   sp   | j rtjntj}ztj| jtjkrtj	| jdd nt	| j W n	 t
y-   Y nw t| j|| d S )Ni  )mode)r   r   ROOT_READABLE_MODEWORLD_READABLE_MODEr   r   basenamer   PRIVATE_SUBDIRmakedirsOSErrorr   
write_file)r   r!   	file_moder   r   r   write$   s   zUAFile.writec                 C   s:   d }z	t | j}W |S  ty   td| j Y |S w )Nz(Tried to load %s but file does not exist)r   	load_filer   FileNotFoundErrorLOGdebugr   r!   r   r   r   read5   s   zUAFile.readc                 C   s   t | j d S r   )r   ensure_file_absentr   r   r   r   r   delete=   s   zUAFile.deleteN)__name__
__module____qualname__r   DEFAULT_DATA_DIRstrboolr   propertyr   r   r    r+   r   r1   r3   r   r   r   r   r
      s&    

r
   c                   @   s^   e Zd ZdefddZdeeef fddZde	eeef  fdd	Z
d
d Zedd ZdS )ProJSONFilepro_filec                 C   s
   || _ d S r   )r<   )r   r<   r   r   r   r   B   s   
zProJSONFile.__init__r!   c                 C   s   | j jtj|tjdd d S )Ncls)r!   )r<   r+   jsondumpsr	   DatetimeAwareJSONEncoderr0   r   r   r   r+   H   s   
zProJSONFile.writer   c              
   C   sZ   | j  }|r+z	tj|tjdW S  tjy* } ztj| j j	dt
| dd }~ww d S )Nr=   
)sourceout)r<   r1   r?   loadsr	   DatetimeAwareJSONDecoderJSONDecodeErrorr   InvalidJsonr   r8   )r   r!   er   r   r   r1   M   s   
zProJSONFile.readc                 C   s
   | j  S r   )r<   r3   r   r   r   r   r3   Z   s   
zProJSONFile.deletec                 C   s   | j jS r   )r<   r    r   r   r   r   r    ]   s   zProJSONFile.is_presentN)r4   r5   r6   r
   r   r   r8   r   r+   r   r1   r3   r:   r    r   r   r   r   r;   A   s    
r;   c                       s"   e Zd Zdef fddZ  ZS )UserCacheFiler   c                    s   t  j|t dd d S )NF)r   r   )superr   r   get_user_cache_dir)r   r   	__class__r   r   r   c   s   

zUserCacheFile.__init__)r4   r5   r6   r8   r   __classcell__r   r   rM   r   rJ   b   s    rJ   )r?   loggingr   typingr   r   r   uaclientr   r   r   r   r	   get_event_loggerevent	getLoggerreplace_top_level_logger_namer4   r.   r
   r;   rJ   r   r   r   r   <module>   s    5!