ó
¼S]c           @@ sZ   d  Z  d d l m Z m Z d d l Z d d l j j j Z d d l	 m
 Z
 d „  Z d S(   s   Handles uncaught exceptions.i    (   t   absolute_importt   print_functionN(   t   slugifyc      
   @ s  t  | ƒ } y |  ƒ  SWnýt k
 rB t d | d t j ƒd St k
 rt j ƒ  \ } } } y”d d l } d d l } d d l	 }	 d d l
 }
 t d | d t j ƒt d | j t | ƒ f d t j ƒt j ƒ  ‰ | j j ƒ  j ƒ  } d | | f } |	 j d	 | d
 d d t ƒ š ‰  ˆ  j } ‡  ‡ f d †  } | d | | f ƒ | d ƒ | d t j ƒ | d ƒ | | j | ƒ ƒ | d ƒ | d j |
 j | | | ƒ ƒ ƒ Wd QXˆ ràt d | d t j ƒn t d | d t j ƒWn t k
 r| ‚ n Xd SXd S(   sh  Invoke main entry point, handling uncaught exceptions.

    Args:
        main_func (function): a main()-style function returning an exit status
        program_name (str): name of the app
        details_dict (dict): dictionary of stuff to include in the bug report file

    Returns:
        an exit status code from main_func or 1 on uncaught exception
    s   %s was interrupted.t   filei   i    Ns6   An unexpected error occurred, most likely a bug in %s.s       (The error was: %s: %s)s   bug_details_%s_%s_t   prefixt   suffixs   .txtt   deletec         @ sL   ˆ  j  |  j d ƒ ƒ ˆ  j  d j d ƒ ƒ ˆ rH t |  d t j ƒn  d  S(   Ns   utf-8s   
R   (   t   writet   encodet   printt   syst   stderr(   t   s(   t   bugfilet   output_to_console(    sH   lib/python2.7/site-packages/anaconda_project/internal/cli/bug_handler.pyt   output:   s    s   Bug details for %s error on %st    s   sys.argv: %rs   
s#   Above details were also saved to %ss(   Details about the error were saved to %s(   R   t   KeyboardInterruptR	   R
   R   t	   Exceptiont   exc_infot   datetimet   pprintt   tempfilet	   tracebackt   __name__t   strt   console_utilst   stdin_is_interactivet   datet   todayt	   isoformatt   NamedTemporaryFilet   Falset   namet   argvt   pformatt   joint   format_exception(   t	   main_funct   program_namet   details_dictt   slugified_program_namet   exception_typet   exception_valuet   exception_traceR   R   R   R   t   whenR   t   report_nameR   (    (   R   R   sH   lib/python2.7/site-packages/anaconda_project/internal/cli/bug_handler.pyt   handle_bugs   sD    &!	


(
(   t   __doc__t
   __future__R    R   R
   t+   anaconda_project.internal.cli.console_utilst   internalt   cliR   t!   anaconda_project.internal.slugifyR   R/   (    (    (    sH   lib/python2.7/site-packages/anaconda_project/internal/cli/bug_handler.pyt   <module>   s
   