o
    ȷe!                     @   s   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mZm	Z	 dZ
e
gZe jeddZee de jv r?ee jd gZnde jv rYg Ze jd e jD ]	Zeee qOG dd	 d	eZdS )
    N)
expanduserConfigParserNoOptionErrorNoSectionErrorStringIOz/etc/boto.cfg~z.botoBOTO_CONFIG	BOTO_PATHc                   @   s   e Zd Zd2ddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zd3ddZd3ddZd4ddZd3ddZd3ddZd4d d!Zd5d#d$Zd6d&d'Zd(d) Zd*d+ Zd3d,d-Zd.d/ Zd0d1 ZdS )7ConfigNTc                 C   s   t ddd| _|rE|r| | n|r| | n| t dtjv rGttjd }z| 	| W d S  t
yD   td|  Y d S w d S d S )Nz
/mnt/pyami0)working_dirdebugAWS_CREDENTIAL_FILEz'Unable to load AWS_CREDENTIAL_FILE (%s))r   _parserload_from_pathreadfpreadBotoConfigLocationsosenvironr   load_credential_fileIOErrorwarningswarn)selfpathfpdo_load	full_path r   H/var/www/ideatree/venv/lib/python3.10/site-packages/boto/pyami/config.py__init__6   s$   


zConfig.__init__c                 C   s   |d | _ d S )Nr   )r   )r   stater   r   r    __setstate__G   s   zConfig.__setstate__c                 C   s   t | j|S N)getattrr   )r   namer   r   r    __getattr__P   s   zConfig.__getattr__c                 O   s   | j j|i |S r$   )r   
has_option)r   argskwargsr   r   r    r(   S   s   zConfig.has_optionc                 C   sV   t  }|d t|d D ]}||dddd q|d | | dS )	z:Load a credential file as is setup like the Java utilitiesz[Credentials]
rAWSAccessKeyIdaws_access_key_idAWSSecretKeyaws_secret_access_keyr   N)r   writeopen	readlinesreplaceseekr   )r   r   c_dataliner   r   r    r   V   s   

zConfig.load_credential_filec                 C   sb   t |}| D ]!}td|}|r)|d}tj|\}}| tj	|| q| 
| d S )Nz^#import[\s	]*([^\s^	]*)[\s	]*$   )r1   r2   rematchgroupr   r   splitr   joinr   )r   r   filer6   r9   extended_filedirr   r   r    r   _   s   
zConfig.load_from_pathc                 C   st   t  }|| ||s|| |||| t|d}|| |  | |s1| | | ||| dS )z
        Write the specified Section.Option to the config file specified by path.
        Replace any previous value.  If the path doesn't exist, create it.
        Also add the option the the in-memory config.
        wN)r   r   has_sectionadd_sectionsetr1   r0   close)r   r   sectionoptionvalueconfigr   r   r   r    save_optioni   s   






zConfig.save_optionc                 C      |  t||| d S r$   )rI   UserConfigPathr   rE   rF   rG   r   r   r    save_user_option{      zConfig.save_user_optionc                 C   rJ   r$   )rI   BotoConfigPathrL   r   r   r    save_system_option~   rN   zConfig.save_system_optionc              	   C   0   z	|  d|}W |S  ttfy   |}Y |S w )NInstancegetr   r   r   r&   defaultvalr   r   r    get_instance      zConfig.get_instancec              	   C   rQ   NUserrS   rU   r   r   r    get_user   rY   zConfig.get_userr   c              	   C   rQ   rZ   )getintr   r   rU   r   r   r    getint_user   rY   zConfig.getint_userc                 C   s   |  |||S r$   )rT   r   rE   r&   rV   r   r   r    	get_value   s   zConfig.get_valuec              	   C   s,   z| j ||W S  ttfy   | Y S w r$   )r   rT   r   r   r_   r   r   r    rT      s
   z
Config.getc              	   C   0   z| j ||W S  ttfy   t| Y S w r$   )r   r]   r   r   intr_   r   r   r    r]      
   zConfig.getint        c              	   C   ra   r$   )r   getfloatr   r   floatr_   r   r   r    re      rc   zConfig.getfloatFc                 C   s<   |  ||r| ||}| dkrd}|S d}|S |}|S )NtrueTF)r(   rT   lower)r   rE   r&   rV   rW   r   r   r    getbool   s   zConfig.getboolc                 C   s(   |r|  ||d d S |  ||d d S )Nrg   false)rC   )r   rE   r&   rG   r   r   r    setbool   s   zConfig.setboolc                 C   s    t  }| | t|  d S r$   )r   r0   printgetvalue)r   sr   r   r    dump   s   
zConfig.dumpc              
   C   sl   |st  }|  D ]*}|d|  | |D ]}|dkr%|d|  q|d|| ||f  qq	d S )Nz[%s]
r/   z%s = xxxxxxxxxxxxxxxxxx
z%s = %s
)r   sectionsr0   optionsrT   )r   r   rE   rF   r   r   r    	dump_safe   s   zConfig.dump_safec           
      C   s   ddl m} t }||}|s||}||}d|_|  D ]}i }| 	|D ]
}	| 
||	||	< q+||||< q"|  d S )Nr   jsonF)boto.compatrt   botoconnect_sdblookupcreate_domainnew_itemactiverp   rq   rT   dumpssave)
r   domain_name	item_namert   sdbdomainitemrE   drF   r   r   r    dump_to_sdb   s   


zConfig.dump_to_sdbc                 C   s   ddl m} t }||}||}| D ]8}| |s$| | |	|| }| D ] }	||	 }
|
d u r;d}
t
|
trH| ||	|
 q/| ||	|
 q/qd S )Nr   rs   None)ru   rt   rv   rw   rx   get_itemkeysrA   rB   loads
isinstanceboolrk   rC   )r   r~   r   rt   r   r   r   rE   r   	attr_name
attr_valuer   r   r    load_from_sdb   s"   




zConfig.load_from_sdb)NNTr$   )r   )rd   )F)__name__
__module____qualname__r!   r#   r'   r(   r   r   rI   rM   rP   rX   r\   r^   r`   rT   r]   re   ri   rk   ro   rr   r   r   r   r   r   r    r
   4   s.    
		









r
   )r   r8   r   rv   ru   r   r   r   r   r   rO   r   r   r<   rK   appendr   r;   pathsepobjectr
   r   r   r   r    <module>   s    


