eaiovnaovbqoebvqoeavibavo 3 f,5@sdddlmZddlmZmZmZmZddZddZGdddZ Gd d d eZ Gd d d Z d S))Action) ConfigParser ParsingErrorErrorDuplicateOptionErrorcCst|}|tkp|tkS)z@Return true if val is an instance of a known sequence type. )typelisttuple)valZval_typer /usr/lib/python3.6/options.py_is_seqsr cCs(|j}|d krdS|d kr dSdSdS) NtrueonyesTfalseoffnoF)rrr)rrr)lower)r Z_valr r r str_to_bools rc@seZdZddZddZd dd Zd d Zd d ZifddZe ifddZ e ddZ ddZ ddZ d!ddZd"ddZddZdS)# SoSOptionscCsdd}t||rt||}t||}||r8|| sP|sP||jkr|t| r|t||||rn|jj|q|jj|nt|rt||||dS)NcSs|dkp|dkS)Nr )r r r r _unset"sz%SoSOptions._merge_opt.._unset)hasattrgetattr _nondefaultr setattrdiscardadd)selfoptsrc is_defaultrZnewvalueZoldvaluer r r _merge_opt!s    zSoSOptions._merge_optcCs4t|tst|}x|jD]}|j|||qWdS)N) isinstancedictvars arg_namesr#)rr!r"argr r r _merge_opts9s  zSoSOptions._merge_optsF rc s~|}d}xjD]}||||7}qW|j|fddjD}|sZdd|D}ndd|D}|t|j||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()rr r Nsz$SoSOptions.__str..cSs"g|]}t|rdj|n|qS),)r join)r+vr r r r,QscSs"g|]}t|trd|n|qS)z'%s')r$str)r+r/r r r r,Ts)r'stripr ) rquotesepprefixsuffixargsZarg_fmtr(valsr )rr Z__str?s   zSoSOptions.__strcCs|jS)N)_SoSOptions__str)rr r r __str__XszSoSOptions.__str__cCs|jdddddS)NTz, z SoSOptions())r2r3r4r5)r8)rr r r __repr__[s zSoSOptions.__repr__cKsp||_t|j|_t|_x |jD]}t|||j|q$Wx,|jD] }|jj|t||||qHWdS)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)rr<kwargsr(r r r __init___s   zSoSOptions.__init__cCs&tft|d|i}|j|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))clsr6r<Zoptsr r r from_argsws  zSoSOptions.from_argscsPd}d}|krdgS|kr>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). alloptionsallow-system-changesall-logsbatchbuilddebug experimental list-plugins list-presets list-profiles no-report no-env-varsquietverifyverbosez--%scsg|] }dqS)z--%sr )r+d)r r r r,sz+SoSOptions._opt_to_args..rz--=)rDrErFrGrHrIrJrKrLrMrNrOrPrQ)rR)rangeint)rBr r Zno_valuecountr )r r _opt_to_argss zSoSOptions._opt_to_argsc Cst|j|t|r|St|j|tr.r-Nz6Value of '%s' in %s must be True or False or analagousz#Value of '%s' in %s must be integer) r$r<rrsplitboolr ExceptionrV ValueError)rkeyr Zconfr r r _convert_to_types$ zSoSOptions._convert_to_typec sHfdd}t}yy$t}|j|WdQRXWnZtk rr}ztd|j|jfWYdd}~Xn$ttfk rtdYnXWn<t t fk r}zt d|j dfWYdd}~XnX|d|||||j d otd rDxB|jd D]4\}} |jd d jkr jj|d | q WdS)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|j|rt|j|}d|jkr6t|jd|d<dddd}xHt|D]<}d|krn|j|||jdd<||krL|j||||<qLWxh|jD]\\}}t|t r|d kr|jd d }|j krt d ||fqj ||}t ||qWdS) NrR verbosityZlabelplugoptsZprofiles)nameZ plugin_optionZprofile-_keywordsr*rz#Unknown option '%s' in section '%s') has_sectionr%itemsr=rVpoprreplacer$r0r<printr^r)sectionconfigodictZ rename_optsr]r ) config_filerr r _update_from_sections*     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 : %sglobalZplugin_optionsr`.rrT)ropenZ read_filerexitZoptionrjrrOSErrorIOErrorrir6rerrfrYZ skip_pluginsr`r?) rrmZ componentrnrkferrer]r r )rmrr update_from_confs, # "$  zSoSOptions.update_from_confTcCsBx<|jD]2}t||sqt||dk s,| r|j||dqWdS)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#)rr!Z skip_defaultr(r r r merges  zSoSOptions.mergecCs:i}x0|jD]&}t||}|r*|dkr*d}|||<q W|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}r~)r'r)rZ preset_filterrlr(valuer r r r%s   zSoSOptions.dictcsLfddfddddtjjddd }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"]`` csNd }| s||krdS|dkr&|r&d S|jkrJt|tj|krJdSd S) z. Test for non-null option values. FalseNone[]""''0Fr`T)rrrrrr)r<r0)rarZ null_values)rr r has_value!s  z%SoSOptions.to_args..has_valuecs*|d kr dS|d kr |d kr d S||S) z8 Filter out preset and null-valued options. r{r|r}r~Flog_sizeplugin_timeout cmd_timeoutrT)r{r|r}r~)rrrr )rar)rr r filter_opt.s z&SoSOptions.to_args..filter_optcSsz|jdrdt|d}|S|jdd}t|r.argifycSs|dS)Nrr )xr r r Msz$SoSOptions.to_args..)r]cs$g|]\}}||r||qSr r )r+nr/)rrr r r,Nsz&SoSOptions.to_args..)sortedr%rf)rZ opt_itemsr )rrrrr to_argss zSoSOptions.to_argsN)Fr*rr)T)T)__name__ __module__ __qualname__r#r)r8r9r;rA classmethodrCrXr^ryrzr%rr r r r rs   D  rc@seZdZdZdddZdS) SosListOptionz0Allow to specify comma delimited list of pluginsNcCsBdd|jdD}t||jr0|t||j7}t||j|dS)NcSsg|]}|qSr r )r+r r r r r,Vsz*SosListOption.__call__..r-)rYrdestr)rparser namespacevaluesZ option_stringrfr r r __call__Us zSosListOption.__call__)N)rrr__doc__rr r r r rQsrc@seZdZdZdddZdS) ClusterOptionz6Used to store/manipulate options for cluster profiles.NcCs"||_||_||_||_||_dS)N)raropt_typecluster description)rrarrrrr r r rA_s zClusterOption.__init__)N)rrrrrAr r r r r\srN) argparserZ configparserrrrrr rrrrr r r r  s  4