o $"b@sxdZddlmZmZddlZddlZddlZddlmZddl m Z ddl m Z e dZejdkZGd d d eZdS) zMA Python specification is an abstract requirement definition of a interpreter)absolute_importunicode_literalsN) OrderedDict)fs_is_case_sensitive) ensure_strz@^(?P[a-zA-Z]+)?(?P[0-9.]+)?(?:-(?P32|64))?$win32c@sPeZdZdZddZeddZddZedd Z d d Z d d Z ddZ dS) PythonSpecz1Contains specification about a Python InterpretercCs.||_||_||_||_||_||_||_dSN)str_specimplementationmajorminormicro architecturepath)selfr r r r rrrr>/usr/lib/python3/dist-packages/virtualenv/discovery/py_spec.py__init__s zPythonSpec.__init__cCsLd\}}}}}}tj|r|}nd}tt|} | rdd} z[| } | d} | durwtdd| dD} t | d kr@t t | d krL| \}}}n+t | d krW| \}}n t | d krw| d }t t |d }|d krwt t |d d}d}Wn t yYnw| d}|dks|dkrd}| | d}|s|}||||||||S)N)NNNNNNFcSs|durdSt|Sr int)valrrr _int_or_none&sz1PythonSpec.from_string_spec.._int_or_noneversioncss|] }|rt|VqdSr r.0irrr -sz.PythonSpec.from_string_spec...r TimplpypythonCPythonarch) osrisabsrematchPATTERN groupdicttuplesplitlen ValueErrorrstr)cls string_specr#r r rr'rokr+rgroupsrversions version_datarrrfrom_string_specsD          zPythonSpec.from_string_specc cst}|jrd||j<trd||j<d||j<d|d<|j|j|jf}z |d|d}Wn t y=Ynw| D](\}}t t |ddD]}|d|}d |ddd |D}||fVqNqBdS) NFTr%rz{}{}rcss|]}t|VqdSr )r2rrrrrZsz,PythonSpec.generate_names..)rr rlowerupperr r rindexr1itemsranger0formatjoin)rimplsrr#r+atcur_verspecrrrgenerate_namesGs*    zPythonSpec.generate_namescCs|jduo tj|jSr )rr(r)rrrris_abs]szPythonSpec.is_abscCs|jr|jr|j|jkrdS|jdur|j|jkrdS|jdur,|j|jkr,dSt|j|j|jf|j|j|jfD]\}}|durP|durP||krPdSq=dS)z\called when there's a candidate metadata spec to see if compatible - e.g. PEP-514 on WindowsFNT) rHrr r;rzipr r r)rrEourreqrrr satisfiesas*zPythonSpec.satisfiescs&dtjdfdddDS)Nz{}({})z, c3s0|]}t|durd|t|VqdS)Nz{}={})getattrr@)rkrGrrrrsz)PythonSpec.__unicode__..)r r r rrr)r@type__name__rArGrrGr __unicode__os zPythonSpec.__unicode__cCs t|Sr )rrQrGrrr__repr__ys zPythonSpec.__repr__N) rP __module__ __qualname____doc__r classmethodr9rFpropertyrHrLrQrRrrrrrs *  r)rU __future__rrr(r*sys collectionsrvirtualenv.inforvirtualenv.util.sixrcompiler,platformIS_WINobjectrrrrrs