o
    ϴf	                     @   sf   d dl Z d dlZd dlmZ ede  G dd de jdZG dd deZ	G d	d
 d
Z
dS )    N)Optional	ubuntuproc                
   @   s4   e Zd Zejdededee dee fddZdS )AbstractProgresstotal_steps
done_stepsprevious_step_messagecurrent_step_messagec                C      d S N selfr   r   r   r   r   r   7/usr/lib/python3/dist-packages/uaclient/api/__init__.pyprogress
   s   	zAbstractProgress.progressN)	__name__
__module____qualname__abcabstractmethodintr   strr   r   r   r   r   r   	   s    r   )	metaclassc                	   @   s.   e Zd Zdededee dee fddZdS )NullProgressr   r   r   r   c                C   r	   r
   r   r   r   r   r   r      s   zNullProgress.progressN)r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   sT   e Zd Zddee fddZdefddZdd	 Zdd
efddZ	de
fddZdS )ProgressWrapperNprogress_objectc                 C   s.   |d ur|| _ nt | _ d| _d| _d | _d S )Nr   )r   r   r   r   r   )r   r   r   r   r   __init__#   s   
zProgressWrapper.__init__messagec                 C   s2   | j j| j| j| j|d || _|  jd7  _d S )Nr   r   r   r      )r   r   r   r   r   )r   r   r   r   r   r   ,   s   zProgressWrapper.progressc                 C   s&   | j | _| jj| j | j| jd d d S )Nr   )r   r   r   r   r   r   r   r   r   finish6   s   
zProgressWrapper.finisheventc                 C   s"   t | jdr| j|| dS dS )z
        This is our secret event system. We use it internally to insert prompts
        and extra messages in the middle of operations at certain points.
        We don't consider this stable enough to expose to the public API.
        	_on_eventN)hasattrr   r#   )r   r"   payloadr   r   r   emit?   s   zProgressWrapper.emitreturnc                 C   s   t | jdr
| jjS dS )Nis_interactiveF)r$   r   r(   r    r   r   r   r(   H   s   zProgressWrapper.is_interactiver
   )r   r   r   r   r   r   r   r   r!   r&   boolr(   r   r   r   r   r   "   s    	
		r   )r   loggingtypingr   	getLogger
addHandlerNullHandlerABCMetar   r   r   r   r   r   r   <module>   s    