a
    Dc``A(                     @   sL   d dl Z d dlZd dlZd dlZd dlZd dlmZ G dd dZdgZdS )    N)_c                   @   sN   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd Zdd Z	dd Z
dS )	ALCConfigc                 C   s   d| _ d| _d | _d| _d | _d| _d| _d| _d| _d| _	d| _
d | _d| _d | _d | _d| _d| _d| _d| _d| _d| _d| _d | _g d| _g d| _g d	| _d
| _d| _d| _d| _d S )NFpagertextbothTz/var/log/apt/listchanges.log)confirmdebugshow_allheadersverbosereverse	dump_seenselect_frontend
no_networkignore_apt_assumeignore_debian_frontendtitled)	frontendemail_addressemail_formatlatestlogfilter	save_seensincewhich)Zbrowserr   Zxtermr   )r   Zhtml)r   ZnewsZ
changelogs)apt_moder   profiler   r   r   r   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   
_bool_opts_value_opts_cfgfile_only_optsquietfrontend_from_env_allowed_email_formats_allowed_which)self r&   '/usr/share/apt-listchanges/ALCConfig.py__init__!   s<    


zALCConfig.__init__c                 C   s   t  | _| j| d S N)configparserZConfigParserparserread)r%   filer&   r&   r'   r,   f   s    
zALCConfig.readc                 C   s   | j | jr| j | jD ]z}d }| j | j|r|| jv rP| j | j|}n:|| jv sd|| jv rv| j 	| j|}nt
td|  qt| || qd S )Nz%Unknown configuration file option: %s)r+   Zhas_sectionr   ZoptionsZ
has_optionr   Z
getbooleanr   r    getALCLogZwarningr   setattr)r%   optionvaluer&   r&   r'   exposej   s    
zALCConfig.exposeNc                 C   s   t | ||S r)   )getattr)r%   r1   Zdefvaluer&   r&   r'   r.   x   s    zALCConfig.getc                 C   s2   |dkrt j}nt j}|td t | d S )Nr   z<Usage: apt-listchanges [options] {--apt | filename.deb ...}
)sysstdoutstderrwriter   exit)r%   ZexitcodeZfhr&   r&   r'   usage{   s
    zALCConfig.usagec                 C   s:   ||v r|S t td||d|d  td d S )NzGUnknown argument %(arg)s for option %(opt)s.  Allowed are: %(allowed)s.z, )argoptallowed   )r/   errorr   joinr5   r9   )r%   r;   r<   r=   r&   r&   r'   _check_allowed   s    
zALCConfig._check_allowedc                 C   s   | j s| jrd S |s| d |D ]}tj|d }|dkr^ttdd|i  t	
d tj|sttdd|i  t	
d t|tjs"ttdd|i  t	
d q"d S )Nr>   z.debz&%(deb)s does not have '.deb' extensiondebz'%(deb)s does not exist or is not a filez%(deb)s is not readable)r   r   r:   ospathsplitextr/   r?   r   r5   r9   isfileaccessR_OK)r%   ZdebsrB   Zextr&   r&   r'   _check_debs   s    


zALCConfig._check_debsc           
   
   C   s"  zBt  |dd  dg ddd | jD  dd | jD  \}}W n> t jy } z$tt| td W Y d }~n
d }~0 0 |D ]&\}}|dkr|| _	q|dkrd	| _
q| j	d u r| j
rd
| _	nd| _	|   dtjv rtd| _d	| _d	| _d\}}}	|D ]\}}|dkr&| d q|dv r:d	| _q|dv rN|| _q|dkrb|| _q|dkr| ||| j| _q|dv rd	| _q|dv r|}q|dv r|}q|dv rd	}	q|dv rd	| _n|dv r|| _n|dkrd	| _n|dkr | ||| j| _n|dkr2d	| _n|dkrDd	| _n|dv rVd	| _ n||dkrhd	| _!nj|d krzd	| _"nX|d!krd	| _nF|d"krd	| _#n4|d#krd$| _#n"|d%v r|| _$n|d&v r|| _%q| jd'krd | _| jd'krd | _| j&d ur| j's|d ur8|	r8tt(d( td n|d usH|	rT|| _&|	| _'| j&d urt)|dkrtt(d) td d | _| j*d ur| j's|d ur|	rtt(d* td n|d us|	r|| _*|	| _'| j
r| jstd+d,d-krd| _+d$| _| ,| |S ).Nr>   zvf:s:cah)aptzprofile=helpallz
save_seen=c                 S   s   g | ]}| d dqS )r   -replace.0xr&   r&   r'   
<listcomp>       z$ALCConfig.getopt.<locals>.<listcomp>c                 S   s   g | ]}| d dd qS )r   rM   =rN   rP   r&   r&   r'   rS      rT   z	--profilez--aptTrJ   ZcmdlineZAPT_LISTCHANGES_FRONTEND)NNFz--helpr   )z-vz	--verbose)z-fz
--frontendz--email-addressz--email-format)z-cz	--confirmz--sincez--latest)z-az
--show-allz--all)z-hz	--headers)z--save-seenz--save_seenz--dump-seenz--whichz--debugz	--reverse)z-nz--no-networkz--select-frontendz--ignore-apt-assumez--ignore-debian-frontendz--titledz
--untitledFz--logz--filterZnonez7--since=<version> and --show-all are mutually exclusivez<--since=<version> expects a path to exactly one .deb archivez2--latest=<N> and --show-all are mutually exclusiveZDEBIAN_FRONTEND Znoninteractive)-getoptr   r   ZGetoptErrorr/   r?   strr5   r9   r   r   r3   rC   environgetenvr   r"   r   r:   r   r   rA   r#   r   r   r
   r   r   r$   r   r   r   r   r   r   r   r   r   r   r	   r   lenr   r!   rI   )
r%   argvZoptlistargserrr<   r;   r   r   r	   r&   r&   r'   rW      s    
 
































zALCConfig.getopt)N)__name__
__module____qualname__r(   r,   r3   r.   r:   rA   rI   rW   r&   r&   r&   r'   r       s   E
	r   )	r*   rW   r5   rC   r/   ZALChacksr   r   __all__r&   r&   r&   r'   <module>   s    }