
    Uٵg
                         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	j                         Z ej                   ej                   e            Z G d d      Z G d d      Z G d d	e      Zy)
    N)AnyDictOptional)defaultsevent_logger
exceptionssystemutilc                       e Zd Zej                  dfdededefdZedefd       Z	edefd       Z
ed	        Zd
efdZdee   fdZd Zy)UAFileTname	directoryprivatec                     || _         || _        || _        t        j                  j                  | j                   | j                        | _        y N)
_directory
_file_name_is_privateospathjoin_path)selfr   r   r   s       6/usr/lib/python3/dist-packages/uaclient/files/files.py__init__zUAFile.__init__   s8     $"WW\\$//4??C
    returnc                     | j                   S r   )r   r   s    r   r   zUAFile.path   s    zzr   c                     | j                   S r   )r   r   s    r   
is_privatezUAFile.is_private   s    r   c                 T    t         j                  j                  | j                        S r   )r   r   existsr   s    r   
is_presentzUAFile.is_present    s    ww~~dii((r   contentc                    | j                   rt        j                  nt        j                  }	 t        j
                  j                  | j                        t        j                  k(  r"t	        j                  | j                  d       nt	        j                  | j                         t        j                  | j
                  ||       y # t        $ r Y -w xY w)Ni  )mode)r!   r   ROOT_READABLE_MODEWORLD_READABLE_MODEr   r   basenamer   PRIVATE_SUBDIRmakedirsOSErrorr	   
write_file)r   r%   	file_modes      r   writezUAFile.write$   s      ''-- 		ww0H4K4KKDOO%8DOO, 	$))Wi8  		s   A;C 	CCc                     d }	 t        j                  | j                        }|S # t        $ r$ t        j                  d| j                         Y |S w xY w)Nz(Tried to load %s but file does not exist)r	   	load_filer   FileNotFoundErrorLOGdebugr   r%   s     r   readzUAFile.read5   sS    	M&&tyy1G  ! 	MII@$))L	Ms   % )AAc                 B    t        j                  | j                         y r   )r	   ensure_file_absentr   r   s    r   deletezUAFile.delete=   s    !!$)),r   N)__name__
__module____qualname__r   DEFAULT_DATA_DIRstrboolr   propertyr   r!   r$   r0   r   r7   r:    r   r   r   r      s     "22		D	D 	D 		D c    D     ) )9S 9"hsm -r   r   c                   `    e Zd ZdefdZdeeef   fdZde	eeef      fdZ
d Zed        Zy	)
ProJSONFilepro_filec                     || _         y r   )rE   )r   rE   s     r   r   zProJSONFile.__init__B   s     !r   r%   c                     | j                   j                  t        j                  |t        j
                               y )Ncls)r%   )rE   r0   jsondumpsr
   DatetimeAwareJSONEncoderr6   s     r   r0   zProJSONFile.writeH   s-    JJwD,I,IJ 	 	
r   r   c                 ,   | j                   j                         }|r&	 t        j                  |t        j
                        S y # t        j                  $ r<}t        j                  | j                   j                  dt        |      z         d }~ww xY w)NrH   
)sourceout)rE   r7   rJ   loadsr
   DatetimeAwareJSONDecoderJSONDecodeErrorr   InvalidJsonr   r?   )r   r%   es      r   r7   zProJSONFile.readM   sz    --$$&zz't/L/LMM  ''  ,,==--4#a&= s   $A B7BBc                 6    | j                   j                         S r   )rE   r:   r   s    r   r:   zProJSONFile.deleteZ   s    }}##%%r   c                 .    | j                   j                  S r   )rE   r$   r   s    r   r$   zProJSONFile.is_present]   s    }}'''r   N)r;   r<   r=   r   r   r   r?   r   r0   r   r7   r:   rA   r$   rB   r   r   rD   rD   A   sU    !!
T#s(^ 

htCH~. & ( (r   rD   c                   $     e Zd Zdef fdZ xZS )UserCacheFiler   c                 N    t         |   |t        j                         d       y )NF)r   r   )superr   r	   get_user_cache_dir)r   r   	__class__s     r   r   zUserCacheFile.__init__c   s%    F557 	 	
r   )r;   r<   r=   r?   r   __classcell__)r]   s   @r   rY   rY   b   s    
S 
 
r   rY   )rJ   loggingr   typingr   r   r   uaclientr   r   r   r	   r
   get_event_loggerevent	getLoggerreplace_top_level_logger_namer;   r4   r   rD   rY   rB   r   r   <module>rf      sl      	 & & E E%%%'g:::8DE2- 2-j( (B
F 
r   