
    x[h}&                     P   S SK r S SKrS SKrS SKJrJrJr  S SKJrJ	r	J
r
  \R                  " \5      rSrSrSrSr\\/rS/rS	rS
rSSSSSSSSSSSSS.r\" \" \R3                  5       5      S S9r " S S\ R6                  S9rS rS rS rS r S  r!S! r"S" r#S# r$\
4S$ jr%S&S% jr&g)'    N)importer
type_utilsutil)FREQUENCIES
PER_ALWAYSPER_INSTANCEztext/x-not-multipartzapplication/octet-stream__end__	__begin__ztext/part-handlerzpart-handler-%03dz	part-%03dztext/x-include-urlztext/x-include-once-urlztext/x-shellscriptztext/cloud-configztext/cloud-boothookztext/cloud-config-archiveztext/cloud-config-jsonpztext/jinja2text/x-shellscript-per-boottext/x-shellscript-per-instancetext/x-shellscript-per-once)z#includez#include-oncez#!z#cloud-configz#part-handlerz#cloud-boothookz#cloud-config-archivez#cloud-config-jsonpz## template: jinjar   r   r   c                     S[        U 5      -
  $ )Nr   )len)es    =/usr/lib/python3/dist-packages/cloudinit/handlers/__init__.py<lambda>r   >   s    QQZ    )keyc                   N    \ rS rSrSS jrS rS r\R                  S 5       r	Sr
g)	HandlerB   c                     X l         Xl        g N)handler_version	frequency)selfr   versions      r   __init__Handler.__init__C   s    &"r   c                 Z    [         R                  " U 5      < SU R                  5       < S3$ )Nz: [])r   obj_name
list_types)r   s    r   __repr__Handler.__repr__G   s    '0068IJJr   c                     [        U S5      (       d  [        S5      e[        U S5       Vs/ s H  n[        U   PM     sn$ s  snf )Nprefixesz#Missing prefixes subclass attribute)hasattrNotImplementedErrorgetattrINCLUSION_TYPES_MAP)r   prefixs     r   r#   Handler.list_typesJ   sN    tZ((%&KLL &dJ77F $F+7  s   Ac                     [        5       er   )r)   )r   argskwargss      r   handle_partHandler.handle_partT   s    !##r   )r   r   N)   )__name__
__module____qualname____firstlineno__r   r$   r#   abcabstractmethodr1   __static_attributes__ r   r   r   r   B   s,    #K 	$ $r   r   )	metaclassc           
         U R                   nU[        :X  d  U[        :X  a
  U[        :X  d  g  U R                  n[	        U5      nUS   n [        R                  SU UUUU5        US:X  a  U R                  XX#XE5        g US:X  a  U R                  XX#U5        g US:X  a  U R                  XX#5        g [        SU-  5      e! [
        [        [        4 a    Sn Nf = f! [         a#    [        R                  " [        SU UUUU5         g f = f)N   Content-Typez1Calling handler %s (%s, %s, %s) with frequency %s   r3   zUnknown module version %sz8Failed calling handler %s (%s, %s, %s) with frequency %s)r   r   r   r   int	TypeError
ValueErrorAttributeErrorLOGdebugr1   	Exceptionr   logexc)	moddatafilenamepayloadr   headersmod_freqmod_vercontent_types	            r   run_partrQ   Y   s   }}HJ%(l*B%%g, >*L
		?	
 a<OOHy \OOD9M\OODB8GDEE1 z>2 2  	
F	
	
s5   B? 
3C >C C 1C ?CC*D	D	c                 0    S[         0n[        XS S X#5        g Nr?   )CONTENT_STARTrQ   rI   rJ   r   rM   s       r   
call_beginrV      s      	G SdI7r   c                 0    S[         0n[        XS S X#5        g rS   )CONTENT_ENDrQ   rU   s       r   call_endrY      s      	G SdI7r   c                    U S   n[         U-  nU S   n[        R                  R                  U S   SU-  5      nUR	                  S5      (       d  SU-  n[
        R                  " XsS5        U S   n [        [        R                  " U5      5      n	[        XS	   U5        UR                  U	S
S9  US-   U S'   g ! [         a     [
        R                  " [        SUU5         g f = f)Nhandlercountr   
handlerdirz%sz.pyz%s.pyi  handlersrJ   T)initializedr>   z7Failed at registering python file: %s (part handler %s))PART_HANDLER_FN_TMPLospathjoinendswithr   
write_filefixup_handlerr   import_modulerV   registerrG   rH   rE   )
pdata_ctype	_filenamerL   curcountmodnamer   modfnamer]   rI   s
             r   walker_handle_handlerrn      s    ^$H"h/Gk"Iww||E,/1ABHU##h'OOHu-Z H
H227;<3fy1 	#40 (1n 
E		

s   2AB9 9'C#"C#c                     [        U [        5      (       a  U R                  SS5      S   nO(U S SU-   R                  SS9R                  SS5      S   n[	        U5      U:  a  US U nU$ ! [
         a	    U SU n U$ f = f)N
r>   r      ignore)errors)
isinstancestrsplitdecoder   UnicodeDecodeError)blobsizestarts      r   _extract_first_or_bytesr|      s    dC  JJtQ'*E 1t8$++8+<BB4KANEu:%4LE L  QtLs   A'A+ +A>=A>c                      U R                  S5      $ ! [        [        4 a'     U R                  S5      s $ ! [         a      U $ f = f[         a     U $ f = f)Nstring_escapeunicode_escape)encodeLookupErrorrB   rD   )texts    r   _escape_stringr      sl    {{?++# 	;;/00 	 K	   	Ks/    A7A
AAAAAc                    US   nX@R                  S5      ;   a  [        R                  SU5        g U[        ;   a  [	        XX5        g U S   nXE;   a  [        XT   U S   UUU S   U5        g U(       aT  [        US5      nS[        U5      -  nU[        :X  a  [        R                  S	UU5        g [        R                  S
UU5        g [        R                  SU5        g )Nr?   excludedzcontent_type "%s" is excludedr]   rJ   r      z'%s...'z)Unhandled non-multipart (%s) userdata: %sz0Unhandled unknown content-type (%s) userdata: %szEmpty payload of type %s)
getrE   rF   PART_CONTENT_TYPESrn   rQ   r|   r   NOT_MULTIPART_TYPEwarning)rJ   rK   rL   rM   rP   r]   r{   detailss           r   walker_callbackr      s    >*Lxx
++		1<@))d(DJH"L	
 
'4~e45--KK; KKB 			,l;r   c                 d   SnU R                  5        H  nUR                  5       S:X  a  M  UR                  5       nUc  [        nUR	                  5       nU(       d	  [
        U-  n[        U5      n[        R                  U5        XWS'   [        R                  " U5      nU" X&X5        US-   nM     g )Nr   	multipartr?   r>   )walkget_content_maintypeget_content_type
OCTET_TYPEget_filenamePART_FN_TPLdictrE   rF   r   fully_decoded_payload)	msgcallbackrJ   partnumpartctyperK   rM   rL   s	            r   r   r      s    G
$$&+5%%'=E$$&"g.Ht*		'"',,T22A+% r   c                     [        U S5      (       d  [        U SS5        [        U S5      (       d  [        U SU5        U $ U R                  nU(       a   U[        ;  a  [        R                  SX5        U $ )Nr   r>   r   z&Handler %s has an unknown frequency %s)r(   setattrr   r   rE   r   )rI   def_freqfreqs      r   re   re     sf    3)**&*3$$[(+
 J }}D+KK@#LJr   c                      [         R                  " U 5      R                  5       nUR	                  5       n[
         H$  nUR                  U5      (       d  M  [        U   s  $    U$ ! [         a    Us $ f = fr   )r   decode_binarylowerrx   lstripINCLUSION_SRCH
startswithr+   )rL   default
payload_lcr   s       r   type_from_starts_withr   #  ss    ''0668
 ""$J  &&&t,,  N  s   $A& &A54A5r   )'r8   loggingr`   	cloudinitr   r   r   cloudinit.settingsr   r   r   	getLoggerr4   rE   r   r   rX   rT   CONTENT_SIGNALSr   r_   r   r+   sortedlistkeysr   ABCMetar   rQ   rV   rY   rn   r|   r   r   r   re   r   r;   r   r   <module>r      s     	 0 0 D D! ,  (
  +. ** *   %.
((,84'
 $A'H#@! ( 		!	!	#$+?
$ $.-
`88
4$$$<R. !- 		r   