U
    -e<!                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	l	mZ dd
lmZ dZdZG dd deZdd ZdS )ztsys.excepthook for IPython itself, leaves a detailed report on disk.

Authors:

* Fernando Perez
* Brian E. Granger
    N)pformat)Path)ultratb)author_email)sys_info)input)__version__)Optionala  Oops, {app_name} crashed. We do our best to make it stable, but...

A crash report was automatically generated with the following information:
  - A verbatim copy of the crash traceback.
  - A copy of your input history during this session.
  - Data on your current {app_name} configuration.

It was left in the file named:
	'{crash_report_fname}'
If you can email this file to the developers, the information in it will help
them in understanding and correcting the problem.

You can mail it to: {contact_name} at {contact_email}
with the subject '{app_name} Crash Report'.

If you want to do it now, the following command will work (under Unix):
mail -s '{app_name} Crash Report' {contact_email} < {crash_report_fname}

In your email, please also include information about:
- The operating system under which the crash happened: Linux, macOS, Windows,
  other, and which exact version (for example: Ubuntu 16.04.3, macOS 10.13.2,
  Windows 10 Pro), and whether it is 32-bit or 64-bit;
- How {app_name} was installed: using pip or conda, from GitHub, as part of
  a Docker container, or other, providing more detail if possible;
- How to reproduce the crash: what exact sequence of instructions can one
  input to get the same crash? Ideally, find a minimal yet complete sequence
  of instructions that yields the crash.

To ensure accurate tracking of this issue, please file a report about it at:
{bug_tracker}
a  
If you suspect this is an IPython {version} bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at {email}

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    {config}Application.verbose_crash=True
c                   @   sL   e Zd ZdZeZdZdee ee ee e	e	dddZ
d	d
 Zdd ZdS )CrashHandlerzCustomizable crash handlers for IPython applications.

    Instances of this class provide a :meth:`__call__` method which can be
    used as a ``sys.excepthook``.  The :meth:`__call__` signature is::

        def __call__(self, etype, evalue, etb)
    zO

***************************************************************************

NTF)contact_namecontact_emailbug_trackershow_crash_tracebackcall_pdbc                 C   s:   d|j  | _|| _|| _|| _t|j |||| jd| _dS )a  Create a new crash handler

        Parameters
        ----------
        app : Application
            A running :class:`Application` instance, which will be queried at
            crash time for internal information.
        contact_name : str
            A string with the name of the person to contact.
        contact_email : str
            A string with the email address of the contact.
        bug_tracker : str
            A string with the URL for your project's bug tracker.
        show_crash_traceback : bool
            If false, don't print the crash traceback on stderr, only generate
            the on-disk report
        call_pdb
            Whether to call pdb on crash

        Attributes
        ----------
        These instances contain some non-argument attributes which allow for
        further customization of the crash handler's behavior. Please see the
        source for further details.

        zCrash_report_%s.txt)app_namer   r   r   crash_report_fnameN)namer   appr   r   dictinfo)selfr   r   r   r   r   r    r   Z/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/IPython/core/crashhandler.py__init__c   s    #zCrashHandler.__init__c           
   	   C   s4  t jt _d}z| jj}W n   t }Y nX |dks@t|sHt }|| j }|| _|| j	d< t
j|d| jd}| jr|||| dS |j|||dd}| jrt|t jd zt|d	d
d}	W n   tdt jd Y dS X |	> tdt jd t| jjf | j	t jd |	| | W 5 Q R X td dS )z<Handle an exception, call for compatible with sys.excepthookZNoColorNr      )color_schemeZlong_headerr      )contextfilewzutf-8)encodingz&Could not create crash report on disk.zH
**********************************************************************
z.Hit <Enter> to quit (your terminal may close):)sys__excepthook__
excepthookr   Zipython_dirr   cwdis_dirr   r   r   Z	VerboseTBr   textr   printstderropenmessage_templateformatwritemake_reportr   )
r   etypeevalueZetbr   ZrptdirZreport_nameZ	TBhandler	tracebackreportr   r   r   __call__   s@    

zCrashHandler.__call__c                 C   sz   | j }dg}|j}|t  z6t| jj}|| |d| j  |d || W n   Y nX ||d |  d|S )z*Return a string containing a crash report.zi***************************************************************************

IPython post-mortem report

zApplication name: %s

z'Current user configuration structure:

zCrash traceback:

 )section_sepappendr   r   r   configr   join)r   r1   Zsec_sepr2   Zrpt_addr7   r   r   r   r.      s    
zCrashHandler.make_report)NNNTF)__name__
__module____qualname____doc___default_message_templater+   r5   r	   strboolr   r3   r.   r   r   r   r   r
   W   s"        /8r
   c                 C   sJ   t | || ddlm} | r(d}nd}ttjt|t	dt
jd dS )zAa light excepthook, adding a small message to the usual tracebackr   )InteractiveShellz%config zc.)emailr7   versionr   N)r1   print_exceptionZIPython.core.interactiveshellr@   Zinitializedr(   _lite_message_templater,   r   rB   r"   r)   )r/   r0   tbr@   r7   r   r   r   crash_handler_lite   s    rF   )r<   r"   r1   pprintr   pathlibr   ZIPython.corer   ZIPython.core.releaser   ZIPython.utils.sysinfor   ZIPython.utils.py3compatr   r   rB   typingr	   r=   rD   objectr
   rF   r   r   r   r   <module>   s   ! 
