o
    w7e                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ dZeeZd	Zd
d Zdd ZdddZdddZdd Zdd ZedkrWee  dS dS )z0Generate multi-part mime messages for user-data.    N)MIMEMultipart)MIMEText)log)addLogHandlerCLI)INCLUSION_TYPES_MAPz	make-mimezUExample: make-mime -a config.yaml:cloud-config -a script.sh:x-shellscript > user-datac                 C   s   g }g }t | D ]8\}\}}}| }t||t }|dd|  |  }	|	t vr;d|	|d f }
|	|
 |	| qt
 }|D ]}
||
 qF||fS )NzContent-Dispositionzattachment; filename="%s"z3content type %r for attachment %s may be incorrect!   )	enumeratereadr   sysgetdefaultencoding
add_headerget_content_typelowerget_content_typesappendr   attach)filessub_messageserrorsifhfilenameformat_typecontentssub_messagecontent_typemsgcombined_message r   ?/usr/lib/python3/dist-packages/cloudinit/cmd/devel/make_mime.pycreate_mime_message   s(   

r    c              
   C   sR   z|  dd\}}t|d|| fW S  ty( } z	t| d|  |d}~ww )z@Return file content type by reading the first line of the input.:r   rzInvalid value for %rN)splitopenstrip
ValueErrorargparseArgumentError)textr   r   er   r   r   file_content_type/   s   r+   c              
   C   s^   | st  } t| _t| _| jdddtdg ddd | jdd	d
ddd | jddd
ddd | S )a  Build or extend and arg parser for make-mime utility.

    @param parser: Optional existing ArgumentParser instance representing the
        subcommand which will be extended to support the args of this utility.

    @returns: ArgumentParser with proper argument configuration.
    z-az--attachr   r   z<file>:<content-type>z3attach the given file as the specified content-type)desttypeactiondefaultmetavarhelpz-lz--list-types
store_trueFz&List support cloud-init content types.)r.   r/   r1   z-fz--forcez$Ignore unknown content-type warnings)r'   ArgumentParser__doc__descriptionEPILOGepilogadd_argumentr+   )parserr   r   r   
get_parser:   s:   
r:   Fc                    s   t  fddt D S )zReturn a list of cloud-init supported content types.  Optionally
    strip out the leading 'text/' of the type if strip_prefix=True.
    c                    s    g | ]} r| d dn|qS )ztext/ )replace).0ctypestrip_prefixr   r   
<listcomp>g   s    z%get_content_types.<locals>.<listcomp>)sortedr   valuesr?   r   r?   r   r   b   s
   
r   c                 C   s   t t|jrtjntj |jrtdt	dd dS t
|j\}}|rG|jr)dnd}|D ]}tj| d| d q-tjd |jsGd	S t| dS )
a<  Create a multi-part MIME archive for use as user-data.  Optionally
       print out the list of supported content types of cloud-init.

    Also setup CLI log handlers to report to stderr since this is a development
    utility which should be run by a human on the CLI.

    @return 0 on success, 1 on failure.
    
Tr?   r   WARNINGERRORz: z-Invalid content-types, override with --force
r   )r   LOGdebugr   DEBUGrE   
list_typesprintjoinr   r    r   forcer
   stderrwrite)nameargsr   r   levelerrorr   r   r   handle_argsn   s   	rT   c                  C   s   t   } tt| S N)r:   
parse_argsrT   NAME)rQ   r   r   r   main   s   

rX   __main__rU   )F)r4   r'   r
   email.mime.multipartr   email.mime.textr   	cloudinitr   cloudinit.cmd.develr   cloudinit.handlersr   rW   	getLoggerrG   r6   r    r+   r:   r   rT   rX   __name__exitr   r   r   r   <module>   s*   


(