ó
    &ÝNjW&  ã                   óÚ   • S SK r S SKJrJrJrJrJrJrJr   SSK	J
r
  SSKJr  S\S\4S	 jrS\S\4S
 jrS\S\4S jrS\S\\\\4      4S jr " S S5      rg! \ a	    S SKJ
r
   NKf = f)é    N)ÚAnyÚDictÚListÚIterableÚOptionalÚTupleÚUnioné   )ÚLexiconé   )ÚArgumentÚnameÚreturnc                 ób   • U R                  S5      R                  S5      R                  SS5      $ )NÚ_Ú-)ÚlstripÚrstripÚreplace©r   s    ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/invoke/parser/context.pyÚtranslate_underscoresr      s)   € Ø�;‰;�sÓ×"Ñ" 3Ó'×/Ñ/°°SÓ9Ð9ó    c                 óJ   • [        U 5      n [        U 5      S:X  a  SU -   $ SU -   $ )Nr   r   z--)r   Úlenr   s    r   Úto_flagr      s+   € Ü  Ó&€DÜ
ˆ4ƒy�Aƒ~Ø�T‰zÐØ�$‰;Ðr   Úargc                 ó  • U R                   nU Vs1 s H%  n[        UR                  S5      5      S:X  d  M#  UiM'     nnU Vs1 s H  o"U;  d  M
  UiM     nn[        [	        U(       a  UOU5      S   5      $ s  snf s  snf )Nr   r   r   )Únamesr   ÚstripÚstrÚsorted)r   r   ÚxÚshortsÚlongss        r   Úsort_candidater&      sl   € Ø�I‰I€EáÓ9š�A¤# a§g¡g¨c£lÓ"3°qÑ"8�a™€FÐ9ÙÓ1š�1¨&¡�Q™€EÐ1ÜŒv¦‘f¨EÓ2°1Ñ5Ó6Ð6ùò :ùÚ1s   ‘"A8·A8Á	A=ÁA=c                 óH  • / n[        U 5      nUR                  [        U5      S:X  a  SOS5        UR                  UR                  5       5        SnU H:  nX4R	                  5       (       a  UR                  5       OUR                  5       -  nM<     UR                  U5        U$ )zN
Obtain useful key list-of-ints for sorting CLI flags.

.. versionadded:: 1.0
r   r   Ú )r&   Úappendr   ÚlowerÚisupperÚupper)r   Úretr#   ÚinversedÚchars        r   Úflag_keyr0      sƒ   € ð "$€CÜ�sÓ€Að ‡J�J”C˜“F˜a“K‰q QÔ'ð ‡J�Jˆq�w‰w‹yÔð €HÛˆØ§L¡L§N¡N�D—J‘J”L¸¿
¹
»ÑDŠñ à‡J�JˆxÔØ€Jr   c            	       ó"  • \ rS rSrSr   SS\\   S\\   S\\   SS4S jjr	S\4S	 jr
S\S
\SS4S jr\S\\   4S j5       r\S\\\4   4S j5       rS\S\\   4S jrS\S\\\4   4S jrS\\\\\   4      4S jrS\\S4   4S jrSrg)ÚParserContexté;   zÚ
Parsing context with knowledge of flags & their format.

Generally associated with the core program or a task.

When run through a parser, will also hold runtime values filled in by the
parser.

.. versionadded:: 1.0
Nr   ÚaliasesÚargsr   c                 ó¨   • [        5       U l        / U l        [        5       U l        0 U l        Xl        X l        U H  nU R                  U5        M     g)a1  
Create a new ``ParserContext`` named ``name``, with ``aliases``.

``name`` is optional, and should be a string if given. It's used to
tell ParserContext objects apart, and for use in a Parser when
determining what chunk of input might belong to a given ParserContext.

``aliases`` is also optional and should be an iterable containing
strings. Parsing will honor any aliases when trying to "find" a given
context in its input.

May give one or more ``args``, which is a quick alternative to calling
``for arg in args: self.add_arg(arg)`` after initialization.
N)r   r5   Úpositional_argsÚflagsÚinverse_flagsr   r4   Úadd_arg)Úselfr   r4   r5   r   s        r   Ú__init__ÚParserContext.__init__G   sF   € ô( “IˆŒ	Ø/1ˆÔÜ“YˆŒ
Ø-/ˆÔØŒ	ØŒÛˆCØ�L‰L˜Öò r   c                 óX  • SnU R                   (       a*  SR                  SR                  U R                   5      5      nU R                  (       a  SR                  U R                  U5      OSnU R                  (       a  SR                  U R                  5      OSnSR                  X#5      $ )Nr(   z ({})ú, z {!r}{}z: {!r}z<parser/Context{}{}>)r4   ÚformatÚjoinr   r5   )r;   r4   r   r5   s       r   Ú__repr__ÚParserContext.__repr__d   sr   € ØˆØ�<�<Ø—n‘n T§Y¡Y¨t¯|©|Ó%<Ó=ˆGØ9=¿¿�	× Ñ  §¡¨GÔ4ÈˆØ/3¯y¯y�—‘ §	¡	Ô*¸bˆØ%×,Ñ,¨TÓ8Ð8r   Úkwargsc                 óx  • [        U5      S:X  a  [        US   [        5      (       a  US   nO[        U0 UD6nUR                   H.  nX@R                  ;   d  M  Sn[        UR                  U5      5      e   UR                  S   nX0R                  U'   UR                  (       a  U R                  R                  U5        X0R                  [        U5      '   UR                   HH  nU R                  R                  XFS9  U R                  R                  [        U5      [        U5      S9  MJ     UR                  (       a$  U R                  R                  UR                  US9  UR                  [         :X  aC  UR"                  SL a3  [        SR                  U5      5      n[        U5      U R$                  U'   ggg)av  
Adds given ``Argument`` (or constructor args for one) to this context.

The Argument in question is added to the following dict attributes:

* ``args``: "normal" access, i.e. the given names are directly exposed
  as keys.
* ``flags``: "flaglike" access, i.e. the given names are translated
  into CLI flags, e.g. ``"foo"`` is accessible via ``flags['--foo']``.
* ``inverse_flags``: similar to ``flags`` but containing only the
  "inverse" versions of boolean flags which default to True. This
  allows the parser to track e.g. ``--no-myflag`` and turn it into a
  False value for the ``myflag`` Argument.

.. versionadded:: 1.0
r   r   z;Tried to add an argument named {!r} but one already exists!)ÚtoTzno-{}N)r   Ú
isinstancer   r   r5   Ú
ValueErrorr@   Ú
positionalr7   r)   r8   r   Ú	nicknamesÚaliasÚ	attr_nameÚkindÚboolÚdefaultr9   )r;   r5   rD   r   r   ÚmsgÚmainÚinverse_names           r   r:   ÚParserContext.add_argl   sU  € ô$ ˆt‹9˜‹>œj¨¨a©´(×;Ñ;Ø�q‘'‰Cä˜DÐ+ FÑ+ˆCà—I”IˆDØ—y‘yÕ ØS�Ü  §¡¨DÓ!1Ó2Ð2ñ ð
 �y‰y˜‰|ˆØ�	‰	�$‰à�>�>Ø× Ñ ×'Ñ'¨Ô,à$'�
‰
”7˜4“=Ñ!Ø—M”MˆDØ�I‰I�O‰O˜DˆOÑ*Ø�J‰J×ÑœW T›]¬w°t«}ÐÓ=ñ "ð �=�=Ø�I‰I�O‰O˜CŸM™M¨dˆOÑ3à�8‰8”tÓ §¡¨tÒ 3ô # 7§>¡>°$Ó#7Ó8ˆLÜ/6°t«}ˆD×Ñ˜|Ò,ð !4Ðr   c                 ób   • U R                    Vs/ s H  oR                  b  M  UPM     sn$ s  snf ©N)r7   Úvalue)r;   r#   s     r   Úmissing_positional_argsÚ%ParserContext.missing_positional_args�   s&   € à×/Ò/ÓCÒ/�a·7±7—Ñ/ÑCÐCùÒCs   �,£,c                 ó|   • 0 nU R                   R                  5        H  nUR                  XR                  '   M     U$ )zÜ
This context's arguments' values keyed by their ``.name`` attribute.

Results in a dict suitable for use in Python contexts, where e.g. an
arg named ``foo-bar`` becomes accessible as ``foo_bar``.

.. versionadded:: 1.0
)r5   ÚvaluesrV   r   )r;   r-   r   s      r   Ú	as_kwargsÚParserContext.as_kwargs¡   s4   € ð ˆØ—9‘9×#Ñ#Ö%ˆCØŸI™IˆC—‘‹Mñ &àˆ
r   Úflagc                 ód   • [        [        U/U R                  R                  U5      -   5      5      $ rU   )ÚlistÚsetr8   Ú
aliases_of)r;   r]   s     r   Ú	names_forÚParserContext.names_for°   s(   € ä”C˜˜ §¡×!6Ñ!6°tÓ!<Ñ<Ó=Ó>Ð>r   c                 ó<  • XR                   ;  a4  Sn[        UR                  XR                   R                  5       5      5      eU R                   U   n[        S[
        S0R                  UR                  5      n/ nU R                  U5       HØ  nU(       aˆ  [        UR                  S5      5      S:X  a6  UR                  (       a  SR                  U5      OUnSR                  U5      nOgSR                  U5      nUR                  (       a  SR                  U5      nO3X`R                  R                  5       ;   a  S	R                  US
S 5      nSnUR                  Xh-   5        MÚ     SR                  [!        U[        S95      n	UR"                  =(       d    Sn
Xš4$ )z[
Return 2-tuple of ``(flag-spec, help-string)`` for given ``flag``.

.. versionadded:: 1.0
z@{!r} is not a valid flag for this context! Valid flags are: {!r}ÚSTRINGÚINTr   r   z[{}]z {}z={}z	--[no-]{}r
   Nr(   r?   ©Úkey)r8   rH   r@   Úkeysr!   ÚintÚgetrM   rb   r   r    Úoptionalr9   rZ   r)   rA   r"   Úhelp)r;   r]   Úerrr   rV   Ú
full_namesr   Úvalue_ÚvaluestrÚnamestrÚhelpstrs              r   Úhelp_forÚParserContext.help_for´   sF  € ð —z‘zÓ!ØTˆCÜ˜SŸZ™Z¨¯j©j¯o©oÓ.?Ó@ÓAÐAØ�j‰j˜Ñˆä�h¤ UÐ+×/Ñ/°·±Ó9ˆàˆ
Ø—N‘N 4Ö(ˆDÞô �t—z‘z #“Ó'¨1Ó,Ø7:·|·|˜fŸm™m¨EÔ2È�FØ$Ÿ|™|¨FÓ3‘Hà$Ÿ|™|¨EÓ2�HØ—|—|Ø#)§=¡=°Ó#:˜øð ×-Ñ-×4Ñ4Ó6Ó6Ø&×-Ñ-¨d°1°2¨hÓ7�Dà�à×Ñ˜d™oÖ.ñ' )ð( —)‘)œF :´3Ñ7Ó8ˆØ—(‘(—.˜bˆØÐÐr   c           
      ó~   ^ • [        [        U 4S j[        T R                  R	                  5       [
        S95      5      $ )a  
Return sorted iterable of help tuples for all member Arguments.

Sorts like so:

* General sort is alphanumerically
* Short flags win over long flags
* Arguments with *only* long flags and *no* short flags will come
  first.
* When an Argument has multiple long or short flags, it will sort using
  the most favorable (lowest alphabetically) candidate.

This will result in a help list like so::

    --alpha, --zeta # 'alpha' wins
    --beta
    -a, --query # short flag wins
    -b, --argh
    -c

.. versionadded:: 1.0
c                 óL   >• TR                  [        U R                  5      5      $ rU   )rt   r   r   )r#   r;   s    €r   Ú<lambda>Ú+ParserContext.help_tuples.<locals>.<lambda>ø   s   ø€ ˜$Ÿ-™-¬°·±«Ô8r   rg   )r_   Úmapr"   r8   rZ   r0   )r;   s   `r   Úhelp_tuplesÚParserContext.help_tuplesÛ   s4   ø€ ô6 ÜÜ8Ü�t—z‘z×(Ñ(Ó*´Ñ9óó
ð 	
r   .c                 ór  • [        U R                  R                  5       [        S9nU Vs/ s H&  o R	                  [        UR                  5      5      PM(     nnUR                  [        U R                  R                  5       5      5        [        [        R                  R                  U5      5      $ s  snf )z•
Similar to `help_tuples` but returns flag names only, no helpstrs.

Specifically, all flag names, flattened, in rough order.

.. versionadded:: 1.0
rg   )r"   r8   rZ   r0   rb   r   r   r)   r_   r9   ri   ÚtupleÚ	itertoolsÚchainÚfrom_iterable)r;   r8   r#   r   s       r   Ú
flag_namesÚParserContext.flag_namesý   s€   € ô �t—z‘z×(Ñ(Ó*´Ñ9ˆÙ:?Ó@º%°Q—‘¤¨¯©£Ö0¹%ˆÐ@à�‰”T˜$×,Ñ,×1Ñ1Ó3Ó4Ô5Ü”Y—_‘_×2Ñ2°5Ó9Ó:Ð:ùò As   «-B4)r4   r5   r8   r9   r   r7   )N© r„   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r!   r   r   r<   rB   r   r:   Úpropertyr   rW   r   r[   rb   r   rt   r{   r‚   Ú__static_attributes__r„   r   r   r2   r2   ;   s  † ñ	ð #Ø!#Ø#%ñ	à�s‰mðð ˜#‘ðð �xÑ ð	ð
 
õð:9˜#ô 9ð/=˜Sð /=¨Cð /=°Dô /=ðb ðD¨¨h©ó Dó ðDð ð˜4  S ™>ó ó ðð?˜cð ? d¨3¡iô ?ð% ˜Sð %  U¨3°¨8¡_ô % ðN 
˜T %¨¨X°c©]Ð(:Ñ";Ñ<ô  
ðD;˜E # s (™O÷ ;r   r2   )r   Útypingr   r   r   r   r   r   r	   Úvendor.lexiconr   ÚImportErrorÚlexiconÚargumentr   r!   r   r   r&   rj   r0   r2   r„   r   r   Ú<module>r‘      s˜   ðÛ ß D× DÑ Dð Ý(õ ð: ð :¨ô :ð�#ð ˜#ô ð7˜ð 7 Sô 7ð�(ð ˜t E¨#¨s¨(¡OÑ4ô ÷8O;ò O;øðk ó  ßð ús   ˜A ÁA*Á)A*