o
    S`v                     @   sF   d dl Z d dlZd dlZd dlmZ dd Zdd ZG dd dZdS )	    N)chainc                 C   s6   dd | D } dd |  D }ddt| |S )Nc                 s   s    | ]}t |V  qd S N)repr).0a r   ;/usr/lib/python3/dist-packages/compose/cli/verbose_proxy.py	<genexpr>   s    zformat_call.<locals>.<genexpr>c                 s   s    | ]}d j | V  qdS )z	{!s}={!r}N)format)r   itemr   r   r   r	   	   s    z({})z, )itemsr
   joinr   )argskwargsr   r   r   format_call   s   r   c                 C   sh   t | tttfrdt| jt| S | r2t	| 
d}t||kr%dnd}d|d | | S | S )Nz({} with {} items)
z
... )
isinstancelisttuplesetr
   type__name__lenpprintpformatsplitr   )result	max_lineslinesextrar   r   r   format_return   s   r!   c                   @   s*   e Zd ZdZd
ddZdd Zdd	 ZdS )VerboseProxyzrProxy all function calls to another class and log method name, arguments
    and return values for each call.
    N
   c                 C   s&   || _ || _|| _t|pt| _d S r   )obj_nameobjr   logging	getLoggerr   log)selfr$   r%   log_namer   r   r   r   __init__   s   zVerboseProxy.__init__c                 C   s&   t | j|}t|s|S t| j|S r   )getattrr%   callable	functoolspartialproxy_callable)r)   nameattrr   r   r   __getattr__$   s   zVerboseProxy.__getattr__c                 O   sP   | j d| j|t|| t| j||i |}| j d| j|t|| j |S )Nz%s %s <- %sz%s %s -> %s)r(   infor$   r   r,   r%   r!   r   )r)   	call_namer   r   r   r   r   r   r0   ,   s   
zVerboseProxy.proxy_callable)Nr#   )r   
__module____qualname____doc__r+   r3   r0   r   r   r   r   r"      s
    
r"   )r.   r&   r   	itertoolsr   r   r!   r"   r   r   r   r   <module>   s    