o
    ˷e                     @   sX   d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 eG dd deZdS )z=Implementation of magic functions for IPython's own logging.
    N)Magicsmagics_class
line_magic)warn)Boolc                   @   sj   e Zd ZdZedddjddZeddd	Zedd
dZ	edddZ
edddZedddZdS )LoggingMagicsz(Magics related to all logging machinery.FzF
        Suppress output of log state when logging is enabled
        )helpT)config c                 C   s  |  |d\}}d|v }d|v }d|v }d|v }| jj}|r0z| \}	}
W n   |}	d}
Y n|j}	|j}
| jj}|	rBtj	|	}	|	| j_d}z|
|	||
||| W n   || j_tdt d	   Y dS |rnd
|_|rv| jjj}n| jjj}|r|j}| jjj}td	t|d	 D ]}|||  d  ||v r|t|| d qn|d|d	d  |d |rd|_| js|std |  dS dS dS )a  Start logging anywhere in a session.

        %logstart [-o|-r|-t|-q] [log_name [log_mode]]

        If no name is given, it defaults to a file named 'ipython_log.py' in your
        current directory, in 'rotate' mode (see below).

        '%logstart name' saves to file 'name' in 'backup' mode.  It saves your
        history up to that point and then continues logging.

        %logstart takes a second optional parameter: logging mode. This can be one
        of (note that the modes are given unquoted):

        append
            Keep logging at the end of any existing file.

        backup
            Rename any existing file to name~ and start name.

        global
            Append to  a single logfile in your home directory.

        over
            Overwrite any existing log.

        rotate
            Create rotating logs: name.1~, name.2~, etc.

        Options:

          -o
            log also IPython's output. In this mode, all commands which
            generate an Out[NN] prompt are recorded to the logfile, right after
            their corresponding input line. The output lines are always
            prepended with a '#[Out]# ' marker, so that the log remains valid
            Python code.

          Since this marker is always the same, filtering only the output from
          a log is very easy, using for example a simple awk call::

            awk -F'#\[Out\]# ' '{if($2) {print $2}}' ipython_log.py

          -r
            log 'raw' input.  Normally, IPython's logs contain the processed
            input, so that user lines are logged in their final form, converted
            into valid Python.  For example, %Exit is logged as
            _ip.magic("Exit").  If the -r flag is given, all input is logged
            exactly as typed, with no transformations applied.

          -t
            put timestamps before each input line logged (these are put in
            comments).

          -q 
            suppress output of logstate message when logging is invoked
        ortqortqbackupz# IPython log file

zCouldn't start log: %s   F
outputNTzGActivating auto-logging. Current session state plus future input saved.)parse_optionsshellloggersplitlogfnamelogmodelogfileospath
expanduserlogstartr   sysexc_info	timestamphistory_managerinput_hist_rawinput_hist_parsed	log_writeoutput_histrangelenrstripreprjoinquietprintlogstate)selfparameter_soptspar
log_outputlog_raw_inputr!   r,   r   r   r   old_logfileloghead
input_histr%   r&   n r9   R/var/www/ideatree/venv/lib/python3.10/site-packages/IPython/core/magics/logging.pyr   &   s`   ;



zLoggingMagics.logstartc                 C      | j j  dS )zFully stop logging and close log file.

        In order to start logging again, a new %logstart call needs to be made,
        possibly (though not necessarily) with a new filename, mode and other
        options.N)r   r   logstopr/   r0   r9   r9   r:   r<      s   zLoggingMagics.logstopc                 C      | j jd dS )zLTemporarily stop logging.

        You must have previously started logging.r   Nr   r   
switch_logr=   r9   r9   r:   logoff   s   zLoggingMagics.logoffc                 C   r>   )a  Restart logging.

        This function is for restarting logging which you've temporarily
        stopped with %logoff. For starting logging for the first time, you
        must use the %logstart function, which allows you to specify an
        optional log filename.r   Nr?   r=   r9   r9   r:   logon   s   	zLoggingMagics.logonc                 C   r;   )z'Print the status of the logging system.N)r   r   r.   r=   r9   r9   r:   r.      s   zLoggingMagics.logstateN)r
   )__name__
__module____qualname____doc__r   tagr,   r   r   r<   rA   rB   r.   r9   r9   r9   r:   r      s"    }
r   )rF   r   r   IPython.core.magicr   r   r   warningsr   	traitletsr   r   r9   r9   r9   r:   <module>   s    