a h@s8ddlZddlmZddlmZmZGdddeZdS)N) ConfigParserErrorc@sneZdZdZdgZddZeddZddZdd d Z d d Z ddZ dddZ ddZ ddZddZd S)Locatorz$ Profiles locator and enumerator. _load_directoriescCst|turtd||_dS)Nz(load_directories parameter is not a list)typelist TypeErrorr)selfload_directoriesr :/usr/lib/python3.9/site-packages/tuned/profiles/locator.py__init__ s zLocator.__init__cCs|jSN)rr r r r r szLocator.load_directoriescGs&t|dg}tjj|}tj|S)Nz tuned.conf)rospathjoinnormpath)r path_partsZ config_namer r r _get_config_filenames zLocator._get_config_filenameNcCsd}|dddk}|r$|dd}t|jD]B}||tj|}|dur\||vr\d}q.tj|r.|Sq.|r|durd}|S)Nr-)reversedrrrrbasenameisfile)r profile_nameZ skip_filesretZconditional_loaddir_name config_filer r r get_configs    zLocator.get_configcCs|duo|dkod|vS)Nr/r )r rr r r check_profile_name_format0sz!Locator.check_profile_name_formatc Cs||sdS||}|dur$dSz`tddddd}t|_t|,}|dtjd| Wdn1sv0Y|WSt t t fy}zWYd}~dSd}~00dS)N=#TF)Z delimitersZinline_comment_prefixesZallow_no_valuestrict[z] ) r"r rstrZ optionxformopenZ read_stringconstsZMAGIC_HEADER_NAMEreadIOErrorOSErrorr)r rrconfigfer r r parse_config3s   :zLocator.parse_configc Csz t|}Wnty(|g}d}Yn0z t|}WntyR|g}d}Yn0||krr||dg||}||}|durgdStj|v}d|g}t||D]h\} } | dks| durd|d<|dg}q|r | |tjvr ||jtj| ddg}q|| g}q|S) Nr)FrrrTrFr)raw) lenrr0r)ZPLUGIN_MAIN_UNIT_NAMEZsectionszipoptionsget) r rattrsZdefvalsZ attrs_lenZ defvals_lenr-Zmain_unit_in_configZvalsattrZdefvalr r r get_profile_attrsGs2         zLocator.get_profile_attrsc Cs`t}|jD]N}z6t|D]&}|||}tj|r||qWq tyXYq 0q |Sr) setrrlistdirrrraddr,)r Zprofilesrrrr r r list_profileses    zLocator.list_profilescCs t|Srsortedr=rr r r get_known_namesqszLocator.get_known_namescsfddtDS)Ncs(g|] }||tjgdgdfqS)r)r9r)ZPROFILE_ATTR_SUMMARY).0Zprofilerr r uz3Locator.get_known_names_summary..r>rr rr get_known_names_summarytszLocator.get_known_names_summary)N)N)__name__ __module__ __qualname____doc__ __slots__r propertyr rr r"r0r9r=r@rEr r r r rs    r)rZ tuned.constsr)Ztuned.utils.config_parserrrobjectrr r r r s