o >ްaÂã@sªdZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z dgZ e d¡Zd d „Zd d „ZGd d„deƒZe d¡Zdd„ZeƒZ[eƒZddd„ZdS)zG Parser for the environment markers micro-language defined in PEP 508. éNé)Ú string_types)Úin_venvÚ parse_marker)ÚNormalizedVersionÚ interpretz<((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")cCst|tƒr|s dS|ddvS)NFrú'")Ú isinstancer)Úo©r ú1/usr/lib/python3/dist-packages/distlib/markers.pyÚ _is_literals r cCs2g}t |¡D] }| t| ¡dƒ¡qt|ƒS)Nr)Ú_VERSION_PATTERNÚfinditerÚappendÚNVÚgroupsÚset)ÚsÚresultÚmr r r Ú _get_versions!src @sfeZdZdZdd„dd„dd„dd„dd„dd„d d„d d„d d„d d„d d„dd„dœ Zdd„ZdS)Ú Evaluatorz; This class is used to evaluate marker expessions. cCó||kS©Nr ©ÚxÚyr r r Ú-ózEvaluator.cCrrr rr r r r.rcCó||kp||kSrr rr r r r/ócCs||kSrr rr r r r0rcCs||kSrr rr r r r1rcCs||kp||kSrr rr r r r2r!cCs||kSrr rr r r r3rcCr rr rr r r r4r!cCs|o|Srr rr r r r5rcCs|p|Srr rr r r r6rcCs||vSrr rr r r r7rcCs||vSrr rr r r r8r) ú==ú===ú~=ú!=ú<ú<=ú>ú>=ÚandÚorÚinúnot inc Cs"t|tƒr#|ddvr|dd…}|S||vrtd|ƒ‚||}|St|tƒs*J‚|d}||jvr9td|ƒ‚|d}|d }t|dƒrVt|d ƒrVtd |||fƒ‚| ||¡}| ||¡}|d ksj|d krw|d vrwt|ƒ}t|ƒ}n|d kr‡|d vr‡t|ƒ}t |ƒ}|j|||ƒ}|S)zƒ Evaluate a marker expression returned by the :func:`parse_requirement` function in the specified context. rrréÿÿÿÿzunknown variable: %sÚopzop not implemented: %sÚlhsÚrhszinvalid comparison: %s %s %sÚpython_version)r&r'r(r)r#r"r%r$)r,r-) r rÚ SyntaxErrorÚdictÚ operationsÚNotImplementedErrorr Úevaluaterr) ÚselfÚexprÚcontextrr/ÚelhsÚerhsr0r1r r r r7;s6   é í     zEvaluator.evaluateN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r5r7r r r r r's ô rz\d+\.\d+c CsŒdd„}ttdƒr|tjjƒ}tjj}nd}d}t ¡}t |¡}|  d¡}||t jt  ¡t  ¡t  ¡t ¡t ¡ttƒƒ||tjdœ }|S)NcSs<d|j|j|jf}|j}|dkr||dt|jƒ7}|S)Nz%s.%s.%sÚfinalr)ÚmajorÚminorÚmicroÚ releaselevelÚstrÚserial)ÚinfoÚversionÚkindr r r Úformat_full_version`s z,default_context..format_full_versionÚimplementationÚ0Úr) Úimplementation_nameÚimplementation_versionÚos_nameÚplatform_machineÚplatform_python_implementationÚplatform_releaseÚplatform_systemÚplatform_versionÚplatform_in_venvÚpython_full_versionr2Ú sys_platform)ÚhasattrÚsysrLrIÚnameÚplatformr2Ú_DIGITSÚmatchÚgroupÚosÚmachineÚpython_implementationÚreleaseÚsystemrFr)rKrPrOÚppvrÚpvrr r r Údefault_context_s.     ôrhc Cs|zt|ƒ\}}Wnty}ztd||fƒ‚d}~ww|r-|ddkr-td||fƒ‚ttƒ}|r8| |¡t ||¡S)zò Interpret a marker and return a result depending on environment. :param marker: The marker to interpret. :type marker: str :param execution_context: The context used for name lookup. :type execution_context: mapping z)Unable to interpret marker syntax: %s: %sNrú#z*unexpected trailing data in marker: %s: %s)rÚ Exceptionr3r4ÚDEFAULT_CONTEXTÚupdateÚ evaluatorr7)ÚmarkerÚexecution_contextr9ÚrestÚer:r r r r†s €ÿ  r)r@raÚrer[r]ÚcompatrÚutilrrrIrrÚ__all__Úcompilerr rÚobjectrr^rhrkrmrr r r r Ús&    6"