a xb]5:@sddlmZddlZddlZddlZddlZddlZddlZd+ddZed,ddZ dZ e d Z d d Z zeWn eyddlZejZYn0d d ZddddddZddZddZddZddZddddddifd d!Zd"d#Zd$d%Zd&d'Zd(d)Zed*kredS)-)print_functionNDebiancCszt}Wntyt}Yn0ztd|}Wn|yNtd}Yn0t|}dd|Datt a t j dddttt t da |d krd a t gd |dS) Nz/usr/share/distro-info/%s.csvz!/usr/share/distro-info/debian.csvcSs"i|]}|dr|d|dqS)versionZseries).0rrr-/usr/lib/python3/dist-packages/lsb_release.py .z#get_distro_info..cSs t|dSNr)float)nrrr0r z!get_distro_info..keyZdebianzunknown.new.testing)Zstablezproposed-updatestestingztesting-proposed-updatesunstablesid)FileNotFoundError NameErrorIOErroropenlowercsvZ DictReaderRELEASE_CODENAME_LOOKUPlistitemsRELEASES_ORDERsortzipTESTING_CODENAMEextendclose)originZFileNotFoundExceptionZcsvfilereaderrrrget_distro_infos"      r&cCsRtd|}|s|St|ddkr8d|dd}nd|d}t||S)Nz(\d+)\.(\d+)(r(\d+))?rz%s.%sz%s)rematchintgrouprget)releaseunknownmZ shortreleaserrrlookup_codename<s r1z`lsb-core lsb-cxx lsb-graphics lsb-desktop lsb-languages lsb-multimedia lsb-printing lsb-securityzIlsb-(?P[a-z0-9]+)-(?P[^ ]+)(?: \(= (?P[0-9.]+)\))?cCsb|dkrddgS|dkrB|dvr&dgS|dkr6ddgSgdSn|dkr|dkrZddgS|d krhdgS|d vrvdgS|dkrgd Sgd Sn|d kr|dkrgdS|d krdgS|d vrdd gS|dkrd gS|dkrgdSgdSnj|dkr\|dkrgdS|d krdgS|d vr0gdS|dkrBd dgS|dkrTgdSgdS|gS)N3.02.03.1)desktopqt4Zcxx)r3r2r43.2r5r6)Zprinting languagesZ multimedia)r2r4r7)r3r2r4r74.0)r4r7r9Zsecurity)r2r4r7r9)r3r2r4r7r94.1)r4r7r9r:)r7r9r:)r2r4r7r9r:)r3r2r4r7r9r:r)rmodulerrrvalid_lsb_versionsLsV           r<c Cstj}d|d<tjgdt|tjtjddd d}|sLgSt }|tj D]}|slq|dd \}}t d |d d}|d D]l}t |}|sq|}|d rd |} || q|d} t|| D]} | |d <d |} || qqq^t|}||S)NCLC_ALL)z dpkg-queryz-fz${Version} ${Provides} z-WTenvstdoutstderrZ close_fdsrutf-8 rz[-+~],rz%(module)s-%(version)s-%(arch)sr;)osenvironcopy subprocessPopenPACKAGESsplitPIPE communicatedecodesetlinesepr) modnameresearch groupdictr-addr<rr) C_envoutputmoduleslinerZprovidesZpkgZmobZmgroupsr;vrrrcheck_modules_installedsF   r[rr$suite componentlabel)rZoaclcCsXi}|d}|D]@}|dd}t|dkr|dd\}}|tvr||t|<q|S)NrE=rr()rLlen longnames)dataZretvalbitsbitZkvkrZrrrparse_policy_lines   rjcCsT|dd}|rP|tvr0tttt|Sz t|WStyNYdS0dS)Nrr\r)r-rr+rdindexr ValueError)xr\rrr release_indexs  rncCsRtjdtddt|}t|}z ||WStyL||k||kYS0dS)Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.r() stacklevel)warningswarnDeprecationWarningrn TypeError)rmyZ suite_x_iZ suite_y_irrrcompare_releases  rucCsg}tj}d|d<tjddg|tjtjdddd}|d D]b}| }t d |}|rtt | d }|d rJ|d d }t|d krJ||t|d fqJ|S)NzC.UTF-8r>z apt-cachepolicyTr?rrC z(-?\d+)rr.rD)rFrGrHrIrJrMrNrOrLstripr)r*r+r, startswithrdappendrj)rfrVrvrYr0priorityrgrrrparse_apt_policys,     r|mainZ experimental Debian Portszftp.ports.debian.orgzftp.debian-ports.orgcsxt}|sdSfdd|D}|s0dS|jdddd|ddfdd|D}|jtd |dd S) Nc sg|]}|dddkrX|dddvrX|dddkrX|dddks|dddvr|ddd|dddvr|qS)rr$r\r]r^)r-rrm)alternate_olabelsr] ignoresuitesr^r$rr s&z*guess_release_from_apt..cSs|dSr r)tuplerrrrr z(guess_release_from_apt..T)rreversercsg|]}|dkr|qS)rrr) max_priorityrrrr rr)r|rrn)r$r]rr^rZreleasesr)rr]rr^rr$rguess_release_from_apts   rc CsBi}d|d<tjdd}tj|rz~t|b}|D]L}z4|dd\}}|}|}|dkrl||d<Wq6t yYq60q6Wdn1s0YWn@t y}z(t d|d t |t jd WYd}~n d}~00t|dtd }|d vrd ||d<n4|dkr.d||d<n|dvrB||d<nd|d<d||d<tjdd}tj|r^z:t|} | } Wdn1s0YWnFt y}z,t d|d t |t jd d} WYd}~n d}~00| d ds"t| d} || | dn<| drV| ddkrL| dad|d<n| |d<|dst} | r| d} | d kr| d!d"kr| d#d$vrd} | d%d&i| rt| d} n | d%d&} | dkrt} nd'} || | d|dr|dd(|7<|dr>|dd)|7<|S)*NrIDZLSB_ETC_DPKG_ORIGINS_DEFAULTz/etc/dpkg/origins/defaultz: rZvendorUnable to open :filer)ZLinuxZHurdZNetBSDzGNU/ZOSZFreeBSDzGNU/k)z GNU/Linuxz GNU/kFreeBSDZGNUz %(ID)s %(OS)s DESCRIPTIONZLSB_ETC_DEBIAN_VERSIONz/etc/debian_versionr/zn/a)RELEASECODENAMEz/sidrztesting/unstablerrrz1.0r$r~r^rr\rrz %(RELEASE)sz (%(CODENAME)s))rFrGr-pathexistsrrLrrxrlrprintstrsysrBr&unamereadisalphar1updateendswithrstripr!r) distinfoZetc_dpkg_origins_defaultZdpkg_origins_filerYheaderZcontentmsgZkernZetc_debian_versionZdebian_versionr.codenameZrinforrrguess_debian_release s|    *2        0      *     rc CsDi}tjdd}tj|r@zt|}|D]}|}|sBq0d|vrLq0|dd\}}|dr|| dr||dd}|r0|dkr||d<q0|d kr||d <q0|d kr| |d <q0|d kr0||d <q0Wdn1s0YWnBt y>}z(t d|dt |tjdWYd}~n d}~00|S)NZLSB_OS_RELEASEz/usr/lib/os-releasercr"Z VERSION_IDrZVERSION_CODENAMErrZ PRETTY_NAMErrrr)rFrGr-rrrrxrLryrtitlerrrrrB)rZ os_releaseZos_release_filerYvarargrrrrget_os_releasehs4  02rcCs4t}dD]$}||vr t}|||Sq |S)N)rrrr)rrr)Zlsbinforrrrrget_distro_informations  rcCsttttdS)N)rrr[rrrrtests r__main__)r)N)Z __future__rrrIrFr)rprr&r1rKcompilerRr<rPrZsetsSetr[rerjrnrur|rrrrr__name__rrrrsH    5  (    !^!