a ðûj`Uã@s„zddlmZWney&dZYn0ddlZddlZddlmZmZddlmZe  e ¡Z e  d¡Z Gdd„dƒZd dd „ZdS) é)ÚdatetimeN)ÚPIPEÚPopen)Údumpsz4.*?/usr/lib/python(\d(?:.\d+)?)/(site|dist)-packagesc@seZdZdd„Zdd„ZdS)ÚmemoizecCs||_i|_dS©N)ÚfuncÚcache)Úselfr©r ú(/usr/share/python3/debpython/__init__.pyÚ__init__szmemoize.__init__cOs6t||fƒ}||jvr,|j|i|¤Ž|j|<|j|Sr)rr r)r ÚargsÚkwargsÚkeyr r r Ú__call__s  zmemoize.__call__N)Ú__name__Ú __module__Ú __qualname__r rr r r r rsrc Csd||dœ}d}|durnv|dur2|jttdn^|rt|tƒrNd}t|dƒ}trj| d t ¡  ¡¡¡| d |¡¡|  ¡|j||dt   d |¡t |fi|¤ŽL}| ¡\}}|oÄ| ¡t|j|oØt|d ƒ|oät|d ƒd WdƒS1s0YdS) 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: %szutf-8)Ú returncoderr)ÚupdaterÚ isinstanceÚstrÚopenrÚwriteÚformatZnowZ isoformatÚflushÚlogÚdebugrZ communicateÚcloseÚdictr) ZcommandrrZ log_outputrr%Zprocessrrr r r Úexecutes.        þr')NNN)rÚ ImportErrorZloggingÚreÚ subprocessrrÚpicklerZ getLoggerrr#ÚcompileZ PUBLIC_DIR_RErr'r r r r Ús