pX-@s7ddlZddlZddlZdadadaddejjddjdDa da dddZ d d Z d d d Z d ddZd ddZd ddZd ddZd ddZGdddeZGdddeZddZddZed kr3edS)!NcCs,g|]"}|jrd|jqS)zpython%s)strip).0Zverr!/usr/share/python3/py3versions.py s rZDEBPYTHON3_SUPPORTED,c Csddlm}m}ts`tjjdr`|}td}|j||j |atr|rytj d|}Wn|k rt YnX|SdS)Nr) ConfigParser NoOptionErrorz"/usr/share/python3/debian_defaultsZDEFAULT) Z configparserr r _defaultsospathexistsopenZ read_filecloseget ValueError)namer r configZ defaultsfilevaluerrr read_defaults       rc st|jddkr'tdddl}d|jd|jd|jd|jd|ji}i}t}tt d d }d }x:|jdD])}|j }|d krq|dkrq|j dtt j d}|j|} y| std| jd| jd} jd\} } t| dkr_w| dkr{|jn,d }|| fdd|D}Wqtk rtdYqXqWd|kr||d<|r|j||d<|S)NrzDtoo many arguments provided for X-Python3-Version: min and max only.r=z>=z<=z<< version_onlyTFallcurrent current_extversionsz(>=|<=|<<|=)? *(\d\.\d)$z'error parsing Python3-Version attribute.cs%g|]}|r|qSrr)rav)filtopvrrrGs z"parse_versions..)rr)Nr)lensplitroperatoreqgeleltsetsupported_versionsr setdefaultrecompilematchgroupintadd Exceptionunion) vstringr&Z operatorsvinfoZexact_versionsZ version_rangeZ relop_seenZfieldZvemopZvmajZvminr)r"r#rparse_versions'sL             r:Fc CsltsMy,td}dd|jdDaWntk rLgaYnX|rdddtDStSdS)Nz old-versionscSsg|]}|jqSr)r)rsrrrrVs z old_versions..rcSs g|]}|ddqS)Nr)rr#rrrrZs ) _old_versionsrr%r)rrrrr old_versionsQs    r>c CsltsMy,td}dd|jdDaWntk rLgaYnX|rdddtDStSdS)Nzunsupported-versionscSsg|]}|jqSr)r)rr;rrrrds z(unsupported_versions..rcSs g|]}|ddqS)r<Nr)rr#rrrrhs )_unsupported_versionsrr%r)rrrrrunsupported_versions_s    r@c Cstts8y,td}dd|jdDaWntk r7ddddg}y=d dl}|j|d d d d d|j}|j}Wn*t k rt j dj |}YnXd}xB|D]:}|j dr|jdd d jjd}qW|jdd|D}|aYnXtjtjt}tjtj||r~ddtDStSdS)Nzsupported-versionscSsg|]}|jqSr)r)rr;rrrrss z&supported_versions..rz/usr/bin/apt-cachez--no-all-versionsZshowz python3-allrbufsizershellFstdout zDepends::cSs%g|]}tjdd|qS)z\s*(\S+)[ (]?.*z\1)r.sub)rr;rrrrs cSs g|]}|ddqS)r<Nr)rr#rrrrs )default_version_supported_versionsrr%r subprocessPopenPIPErC ImportErrorr popenjoin startswithrrpopindex_default_versionsortappend) rrcmdrIpfdZdependslinedefaultrrrr,ms8        )    r,cCsttstjdatd}t|tjjd|fkrRtd||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 %sr<)rRr readlinkrr rNr)rZdebian_defaultrrrrGs ! rGc Cstd}t|}tdd}t|dkr|dj|}g}x|D]}|j|qZWy&|j|jtdd}Wnd}YnX|j |r|j|n t d|st d|r|Sd d |DSdS) NrTrrr<rz/No supported python3 versions in version stringzempty set of versionscSsg|]}d|qS)zpython%sr)rr#rrrrs z&requested_versions..) rGr:r,r$ intersectionrTrPrQrRrSr)r6rrr7 supportedZvlversionrYrrrrequested_versionss,  &    r^cs`ddl}tfdd|jdD}|j|rXdd|DS|SdS)Nrcs:g|]0}tjj|krtjj|qSr)r r basename)rr;)r\rrrs z&installed_versions..z/usr/bin/python3.[0-9]cSs g|]}|ddqS)r<Nr)rr#rrrrs )globr,rS)rr`rr)r\rinstalled_versionss   rac@seZdZdS)ControlFileValueErrorN)__name__ __module__ __qualname__rrrrrbs rbc@seZdZdS)MissingVersionValueErrorN)rcrdrerrrrrfs rfc CsAd}d}d}t|dd}dd|D}WdQRXx|D]}|dkr||dkr||dkrsPd}qH|jdrd}qH|jd |r|}qH|jjd rH|dkrtd |jd d d j}qHW|dkrtd|dkr=|dkr9td|S|S)zFread the debian/control file, extract the X-Python3-Version field.Nencodingzutf-8cSsg|]}|jqSr)r)rrXrrrrs z/extract_pyversion_attribute..rSourcezSource:z Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrErznot a control filez$no X-Python3-Version in control file)rrOlowerrr%rrbrf)fnpkgr]ZsversionZsectionZ controlfilelinesrXrrrextract_pyversion_attributes2             rmc Csddlm}d}|d|}|jddddd d d d |jd dddd d d d|jddddd d d d|jddddd d d d|jddddd dd d d d|j\}}tjjtjd}|j r{t |dkr{yt t |j Wqtk rw}z#t d||tjdWYdd}~XqXn|jrt |dkrt d jt|j n|jrt |dkrt d jt|j n|jrZt |dkrZt |dkr%d!}n |d}ytjj|r|}y%t|d"} t| |j } Wqtk rtjjd#||ftjdYqtk rtjjd$|t|j } YqXnt||j } t d j| Wqtk rV}z,tjjd%||ftjdWYdd}~XqXn'tjjd&||ftjddS)'Nr) OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] usagez-dz --defaulthelpz!print the default python3 versionaction store_truedestrYz-sz --supportedz$print the supported python3 versionsr\z-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)Frz%s:rrDzdebian/controlrhz%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 )ZoptparsernZ add_option parse_argsr r r_sysargvrYr$printrGrrexitr\rNr,rurartisfilermr^rbstderrwriterf) rnroparserZoptsargsZprogrammsgrrjr6Zvsrrrmain sn    #      #r__main__)r r.rwr r=r?environrr%rHrRrr:r>r@r,rGr^rarrbrfrmrrcrrrrs,    " *!  = A