o
    ÙKÕi„
  ã                   @   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!