
    >e9                        d Z ddlZddlZddlZddlZdedej                  fdZdefdZ G d de	      Z
 G d	 d
      Zdeeef   dedej                  ej                     fdZ G d d      Z G d de      Z G d de      Zy)z>provides information about Ubuntu's and Debian's distributions    Nstringreturnc                    | j                  d      D cg c]  }t        |       }}t        |      dk(  r|\  }}}t        j                  |||      S t        |      dk(  rQ|\  }}|dk(  rt        j                  ||d      S t        j                  ||dz   d      t        j
                  d      z
  S t        d      c c}w )z9Convert a date string in ISO 8601 into a datetime object.-               zDate not in ISO 8601 format.)splitintlendatetimedate	timedelta
ValueError)r   xpartsyearmonthdays         -/usr/lib/python3/dist-packages/distro_info.pyconvert_dater      s    #\\#./SV/E/
5zQ"uc}}T5#..
5zQuB;==ub11}}T519a083E3Ea3HHH
3
44 0s   B=c                       y)z4Get the data directory based on the module location.z/usr/share/distro-info r       r   _get_data_dirr   %   s    #r   c                   $     e Zd ZdZd fdZ xZS )DistroDataOutdatedzDistribution data outdated.c                 $    t         |   d       y )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#   zDistroDataOutdated.__init__-   s    M	
r   r   N)__name__
__module____qualname____doc__r#   __classcell__r&   s   @r   r   r   *   s    %
 
r   r   c                      e Zd ZdZ	 	 	 	 	 	 ddedededej                  dej                  ej                     dej                  ej                     d	ej                  ej                     d
ej                  ej                     dej                  ej                     dej                  ej                     ddfdZ	dej                  de
fdZy)DistroReleasez"Represents a distributions releaseNversioncodenameseriescreatedreleaseeoleol_esmeol_ltseol_elts
eol_serverr   c                     || _         || _        || _        || _        || _        || _        || _        |	| _        || _        |
| _	        y N)
r0   r1   r2   r3   r4   r5   r7   r8   r6   r9   )r%   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   s              r   r#   zDistroRelease.__init__:   sJ       $r   r   c                     || j                   k\  xr@ | j                  du xs0 || j                  k  xs | j                  duxr || j                  k  S )z:Check whether this release is supported on the given date.N)r3   r5   r9   )r%   r   s     r   is_supportedzDistroRelease.is_supportedS   sV    t||# 
HH ItxxIt+G0G	
r   )NNNNNN)r(   r)   r*   r+   strr   r   typingOptionalr#   boolr=   r   r   r   r/   r/   4   s    , 37.226263759%% % 	%
 % /% __X]]+% /% /% //(--0% OOHMM2% 
%2
 
4 
r   r/   rowcolumnc                 @    | j                  |      }|sy t        |      S r;   )getr   )rB   rC   date_strings      r   	_get_daterG   \   s     ''&/K$$r   c                   J   e Zd ZdZdeddfdZedee   fd       Zddedee	j                  eef      fd	Zd
ej                  dee   fdZ	 	 dded
e	j                   ej                     de	j                   e   de	j                  eedf   fdZddede	j                   e   de	j                   e   fdZ	 dd
e	j                   ej                     dede	j                  eef   fdZdedede	j                  eef   fdZ	 dd
e	j                   ej                     dede	j                  eef   fdZ	 dd
e	j                   ej                     dedee	j                  eef      fdZdedefdZ	 dd
e	j                   ej                     dedee	j                  eef      fdZy)
DistroInfozzBase class for distribution information.
    Use DebianDistroInfo or UbuntuDistroInfo instead of using this directly.
    distror   Nc                 V   || _         t        j                  j                  t	               |j                         dz         }t        |d      5 }t        j                  |      }g | _	        |D ]  }t        |d   |d   |d   t        |d         t        |d      t        |d	      t        |d
      t        |d      t        |d      t        |d      
      }| j                  j                  |        	 d d d        t        j                  j!                         | _        y # 1 sw Y   -xY w)Nz.csvzutf-8)encodingr0   r1   r2   r3   r4   r5   zeol-esmzeol-ltszeol-eltsz
eol-server)_distroospathjoinr   loweropencsv
DictReader	_releasesr/   r   rG   appendr   r   today_date)r%   rJ   filenamecsvfile
csv_readerrB   r4   s          r   r#   zDistroInfo.__init__h   s    77<<&1HI(W- 	/0JDN! /'	N
OM Y0c9-c5)c9-c9-c:.c<0 %%g./	/" ]]((*
#	/ 	/s   B$DD(c                 T    | j                   D cg c]  }|j                   c}S c c}w )z*List codenames of all known distributions.)rU   r2   )r%   r   s     r   allzDistroInfo.all~   s      #'..1Q111s   %r1   resultc                 `    | j                   D cg c]  }| j                  ||       c}S c c}w )zList all known distributions.)rU   _format)r%   r^   r   s      r   get_allzDistroInfo.get_all   s%    15@AVQ'@@@s   +r   c                 `    | j                   D cg c]  }||j                  k\  s| c}S c c}w )z?Return all distributions that were available on the given date.)rU   r3   )r%   r   r   s      r   _availzDistroInfo._avail   s%    >>?aTQYY->???s   ++r4   defaultc                     |S )z3Map codename aliases to the codename they describe.r   r%   r4   r   rd   s       r   r1   zDistroInfo.codename   s	     r   namec                 x    | j                   D ]*  }||j                  |j                  fv s|j                  c S  |S )z!Map codename or series to version)rU   r1   r2   r0   )r%   rg   rd   r4   s       r   r0   zDistroInfo.version   s=    ~~ 	'G(('..99&	' r   c                    || j                   }| j                  |      D cg c]:  }|j                  *||j                  k  r|j                  ||j                  k  r|< }}|s
t	               | j                  ||d         S c c}w )<Get latest development distribution based on the given date.rX   rc   r4   r5   r   r`   r%   r   r^   r   distross        r   develzDistroInfo.devel   s     <::D [[&
yy TAII%5155=DTUTYTYM 
 

 $&&||FGBK00
   ?Bformat_stringc                     |dk(  r|S |dk(  r|j                   S |dk(  r/| j                  dz   |j                  z   dz   |j                  z   dz   S |dk(  r|j                  S t	        d|z   d	z         )
z"Format a given distribution entry.objectr1   fullname z ""r4   zQOnly codename, fullname, object, and release are allowed result values, but not 'z'.)r2   rM   r0   r1   r   )r%   rq   r4   s      r   r`   zDistroInfo._format   s     H$NJ&>>!J&<<#%7$>AQAQQTWWWI%??"')679=>
 	
r   c                    || j                   }| j                  |      D cg c]:  }|j                  ,||j                  k\  r|j                  ||j                  k  r|< }}|s
t	               | j                  ||d         S c c}w )z7Get latest stable distribution based on the given date.rk   rl   rm   s        r   stablezDistroInfo.stable   s     <::D [[&
yy$):QUYZY^Y^Q^ 
 

 $&&||FGBK00
rp   c                     t               )z@Get list of all supported distributions based on the given date.)NotImplementedError)r%   r   r^   s      r   	supportedzDistroInfo.supported   s     "##r   c                     || j                   v S )%Check if the given codename is known.)r]   r%   r1   s     r   validzDistroInfo.valid   s    488##r   c                     || j                   }| j                  |      }| j                  |      D cg c]#  }|j                  |vs| j	                  ||      % }}|S c c}w )zBGet list of all unsupported distributions based on the given date.)rX   r{   rc   r2   r`   )r%   r   r^   r{   r   rn   s         r   unsupportedzDistroInfo.unsupported   s^     <::DNN4(	48KK4EcqYbIb4<<*cc ds   AA)r1   NNr;   Nr1   )r(   r)   r*   r+   r>   r#   propertylistr]   r?   Unionr/   ra   r   r   rc   r@   r1   r0   ro   r`   rx   r{   rA   r   r   r   r   r   rI   rI   c   sL   +s +t +, 2T#Y 2 2Ac A4]TWEW8X3Y A@8== @T--@ @ 04(,	 oohmm, %	
 
mS$.	/C &//#*> &//Z]J^  JT1OOHMM21CF1	mS(	)1
 
+8
	mS(	)
& JT1OOHMM21CF1	mS(	)1  JT$OOHMM2$CF$	fll=#-.	/$$c $d $
 JTOOHMM2CF	fll=#-.	/r   rI   c                   $    e Zd ZdZd fdZ	 	 ddedej                  ej                     dej                  e   dej                  eedf   fdZ	 ddej                  ej                     d
edej                  eef   fdZ	 ddej                  ej                     d
edej                  eef   fdZ	 ddej                  ej                     d
edeej                  eef      fdZ	 ddej                  ej                     d
edeej                  eef      fdZ	 ddej                  ej                     d
edeej                  eef      fdZ	 ddej                  ej                     d
edej                  eef   fdZd	edefdZ xZS )DebianDistroInfoz1provides information about Debian's distributionsr   Nc                 $    t         |   d       y )NDebianr!   r$   s    r   r#   zDebianDistroInfo.__init__       "r   r4   r   rd   c                     |dk(  r| j                  |      S |dk(  r| j                  |      S |dk(  r| j                  |      S |dk(  r| j                  |      S |S )z3Map 'unstable', 'testing', etc. to their codenames.unstabletestingrx   	oldstable)ro   r   rx   oldrf   s       r   r1   zDebianDistroInfo.codename   sd     j ::d##i<<%%h;;t$$k!88D>!r   r1   r^   c                 *   || j                   }| j                  |      D cg c]:  }|j                  *||j                  k  r|j                  ||j                  k  r|< }}t	        |      dk  r
t               | j                  ||d         S c c}w )rj   r   )rX   rc   r4   r5   r   r   r`   rm   s        r   ro   zDebianDistroInfo.devel   s     <::D [[&
yy TAII%5155=DTUTYTYM 
 

 w<!$&&||FGBK00
s   ?Bc                     || j                   }| j                  |      D cg c]!  }|j                  ||j                  k\  s |# }}t        |      dk  r
t	               | j                  ||d         S c c}w )z=Get old (stable) Debian distribution based on the given date.r   r   )rX   rc   r4   r   r   r`   rm   s        r   r   zDebianDistroInfo.old  su     <::D"kk$/_1993HTUVU^U^M^1__w<!$&&||FGBK00 `s   A7A7A7c                     || j                   }| j                  |      D cg c]0  }|j                  ||j                  k  s| j                  ||      2 }}|S c c}w )zOGet list of all supported Debian distributions based on the given
        date.)rX   rc   r5   r`   rm   s        r   r{   zDebianDistroInfo.supported  sc    
 <::D-1[[->
()!%%-SW[\[`[`S`DLL#
 
 
s    AAc                     || j                   }| j                  |      D cg c]J  }|j                  <||j                  kD  r-|j                  !||j                  k  r| j	                  ||      L }}|S c c}w )zSGet list of all LTS supported Debian distributions based on the given
        date.)rX   rc   r5   r7   r`   rm   s        r   lts_supportedzDebianDistroInfo.lts_supported  sz    
 <::D [[&
!dQUUl&4199+< LL#
 
 
   AA5c                     || j                   }| j                  |      D cg c]J  }|j                  <||j                  kD  r-|j                  !||j                  k  r| j	                  ||      L }}|S c c}w )z\Get list of all Extended LTS supported Debian distributions based on
        the given date.)rX   rc   r7   r8   r`   rm   s        r   elts_supportedzDebianDistroInfo.elts_supported-  s{    
 <::D [[&
		%$*:'DAJJ,> LL#
 
 
r   c                 B   || j                   }| j                  |      D cg c]R  }|j                  |j                  s6|j                  ,||j                  k  r|j                  ||j                  k  r|T }}|s
t               | j                  ||d         S c c}w )z?Get latest testing Debian distribution based on the given date.rk   )rX   rc   r4   r0   r5   r   r`   rm   s        r   r   zDebianDistroInfo.testing<  s     <::D [[&
		!aii		%$*:QUYZY^Y^Q^ 
 
 $&&||FGBK00
s   ABc                 :    t         j                  | |      xs |dv S )r}   )r   r   rx   r   )rI   r   r~   s     r   r   zDebianDistroInfo.validL  s)    h/ 
8 @
 4
 	
r   r'   r   r   )r(   r)   r*   r+   r#   r>   r?   r@   r   r   r   r/   r1   ro   r   r   r{   r   r   r   rA   r   r,   r-   s   @r   r   r      s    ;# 04(,	 oohmm, %	
 
mS$.	/$ JT1OOHMM21CF1	mS(	)1  JT	1OOHMM2	1CF	1	mS(	)	1 JT
OOHMM2
CF
	fll=#-.	/
 JTOOHMM2CF	fll=#-.	/  JTOOHMM2CF	fll=#-.	/  JT1OOHMM21CF1	mS(	)1 
c 
d 
r   r   c            
       l    e Zd ZdZd fdZ	 ddej                  ej                     de	dej                  ee	f   fdZde	defdZ	 ddej                  ej                     de	deej                  ee	f      fd	Z	 ddej                  ej                     de	deej                  ee	f      fd
Z xZS )UbuntuDistroInfoz1provides information about Ubuntu's distributionsr   c                 $    t         |   d       y )NUbuntur!   r$   s    r   r#   zUbuntuDistroInfo.__init__Y  r   r   r1   r   r^   c                 L   || j                   }| j                  D cg c]\  }|j                  j                  d      dk\  r<|j                  r0|j
                  r$|j                  |cxk  r|j
                  k  rn n|^ }}|s
t               | j                  ||d         S c c}w )zWGet latest long term support (LTS) Ubuntu distribution based on the
        given date.LTSr   rk   )rX   rU   r0   findr4   r5   r   r`   rm   s        r   ltszUbuntuDistroInfo.lts\  s    
 <::D ^^
yy~~e$)aiiAEEaiiSWF`[\[`[`F` 
 

 $&&||FGBK00
s   A!B!c                     | j                   D cg c]  }|j                  |k(  s| }}|syd|d   j                  v S c c}w )zIs codename an LTS release?Fr   r   )rU   r2   r0   )r%   r1   r   rn   s       r   is_ltszUbuntuDistroInfo.is_ltsl  sE    "nnEH0D1EE
**** Fs   >>c                     || j                   }| j                  |      D cg c]J  }|j                  r||j                  k  s|j                  !||j                  k  r| j	                  ||      L }}|S c c}w )zOGet list of all supported Ubuntu distributions based on the given
        date.)rX   rc   r5   r9   r`   rm   s        r   r{   zUbuntuDistroInfo.supporteds  sy    
 <::D [[&
$!%%-Q\\-E$RSR^R^J^ LL#
 

 
r   c                     || j                   }| j                  |      D cg c]/  }|j                  !||j                  k  r| j                  ||      1 }}|S c c}w )zSGet list of all ESM supported Ubuntu distributions based on the
        given date.)rX   rc   r6   r`   rm   s        r   supported_esmzUbuntuDistroInfo.supported_esm  sf    
 <::D [[&
yy$): LL#
 

 
s   4Ar'   r   )r(   r)   r*   r+   r#   r?   r@   r   r   r>   r   r/   r   rA   r   r   r{   r   r,   r-   s   @r   r   r   V  s    ;# JT1OOHMM21CF1	mS(	)1 +s +t + JTOOHMM2CF	fll=#-.	/ JTOOHMM2CF	fll=#-.	/r   r   )r+   rS   r   rN   r?   r>   r   r   r   	Exceptionr   r/   dictr@   rG   rI   r   r   r   r   r   <module>r      s    E 
  	 5 5 5$s $

 
%
 %
P%4S> %3 %6??8==3Q %{ {|r
z r
j7z 7r   