r9JddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlmZerddlmZdZeGddZ Gdde!Z"GddZ#GddZ$Gdd ej%Z&Gd!d"ej'Z(dS)#N)gettext)Any)Callable)cast)Dict)List)Mapping)NoReturn)Optional)Sequence)Tuple) TYPE_CHECKING)Union)final) UsageError)ARGUMENT_PERCENT_DEFAULT)ARGUMENT_TYPE_STR)ARGUMENT_TYPE_STR_CHOICE)check_ispytest)Literal file_or_dirc reZdZUdZdZeeed< d%dddeedeedgdfd e d dfd Z d&d Z d'dededeed dfdZ dede d dfdZ d(deeedfdeejd ejfdZd)dZ d(deeedfd ejdeejd eefdZ d(deeedfdeejd ejfdZ d(deeedfdeejd eejeeffdZ d%ded ed!ed"d#e d df d$ZdS)*ParserzParser for command line arguments and ini-file values. :ivar extra_info: Dict of generic param -> value to display in case there's an error processing the command line arguments. NprogF _ispytestusage processoptArgumentrreturnct|td|d|_g|_||_||_i|_g|_i|_dS)NzCustom optionsTparserr) r OptionGroup _anonymous_groups _processopt_usage_inidict _ininames extra_info)selfrrrs k/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/_pytest/config/argparsing.py__init__zParser.__init__+sX y!!!%&6ttTTT*, % CE $&*,optioncT|jr|jr||dSdSdSN)r'dest)r,r0s r- processoptionzParser.processoption;sE   ){ )  ((((( ) ) ) )r/name descriptionafterr$c|jD]}|j|kr|cSt|||d}d}t|jD]\}}|j|krn|j|dz||S)aGet (or create) a named option Group. :param name: Name of the option group. :param description: Long description for --help output. :param after: Name of another group, used for ordering --help output. :returns: The option group. The returned group object has an ``addoption`` method with the same signature as :func:`parser.addoption ` but will be shown in the respective group in the output of ``pytest --help``. Tr"r)r&r6r$ enumerateinsert)r,r6r7r8groupigrps r-getgroupzParser.getgroup@s\  EzT!! "D+ddKKK  --  FAsx5  ! AE5))) r/optsattrsc*|jj|i|dS)a!Register a command line option. :param opts: Option names, can be short or long options. :param attrs: Same attributes as the argparse library's :py:func:`add_argument() ` function accepts. After command line parsing, options are available on the pytest config object via ``config.option.NAME`` where ``NAME`` is usually set by passing a ``dest`` attribute, for example ``addoption("--long", dest="NAME", ...)``. N)r% addoption)r,rArBs r-rDzParser.addoptionZs$ "!41511111r/argszos.PathLike[str] namespacecddlm}||_||jd|D}|j||S)Nr)try_argcompletec6g|]}tj|Sosfspath.0xs r- z Parser.parse..s ...A29Q<<...r/rF)_pytest._argcompleterH _getparser optparser parse_args)r,rErFrHstrargss r-parsez Parser.parsejsg 988888**'''.....~((I(FFFr/MyOptionParsercddlm}t||j|j}|j|jgz}|D]k}|jrb|jp|j }| |}|jD]7}| }| } |j |i| 8l| td} || _|S)Nr)filescompleter)r*)nargs)rTr\rZr+rr&r%optionsr7r6add_argument_groupnamesrB add_argument FILE_OR_DIR completer) r,r\rVgroupsr=descarggroupr0nafile_or_dir_args r-rUzParser._getparservs777777"4tyIII  11 3 3E} 3(6EJ$77==#m33F A A)H)122222#00C0HH%3!r/c|||}|jD]\}}t|||t t t t|tS)NrS) rY__dict__itemssetattrrrstrgetattrrc)r,rEr0rF parsedoptionr6values r-parse_setoptionzParser.parse_setoptionsn zz$)z<< '06688 ) )KD% FD% ( ( ( (DIw|[AABBBr/c<|||dS)zbParse the known arguments at this point. :returns: An argparse namespace object. rSr)parse_known_and_unknown_args)r,rErFs r-parse_known_argszParser.parse_known_argss"000KKANNr/cp|}d|D}|||S)aParse the known arguments at this point, and also return the remaining unknown arguments. :returns: A tuple containing an argparse namespace object for the known arguments, and a list of the unknown arguments. c6g|]}tj|SrJrKrNs r-rQz7Parser.parse_known_and_unknown_args..rRr/rS)rUrv)r,rErFrVrXs r-ruz#Parser.parse_known_and_unknown_argss?OO%% .....))'Y)GGGr/helptypezBLiteral['string', 'paths', 'pathlist', 'args', 'linelist', 'bool']defaultc`|dvsJ|||f|j|<|j|dS)aRegister an ini-file option. :param name: Name of the ini-variable. :param type: Type of the variable. Can be: * ``string``: a string * ``bool``: a boolean * ``args``: a list of strings, separated as in a shell * ``linelist``: a list of strings, separated by line breaks * ``paths``: a list of :class:`pathlib.Path`, separated as in a shell * ``pathlist``: a list of ``py.path``, separated as in a shell .. versionadded:: 7.0 The ``paths`` variable type. Defaults to ``string`` if ``None`` or not passed. :param default: Default value if no ini-file option exists but is queried. The value of ini-variables can be retrieved via a call to :py:func:`config.getini(name) `. )NstringpathspathlistrElinelistboolN)r)r*append)r,r6ryrzr{s r-addiniz Parser.addinisFBXXXXX#T73 d d#####r/NN)r0rr Nr5Nr2)r rZ)__name__ __module__ __qualname____doc__rr ro__annotations__rrr.r4r@rrDr rargparse NamespacerYrUrrsrvr rurrJr/r-rr!s  D(3- $=A-  ---}-XzlD&89:-  -  ---- )))) HL&)7?} 42s2S2T2222&37 G GuS"4456 GH./ G   G G G G.37 C CuS"4456 C" CH./ C c C C C C37 O OuS"4456 OH./ O   O O O O37HHuS"4456HH./H x!49, - HHHH, #$#$#$#$ P #$#$ #$#$#$#$#$#$r/rcBeZdZdZdededefddfdZdefdZdS) ArgumentErrorzURaised if an Argument instance is created with invalid or inconsistent arguments.msgr0rr Nc<||_t||_dSr2)rro option_id)r,rr0s r-r.zArgumentError.__init__sVr/cB|jrd|jd|jS|jS)Nzoption : )rrr,s r-__str__zArgumentError.__str__s- > 9T^99tx99 98Or/)rrrrrorr.rrJr/r-rrsk%C%z3)?%D%%%%r/rceZdZdZeeeedZdede ddfdZ de efdZ de ee ffd Zd eeddfd Zdefd ZdS) rzClass that mimics the necessary behaviour of optparse.Option. It's currently a least effort implementation and ignoring choices and integer prefixes. https://docs.python.org/3/library/optparse.html#optparse-standard-option-types )intr}floatcomplexrarBr Nc||_g|_g|_d|dpdvrt jt d |d}t|tr|dkrIt jtj ||d t|d d |d<n?t jtj ||d tj||d<|d|_ n||_ n#t$rYnwxYw |d |_n#t$rYnwxYw|||d }|r ||_dS|jr0|jd dddd|_dS |jd dd|_dS#t($r}d|_t+d||d}~wwxYw)z5Store params in private vars for use in add_argument.%defaultryr5) stacklevelrzchoice)typrachoicesrr{r3N-_r:z???zneed a long or short option)_attrs _short_opts _long_optsgetwarningswarnr isinstancerorformatrzrr_typ_mapKeyErrorr{_set_opt_stringsr3replace IndexErrorr)r,rarBrr3es r-r.zArgument.__init__s> &(%' %))F++1r 2 2 M2q A A A A -C #s## (??M07CuMMM#$ %)y)9!)<$=$=E&MMM)0SFFFST%-$5c$:E&M!&M  +    D ,  +DLL    D  e$$$#ii//  PDIII _ P*122.66sC@@DIII P ,Q/3  P P P! #$A4HHaO Ps< D DD D++ D87D8(G G+G&&G+c |j|jzSr2)rrrs r-razArgument.names s$/11r/cVd}||j|D]+} t|||j|<#t $rY(wxYw|jdr-|jd}|dd}||jd<|jS)Nzdefault dest helpryrz %(default)s)splitrr3rprAttributeErrorrr)r,rBattrris r-rBzArgument.attrs#s#))++ TY  D $+D$$7$7 D!!!     ;??6 " " $ F#A *m44A"#DK {sA  AArAc|D]}t|dkrtd|z|t|dkrF|ddkr |ddkstd|z||j||dddkr |ddkstd|z||j|d S) zhDirectly from optparse. Might not be necessary as this is passed to argparse later on. rz>invalid option string %r: must be at least two characters longrrr:zMinvalid short option string %r: must be of the form -x, (x any non-dash char)--zGinvalid long option string %r: must start with --, followed by non-dashN)lenrrrr)r,rAopts r-rzArgument._set_opt_strings3s  , ,C3xx!||#;=@A SQA# #a&C--'HJMN  '',,,,AaCD((SVs]]'CEHI &&s++++- , ,r/cg}|jr|dt|jzgz }|jr|dt|jzgz }|dt|jzgz }t |dr|dt|jzgz }t |dr|dt|jzgz }dd |S) Nz _short_opts: z _long_opts: zdest: rzztype: r{z default: z Argument({}), ) rreprrr3hasattrrzr{rjoin)r,rEs r-__repr__zArgument.__repr__Ps   ? _tD,<'='==> >D ? = ^d4?&;&;;< ` function accepts. c3HK|]}|D]}|VdSr2)ra)rOrr6s r- z(OptionGroup.addoption..}sO* * SYY[[* * -1D* * * * * * * r/zoption names %s already addedF shortupperN)set intersectionr_ ValueErrorr_addoption_instance)r,rArBconflictr0s r-rDzOptionGroup.addoptionost99))* *  L* * *     IeZdZ ddedeeeefdeeddffd Zdede fdZ dd ee ed ee j de j fd Zejdd d kr,dedeeee jeeeffdZxZSxZS)rZNr#r+rr c||_t||jdtd|r|ni|_dS)NF)rradd_helpformatter_class allow_abbrev)_parsersuperr.r(DropShorterLongHelpFormatterr+)r,r#r+r __class__s r-r.zMyOptionParser.__init__sT   -8    )3:**r/messagec|jd|}t|jdr|d|jjd}t ||z)z1Transform argparse error message into UsageError.z : error: _config_source_hintz ())rrrrr format_usage)r,rrs r-errorzMyOptionParser.errorsg..W.. 4# 1 113q6S==9SXXl=S=STUE &t'<'<'>'> ? ?441 ]!]]q]]3333JJtyy//000 FK ( ( / / = = = r/r)r arg_stringc|sdS|d|jvrdS||jvr|j|}||dfSt|dkrdSd|vr4|dd\}}||jvr|j|}|||fS|js|ds||}t|dkrJtd}dd|D}| |||dznt|dkr|\}|S|j |r |j sdSd |vrdSd|dfS) Nrr:=rz4ambiguous option: %(option)s could match %(matches)src3"K|] \}}}|V dSr2rJ)rOrr0s r-rz1MyOptionParser._parse_optional..s('Q'Q<1fa'Q'Q'Q'Q'Q'Qr/)r0matchesr) prefix_chars_option_string_actionsrrr startswith_get_option_tuplesrrr_negative_number_matchermatch_has_negative_number_optionals) r,raction option_string explicit_arg option_tuplesrr_ option_tuples r-_parse_optionalzMyOptionParser._parse_optionals ta=D$555tT8884Z@z4//:!##tj  .8.>.>sA.F.F+ | D$???!8GF!=,>> ( (=(=d(C(C ( $ 7 7 C C }%%))!NC#ii'Q'Q='Q'Q'QQQGJJs w%O%OOPPPP''1,,&3O\'',22:>> : 4j  tT) )r/r)rrrrr rrorr.r rr rrrWsys version_infor Actionr __classcell__rs@r-rZrZs[04" ;;;T#s(^,;sm ;  ;;;;;;$4S4X4444)-26x}%H./   " f$$! *!! * eHX_5sHSMIJ K! *! *! *! *! *! *! *! *%$$$r/rZcTeZdZdZdededdffd Zdejdeffd Z d Z xZ S) ra+Shorten help for long options that differ only in extra hyphens. - Collapse **long** options that are the same except for extra hyphens. - Shortcut if there are only two options and one of them is a short one. - Cache result on the action object as this is called at least 2 times. rEkwargsr Ncd|vr!tj|d<tj|i|dS)Nwidth)_pytest_ioget_terminal_widthrr.)r,rErrs r-r.z%DropShorterLongHelpFormatter.__init__sG & %k<<>>F7O$)&)))))r/rct|}|r|ddkr|St|dd}|r|S|d}t |dkr;t |ddkst |ddkr ||_|Sg}i}|D]}t |dks |ddkr"|dstd |z||dd}|dd } | |vs&t || t |kr||| <|D]}t |dks |ddkr| ||dd| |dd kr*| |dd dd |} | |_| S) Nrr_formatted_action_invocationrrr:rrz)long optional argument without "--": [%s]r5r) r_format_action_invocationrprrr rrrrrr) r,rorgstrresr_ return_list short_longr0xxoption shortenedformatted_action_invocationrs r-r z6DropShorterLongHelpFormatter._format_action_invocations6226::  fQi3&&M$V-KTRR  J,,t$$ w<<1  #gaj//Q"6"6#gaj//Q:N:N28F /M %'  1 1F6{{a6!9#3#3$$T** #?6JFabbzH ((b11I **c*Y2G.H.H3LL//)1 9% @ @F6{{a6!9#3#3""6***abbzZ^^FNN3,C,CDDDD""6>>#sA#>#>???&*ii &<&<#.I+**r/cddl}g}|D]=}||||>|S)z}Wrap lines after splitting on original newlines. This allows to have explicit line breaks in the help text. rN)textwrap splitlinesrwrapstrip)r,textrrrlines r- _split_linesz)DropShorterLongHelpFormatter._split_liness[ OO%% = =D LLtzz||U;; < < < < r/) rrrrrr.rrror rrrs@r-rrs*c*S*T****** $+$+C$+$+$+$+$+$+L       r/r))rrLrrrtypingrrrrrr r r r r rr _pytest._ior_pytest.compatr_pytest.config.exceptionsr_pytest.deprecatedrrrrtyping_extensionsrrcr Exceptionrrr$ArgumentParserrZ HelpFormatterrrJr/r-r&s   000000777777000000777777------*)))))) p$p$p$p$p$p$p$p$f     I   w6w6w6w6w6w6w6w6t2$2$2$2$2$2$2$2$jS*S*S*S*S*X,S*S*S*l>>>>>8#9>>>>>r/