U
     f                     @   s`   d dl Z d dlZd dlZd dlmZmZ dd ZdddZG dd de jZ	d	d
 Z
dd ZdS )    N)post_commandpre_commandc                 C   sR   ddl }tjdrdS t| tjsNt | }||j|j	B }t
| | dS )zU
    Make sure that the file is writable. Useful if our source is
    read-only.
    r   Njava)statsysplatform
startswithosaccessW_OKS_IMODEst_modeS_IWUSRchmod)filenamer   stZnew_permissions r   F/tmp/pip-unpacked-wheel-1isl55vw/django_extensions/management/utils.py_make_writeable	   s    
r   c                 C   s   t | jdk rt|}|tj |t| | | | tj d| _	|rt
|}|tj |td|r||nd  | | dS )zj
    Set up a logger (if no handlers exist) for console output,
    and file 'tee' output if desired.
       Fz%(asctime)s z%(message)sN)lenhandlersloggingStreamHandlersetLevelDEBUGsetFormatter	Formatter
addHandler	propagateFileHandlerINFO)loggerstreamr   fmtconsoleoutfiler   r   r   setup_logger   s    


r'   c                   @   s&   e Zd ZdZejfddZdd ZdS )RedirectHandlerz6Redirect logging sent to one logger (name) to another.c                 C   s$   t j| | || _t || _d S N)r   Handler__init__name	getLoggerr"   )selfr,   levelr   r   r   r+   /   s    zRedirectHandler.__init__c                 C   s   | j | d S r)   )r"   handle)r.   recordr   r   r   emit5   s    zRedirectHandler.emitN)__name__
__module____qualname____doc__r   r   r+   r2   r   r   r   r   r(   ,   s   r(   c                    s    fdd}|S )zUPython decorator for management command handle defs that sends out a pre/post signal.c                    s:   t j| j||d  | f||}tj| j|||d |S )N)argskwargs)r7   r8   Zoutcome)r   send	__class__r   )r.   r7   r8   retfuncr   r   inner<   s    zsignalcommand.<locals>.innerr   )r=   r>   r   r<   r   signalcommand9   s    r?   c                  C   s2   zdd l } dd l}W dS  tk
r,   Y dS X d S )Nr   TF)ipdbIPythonImportError)r@   rA   r   r   r   has_ipdbD   s    rC   )NN)r   r	   r   Z$django_extensions.management.signalsr   r   r   r'   r*   r(   r?   rC   r   r   r   r   <module>   s   
