>e 9dZddlZddlZddlZddlZdedejfdZdefdZGdde Z Gd d Z d e eefd edej ejfd ZGddZGddeZGddeZdS)z>provides information about Ubuntu's and Debian's distributionsNstringreturncd|dD}t|dkr|\}}}tj|||St|dkrO|\}}|dkrtj||dStj||dzdtjdz St d) z9Convert a date string in ISO 8601 into a datetime object.c,g|]}t|S)int.0xs -/usr/lib/python3/dist-packages/distro_info.py z convert_date..s / / /SVV / / /- zDate not in ISO 8601 format.)splitlendatetimedate timedelta ValueError)rpartsyearmonthdays r convert_daters / /V\\#.. / / /E 5zzQ"uc}T5#... 5zzQ u B;;=ub11 1}T519a0083Ea3H3HHH 3 4 44rcdS)z4Get the data directory based on the module location.z/usr/share/distro-inforrrr _get_data_dirr!%s # #rc$eZdZdZdfd ZxZS)DistroDataOutdatedzDistribution data outdated.rNcJtddS)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 r r'zDistroDataOutdated.__init__-s/  M     rrN)__name__ __module__ __qualname____doc__r' __classcell__r*s@r r#r#*sC%%          rr#c8eZdZdZ ddedededejdejejdejejd ejejd ejejd ejejd ejejd dfdZ dejd e fdZ dS) DistroReleasez"Represents a distributions releaseNversioncodenameseriescreatedreleaseeoleol_esmeol_ltseol_elts eol_serverrc ||_||_||_||_||_||_||_| |_||_| |_ dSN) r4r5r6r7r8r9r;r<r:r=) r)r4r5r6r7r8r9r:r;r<r=s r r'zDistroRelease.__init__:sN          $rrch||jko'|jdup||jkp|jduo ||jkS)z:Check whether this release is supported on the given date.N)r7r9r=r)rs r is_supportedzDistroRelease.is_supportedSsLt|# H  Itx It+G0G r)NNNNNN) r,r-r.r/strrrtypingOptionalr'boolrBrrr r3r34s,,37.226263759%%%% %  % / %_X] +%/%/%/(-0%OHM2% %%%%2  4      rr3rowcolumncR||}|sdSt|Sr?)getr)rGrH date_strings r _get_daterL\s,''&//K t  $ $$rc eZdZdZdeddfdZedeefdZddedee j e effd Z d e jdee fd Z dd ed e je jd e jede j e edffdZdded e jede jefdZ dd e je jdede j e effdZded e de j e effdZ dd e je jdede j e effdZ dd e je jdedee j e effdZdedefdZ dd e je jdedee j e effdZdS) DistroInfozzBase class for distribution information. Use DebianDistroInfo or UbuntuDistroInfo instead of using this directly. distrorNc||_tjt |dz}t |d5}tj|}g|_ |D]}t|d|d|dt|dt|dt|d t|d t|d t|d t|d  }|j | dddn #1swxYwYtj|_dS)Nz.csvzutf-8)encodingr4r5r6r7r8r9zeol-esmzeol-ltszeol-eltsz eol-server)_distroospathjoinr!loweropencsv DictReader _releasesr3rrLappendrrtoday_date)r)rOfilenamecsvfile csv_readerrGr8s r r'zDistroInfo.__init__hsu 7<< &1HII (W - - - /00JDN! / /' N OM Y00c9--c5))c9--c9--c:..c<00  %%g.... / / / / / / / / / / / / / / / /"]((** sC D33D7:D7c$d|jDS)z*List codenames of all known distributions.cg|] }|j Srr6r s r r z"DistroInfo.all..s111Q111rrZ)r)s r allzDistroInfo.all~s21$.1111rr5resultc.fdjDS)zList all known distributions.c<g|]}|Sr)_format)r r rfr)s r r z&DistroInfo.get_all..s'@@@A VQ''@@@rrd)r)rfs``r get_allzDistroInfo.get_alls#@@@@@@@@@rrc*fd|jDS)z?Return all distributions that were available on the given date.c*g|]}|jk |Sr)r7r r rs r r z%DistroInfo._avail..s%???aTQY->->->->->rrdrAs `r _availzDistroInfo._avails????4>????rr8defaultc|S)z3Map codename aliases to the codename they describe.rr)r8rros r r5zDistroInfo.codenames rnamecL|jD]}||j|jfvr |jcS|S)z!Map codename or series to version)rZr5r6r4)r)rrror8s r r4zDistroInfo.versions@~ ' 'G('.999&&&:rc|jfd|D}|st|||dS).G   y TAI%5%515=DTUTYMM LYMMrr]rnr#rir)rrfdistross ` r develzDistroInfo.devels <:D    [[&&     '$&& &||FGBK000r format_stringc|dkr|S|dkr|jS|dkr |jdz|jzdz|jzdzS|dkr|jSt d|zd z) z"Format a given distribution entry.objectr5fullname z ""r8zQOnly codename, fullname, object, and release are allowed result values, but not 'z'.)r6rRr4r5r)r)rr8s r rizDistroInfo._formats H $ $N J & &> ! J & &<#%7$>AQQTWW W I % %? " ')6 79= >   rc|jfd|D}|st|||dS)z7Get latest stable distribution based on the given date.Nc\g|](}|j |jk|j |jk&|)Sr?rwrms r r z%DistroInfo.stable..sL   y$):): QUYZY^Q^Q^ Q^Q^Q^rryrzr{s ` r stablezDistroInfo.stabler~rct)z@Get list of all supported distributions based on the given date.)NotImplementedError)r)rrfs r supportedzDistroInfo.supporteds"###rc||jvS)%Check if the given codename is known.)rer)r5s r validzDistroInfo.valids48##rc|j}|fd|D}|S)zBGet list of all unsupported distributions based on the given date.NcNg|]!}|jv |"Sr)r6ri)r r rfr)rs r r z*DistroInfo.unsupported..s4cccqYbIbIb4<<**IbIbIbr)r]rrn)r)rrfr|rs` ` @r unsupportedzDistroInfo.unsupportedsT <:DNN4(( ccccccDKK4E4Ecccr)r5NNr?Nr5)r,r-r.r/rCr'propertylistrerDUnionr3rjrrrnrEr5r4r}rirrrFrrrrr rNrNcs+s+t++++,2T#Y222X2AAcA4 ]TWEW8X3YAAAA@8=@T--@@@@@04(, ohm,%  mS$. / C&/#*>&/Z]J^JT 1 1OHM2 1CF 1 mS( ) 1 1 1 1   +8 mS( )    &JT 1 1OHM2 1CF 1 mS( ) 1 1 1 1 JT$$OHM2$CF$ fl=#-. /$$$$ $c$d$$$$ JTOHM2CF fl=#-. /rrNc eZdZdZdfd Z ddedejej dejedej e edffdZ ddejej d edej e effd Z ddejej d edej e effd Z ddejej d edeej e effd Z ddejej d edeej e effdZ ddejej d edeej e effdZ ddejej d edej e effdZd edefdZxZS)DebianDistroInfoz1provides information about Debian's distributionsrNcJtddS)NDebianr%r(s r r'zDebianDistroInfo.__init__! """""rr8rroc|dkr||S|dkr||S|dkr||S|dkr||S|S)z3Map 'unstable', 'testing', etc. to their codenames.unstabletestingr oldstable)r}rroldrqs r r5zDebianDistroInfo.codenames{ j ::d## # i  <<%% % h  ;;t$$ $ k ! !88D>> !rr5rfc|jfd|D}t|dkrt|||dS)ruNc\g|](}|j|jk|j |jk&|)Sr?rwrms r r z*DebianDistroInfo.devel..rxrrr]rnrr#rir{s ` r r}zDebianDistroInfo.devels| <:D    [[&&    w<. s.___193HTUVU^M^M^1M^M^M^rrrrr{s ` r rzDebianDistroInfo.oldsk <:D____dkk$//___ w<.sC   ()!%-SW[\[`S`S`DLL # #S`S`S`rr]rnr{s``` r rzDebianDistroInfo.supportedsX <:D      -1[[->->   rcdjfdD}|S)zSGet list of all LTS supported Debian distributions based on the given date.Ncg|]<}|j3|jkr(|j|jk&|=Sr?)r9r;rirs r r z2DebianDistroInfo.lts_supported..%sY   !dQUll&419+<+< LL # #,=+<+.4s[    %$*:*:'DAJ,>,> LL # #-?,>,>rrr{s``` r elts_supportedzDebianDistroInfo.elts_supported-rrc|jfd|D}|st|||dS)z?Get latest testing Debian distribution based on the given date.Ncxg|]6}|j|js$|j|jk"|j |jk4|7Sr?)r8r4r9rms r r z,DebianDistroInfo.testing..Bs_    !ai! %$*:*: QUYZY^Q^Q^ R_Q^Q^rryrzr{s ` r rzDebianDistroInfo.testing<ss <:D    [[&&     '$&& &||FGBK000rc@t||p|dvS)r)rrrr)rNrrs r rzDebianDistroInfo.validLs,h// 8@ 4  rr+rr)r,r-r.r/r'rCrDrErrrr3r5r}rrrrrrrFrr0r1s@r rrs;;###### 04(, ohm,%  mS$. / $JT 1 1OHM2 1CF 1 mS( ) 1 1 1 1 JT 1 1OHM2 1CF 1 mS( ) 1 1 1 1JT  OHM2 CF  fl=#-. /    JT  OHM2 CF  fl=#-. /     JT  OHM2 CF  fl=#-. /     JT11OHM21CF1 mS( )1111  c d        rrc BeZdZdZd fd Z d dejejde dej e e ffdZ de de fd Z d dejejde deej e e ffd Z d dejejde deej e e ffd ZxZS)UbuntuDistroInfoz1provides information about Ubuntu's distributionsrNcJtddS)NUbuntur%r(s r r'zUbuntuDistroInfo.__init__Yrrr5rrfc|jfd|jD}|st|||dS)zWGet latest long term support (LTS) Ubuntu distribution based on the given date.Ncg|]J}|jddk |j'|j.|jcxkr |jkEnn|KS)LTSr)r4findr8r9rms r r z(UbuntuDistroInfo.lts..csr   y~~e$$))ai)AE)aiSWF`F`F`F`[\[`F`F`F`F`F` F`F`F`rry)r]rZr#rir{s ` r ltszUbuntuDistroInfo.lts\si <:D    ^     '$&& &||FGBK000rcPfd|jD}|sdSd|djvS)zIs codename an LTS release?c*g|]}|jk |Srrc)r r r5s r r z+UbuntuDistroInfo.is_lts..ns%EEEH0D0D10D0D0DrFrr)rZr4)r)r5r|s ` r is_ltszUbuntuDistroInfo.is_ltsls=EEEEdnEEE 5 ***rcdjfdD}|S)zOGet list of all supported Ubuntu distributions based on the given date.Ncg|]<}|jr |jks|j|jk&|=Sr?)r9r=rirs r r z.UbuntuDistroInfo.supported..zs]    !%--Q\-E$RSR^J^J^ LL # #J^J^J^rrr{s``` r rzUbuntuDistroInfo.supportedsX <:D      [[&&    rcdjfdD}|S)zSGet list of all ESM supported Ubuntu distributions based on the given date.Nc`g|]*}|j |jk|+Sr?)r:rirs r r z2UbuntuDistroInfo.supported_esm..sE   y$):): LL # #):):):rrr{s``` r supported_esmzUbuntuDistroInfo.supported_esmrrr+r)r,r-r.r/r'rDrErrrCrr3rrFrrrrr0r1s@r rrVsV;;######JT11OHM21CF1 mS( )1111 +s+t++++JT  OHM2 CF  fl=#-. /    JT  OHM2 CF  fl=#-. /        rr)r/rXrrSrDrCrrr! Exceptionr#r3dictrErLrNrrrrr rsED   5 5 5 5 5 5$s$$$$         % % % % % % % % P%4S>%3%6?8=3Q%%%%{{{{{{{{|r r r r r zr r r j77777z77777r