
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\meZ                 @   s   d 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	 dZ
ej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reje  dS )z0Generate multi-part mime messages for user-data.    N)MIMEMultipart)MIMEText)INCLUSION_TYPES_MAPz	make-mimezUExample: make-mime -a config.yaml:cloud-config -a script.sh:x-shellscript > user-datac             C   s   g }g }x|t | D ]p\}\}}}|j }t||tj }|jdd|  |j j }	|	t krxd|	|d f }
|j	|
 |j	| qW t
 }x|D ]}
|j|
 qW ||fS )NzContent-Dispositionzattachment; filename="%s"z3content type %r for attachment %s may be incorrect!   )	enumeratereadr   sysgetdefaultencodingZ
add_headerZget_content_typelowerget_content_typesappendr   Zattach)filesZsub_messageserrorsiZfhfilenameZformat_typecontentsZsub_messagecontent_typemsgcombined_message r   /usr/lib/python3.6/make_mime.pycreate_mime_message   s$    


r   c             C   s^   y$| j dd\}}t|d||j fS  tk
rX } ztj| d|  |W Y dd}~X nX dS )z@Return file content type by reading the first line of the input.:r   rzInvalid value for %rN)splitopenstrip
ValueErrorargparseZArgumentError)textr   r   er   r   r   file_content_type.   s    
r!   c          
   C   s^   | st j } 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%   r'   z-fz--forcez$Ignore unknown content-type warnings)r   ArgumentParser__doc__descriptionEPILOGZepilogadd_argumentr!   )parserr   r   r   
get_parser9   s4    r/   Fc                s   t  fddtj 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|j d dn|qS )ztext/ )replace).0Zctype)strip_prefixr   r   
<listcomp>g   s   z%get_content_types.<locals>.<listcomp>)sortedr   values)r3   r   )r3   r   r   a   s    
r   c             C   s   |j rtdjtdd dS t|j\}}|rz|jr:dnd}x$|D ]}tjj	| d| d qDW tjj	d |jszd	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.
    
T)r3   r   ZWARNINGZERRORz: z-Invalid content-types, override with --force
r   )
Z
list_typesprintjoinr   r   r   forcer   stderrwrite)nameargsr   r   levelerrorr   r   r   handle_argsm   s    	
rA   c              C   s   t  j } tt| S )N)r/   
parse_argsrA   NAME)r>   r   r   r   main   s    
rD   __main__)N)F)r*   r   Zloggingr   Zemail.mime.multipartr   Zemail.mime.textr   Zcloudinit.handlersr   rC   Z	getLogger__name__ZLOGr,   r   r!   r/   r   rA   rD   exitr   r   r   r   <module>   s"   

(
