U e@sdZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z dgZ edZd d hZd d Zd dZddZGdddeZedZddZeZ[eZdddZdS)zG Parser for the environment markers micro-language defined in PEP 508. N) string_types)in_venv parse_marker) LegacyVersion interpretz<((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")python_versionpython_full_versioncCst|to|tkSN) isinstancer_VERSION_MARKERSsr=/opt/hc_python/lib/python3.8/site-packages/distlib/markers.py_is_version_markersrcCst|tr|sdS|ddkS)NFr'")r r)orrr _is_literal#srcCsddt|DS)NcSsh|]}t|dqS)r)LVgroups).0mrrr *sz _get_versions..)_VERSION_PATTERNfinditerr rrr _get_versions)src @sfeZdZdZddddddddddddd dd dd dd dd dddd ZddZdS) Evaluatorz< This class is used to evaluate marker expressions. cCs||kSr rxyrrr3zEvaluator.cCs||kSr rrrrrr!4r"cCs||kp||kSr rrrrrr!5r"cCs||kSr rrrrrr!6r"cCs||kSr rrrrrr!7r"cCs||kp||kSr rrrrrr!8r"cCs||kSr rrrrrr!9r"cCs||kp||kSr rrrrrr!:r"cCs|o|Sr rrrrrr!;r"cCs|p|Sr rrrrrr!<r"cCs||kSr rrrrrr!=r"cCs||kSr rrrrrr!>r") =====~=!=<<=>>=andorinnot inc Cs"t|trB|ddkr$|dd}n||kr8td|||}nt|tsPt|d}||jkrntd||d}|d }t|drt|d rtd |||f|||}|||}t |st |r|d krt |}t |}n$t |r|d krt |}t |}|j|||}|S) z Evaluate a marker expression returned by the :func:`parse_requirement` function in the specified context. rrrzunknown variable: %sopzop not implemented: %slhsrhszinvalid comparison: %s %s %s)r'r(r)r*r$r#r&r%)r-r.) r r SyntaxErrordictAssertionError operationsNotImplementedErrorrevaluaterrr) selfexprcontextresultr0ZelhsZerhsr1r2rrrr8As8         zEvaluator.evaluateN)__name__ __module__ __qualname____doc__r6r8rrrrr-srz\d+\.\d+c Csdd}ttdr(|tjj}tjj}nd}d}t}t|}| d}||t jt t t tttt||tjd }|S)NcSs<d|j|j|jf}|j}|dkr8||dt|j7}|S)Nz%s.%s.%sfinalr)majorminormicro releaselevelstrserial)infoversionkindrrrformat_full_versionjs z,default_context..format_full_versionimplementation0r) implementation_nameimplementation_versionos_nameplatform_machineplatform_python_implementationplatform_releaseplatform_systemplatform_versionZplatform_in_venvr r sys_platform)hasattrsysrLrInameplatformr_DIGITSmatchgrouposmachinepython_implementationreleasesystemrFr)rKrPrOZppvrpvr<rrrdefault_contexths2    rec Cszt|\}}Wn2tk rB}ztd||fW5d}~XYnX|rd|ddkrdtd||ftt}|rz||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 Exceptionr3r4DEFAULT_CONTEXTupdate evaluatorr8)markerZexecution_contextr:rester;rrrrs  )N)r@r_rerYr[compatrutilrrrIrr__all__compilerr rrrobjectrr\rerhrjrrrrrs,  8 %