
NwVU                 @   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   sE   t  | | f  } | |  j k r: |  j | |   |  j | <|  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   sc  d d d | d | i } d } | d k r- n | d k rR | j  d t d t  n | r t | t  r| d } t | d	  } t r | j d
 j t j   j	     | j d j |    | j
   | j  d | d |  t j d |   t |  |  c } | j   \ } } | o| j   t d | j d | o?t | d  d | oTt | d   SWd QRXd 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
    shellT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   