>e 9dZddlZddlZddlZddlZdedej fdZdefdZGdde Z Gd d Z d e eefd edejej fd ZGddZGddeZGddeZy)z>provides information about Ubuntu's and Debian's distributionsNstringreturnc|jdDcgc] }t|}}t|dk(r|\}}}tj|||St|dk(rQ|\}}|dk(rtj||dStj||dzdtj dz St dcc}w)z9Convert a date string in ISO 8601 into a datetime object.- zDate not in ISO 8601 format.)splitintlendatetimedate timedelta ValueError)rxpartsyearmonthdays -/usr/lib/python3/dist-packages/distro_info.py convert_daters#\\#. /SV /E / 5zQ"uc}}T5#.. 5zQ u B;==ub1 1}}T519a083E3Ea3HHH 3 44 0sB=cy)z4Get the data directory based on the module location.z/usr/share/distro-inforr _get_data_dirr%s #rc$eZdZdZdfd ZxZS)DistroDataOutdatedzDistribution data outdated.c$t|dy)NzDistribution data outdated. Please check for an update for distro-info-data. See /usr/share/doc/distro-info-data/README.Debian for details.super__init__self __class__s rr#zDistroDataOutdated.__init__-s  M rrN)__name__ __module__ __qualname____doc__r# __classcell__r&s@rrr*s%  rrceZdZdZ ddedededej dejej dejej d ejej d ejej d ejej d ejej d dfdZ dej d e fdZ y) DistroReleasez"Represents a distributions releaseNversioncodenameseriescreatedreleaseeoleol_esmeol_ltseol_elts eol_serverrc ||_||_||_||_||_||_||_| |_||_| |_ yN) r0r1r2r3r4r5r7r8r6r9) r%r0r1r2r3r4r5r6r7r8r9s rr#zDistroRelease.__init__:sJ          $rrc||jk\xr@|jduxs0||jkxs|jduxr||jkS)z:Check whether this release is supported on the given date.N)r3r5r9)r%rs r is_supportedzDistroRelease.is_supportedSsVt||# HH  Itxx It+G0G r)NNNNNN) r(r)r*r+strrrtypingOptionalr#boolr=rrrr/r/4s,37.226263759%%% %  % / %__X]] +%/%/%//(--0%OOHMM2% %2  4 rr/rowcolumnc@|j|}|syt|Sr;)getr)rBrC date_strings r _get_daterG\s ''&/K   $$rc JeZdZdZdeddfdZedeefdZddedee je effd Z d e jdee fd Z dd ed e j e jd e j ede je edffdZdded e j ede j efdZ dd e j e jdede je effdZded e de je effdZ dd e j e jdede je effdZ dd e j e jdedee je effdZdedefdZ dd e j e jdedee je effdZy) DistroInfozzBase class for distribution information. Use DebianDistroInfo or UbuntuDistroInfo instead of using this directly. distrorNcV||_tjjt |j dz}t |d5}tj|}g|_ |D]}t|d|d|dt|dt|dt|d t|d t|d t|d t|d  }|jj| dddtjj!|_y#1swY-xYw)Nz.csvzutf-8)encodingr0r1r2r3r4r5zeol-esmzeol-ltszeol-eltsz eol-server)_distroospathjoinrloweropencsv DictReader _releasesr/rrGappendrrtoday_date)r%rJfilenamecsvfile csv_readerrBr4s rr#zDistroInfo.__init__hs 77<< &1HI (W - /0JDN! /' N OM Y0c9-c5)c9-c9-c:.c<0 %%g. / /"]]((* # / /s B$DD(cT|jDcgc]}|jc}Scc}w)z*List codenames of all known distributions.)rUr2)r%rs rallzDistroInfo.all~s #'..1Q111s%r1resultc`|jDcgc]}|j||c}Scc}w)zList all known distributions.)rU_format)r%r^rs rget_allzDistroInfo.get_alls%15@A VQ'@@@s+rc`|jDcgc]}||jk\s|c}Scc}w)z?Return all distributions that were available on the given date.)rUr3)r%rrs r_availzDistroInfo._avails%>>?aTQYY->???s++r4defaultc|S)z3Map codename aliases to the codename they describe.rr%r4rrds rr1zDistroInfo.codenames rnamecx|jD]*}||j|jfvs|jcS|S)z!Map codename or series to version)rUr1r2r0)r%rgrdr4s rr0zDistroInfo.versions=~~ 'G(('..99& 'rc| |j}|j|Dcgc]:}|j*||jkr|j||jkr|<}}|s t |j ||dScc}w)> ! J &<<#%7$>AQAQQTWW W I %?? " ')6 79= >  rc| |j}|j|Dcgc]:}|j,||jk\r|j||jkr|<}}|s t |j ||dScc}w)z7Get latest stable distribution based on the given date.rkrlrms rstablezDistroInfo.stables <::D[[& yy$): QUYZY^Y^Q^   $& &||FGBK00 rpct)z@Get list of all supported distributions based on the given date.)NotImplementedError)r%rr^s r supportedzDistroInfo.supporteds "##rc||jvS)%Check if the given codename is known.)r]r%r1s rvalidzDistroInfo.valids488##rc| |j}|j|}|j|Dcgc]#}|j|vs|j ||%}}|Scc}w)zBGet list of all unsupported distributions based on the given date.)rXr{rcr2r`)r%rr^r{rrns r unsupportedzDistroInfo.unsupporteds^ <::DNN4( 48KK4EcqYbIb4<<*ccds AA)r1NNr;Nr1)r(r)r*r+r>r#propertylistr]r?Unionr/rarrrcr@r1r0ror`rxr{rArrrrrrIrIcsL+s+t+,2T#Y22AcA4 ]TWEW8X3YA@8==@T--@@04(, oohmm,%  mS$. / C&//#*>&//Z]J^JT 1OOHMM2 1CF 1 mS( ) 1   +8 mS( ) &JT 1OOHMM2 1CF 1 mS( ) 1 JT$OOHMM2$CF$ fll=#-. /$ $c$d$ JTOOHMM2CF fll=#-. /rrIc $eZdZdZdfd Z ddedejejdejedeje edffdZ ddejejd edeje effd Z ddejejd edeje effd Z ddejejd edeeje effd Z ddejejd edeeje effdZ ddejejd edeeje effdZ ddejejd edeje effdZd edefdZxZS)DebianDistroInfoz1provides information about Debian's distributionsrNc$t|dy)NDebianr!r$s rr#zDebianDistroInfo.__init__ "rr4rrdc|dk(r|j|S|dk(r|j|S|dk(r|j|S|dk(r|j|S|S)z3Map 'unstable', 'testing', etc. to their codenames.unstabletestingrx oldstable)rorrxoldrfs rr1zDebianDistroInfo.codenamesd j ::d# # i <<% % h ;;t$ $ k !88D> !rr1r^c*| |j}|j|Dcgc]:}|j*||jkr|j||jkr|<}}t |dkr t |j ||dScc}w)rjr)rXrcr4r5rrr`rms rrozDebianDistroInfo.devels <::D[[& yy TAII%5155=DTUTYTYM   w ()!%%-SW[\[`[`S`DLL #   s AAc| |j}|j|Dcgc]J}|j<||jkDr-|j!||jkr|j ||L}}|Scc}w)zSGet list of all LTS supported Debian distributions based on the given date.)rXrcr5r7r`rms r lts_supportedzDebianDistroInfo.lts_supportedsz <::D[[& !dQUUl&4199+< LL #    AA5c| |j}|j|Dcgc]J}|j<||jkDr-|j!||jkr|j ||L}}|Scc}w)z\Get list of all Extended LTS supported Debian distributions based on the given date.)rXrcr7r8r`rms relts_supportedzDebianDistroInfo.elts_supported-s{ <::D[[&  %$*:'DAJJ,> LL #    rcB| |j}|j|Dcgc]R}|j |js6|j,||jkr|j||jkr|T}}|s t |j ||dScc}w)z?Get latest testing Debian distribution based on the given date.rk)rXrcr4r0r5rr`rms rrzDebianDistroInfo.testing<s <::D[[&  !aii %$*: QUYZY^Y^Q^   $& &||FGBK00 sABc:tj||xs|dvS)r})rrrxr)rIrr~s rrzDebianDistroInfo.validLs)h/ 8@ 4  rr'rr)r(r)r*r+r#r>r?r@rrrr/r1rorrr{rrrrArr,r-s@rrrs;# 04(, oohmm,%  mS$. / $JT 1OOHMM2 1CF 1 mS( ) 1 JT 1OOHMM2 1CF 1 mS( ) 1JT OOHMM2 CF  fll=#-. / JT OOHMM2 CF  fll=#-. /  JT OOHMM2 CF  fll=#-. /  JT1OOHMM21CF1 mS( )1  c d rrc leZdZdZd fd Z d dej ejde deje e ffdZ de de fdZ d dej ejde deeje e ffd Z d dej ejde deeje e ffd ZxZS) UbuntuDistroInfoz1provides information about Ubuntu's distributionsrc$t|dy)NUbuntur!r$s rr#zUbuntuDistroInfo.__init__Yrrr1rr^cL| |j}|jDcgc]\}|jjddk\r<|jr0|j r$|j|cxkr|j krnn|^}}|s t |j||dScc}w)zWGet latest long term support (LTS) Ubuntu distribution based on the given date.LTSrrk)rXrUr0findr4r5rr`rms rltszUbuntuDistroInfo.lts\s <::D^^ yy~~e$)aiiAEEaiiSWF`[\[`[`F`   $& &||FGBK00 sA!B!c|jDcgc]}|j|k(s|}}|syd|djvScc}w)zIs codename an LTS release?Frr)rUr2r0)r%r1rrns ris_ltszUbuntuDistroInfo.is_ltslsE"nnEH0D1EE ****Fs>>c| |j}|j|Dcgc]J}|jr||jks|j!||jkr|j ||L}}|Scc}w)zOGet list of all supported Ubuntu distributions based on the given date.)rXrcr5r9r`rms rr{zUbuntuDistroInfo.supportedssy <::D[[& $!%%-Q\\-E$RSR^R^J^ LL #    rc| |j}|j|Dcgc]/}|j!||jkr|j||1}}|Scc}w)zSGet list of all ESM supported Ubuntu distributions based on the given date.)rXrcr6r`rms r supported_esmzUbuntuDistroInfo.supported_esmsf <::D[[& yy$): LL #    s4Ar'r)r(r)r*r+r#r?r@rrr>rr/rrArrr{rr,r-s@rrrVs;#JT1OOHMM21CF1 mS( )1 +s+t+JT OOHMM2 CF  fll=#-. / JT OOHMM2 CF  fll=#-. / rr)r+rSrrNr?r>rrr Exceptionrr/dictr@rGrIrrrrrrsE   5 5 5$s$   % % P%4S>%3%6??8==3Q%{{|r zr j7z7r