o b.@sddlZddlZddlZdadadaddejdddDa da d#ddZ d d Z d d Z d$ddZd$ddZd$ddZd$ddZd$ddZd$ddZGdddeZGdddeZddZ d d!Zed"krpedSdS)%NcCs g|] }|rd|qSzpython%sstrip).0verr!/usr/share/python3/py3versions.py sr DEBPYTHON3_SUPPORTED,cCsvddlm}m}ts"tjdr"|}td}||| |atr9|r9z t d|}W|S|y8t wdS)Nr) ConfigParser NoOptionErrorz"/usr/share/python3/debian_defaultsDEFAULT) configparserr r _defaultsospathexistsopen read_filecloseget ValueError)namer rconfig defaultsfilevaluerrr read_defaults    rcCstdd|dDS)Ncss|]}t|VqdSN)int)rpartrrr (sz#version_to_tuple...)tuplesplit)versionrrrversion_to_tuple'sr'c sZt|ddkr tdddl}|j|j|j|j|jd}i}t}tt dd}d}|dD]h}| }|d kr=z<=z<=|<=|<<|=)? *(\d\.\d+)$z'error parsing Python3-Version attributer#)Nr)cs"g|] }t|tr|qSr)r')ravfiltopvrrr Ks  z"parse_versions..)lenr%roperatoreqgeleltsetsupported_versionsr setdefaultrecompilematchgroupr add Exceptionunion) vstringr7 operatorsvinfoexact_versions version_range relop_seenfieldvemopvmajvminrr3rparse_versions+sR     rRFcCRtsztd}dd|dDaWn tygaYnw|r'ddtDStS)Nz old-versionscSg|]}|qSrrrsrrrr [z old_versions..r cSg|]}|ddqSNrrr5rrrr _) _old_versionsrr%rr+rrrr old_versionsV r_cCrS)Nzunsupported-versionscSrTrrrUrrrr irWz(unsupported_versions..r cSrXrYrr[rrrr mr\)_unsupported_versionsrr%rr^rrrunsupported_versionsdr`rbc Csttsnztd}dd|dDaWnXtymgd}zddl}|j|dd|jd }|j}Wnt yDt d |}Ynwd}|D]}| d r]|d ddd}qI|d d|D}|aYnwttt}tt||rddtDStS)Nzsupported-versionscSrTrrrUrrrr xrWz&supported_versions..r )z/usr/bin/apt-cachez--no-all-versionsshowz python3-allrr0F)bufsizeshellstdout zDepends::cSsg|] }tdd|qS)z\s*(\S+)[ (]?.*z\1)r?subrUrrrr scSrXrYrr[rrrr r\)default_version_supported_versionsrr%r subprocessPopenPIPErf ImportErrorrpopenjoin startswithrrpopindex_default_versionsortappend) r+rcmdrlpfddependslinedefaultrrrr=rs>     r=cCsPtstdatd}t|tjd|fvrtd||a|r&tddStS)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 %srZ)rurreadlinkrrrqr)r+debian_defaultrrrrjs  rjcCstd}t|}tdd}t|dkrH|d|}g}|D]}||qz||tdd}Wnd}Y| |rG||nt d|sRt d|rV|Sd d |DS) NTr*r0r/rZr z/No supported python3 versions in version stringzempty set of versionscSsg|]}d|qSrrr[rrrr rWz&requested_versions..) rjrRr=r6 intersectionrwrsrtrurvr)rFr+r/rH supportedvlr&r}rrrrequested_versionss,   rcsNddl}tfdd|d|dD}||r%dd|DS|S)Nrcs(g|]}tj|vrtj|qSr)rrbasenamerUrrrr s  z&installed_versions..z/usr/bin/python3.[0-9]z/usr/bin/python3.[0-9][0-9]cSrXrYrr[rrrr r\)globr=rv)r+rr/rrrinstalled_versionss rc@ eZdZdS)ControlFileValueErrorN__name__ __module__ __qualname__rrrrrrc@r)MissingVersionValueErrorNrrrrrrrrcCsd}d}d}t|dd}dd|D}Wdn1swY|D]>}|dkr8|dkr8|dkr5n/d}q%|dr@d}q%|d |rJ|}q%|d rc|dkrYtd |d d d }q%|durltd|dkrz|durxtd|S|S)zFread the debian/control file, extract the X-Python3-Version field.Nzutf-8)encodingcSrTrr)rr|rrrr rWz/extract_pyversion_attribute..r SourcezSource:z Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrhr0znot a control filez$no X-Python3-Version in control file)rrrlowerrr%rrr)fnpkgr&sversionsection controlfilelinesr|rrrextract_pyversion_attributes6 rc Csddlm}d} ||d}|jddddd d |jd d d ddd |jdddddd |jdddddd |jddddddd|\}}tjtjd}|j rt |dkrz t t |j WdSty}zt d||tdWYd}~dSd}~ww|jrt |dkrt dt|j dS|jrt |dkrt dt|j dS|jr>t |dkr>t |dkrd }n|d}zUtj|r |}z t|d!} t| |j } Wn4tytjd"||ftdYnty tjd#|t|j } Ynwt||j } t d| WdSty=}ztjd$||ftdWYd}~dSd}~wwtjd%||ftddS)&Nr) OptionParserz;[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] )usagez-dz --defaultz!print the default python3 version store_truer})helpactiondestz-sz --supportedz$print the supported python3 versionsrz-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+)rr}rrz%s:r0rgzdebian/controlrz%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 )optparser add_option parse_argsrrrsysargvr}r6printrjr+rexitrrqr=rrrisfilerrrstderrwriter) rrparseroptsargsprogrammsgr/rrFvsrrrmains       r__main__r)F)rr?rrr]raenvironrr%rkrurr'rRr_rbr=rjrrrrrrrrrrrrs6  +   !   A