
    ~ g2                     f    S SK Jr  S SKJr  S rS r " S S5      r " S S\5      r " S	 S
5      rg)    )Action)ConfigParserc                 F    [        U 5      nU[        L =(       d    U[        L $ )z@Return true if val is an instance of a known sequence type.
    )typelisttuple)valval_types     -/usr/lib/python3/dist-packages/sos/options.py_is_seqr      s"     CyHt0x500    c                 @    U R                  5       nUS;   a  gUS;   a  gg )N)trueonyesT)falseoffnoF)lower)r	   _vals     r   str_to_boolr      s(    99;D$$%%r   c                       \ rS rSrS rS rSS jrS rS r0 4S jr	\
0 4S j5       r\
S	 5       rS
 rS rSS jrSS jrS rSrg)
SoSOptions   c                    S n[        X!5      (       a  [        X!5      n[        X5      nU" U5      (       a  U" U5      (       a&  U(       d  XR                  ;  a[  [        U5      (       dK  [	        XU5        U(       a  U R                  R                  U5        g U R                  R                  U5        g [        U5      (       a  [	        XXV-   5        g g g )Nc                 "    U S:H  =(       d    U S L $ )N  )r	   s    r   _unset%SoSOptions._merge_opt.<locals>._unset    s    2I,-r   )hasattrgetattr_nondefaultr   setattrdiscardadd)selfoptsrc
is_defaultr   newvalueoldvalues          r   
_merge_optSoSOptions._merge_opt   s    	. 3s(Ht)H
 x  )9)9,,,wx7H7H8,$$,,S1$$((-""8#67 #! r   c                     [        U[        5      (       d  [        U5      nU R                   H  nU R	                  X1U5        M     g N)
isinstancedictvars	arg_namesr-   )r'   r)   r*   args       r   _merge_optsSoSOptions._merge_opts7   s4    #t$$s)C>>COOCj1 "r   c                    UnSnU R                    H  nXWU-   U-   -  nM     UR                  U5        U R                    Vs/ s H  n[        X5      PM     nnU(       d4  U V	s/ s H&  n	[        U	5      (       a  SR	                  U	5      OU	PM(     nn	O-U V	s/ s H   n	[        U	[        5      (       a  SU	 S3OU	PM"     nn	U[        U5      -  R                  U5      U-   $ s  snf s  sn	f s  sn	f )a  Format a SoSOptions object as a human or machine readable string.

:param quote: quote option values
:param sep: list separator string
:param prefix: arbitrary prefix string
:param suffix: arbitrary suffix string
:param literal: print values as Python literals
z=%s,')r4   stripr"   r   joinr1   strr   )
r'   quotesepprefixsuffixargsarg_fmtr5   valsvs
             r   __strSoSOptions.__str=   s     >>C'MC''D "

3.2nn=ns"n=>BCd71::CHHQK14dDCD DHH4a
1c 2 2as!H94DHuT{"))#.77 > D Is   C #-C%'C*c                 "    U R                  5       $ r0   _SoSOptions__strr'   s    r   __str__SoSOptions.__str__V   s    zz|r   c                 &    U R                  SSSSS9$ )NTz, zSoSOptions())r>   r?   r@   rA   rI   rK   s    r   __repr__SoSOptions.__repr__Y   s!    zz$}!$  & 	&r   c                 B   Xl         [        UR                  5       5      U l        [	        5       U l        U R                    H  n[        XU R                   U   5        M     UR                  5        H,  u  p4U R                  R                  U5        [        XU5        M.     g)a  Initialise a new ``SoSOptions`` object from keyword arguments.

Initialises the new object with values taken from keyword
arguments matching the names of ``SoSOptions`` attributes.

A ``ValueError`` is raised is any of the supplied keyword
arguments does not correspond to a known ``SoSOptions`
attribute name.

:param *kwargs: a list of ``SoSOptions`` keyword args.
:returns: the new ``SoSOptions`` object.
N)	arg_defaultsr   keysr4   setr#   r$   itemsappend)r'   rS   kwargsr5   kwargs        r   __init__SoSOptions.__init__]   s~     )l//125$$CDt0056 % !,,.JCNN!!#&Du% )r   c                 Z    [        S0 [        U5      DSU0D6nUR                  US5        U$ )zInitialise a new SoSOptions object from a ``Namespace``
obtained by parsing command line arguments.

:param args: parsed command line arguments
:returns: an initialised SoSOptions object
:returntype: SoSOptions
rS   Tr   )r   r3   r6   )clsrB   rS   optss       r   	from_argsSoSOptions.from_argsu   s/     BDJB\Bt$r   c                     SnSnX;   a  SU 3/$ X;   a)  [        S[        U5      5       Vs/ s H  nSU 3PM
     sn$ SU SU 3/$ s  snf )zConvert a named option and optional value to command line
argument notation, correctly handling options that take
no value or that have special representations (e.g. verify
and verbose).
)
alloptionszallow-system-changeszall-logsbatchbuilddebugexperimentalzlist-pluginszlist-presetszlist-profilesz	no-reportzno-env-varsquietverify)verbose--r   =)rangeint)r]   r(   r	   no_valuecountds         r   _opt_to_argsSoSOptions._opt_to_args   sk    

 ?J<<(-aS(:;(:1bJ(:;;SE3% !! <s   Ac                    [        U R                  U   [        U5      5      (       a  U$ [        U R                  U   [        5      (       a  [        UR	                  S5      5      $ [        U R                  U   [
        5      (       a"  [        U5      nUc  [        SU SU S35      eU$ [        U R                  U   [        5      (       a  [        U5      $ U$ )an  Ensure that the value read from a config file is the proper type
for consumption by the component, as defined by arg_defaults.

Params:
    :param key:         The key in arg_defaults we need to match the
                        type of
    :param val:         The value to be converted to a particular type
    :param conf:        File values are being loaded from
r9   z
Value of 'z' in z# must be True or False or analagous)	r1   rS   r   r   splitboolr   	Exceptionrm   )r'   keyr	   confs       r   _convert_to_typeSoSOptions._convert_to_type   s     d'',d3i88Jd'',d33		#''d'',d33c"C{ U4& 1   ! ! Jd'',c22s8O
r   c                 X  ^ ^ UU 4S jn[        5       n [        TSS9 nUR                  UT5        SSS5        U" SU5        U" X$5        UR                  S	5      (       a  [        T S
5      (       ar  [        T S5      (       a`  UR                  S	5       HJ  u  pxUR                  S5      S   T R                  ;  d  M)  T R                  R                  US-   U-   5        ML     gggg! , (       d  f       N= f! [         a(  n[	        ST SUR
                  S    35         SnANSnAff = f)zRead the provided config_file and update options from that.

Positional arguments:

    :param config_file:             Filepath to the config file
    :param component:               Which component (section) to load
c                   > UR                  U 5      (       Ga2  [        UR                  U 5      5      nSUR                  5       ;   a  [	        UR                  S5      5      US'   SSSS.n[        U5       HI  nSU;   a#  UR                  U5      X$R                  SS5      '   XC;   d  M3  UR                  U5      X#U   '   MK     UR                  5        Ht  u  pE[        U[        5      (       a  US	:w  a  UR                  S
S5      nUTR                  ;  a  [        SU SU  S35        MV  TR                  XET5      n[        TXE5        Mv     g g )Nri   	verbositylabelplugoptsprofiles)nameplugin_optionprofile-_keywords r   zUnknown option 'z' in section 'r:   )has_sectionr2   rV   rT   rm   popr   replacer1   r=   rS   printry   r$   )sectionconfigodictrename_optsrw   r	   config_filer'   s         r   _update_from_section9SoSOptions.update_from_conf.<locals>._update_from_section   s2   !!'**V\\'23

,),UYYy-A)BE+&
 $%/)
  ;Ccz7<yy~kk#s34)27))C.#./	 ' !&HC "#s++z0A!kk#r2$"3"33  0^G9ANO //+FCD#+ !.' +r   zutf-8)encodingNz+WARNING: Unable to read configuration file z :    globalplugin_optionsr   skip_plugins.r   rk   )r   open	read_fileOSErrorr   rB   r   r!   rV   rt   r   r   rW   )	r'   r   	componentr   r   ferw   r	   s	   ``       r   update_from_confSoSOptions.update_from_conf   s    	,D 	kG4  K0 5 	Xv.Y/.//GD*4M4MD.11"LL)9:yy~a(D,=,==MM((sS9 ; 2 5N/ 54 	=k]#66!9+ 	s3   
C7 C&C7 &
C40C7 4C7 7
D)D$$D)c                     U R                    H<  n[        X5      (       d  M  [        X5      c	  U(       a  M*  U R                  X1S5        M>     g)a  Merge another set of ``SoSOptions`` into this object.

Merge two ``SoSOptions`` objects by setting unset or default
values to their value in the ``src`` object.

:param src: the ``SoSOptions`` object to copy from
:param is_default: ``True`` if new default values are to be set.
NF)r4   r!   r"   r-   )r'   r)   skip_defaultr5   s       r   mergeSoSOptions.merge   s=     >>C3$$s ,LL%0	 "r   c                 l    0 nU R                    H!  n[        X5      nU(       a  US;   a  SnXBU'   M#     U$ )zReturn this ``SoSOptions`` option values as a dictionary of
argument name to value mappings.

:returns: a name:value dictionary of option values.

add_preset
del_presetdescnoteN)r4   r"   )r'   preset_filterr   r5   values        r   r2   SoSOptions.dict   s@     >>CD&EFF E#J " r   c                    ^ ^ U 4S jmU4S jnS n[        T R                  5       R                  5       S S9nU VVs/ s H  u  pEU" XE5      (       d  M  U" XE5      PM     snn$ s  snnf )zReturn command arguments for this object.

Return a list of the non-default options of this ``SoSOptions``
object in ``sos report`` command line argument notation:

    ``["--all-logs", "-vvv"]``

c                    > SnU(       a  X;   a  gU S:X  a  U(       a  gU TR                   ;   a&  [        U5      [        TR                   U    5      :X  a  gg)z-Test for non-null option values.
            )FalseNonez[]z""z''0Fr   T)rS   r=   )r   r   null_valuesr'   s      r   	has_value%SoSOptions.to_args.<locals>.has_value  sS     CKE0z!et(((u:T%6%6t%<!== r   c                 <   > U S;   a  gU S;   a  US:X  a  gT" X5      $ )z7Filter out preset and null-valued options.
            r   F)log_sizeplugin_timeoutcmd_timeoutr   Tr   )r   r   r   s     r   
filter_opt&SoSOptions.to_args.<locals>.filter_opt!  s/     CCDDA:T))r   c                    U R                  S5      (       a  S[        U5      S-  -   nU$ U R                  SS5      n [        U5      (       a  SR	                  U5      OUnUSLa  U  SU 3nOU n[        U5      S:  a  S	U-   nU$ SU-   nU$ )
zCConvert sos option notation to command line arguments.
            r}   r   rE   r   r9   Tr   r   rj   )
startswithrm   r   r   r<   len)r   r   r5   r(   s       r   argify"SoSOptions.to_args.<locals>.argify,  s     {++CJ,,
<<S)D'.u~~CHHUO5ED aw' #C1$*CJ 36)CJr   c                     U S   $ )Nr   r   )xs    r   <lambda>$SoSOptions.to_args.<locals>.<lambda>@  s    adr   )rw   )sortedr2   rV   )r'   r   r   	opt_itemsnrE   r   s   `     @r   to_argsSoSOptions.to_args  sV    			*	( 499;,,.NC	+4I9!
18Hq9IIIs   A%A%)r#   rS   r4   N)Fr   r   r   )T)__name__
__module____qualname____firstlineno__r-   r6   rJ   rL   rP   rZ   classmethodr_   rq   ry   r   r   r2   r   __static_attributes__r   r   r   r   r      sk    80282& %' &0 *, 
 
 " "$2<:|1 6Jr   r   c                   "    \ rS rSrSrSS jrSrg)SosListOptioniD  z0Allow to specify comma delimited list of pluginsNc                     [        UR                  S5      5      n[        X R                  5      (       a  U[        X R                  5      -  n[	        X R                  U5        g )Nr9   )r   rt   r"   destr$   )r'   parser	namespacevaluesoption_stringrV   s         r   __call__SosListOption.__call__H  sE    V\\#&'9ii((WY		22E	99e,r   r   r0   )r   r   r   r   __doc__r   r   r   r   r   r   r   D  s
    :-r   r   c                   "    \ rS rSrSrSS jrSrg)ClusterOptioniO  z6Used to store/manipulate options for cluster profiles.Nc                 @    Xl         X l        X0l        X@l        XPl        g r0   )r   r   opt_typeclusterdescription)r'   r   r   r   r   r   s         r   rZ   ClusterOption.__init__R  s    	
 &r   )r   r   r   r   r   r0   )r   r   r   r   r   rZ   r   r   r   r   r   r   O  s
    @'r   r   N)	argparser   configparserr   r   r   r   r   r   r   r   r   <module>r      s<     %1dJ dJN	-F -' 'r   