3 }|j|tjj|}|dk r^||kr^d}q0tjj|r0|Sq0W|r|dkrd}|S)Nr-)reversedrrrrbasenameisfile)r profile_nameZ skip_filesretZconditional_loaddir_name config_filer r r get_configs   zLocator.get_configcCs|dk o|dkod|kS)Nr/r )r rr r r check_profile_name_format0sz!Locator.check_profile_name_formatcCs|j|sdS|j|}|dkr$dSyJtddddd}t|_t|"}|jdtjd|j WdQRX|St t t fk r}zdSd}~XnXdS)N=#TF)Z delimitersZinline_comment_prefixesZallow_no_valuestrict[z] ) r rrstrZ optionxformopenZ read_stringconstsZMAGIC_HEADER_NAMEreadIOErrorOSErrorr)r rrconfigfer r r parse_config3s   &zLocator.parse_configc Cs$y t|}Wntk r*|g}d}YnXy t|}Wntk rV|g}d}YnX||krv||dg||}|j|}|dkrddddgStj|jk}d|g}xtt||D]f\} } | dks| dkrd|d<|dg}q|o| |jtjkr||jtj| ddg}q|| g}qW|S)NrFrTr)raw) lenrr.r'ZPLUGIN_MAIN_UNIT_NAMEZsectionszipZoptionsget) r rZattrsZdefvalsZ attrs_lenZ defvals_lenr+Zmain_unit_in_configvalsattrZdefvalr r r get_profile_attrsGs2       zLocator.get_profile_attrsc Csjt}x^|jD]T}y:x4tj|D]&}|j||}tjj|r |j|q WWqtk r`YqXqW|S)N) setrrlistdirrrraddr*)r Zprofilesrrrr r r list_profileses    zLocator.list_profilescCs t|jS)N)sortedr:)r r r r get_known_namesqszLocator.get_known_namescsfddtjDS)Ncs(g|] }|j|tjgdgdfqS)r)r6r'ZPROFILE_ATTR_SUMMARY).0Zprofile)r r r usz3Locator.get_known_names_summary..)r;r:)r r )r r get_known_names_summarytszLocator.get_known_names_summary)N)N)__name__ __module__ __qualname____doc__ __slots__r propertyr rrr r.r6r:r<r@r r r r rs    r)rZ tuned.constsr'Ztuned.utils.config_parserrrobjectrr r r r s