U zk^-@sddlZddlZddlZdadadaddejdddDa da d!ddZ d d Z d"d d Z d#ddZd$ddZd%ddZd&ddZd'ddZGdddeZGdddeZddZddZed kredS)(NcCs g|]}|rd|qSzpython%sstrip).0Zverr!/usr/share/python3/py3versions.py srZDEBPYTHON3_SUPPORTED,cCs~ddlm}m}tsDtjdrD|}td}||| |atrz|rzzt 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 sht|ddkrtdddl}|j|j|j|j|jd}i}t}tt dd}d}|dD]}| }|d krxqb|d krqb| d tt d }||} zx| std | d| d} d\} } t| dkrWqb| dkr|n d}|| fdd|D}Wqbtk r:td YqbXqbd |krd||d <|rd|||d <|S)Nr zDtoo 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)ravZfiltopvrrrGs z"parse_versions..)lensplitroperatoreqgeleltsetsupported_versionsr setdefaultrecompilematchgroupintadd Exceptionunion) vstringr&Z operatorsvinfoZexact_versionsZ version_rangeZ relop_seenZfieldZvemopZvmajZvminrr"rparse_versions'sP     r:FcCsXts>z td}dd|dDaWntk r<gaYnX|rPddtDStSdS)Nz old-versionscSsg|] }|qSrrrsrrrrVsz old_versions..r cSsg|]}|ddqSNrrr#rrrrZs) _old_versionsrr%rrrrrr old_versionsQs rBcCsXts>z td}dd|dDaWntk r<gaYnX|rPddtDStSdS)Nzunsupported-versionscSsg|] }|qSrrr;rrrrdsz(unsupported_versions..r cSsg|]}|ddqSr=rr?rrrrhs)_unsupported_versionsrr%rrArrrunsupported_versions_s rDc Cs"ttsz td}dd|dDaWntk rddddg}z&d dl}|j|d d |jd }|j}Wn$t k rt d |}YnXd}|D](}| dr|dd d d}q|dd|D}|aYnXttt}tt||rddtDStSdS)Nzsupported-versionscSsg|] }|qSrrr;rrrrssz&supported_versions..r z/usr/bin/apt-cachez--no-all-versionsZshowz python3-allrrF)bufsizeshellstdout zDepends::cSsg|]}tdd|qS)z\s*(\S+)[ (]?.*z\1)r.subr;rrrrscSsg|]}|ddqSr=rr?rrrrs)default_version_supported_versionsrr%r subprocessPopenPIPErG ImportErrorrpopenjoin startswithrrpopindex_default_versionsortappend) rrcmdrMpfdZdependslinedefaultrrrr,ms@    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 %sr>)rVrreadlinkrrrRr)rZdebian_defaultrrrrKs  rKcCstd}t|}tdd}t|dkr|d|}g}|D]}||q>z||tdd}Wnd}YnX| |r||nt d|st d|r|Sd d |DSdS) NTrrrr>r z/No supported python3 versions in version stringzempty set of versionscSsg|] }d|qSrrr?rrrrsz&requested_versions..) rKr:r,r$ intersectionrXrTrUrVrWr)r6rrr7 supportedZvlversionr]rrrrequested_versionss,     rbcsHddl}tfdd|dD}||r@dd|DS|SdS)Nrcs(g|] }tj|krtj|qSr)rrbasenamer;r`rrrsz&installed_versions..z/usr/bin/python3.[0-9]cSsg|]}|ddqSr=rr?rrrrs)globr,rW)rrerrrdrinstalled_versionss rfc@s eZdZdS)ControlFileValueErrorN__name__ __module__ __qualname__rrrrrgsrgc@s eZdZdS)MissingVersionValueErrorNrhrrrrrlsrlc Csd}d}d}t|dd}dd|D}W5QRX|D]|}|dkr\|dkr\|dkrVqd}q6|drld}q6|d |r|}q6|d r6|dkrtd |d d d }q6|dkrtd|dkr|dkrtd|S|S)zFread the debian/control file, extract the X-Python3-Version field.Nzutf-8)encodingcSsg|] }|qSrr)rr\rrrrsz/extract_pyversion_attribute..r SourcezSource:z Package: zx-python3-version:z1attribute X-Python3-Version not in Source sectionrIrznot a control filez$no X-Python3-Version in control file)rrSlowerrr%rrgrl)fnpkgraZsversionZsectionZ controlfilelinesr\rrrextract_pyversion_attributes2 rsc Csddlm}d}||d}|jddddd d |jd d d ddd |jdddddd |jdddddd |jddddddd|\}}tjtjd}|j rt |dkrzt t |j Wn<tk r}zt d||tdW5d}~XYnXn|jr6t |dkr6t dt|j nt|jrdt |dkrdt dt|j nF|jrt |dkrt |dkrd }n|d}ztj|r*|}zt|d!} t| |j } Wnbtk rtjd"||ftdYn0tk r&tjd#|t|j } YnXn t||j } t d| WnBtk r}z"tjd$||ftdW5d}~XYnXntjd%||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 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)Fr)rwr]rxryz%s:rrHzdebian/controlrnz%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 )ZoptparsertZ add_option parse_argsrrrcsysargvr]r$printrKrrexitr`rRr,r{rfrzisfilersrbrgstderrwriterl) rtruparserZoptsargsZprogrammsgrrpr6Zvsrrrmain s      r__main__)N)F)F)F)F)F)F)rr.r}r r@rCenvironrr%rLrVrr:rBrDr,rKrbrfrrgrlrsrrirrrrs. *   !   =A