o
    w7e                  	   @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZ d dlmZ eeZ		dd
e
e dededefddZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)datetime)StringIO)AnyDictListOptional)version)identity)UrlError|'data	delimiter	quotecharreturnc                 C   sP   t  }tj|||tjd|  |  W  d   S 1 s!w   Y  dS )zEncode report data with csv.)r   r   quotingN)r   csvwriterQUOTE_MINIMALwriterowgetvaluerstrip)r   r   r   io r   @/usr/lib/python3/dist-packages/cloudinit/sources/azure/errors.pyencode_report   s   
$r   c                   @   s^   e Zd Zdddedeeeef  ddfddZdefdd	Zde	fd
dZ
defddZdS )ReportableErrorN)supporting_datareasonr   r   c             
   C   s|   dt   | _d| _|| _|r|| _ni | _t | _zt	
 | _W d S  ty= } zd|| _W Y d }~d S d }~ww )NzCloud-Init/z%https://aka.ms/linuxprovisioningerrorzfailed to read vm id: )r   version_stringagentdocumentation_urlr   r   r   utcnow	timestampr	   query_vm_idvm_id	Exception)selfr   r   id_errorr   r   r   __init__'   s   
zReportableError.__init__c                 C   sd   dd| j  d| j g}|dd | j D 7 }|d| j d| j  d| j g7 }t|S )	Nzresult=errorzreason=zagent=c                 S   s   g | ]\}}| d | qS )=r   ).0kvr   r   r   
<listcomp>E   s    z5ReportableError.as_encoded_report.<locals>.<listcomp>zvm_id=z
timestamp=zdocumentation_url=)	r   r    r   itemsr%   r#   	isoformatr!   r   )r'   r   r   r   r   as_encoded_report=   s   



z!ReportableError.as_encoded_reportc                 C   s.   t |to| j|jko| j|jko| j|jkS )N)
isinstancer   r#   r   r   )r'   otherr   r   r   __eq__N   s   



zReportableError.__eq__c                 C   s&   | j j d| j d| j d| j dS )Nz(reason=z, timestamp=z, supporting_data=))	__class____name__r   r#   r   )r'   r   r   r   __repr__V   s   
zReportableError.__repr__)r7   
__module____qualname__strr   r   r   r)   r1   boolr4   r8   r   r   r   r   r   &   s    

r   c                       &   e Zd Zdeddf fddZ  ZS )$ReportableErrorDhcpInterfaceNotFounddurationr   Nc                    s   t  d || jd< d S )Nzfailure to find DHCP interfacer?   superr)   r   )r'   r?   r6   r   r   r)   `   s   z-ReportableErrorDhcpInterfaceNotFound.__init__)r7   r9   r:   floatr)   __classcell__r   r   rB   r   r>   _       r>   c                       s.   e Zd Zdedee ddf fddZ  ZS )ReportableErrorDhcpLeaser?   	interfacer   Nc                    s$   t  d || jd< || jd< d S )Nzfailure to obtain DHCP leaser?   rG   r@   )r'   r?   rG   rB   r   r   r)   g   s   
z!ReportableErrorDhcpLease.__init__)r7   r9   r:   rC   r   r;   r)   rD   r   r   rB   r   rF   f   s    &rF   c                       s*   e Zd Zdededdf fddZ  ZS )ReportableErrorImdsUrlError	exceptionr?   r   Nc                   s   t |jtjr
d}nt |jtjrd}nt |jtjrd}n|jr$d}nd}t | |jr5|j| j	d< || j	d< t
|| j	d< |j| j	d	< d S )
Nz connection timeout querying IMDSzconnection error querying IMDSzread timeout querying IMDSzhttp error querying IMDSzunexpected error querying IMDS	http_coder?   rI   url)r2   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderA   r)   r   reprrK   )r'   rI   r?   r   rB   r   r   r)   o   s   
z$ReportableErrorImdsUrlError.__init__)r7   r9   r:   r
   rC   r)   rD   r   r   rB   r   rH   n   s    "rH   c                       r=   )+ReportableErrorImdsMetadataParsingExceptionrI   r   Nc                   s   t  d t|| jd< d S )Nzerror parsing IMDS metadatarI   )rA   r)   rR   r   )r'   rI   rB   r   r   r)      s   z4ReportableErrorImdsMetadataParsingException.__init__)r7   r9   r:   
ValueErrorr)   rD   r   r   rB   r   rS      rE   rS   c                       r=   )!ReportableErrorUnhandledExceptionrI   r   Nc                    sX   t  d dtt|||j}t|	d
d}t|| jd< || jd< d S )Nzunhandled exception zutf-8rI   traceback_base64)rA   r)   join	tracebackformat_exceptiontype__traceback__base64	b64encodeencodedecoderR   r   )r'   rI   tracetrace_base64rB   r   r   r)      s   z*ReportableErrorUnhandledException.__init__)r7   r9   r:   r&   r)   rD   r   r   rB   r   rU      rE   rU   )r   r   )r]   r   loggingrY   r   r   r   typingr   r   r   r   rM   	cloudinitr   cloudinit.sources.azurer	   cloudinit.url_helperr
   	getLoggerr7   LOGr;   r   r&   r   r>   rF   rH   rS   rU   r   r   r   r   <module>   s8   

9