a >h2@sXddlmZddlmZddZddZGdddZGd d d eZGd d d Zd S))Action) ConfigParsercCst|}|tup|tuS)z@Return true if val is an instance of a known sequence type. )typelisttuple)valZval_typer//usr/lib/python3.9/site-packages/sos/options.py_is_seq sr cCs$|}|dvrdS|dvr dSdS)N)trueZonZyesT)ZfalseZoffnoF)lower)rZ_valrrr str_to_bools rc@seZdZddZddZd dd Zd d Zd d ZifddZe ifddZ e ddZ ddZ ddZ d!ddZd"ddZddZdS)# SoSOptionscCsdd}t||rt||}t||}||r6||rL|sL||jvrxt|sxt||||rj|j|q|j|nt|rt||||dS)NcSs|dkp|duS)Nr)rrrr _unset sz%SoSOptions._merge_opt.._unset)hasattrgetattr _nondefaultr setattrdiscardadd)selfoptsrc is_defaultrZnewvalueZoldvaluerrr _merge_opts"    zSoSOptions._merge_optcCs0t|tst|}|jD]}||||qdSN) isinstancedictvars arg_namesr)rrrargrrr _merge_opts7s  zSoSOptions._merge_optsF rc sz|}d}jD]}||||7}q||fddjD}|sVdd|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"rrr Lz$SoSOptions.__str..cSs"g|]}t|rd|n|qS),)r joinr%vrrr r'Or(cSs&g|]}t|trd|dn|qS)')rstrr+rrr r'Rr()r!stripr) rquotesepprefixsuffixargsZarg_fmtr"Zvalsrr&r Z__str=s   zSoSOptions.__strcCs|Sr_SoSOptions__strr&rrr __str__VszSoSOptions.__str__cCs|jdddddS)NTz, z SoSOptions())r0r1r2r3r5r&rrr __repr__Ys zSoSOptions.__repr__cKsh||_t||_t|_|jD]}t|||j|q"|D] \}}|j|t|||qBdS)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!setrritemsappend)rr:kwargsr"kwargrrr __init__]s   zSoSOptions.__init__cCs*tfit|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 r:T)rr r#)clsr4r:Zoptsrrr from_argsus  zSoSOptions.from_argscsRd}d}|vrdgS|vr@fddtdt|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). )Z alloptionszallow-system-changeszall-logsZbatchZbuilddebugZ experimentalz list-pluginsz list-presetsz list-profilesz no-reportz no-env-varsquietZverify)verbose--csg|]}dqS)rGr)r%drrr r'r(z+SoSOptions._opt_to_args..r=)rangeint)rBrrZno_valuecountrrIr _opt_to_argss zSoSOptions._opt_to_argscCst|j|t|r|St|j|tr6t|dSt|j|trpt|}|durltd|d|d|St|j|trt|S|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 r)Nz Value of 'z' in z# must be True or False or analagous) rr:rrsplitboolr ExceptionrL)rkeyrZconfrrr _convert_to_types zSoSOptions._convert_to_typec sfdd}t}zty}z&tdd|jdWYd}~n d}~00|d |||||d rtd rtd r|d D]0\}}| d dj vr̈j |d|qdS)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||rt||}d|vr6t|d|d<dddd}t|D]<}d|vrl||||dd<||vrJ|||||<qJ|D]b\}}t|t r|d kr|d d }|j vrt d |d |dq ||}t ||qdS)NrF verbosityZlabelplugoptsZprofiles)nameZ plugin_optionZprofile-_keywordsr$rzUnknown option 'z' in section 'r-) has_sectionrr=r;rLpoprreplacerr.r:printrSr)sectionconfigodictZ rename_optsrRr config_filerrr _update_from_sections*     z9SoSOptions.update_from_conf.._update_from_sectionzutf-8)encodingNz+WARNING: Unable to read configuration file z : globalZplugin_optionsrU skip_plugins.rrJ) ropenZ read_fileOSErrorr]r4rZrr=rOrgrUr>) rrbZ componentrcr_ferRrrrar update_from_confs& ".  zSoSOptions.update_from_confTcCs<|jD]0}t||sqt||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)rrZ skip_defaultr"rrr merges  zSoSOptions.mergecCs6i}|jD]&}t||}|r(|dvr(d}|||<q |S)zReturn this ``SoSOptions`` option values as a dictionary of argument name to value mappings. :returns: a name:value dictionary of option values. Z add_presetZ del_presetZdescZnoteN)r!r)rZ preset_filterr`r"valuerrr rs   zSoSOptions.dictcsLfddfddddtddd }fd d |DS) 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"]`` csLd}|r||vrdS|dkr$|r$dS|jvrHt|tj|krHdSdS)z. Test for non-null option values. )FalseNonez[]z""z''0FrUT)r:r.)rVrpZ null_valuesr&rr has_values   z%SoSOptions.to_args..has_valuecs*|dvr dS|dvr |dkr dS||S)z8 Filter out preset and null-valued options. roF)Zlog_sizeZplugin_timeoutZ cmd_timeoutrTr)rVrp)rtrr filter_opt!sz&SoSOptions.to_args..filter_optcSs||drdt|d}|S|dd}t|r.argifycSs|dS)Nrr)xrrr @r(z$SoSOptions.to_args..)rRcs$g|]\}}||r||qSrr)r%nr,)rxrurr r'Ar(z&SoSOptions.to_args..)sortedrr=)rZ opt_itemsr)rxrurtrr to_args s zSoSOptions.to_argsN)Fr$rr)T)T)__name__ __module__ __qualname__rr#r6r7r9rA classmethodrCrNrSrmrnrr}rrrr rs    >  rc@seZdZdZdddZdS) SosListOptionz0Allow to specify comma delimited list of pluginsNcCs<t|d}t||jr*|t||j7}t||j|dS)Nr))rrOrdestr)rparser namespacevalues option_stringr=rrr __call__Hs zSosListOption.__call__)N)r~rr__doc__rrrrr rDsrc@seZdZdZdddZdS) ClusterOptionz6Used to store/manipulate options for cluster profiles.NcCs"||_||_||_||_||_dSr)rVrpopt_typecluster description)rrVrprrrrrr rARs zClusterOption.__init__)N)r~rrrrArrrr rOsrN) argparserZ configparserrr rrrrrrrr  s   )