B \-@sddlZddlZddlZdadadaddejdddDa da d!ddZ d d Z d"d d Z d#ddZd$ddZd%ddZd&ddZd'ddZGdddeZGdddeZddZddZed kredS)(NcCs g|]}|rd|qS)zpython%s)strip).0Zverr!/usr/share/python3/py3versions.py srZDEBPYTHON3_SUPPORTED,cCs~ddlm}m}tsDtjdrD|}td}||| |atrz|rzyt d|}Wn|k rtt YnX|SdS)Nr) ConfigParser NoOptionErrorz"/usr/share/python3/debian_defaultsZDEFAULT) Z configparserr r _defaultsospathexistsopenZ read_filecloseget ValueError)namer r ZconfigZ defaultsfilevaluerrr read_defaults   rc sjt|ddkrtdddl}|j|j|j|j|jd}i}t}tt dd}d}x|dD]}| }|d krzqd|d krqd| d tt d }||} yv| std | d| d} d\} } t| dkrwd| dkr|n d}|| fdd|D}Wqdtk r:td YqdXqdWd |krf||d <|rf|||d <|S)NrzDtoo many arguments provided for X-Python3-Version: min and max only.r)N=z>=z<=z<=|<=|<<|=)? *(\d\.\d)$z'error parsing Python3-Version attribute.)Nrcsg|]}|r|qSrr)rav)filtopvrrrGsz"parse_versions..)lensplitroperatoreqgeleltsetsupported_versionsr setdefaultrecompilematchgroupintadd Exceptionunion) vstringr#Z operatorsvinfoZexact_versionsZ version_rangeZ relop_seenZfieldZvemopZvmajZvminr)rr rparse_versions'sL      r7FcCsXts>y td}dd|dDaWntk r<gaYnX|rPddtDStSdS)Nz old-versionscSsg|] }|qSr)r)rsrrrrVsz old_versions..rcSsg|]}|ddqS)Nr)rr rrrrZs) _old_versionsrr"r)rrrrr old_versionsQs r;cCsXts>y td}dd|dDaWntk r<gaYnX|rPddtDStSdS)Nzunsupported-versionscSsg|] }|qSr)r)rr8rrrrdsz(unsupported_versions..rcSsg|]}|ddqS)r9Nr)rr rrrrhs)_unsupported_versionsrr"r)rrrrrunsupported_versions_s r=c Cs&ttsy td}dd|dDaWntk rddddg}y&d dl}|j|d d |jd }|j}Wn$t k rt d |}YnXd}x0|D](}| dr|dd d d}qW|dd|D}|aYnXttt}tt||rddtDStSdS)Nzsupported-versionscSsg|] }|qSr)r)rr8rrrrssz&supported_versions..rz/usr/bin/apt-cachez--no-all-versionsZshowz python3-allrrF)bufsizeshellstdout zDepends::cSsg|]}tdd|qS)z\s*(\S+)[ (]?.*z\1)r+sub)rr8rrrrscSsg|]}|ddqS)r9Nr)rr rrrrs)default_version_supported_versionsrr"r subprocessPopenPIPEr@ ImportErrorr popenjoin startswithrrpopindex_default_versionsortappend) rrcmdrFpfdZdependslinedefaultrrrr)ms8      r)cCsTtstdatd}t|tjd|fkr8td||a|rLtddStSdS)Nz/usr/bin/python3zdefault-versionz/usr/binzkthe symlink /usr/bin/python3 does not point to the python3 default version. It must be reset to point to %sr9)rOr readlinkrr rKr)rZdebian_defaultrrrrDs  rDcCstd}t|}tdd}t|dkr|d|}g}x|D]}||q@Wy||tdd}Wnd}YnX| |r||nt d|st d|r|Sd d |DSdS) NT)rrrr9rz/No supported python3 versions in version stringzempty set of versionscSsg|] }d|qS)zpython%sr)rr rrrrsz&requested_versions..) rDr7r)r! intersectionrQrMrNrOrPr)r3rrr4 supportedZvlversionrVrrrrequested_versionss,     r[csHddl}tfdd|dD}||r@dd|DS|SdS)Nrcs(g|] }tj|krtj|qSr)r r basename)rr8)rYrrrsz&installed_versions..z/usr/bin/python3.[0-9]cSsg|]}|ddqS)r9Nr)rr rrrrs)globr)rP)rr]rr)rYrinstalled_versionss r^c@s eZdZdS)ControlFileValueErrorN)__name__ __module__ __qualname__rrrrr_sr_c@s eZdZdS)MissingVersionValueErrorN)r`rarbrrrrrcsrcc Csd}d}d}t|dd}dd|D}WdQRXx|D]z}|dkr\|dkr\|dkrVPd}q8|drld}q8|d |r|}q8|d r8|dkrtd |d d d }q8W|dkrtd|dkr|dkrtd|S|S)zFread the debian/control file, extract the X-Python3-Version field.Nzutf-8)encodingcSsg|] }|qSr)r)rrUrrrrsz/extract_pyversion_attribute..rSourcezSource:z Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrBrznot a control filez$no X-Python3-Version in control file)rrLlowerrr"rr_rc)fnpkgrZZsversionZsectionZ controlfilelinesrUrrrextract_pyversion_attributes2  rjc Csddlm}d}||d}|jddddd d |jd d d ddd |jdddddd |jdddddd |jddddddd|\}}tjtjd}|j rt |dkryt t |j Wn<tk r}zt d||tdWdd}~XYnXn|jr6t |dkr6t dt|j nt|jrdt |dkrdt dt|j nF|jrt |dkrt |dkrd }n|d}ytj|r*|}yt|d!} t| |j } Wnbtk rtjd"||ftdYn0tk r&tjd#|t|j } YnXn t||j } t d| WnBtk r}z"tjd$||ftdWdd}~XYnXntjd%||ftddS)&Nr) OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] )usagez-dz --defaultz!print the default python3 version store_truerV)helpactiondestz-sz --supportedz$print the supported python3 versionsrYz-rz --requestedzprint the python3 versions requested by a build; the argument is either the name of a control file or the value of the X-Python3-Version attribute requestedz-iz --installedz.print the installed supported python3 versions installedz-vz --versionz print just the version number(s)Fr)rnrVrorpz%s:rrAzdebian/controlrez%s: not a control file: %s, zC%s: no X-Python3-Version in control file, using supported versions z%s: %s z usage: %s %s )ZoptparserkZ add_option parse_argsr r r\sysargvrVr!printrDrrexitrYrKr)rrr^rqisfilerjr[r_stderrwriterc) rkrlparserZoptsargsZprogrammsgrrgr3Zvsrrrmain sn            r~__main__)N)F)F)F)F)F)F)r r+rtr r:r<environrr"rErOrr7r;r=r)rDr[r^rr_rcrjr~r`rrrrs, *   !   =A