o xb]5:@sddlmZddlZddlZddlZddlZddlZddlZd+ddZed,ddZ dZ e d Z d d Z zeWneyJddlZejZYnwd d ZddddddZddZddZddZddZddddddifd d!Zd"d#Zd$d%Zd&d'Zd(d)Zed*kredSdS)-)print_functionNDebiancCszt}Wn tyt}Ynwz td|}Wn |y'td}Ynwt|}dd|Datt a t j dddttt t da |d kr[d a t gd |dS) Nz/usr/share/distro-info/%s.csvz!/usr/share/distro-info/debian.csvcSs"i|] }|dr|d|dqS)versionseries).0rrr-/usr/lib/python3/dist-packages/lsb_release.py .s"z#get_distro_info..cSs t|dSNr)float)nrrr 0s z!get_distro_info..keydebianzunknown.new.testing)stablezproposed-updatestestingztesting-proposed-updatesunstablesid)FileNotFoundError NameErrorIOErroropenlowercsv DictReaderRELEASE_CODENAME_LOOKUPlistitemsRELEASES_ORDERsortzipTESTING_CODENAMEextendclose)originFileNotFoundExceptioncsvfilereaderrrr get_distro_infos&       r+cCsRtd|}|s |St|ddkrd|dd}nd|d}t||S)Nz(\d+)\.(\d+)(r(\d+))?rz%s.%sz%s)rematchintgrouprget)releaseunknownm shortreleaserrr lookup_codename<s  r7z`lsb-core lsb-cxx lsb-graphics lsb-desktop lsb-languages lsb-multimedia lsb-printing lsb-securityzIlsb-(?P[a-z0-9]+)-(?P[^ ]+)(?: \(= (?P[0-9.]+)\))?cCsJ|dkrddgS|dkr|dvrdgS|dkrddgSgdS|dkrE|dkr+ddgS|d kr2dgS|d vr9dgS|dkrAgd Sgd S|d krs|dkrQgdS|d krXdgS|d vr`dd gS|dkrgd gS|dkrogdSgdS|dkr|dkrgdS|d krdgS|d vrgdS|dkrd dgS|dkrgdSgdS|gS)N3.02.03.1)desktopqt4cxx)r9r8r:3.2r;r<)printing languages multimedia)r8r:r>)r9r8r:r>4.0)r:r>rBsecurity)r8r:r>rB)r9r8r:r>rB4.1)r:r>rBrD)r>rBrD)r8r:r>rBrD)r9r8r:r>rBrDr)rmodulerrr valid_lsb_versionsLsVrFc Cstj}d|d<tjgdt|tjtjddd d}|s&gSt }|tj D]S}|s5nN|dd \}}t d |d d}|d D]6}t |}|sUqK|}|d rhd |} || qK|d} t|| D]} | |d <d |} || qqqKq/t|}||S)NCLC_ALL)z dpkg-queryz-fz${Version} ${Provides} z-WTenvstdoutstderr close_fdsrutf-8 rz[-+~],rz%(module)s-%(version)s-%(arch)srE)osenvironcopy subprocessPopenPACKAGESsplitPIPE communicatedecodesetlinesepr. modnameresearch groupdictr2addrFrr") C_envoutputmoduleslinerprovidespkgmobmgroupsrEvrrr check_modules_installedsJ    rjrr'suite componentlabel)rioaclcCsXi}|d}|D] }|dd}t|dkr)|dd\}}|tvr)||t|<q |S)NrP=rr-)rWlen longnames)dataretvalbitsbitkvkrirrr parse_policy_lines    r{cCsT|dd}|r(|tvrtttt|Szt|WSty'YdSwdS)Nrrkr)r2r!r0rsindexr ValueError)xrkrrr release_indexs  rcCsNtjdtddt|}t|}z||WSty&||k||kYSw)Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.r-) stacklevel)warningswarnDeprecationWarningr TypeError)r~y suite_x_i suite_y_irrr compare_releases  rcCsg}tj}d|d<tjddg|tjtjdddd}|d D]1}| }t d |}|r:t | d }|d rV|d d }t|d krV||t|d fq%|S)NzC.UTF-8rHz apt-cachepolicyTrIrrN z(-?\d+)rr3rO)rQrRrSrTrUrXrYrZrWstripr.r/r0r1 startswithrsappendr{)rurarrdr5priorityrwrrr parse_apt_policys.     rmain experimental Debian Portszftp.ports.debian.orgzftp.debian-ports.orgcsxt}|sdSfdd|D}|sdS|jdddd|ddfdd|D}|jtd |dd S) Nc sg|]I}|dddkr,|dddvr,|dddkr,|dddksI|dddvrK|ddd|dddvr|qS)rr'rkrlrm)r2rr~)alternate_olabelsrl ignoresuitesrmr'rr s&z*guess_release_from_apt..cSs|dSr r)tuplerrr rsz(guess_release_from_apt..T)rreversercsg|] }|dkr|qS)rrr) max_priorityrr rsrr)rr"r)r'rlrrmrreleasesr)rrlrrmrr'r guess_release_from_apts    rc Cs6i}d|d<tjdd}tj|rrz>t|0}|D]%}z|dd\}}|}|}|dkr6||d<Wqt y@YqwWdn1sKwYWn t yq}zt d|d t |t jd WYd}~nd}~wwt|dtd }|d vrd ||d<n|dkrd||d<n |dvr||d<nd|d<d||d<tjdd}tj|r)zt|} | } Wdn1swYWn"t y}zt d|d t |t jd d} WYd}~nd}~ww| d ds t| d} || | dn| dr%| ddkr | dad|d<n| |d<|dsyt} | ry| d} | d krX| d!d"krX| d#d$vrXd} | d%d&i| rat| d} n| d%d&} | dkrot} nd'} || | d|dr|dd(|7<|dr|dd)|7<|S)*NrIDLSB_ETC_DPKG_ORIGINS_DEFAULTz/etc/dpkg/origins/defaultz: rvendorUnable to open :filer)LinuxHurdNetBSDzGNU/OSFreeBSDzGNU/k)z GNU/Linuxz GNU/kFreeBSDGNUz %(ID)s %(OS)s DESCRIPTIONLSB_ETC_DEBIAN_VERSIONz/etc/debian_versionr4zn/a)RELEASECODENAMEz/sidrztesting/unstablerrrz1.0r'rrmrrkrrz %(RELEASE)sz (%(CODENAME)s))rQrRr2pathexistsrrWrrr}rprintstrsysrLr+unamereadisalphar7updateendswithrstripr$r) distinfoetc_dpkg_origins_defaultdpkg_origins_filerdheadercontentmsgkernetc_debian_versiondebian_versionr3codenamerinforrr guess_debian_release s    (           *     rc CsHi}tjdd}tj|rzqt|b}|D]U}|}|s qd|vr%q|dd\}}|dr=| dr=|dd}|rl|dkrJ||d<q|d krU||d <q|d krb| |d <q|d krl||d <qWdW|S1sywYW|St y}zt d|dt |tjdWYd}~|Sd}~ww|S)NLSB_OS_RELEASEz/usr/lib/os-releaserrr" VERSION_IDrVERSION_CODENAMErr PRETTY_NAMErrrr)rQrRr2rrrrrWrrtitlerrrrrL)r os_releaseos_release_filerdvarargrrrr get_os_releasehsF     &rcCs4t}dD]}||vrt}|||Sq|S)N)rrrr)rrr)lsbinforrrrr get_distro_informations rcCsttttdSN)rrrjrrrr tests r__main__)rr) __future__rrrTrQr.rrr+r7rVcompiler]rFr[rsetsSetrjrtr{rrrrrrrr__name__rrrr sN    5  (    !^!