§ ;Š»j�ãó—ddlZddlZddlZddlZddlZddlmZddlZddl m Z m Z m Z m Z mZmZejd¦«ZeGd„d¦«¦«Zdeefd„Zd edefd „Zdefd „Zd efd „Zdd ededefd„Zd edefd„ZdS)éN)Ú dataclass)ÚDEFAULT_CONFIG_STORAGE_PATHÚDEFAULT_FLAGS_STORAGE_PATHÚDEFAULT_META_STORAGE_PATHÚDEFAULT_OPT_OUT_STORAGE_PATHÚDEFAULT_REMOTE_OFF_STORAGE_PATHÚDEFAULT_FLAG_GLOBz^[a-z0-9][a-z0-9-]{0,63}$cóJ—eZdZUeed<eed<eed<ed„¦«Zd„ZdS)ÚFlagInfoÚnameÚ descriptionÚpathcót—t|j¦« o#tj |j¦«S©N)Ú _held_offr ÚosrÚisfile©Úselfs úŽ/builddir/build/BUILDROOT/alt-python27-cllib-3.4.44-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clflags/gather.pyÚenabledzFlagInfo.enabled$s,€õ ˜TœYÑ'Ô'Ð'ÐE­B¬G¯NªN¸4¼9Ñ,EÔ,EÐEócó*—t|j¦«Sr)Úhashr rs rÚ__hash__zFlagInfo.__hash__+s€Ý�D”I‰ŒÐrN)Ú__name__Ú __module__Ú __qualname__ÚstrÚ__annotations__Úpropertyrr©rrr r s_€€€€€€à €I€I�IØÐÐÑØ €I€I�Ià ðFðFñ„XðFð ððððrr Úreturnc ó—g}tj tt¦«}t j|¦«D�]I} t |d¬¦«5}tj|¦«}ddd¦«n #1swxYwY|€td¦«‚|  d¦«}|std¦«‚tj  |¦«}tj t|¦«}| t| d¦«d||  d |¦«¬ ¦«¦«�Œ#t"$r.t%jd |¦«t%jd |¦«Y�ŒGwxYw|S) z} Gathers information about flags from DEFAULT_META_STORAGE_PATH and returns them in a python-friendly structure. úutf-8©ÚencodingNzEmpty or invalid YAML contentr z!Missing 'description' in metadataú.éþÿÿÿr)r r rzError processing %sz!Skipping flag %s due to an error.)rrÚjoinrr ÚglobÚopenÚyamlÚ safe_loadÚ ValueErrorÚgetÚKeyErrorÚbasenamerÚappendr ÚrsplitÚ ExceptionÚloggingÚ exceptionÚerror)Ú meta_filesÚ storage_globÚ meta_fileÚfÚmetadatar Ú flag_nameÚdefault_flag_paths rÚlist_flags_infor@/sÈ€ð "$€JÝ”7—<’<Õ 9Õ;LÑMÔM€Lå”Y˜|Ñ,Ô,ðñˆ ð Ý�i¨'Ð2Ñ2Ô2ð -°aÝœ>¨!Ñ,Ô,�ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ðÐÝ Ð!@ÑAÔAÐAà"Ÿ,š, }Ñ5Ô5ˆKØð DÝÐBÑCÔCÐCåœ×(Ò(¨Ñ3Ô3ˆIÝ "¤§ ¢ Õ-GÈÑ SÔ SÐ à × Ò �hØ×%Ò% cÑ*Ô*¨2Ô.Ø'Ø—\’\ &Ð*;Ñ<Ô<ðñôñ ô ð ñ øõ ð ð ð Ý Ô Ð3°YÑ ?Ô ?Ð ?Ý ŒMÐ=¸yÑ IÔ IÐ IØ ‰Hð øøøð Ðs7ÁEÁA7Á+ EÁ7A; Á;EÁ>A; Á?CEÅ4F ÆF r có\‡—|dzŠtˆfd„ttfD¦«¦«S)zŒWhether the remote settings (remote-off.d) or an admin (opt-out.d) keep the feature `name` off on this server, whatever its switch says.ú.flagc3ó’•K—|]A}tj tj |‰¦«¦«V—ŒBdSr)rrrr*)Ú.0Úoff_dirÚmarkers €rú z_held_off..Xs]øèè€ð_ð_ØõŒw�~Š~�bœgŸlšl¨7°FÑ;Ô;Ñ<Ô<ð_ð_ð_ð_ð_ð_r)Úanyrr)r rFs @rrrTsVø€ð�G‰^€FÝ ð_ð_ð_ð_Ý>Õ@\Ð]ð_ñ_ô_ñ _ô _ð_rcó’—t|t¦«rt |¦«rdSt jd|¦«dS)NTz$clflags: %r is not a valid flag nameF)Ú isinstancerÚ FLAG_NAME_REÚmatchr6r8)r s rÚ _valid_namerM\sF€Ý�$�ÑÔð¥×!3Ò!3°DÑ!9Ô!9ð؈tÝ „MÐ8¸$Ñ?Ô?Ð?Ø ˆ5rcóf—tj t|dz¦«} t |d¬¦«5}t j|¦«}ddd¦«n #1swxYwYn2#t$rYdSt$rtj d|¦«YdSwxYwt|t¦«stj d|¦«dS| d¦«}|r,t|t¦«stj d|¦«d}|p'tj t |dz¦«S) aDWhere this flag's marker file lives, or None when the flag is not declared on this server. Reads only that flag's own metadata rather than the whole directory: is_enabled() is called on hot paths - a cPanel hook, an in-cage entry point - and a glob plus a YAML parse per flag is not what answering "is this on?" should cost. Unlike list_flags_info() this does not insist on a description. That field documents the flag for people; letting a missing one decide whether a feature runs would mean a typo in a comment silently changes behaviour. rBr%r&Nzclflags: cannot read %sz*clflags: %s is empty or not a YAML mappingrz%clflags: 'path' in %s is not a string)rrr*rr,r-r.ÚFileNotFoundErrorr5r6r7rJÚdictr8r0rr)r r;r<r=rs rÚ_declared_pathrQcsu€õ”— ’ Õ6¸¸w¹ÑGÔG€IðÝ �) gÐ .Ñ .Ô .ð )°!Ý”~ aÑ(Ô(ˆHð )ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )øøå ððð؈tˆtÝ ðððÝÔÐ3°YÑ?Ô?Ð?؈tˆtðøøøõ �h¥Ñ %Ô %ðÝŒ ÐBÀIÑNÔNÐN؈tà �<Š<˜Ñ Ô €DØ ð•J˜t¥SÑ)Ô)ðÝŒ Ð=¸yÑIÔIÐIØˆØ Ð K•2”7—<’<Õ :¸DÀ7¹NÑKÔKÐKs:ªA(»AÁ A(ÁA Á A(Á#A Á$A(Á( BÁ5BÂBTÚdefaultcóª—t|¦«s|St|¦«rdSt|¦«}|€|Stj |¦«S)aWhether the feature `name` is switched on for this server. Off, whatever its marker file says, while the remote settings switch the feature off here (remote-off.d) or an admin has opted this server out of it (opt-out.d). Both hold before the flag is even declared, so a package that ships the feature on installs it off. Otherwise `default` is what the caller ships with, and is returned only when the flag is **not declared here** - an older package, or an install that never laid down its metadata. A declared flag always has a definite answer: its marker file is either there or it is not. Never raises and never touches the network. Whatever manages the flags is responsible for the marker files; this only reads them. F)rMrrQrrr)r rRrs rÚ is_enabledrT…sW€õ �tÑ Ô ð؈å��„ð؈uå ˜$Ñ Ô €DØ €|ØˆÝ Œ7�>Š>˜$Ñ Ô Ðrcó¶—t|¦«siStj t|dz¦«} t |d¬¦«5}t j|¦«}ddd¦«n #1swxYwYn4#t$ricYSt$rtj d|¦«icYSwxYwt|t¦«stjd|¦«iS|S)acParameters recorded for the feature `name`, or {} when it has none. Separate from is_enabled() on purpose: only a feature that actually takes parameters pays for reading and parsing them. Returns {} rather than raising on anything unreadable, so a damaged file degrades the feature to its own defaults instead of breaking the caller. z.jsonr%r&Nzclflags: cannot read config %sz'clflags: %s does not hold a JSON object)rMrrr*rr,ÚjsonÚloadrOr5r6r7rJrPr8)r rr<Úconfigs rÚ get_configrY¡s/€õ �tÑ Ô ðØˆ å Œ7�<Š<Õ3°T¸G±^Ñ DÔ D€DðÝ �$ Ð )Ñ )Ô )ð "¨QÝ”Y˜q‘\”\ˆFð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "øøå ðððØˆ ˆ ˆ Ý ðððÝÔÐ:¸DÑAÔAÐA؈ ˆ ˆ ðøøøõ �f�dÑ #Ô #ðÝŒ Ð?ÀÑFÔFÐF؈ Ø €Ms;»A9Á A-Á! A9Á-A1Á1A9Á4A1Á5A9Á9 B* B*Â)B*)T)r+rVr6Úos.pathrÚreÚ dataclassesrr-Úclflags.configrrrrrr ÚcompilerKr Úlistr@rÚboolrrMrQrTrPrYr"rrúrasÅðð € € € Ø € € € Ø€€€Ø€€€Ø € € € Ø!Ð!Ð!Ð!Ð!Ð!à € € € ðððððððððððððððððˆrŒzÐ6Ñ7Ô7€ ð ð ð ð ð ð ñ ô ñ „ð ð "˜˜hœð"ð"ð"ð"ðJ_�Cð_˜Dð_ð_ð_ð_ð˜ðððððL˜ðLðLðLðLðD ð �Sð  4ð °4ð ð ð ð ð8�Sð˜Tððððððr