
                             S r SSKJrJr  SSKJr  SSKrSSKJrJ	r	    " S S\5      r\" \\R&                  5      rS	 rS
 rSS jrg)z6
some helper functions that might be generally useful
    )absolute_importprint_function)partialN   )	text_typebinary_typec                   *    \ rS rSrSrS rS rS rSrg)LazyEval   a  
Lightweight wrapper around lazily evaluated func(*args, **kwargs).

func is only evaluated when any attribute of its return value is accessed.
Every attribute access is passed through to the wrapped value.
(This only excludes special cases like method-wrappers, e.g., __hash__.)
The sole additional attribute is the lazy_self function which holds the
return value (or, prior to evaluation, func and arguments), in its closure.
c                 L   ^ ^^^ UUUU 4S jn[         R                  T SU5        g )Nc                  P   >^  T" T0 TD6m [         R                  TSU 4S j5        T $ )N	lazy_selfc                     > T $ N )return_values   #lib/third_party/ruamel/yaml/util.py<lambda>6LazyEval.__init__.<locals>.lazy_self.<locals>.<lambda>#   s    ,    object__setattr__)r   argsfunckwargsselfs   @r   r   $LazyEval.__init__.<locals>.lazy_self    s+    00Lt[2FGr   r   r   )r   r   r   r   r   s   ```` r   __init__LazyEval.__init__   s!    	  	  	4i8r   c                 `    [         R                  U S5      nUS:X  a  U$ [        U" 5       U5      $ )Nr   )r   __getattribute__getattr)r   namer   s      r   r"   LazyEval.__getattribute__(   s1    ++D+>	;y{D))r   c                 8    [        U R                  5       X5        g r   )setattrr   )r   r$   values      r   r   LazyEval.__setattr__/   s     $.r   r   N)	__name__
__module____qualname____firstlineno____doc__r   r"   r   __static_attributes__r   r   r   r
   r
      s    9*/r   r
   c                    SSK Jn  S n[        U [        5      (       a  U nO7[        U [        5      (       a  U R                  S5      nOU R                  5       nSnSnSnSnSn	UR                  5        H  n
U
R                  5       nUR                  5       nUR                  S5      (       a8  U" U
5      nX-
  nUS-   nX   S:X  a  US-  nX   S:X  a  M  X   S	:X  a  Mk  X-
  n  OpUc,  Ub)  U(       a"  SnX   S
;   a  US-  nX   S
;   a  M  X:  a  X-
  nUR                  S5      (       a%  U" U
5      n	SnX   S:X  a  US-  nX   S:X  a  M  UnM  SnM     Uc  Ub  UnU" U40 UD6Xg4$ )a`  guess the indent and block sequence indent of yaml stream/string

returns round_trip_loaded stream, indent level, block sequence indent
- block sequence indent is the number of spaces before a dash relative to previous indent
- if there are no block sequences, indent is taken from nested mappings, block sequence
  indent is unset (None) in that case
r   )round_trip_loadc                 t    SnU[        U 5      :  a&  X   S:X  a  US-  nU[        U 5      :  a
  X   S:X  a  M  U$ )Nr    r   )len)lidxs     r   leading_spaces.load_yaml_guess_indent.<locals>.leading_spacesH   s=    CFlqv}1HC CFlqv}
r   zutf-8Nr   z- r3   #z -:)mainr1   
isinstancer   r   decoderead
splitlinesrstriplstrip
startswithendswith)streamkwr1   r7   yaml_str
map_indentindentblock_seq_indentprev_line_key_only
key_indentlinerlinellinel_sr6   s                  r   load_yaml_guess_indentrP   <   s    & &)$$	FK	(	(==);;=JFJ##%D!! &C"/'C)s"q )s"yC%F"4"@UC)t#q )t#' 5
>>#'-JC)s"q )s"!$!5 &6 ~*08*r*FDDr   c              #   N  #    SSK Jn  [        X5      (       d   eU R                   H  nUR	                  5       (       d  M  Uv   M      [        U 5       H  nUR	                  5       (       d  M  Uv   M      U R                   H  nUR	                  5       (       d  M  Uv   M      g7f)zj
walks over a ConfigObj (INI file with comments) generating
corresponding YAML output (including comments
r   )	ConfigObjN)	configobjrR   r<   initial_commentstrip_walk_sectionfinal_comment)cfgrR   css       r   configobj_walkerr[   z   s~      $c%%%%  7799G ! 37799G   7799G s   ;B%)B%.*B%	B%c              #     #    SSK Jn  [        X5      (       d   eSU-  nU R                   H  nU R                  U    H  nX5R                  5       -   v   M     X   nSU;   a/  US-   nSU-   UR                  5       R                  SSU-   5      -   nOSU;   a  SUR                  SS5      -   S-   nS	R                  X4U5      nU R                  U   nU(       a  US
U-   -  nUv   M     U R                   Hz  nU R                  U    H  nX5R                  5       -   v   M     SR                  X45      nU R                  U   nU(       a  US
U-   -  nUv   [        X   US-   S9 H  n	U	v   M	     M|     g 7f)Nr   )Sectionz  
z|
r:   'z''z{0}{1}: {2}r3   z{0}{1}:r   )level)rS   r]   r<   scalarscommentsrU   replaceformatinline_commentssectionsrV   )
rZ   r`   r]   rH   r$   rY   xirL   vals
             r   rV   rV      sk    !a!!!!U]F		D!A779$$ "GA:A
QWWY..ueai@@AAXqyyu--4A$$V15d#D1HD
  

D!A779$$ "  .d#D1HD
 	:CI ; s   E1E3)r   )r.   
__future__r   r   	functoolsr   recompatr   r   typingAnyDictOptionalListTextStreamTextTyper   r
   compileRegExprP   r[   rV   r   r   r   <module>rw      sK    7  	 *
/v /B 
2::	&;E|(r   