o id,5@sdddlmZddlmZmZmZmZddZddZGdddZ Gd d d eZ Gd d d Z d S))Action) ConfigParser ParsingErrorErrorDuplicateOptionErrorcCst|}|tup |tuS)z@Return true if val is an instance of a known sequence type. )typelisttuple)valval_typer -/usr/lib/python3/dist-packages/sos/options.py_is_seqsrcCs$|}|dvr dS|dvrdSdS)N)trueonyesT)falseoffnoF)lower)r _valr r r str_to_bools rc@seZdZddZddZd dd Zd d Zd d ZifddZe ifddZ e ddZ ddZ ddZ d!ddZd!ddZddZdS)" SoSOptionscCsdd}t||rLt||}t||}||r||r&|s&||jvr>t|s>t||||r6|j|dS|j|dSt|rNt||||dSdSdS)NcSs|dkp|duS)Nr )r r r r _unset"sz%SoSOptions._merge_opt.._unset)hasattrgetattr _nondefaultrsetattrdiscardadd)selfoptsrc is_defaultrnewvalueoldvaluer r r _merge_opt!s     zSoSOptions._merge_optcCs0t|ts t|}|jD] }||||q dSN) isinstancedictvars arg_namesr')r!r#r$argr r r _merge_opts9s  zSoSOptions._merge_optsF rc sz|}d}jD] }||||7}q||fddjD}|s+dd|D}ndd|D}|t|||S)aIFormat 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=%scsg|]}t|qSr )r).0r-r!r r Nsz$SoSOptions.__str..cSs"g|] }t|r d|n|qS),)rjoinr0vr r r r2Q"cSs"g|] }t|tr d|n|qS)z'%s')r)strr5r r r r2Tr7)r,stripr ) r!quotesepprefixsuffixargsarg_fmtr-valsr r1r __str?s   zSoSOptions.__strcCs|Sr(_SoSOptions__strr1r r r __str__XszSoSOptions.__str__cCs|jdddddS)NTz, z SoSOptions())r:r;r<r=rBr1r r r __repr__[s zSoSOptions.__repr__cKsh||_t||_t|_|jD] }t|||j|q|D]}|j|t||||q!dS)aInitialise 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_defaultsrkeysr,setrrappend)r!rGkwargsr-r r r __init___s    zSoSOptions.__init__cCs*tdit|d|i}||d|S)a Initialise 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 rGTNr )rr+r.)clsr>rGoptsr r r from_argsws zSoSOptions.from_argscsPd}d}|vr dgS|vrfddtdt|DSdd|gS) 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). ) alloptionszallow-system-changeszall-logsbatchbuilddebug experimentalz list-pluginsz list-presetsz list-profilesz no-reportz no-env-varsquietverify)verbose--%scsg|]}dqS)rXr )r0dr"r r r2sz+SoSOptions._opt_to_args..r--=)rangeint)rMr"r no_valuecountr rZr _opt_to_argss zSoSOptions._opt_to_argscCst|j|t|r |St|j|trdd|dDSt|j|tr8t|}|dur6td||f|St|j|trUzt|WSt yTtd||fw|S)aEnsure 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 cSg|]}|qSr r r5r r r r2z/SoSOptions._convert_to_type..r3Nz6Value of '%s' in %s must be True or False or analagousz#Value of '%s' in %s must be integer) r)rGrrsplitboolr Exceptionr^ ValueError)r!keyr confr r r _convert_to_types,   zSoSOptions._convert_to_typec sLfdd}t}zDzt}||Wdn1s!wYWn%ty>}z td|j|jfd}~wttfyLtdwWnt t fym}zt d|j dfWYd}~nd}~ww|d||||| d rtd r|d D]\}} |d d jvrj|d | qdSdSdS)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 cs||rwt||}d|vrt|d|d<dddd}t|D]}d|vr6||||dd<||vrC|||||<q%|D]0\}}t|t r[|d kr[|d d }|j vrit d ||fqH ||}t ||qHdSdS) NrW verbositylabelplugoptsprofiles)name plugin_optionprofile-_keywordsr/rz#Unknown option '%s' in section '%s') has_sectionr*itemsrHr^poprreplacer)r8rGprintrjr)sectionconfigodict rename_optsrhr  config_filer!r r _update_from_sections4     z9SoSOptions.update_from_conf.._update_from_sectionNz0Duplicate option '%s' in section '%s' in file %sz%Failed to parse configuration file %sz2WARNING: Unable to read configuration file %s : %sglobalplugin_optionsrm.rr\)ropen read_filerexitoptionrzrrOSErrorIOErrorryr>rurrvrd skip_pluginsrmrJ) r!r componentrr{ferrerhr r r~r update_from_confsH #     zSoSOptions.update_from_confTcCs<|jD]}t||s qt||dus|s|||dqdS)aNMerge 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)r,rrr')r!r# skip_defaultr-r r r merges zSoSOptions.mergecCs6i}|jD]}t||}|r|dvrd}|||<q|S)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_presetdescnoteN)r,r)r! preset_filterr|r-valuer r r r*s   zSoSOptions.dictcsLfddfddddtddd }fd d |DS) zReturn command arguments for this object. Return a list of the non-default options of this ``SoSOptions`` object in ``sosreport`` command line argument notation: ``["--all-logs", "-vvv"]`` csLd}|r||vr dS|dkr|rdS|jvr$t|tj|kr$dSdS)z. Test for non-null option values. )FalseNonez[]z""z''0FrmT)rGr8)ror null_valuesr1r r has_value!s   z%SoSOptions.to_args..has_valuecs*|dvrdS|dvr|dkrdS||S)z8 Filter out preset and null-valued options. rF)log_sizeplugin_timeout cmd_timeoutrTr )ror)rr r filter_opt.s  z&SoSOptions.to_args..filter_optcSs~|drdt|d}|S|dd}t|rd|n|}|dur+d||f}n|}t|dkr9d |}|Sd|}|S) zD Convert sos option notation to command line arguments. rkrrr6rsr3Tz%s %srr[) startswithr^rxrr4len)rorr-r"r r r argify9s  z"SoSOptions.to_args..argifycSs|dS)Nrr )xr r r Msz$SoSOptions.to_args..)rhcs$g|]\}}||r||qSr r )r0nr6)rrr r r2Ns$z&SoSOptions.to_args..)sortedr*rv)r! opt_itemsr )rrrr!r to_argss  zSoSOptions.to_argsN)Fr/rr)T)__name__ __module__ __qualname__r'r.rCrDrFrL classmethodrOrarjrrr*rr r r r rs     D  rc@eZdZdZdddZdS) SosListOptionz0Allow to specify comma delimited list of pluginsNcCsBdd|dD}t||jr|t||j7}t||j|dS)NcSrbr r )r0r"r r r r2Vrcz*SosListOption.__call__..r3)rdrdestr)r!parser namespacevalues option_stringrvr r r __call__Us zSosListOption.__call__r()rrr__doc__rr r r r rQsrc@r) ClusterOptionz6Used to store/manipulate options for cluster profiles.NcCs"||_||_||_||_||_dSr()roropt_typecluster description)r!rorrrrr r r rL_s  zClusterOption.__init__r()rrrrrLr r r r r\srN) argparser configparserrrrrrrrrrr r r r s  4