
{TU                 @   s   y d  d l  m  Z  Wn e k
 r. d Z  Yn Xd  d l Z d  d l Z d  d l m Z m Z d  d l m Z e j	 e
  Z e j d  Z Gd d   d  Z d d d d d	  Z d S)
    )datetimeN)PIPEPopen)dumpsz4.*?/usr/lib/python(\d(?:.\d+)?)/(site|dist)-packagesc               @   s(   e  Z d  Z d d   Z d d   Z d S)memoizec             C   s   | |  _  i  |  _ d  S)N)funccache)selfr    r
   (/usr/share/python3/debpython/__init__.py__init__   s    	zmemoize.__init__c             O   sH   t  | | f  } | |  j k r= |  j | |   |  j | <n  |  j | S)N)r   r   r   )r	   argskwargskeyr
   r
   r   __call__   s    zmemoize.__call__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r      s   r   c       	      C   sn  i d d 6| d 6| d 6} d } | d k r0 n | d k rU | j  d t d t  n | r t | t  r d } t | d	  } n  t r | j d
 j t j   j	     n  | j d j |    | j
   | j  d | d |  n  t j d |   t |  |  c } | j   \ } } | o)| j   t d | j d | oKt | d  d | o`t | d   SWd QXd S)a<  Execute external shell commad.

    :param cdw: currennt working directory
    :param env: environment
    :param log_output:
        * opened log file or path to this file, or
        * None if output should be included in the returned dict, or
        * False if output should be redirectored to stdout/stderr
    TshellcwdenvFNstdoutstderraz
# command executed on {}z
$ {}
zinvoking: %s
returncodezutf-8)updater   
isinstancestropenr   writeformatZnowZ	isoformatflushlogdebugr   communicateclosedictr   )	Zcommandr   r   Z
log_outputr   r%   processr   r   r
   r
   r   execute   s,    
%
r(   )r   ImportErrorloggingre
subprocessr   r   pickler   	getLoggerr   r"   compilePUBLIC_DIR_REr   r(   r
   r
   r
   r   <module>   s   