U
    Ùf&  ã                   @   sJ   d dl mZ d dlmZ G dd„ deƒZG dd„ dƒZdd„ Zd	d
„ ZdS )é    )Údivision©Úwrapsc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚLogomakerErrora  
    Class used by Logomaker to handle errors.

    parameters
    ----------

    message: (str)
        The message passed to check(). This only gets passed to the
        LogomakerError constructor when the condition passed to check() is
        False.
    c                 C   s
   || _ d S ©N©Úmessage)Úselfr   © r
   úC/tmp/pip-target-lpfmz8o1/lib/python/logomaker/src/error_handling.pyÚ__init__   s    zLogomakerError.__init__c                 C   s   | j S r   r   )r	   r
   r
   r   Ú__str__   s    zLogomakerError.__str__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r
   r
   r
   r   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚDebugResultz0
    Container class for debugging results.
    c                 C   s   || _ || _d S r   )ÚresultÚmistake)r	   r   r   r
   r
   r   r      s    zDebugResult.__init__N)r   r   r   r   r   r
   r
   r
   r   r      s   r   c                 C   s   | st |ƒ‚dS )ap  
    Checks a condition; raises a LogomakerError with message if condition
    evaluates to False

    parameters
    ----------

    condition: (bool)
        A condition that, if false, halts Logomaker execution and raises a
        clean error to user

    message: (str)
        The string to show user if condition is False.

    returns
    -------
    None
    N)r   )Ú	conditionr   r
   r
   r   Úcheck"   s    r   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )aã  
    Decorator function to handle Logomaker errors.

    This decorator allows the user to pass the keyword argument
    'should_fail' to any wrapped function.

    If should_fail is None (or is not set by user), the function executes
    normally, and can be called as

        result = func(*args, **kwargs)

    In particular, Python execution will halt if any errors are raised.

    However, if the user specifies should_fail=True or should_fail=False, then
    Python will not halt even in the presence of an error. Moreover, the
    function will return a tuple, e.g.,

        result, mistake = func(*args, should_fail=True, **kwargs)

    with mistake flagging whether or not the function failed or succeeded
    as expected.
    c               
      sò   |  dd ¡}t|dkd| ƒ d }d }z:ˆ | |Ž}|dkrHtdƒ d}n|dkr^tdƒ d}n W n^ tk
r¾ } z@|dkrŽtd| ¡ ƒ d}n |dkrªtd	| ¡ ƒ d}n|‚W 5 d }~X Y nX |d krÌ|S ˆ jd
krä|| d _d S t||ƒS d S )NÚshould_fail)TFNz+FATAL: should_fail = %s is not bool or NoneTzUNEXPECTED SUCCESS.FzExpected success.zExpected error:zUNEXPECTED ERROR:r   r   )Úpopr   Úprintr   r   r   r   r   )ÚargsÚkwargsr   r   r   Úe©Úfuncr
   r   Úwrapped_funcS   sB    ÿ
ÿÿ

z#handle_errors.<locals>.wrapped_funcr   )r   r   r
   r   r   Úhandle_errors;   s    Jr    N)	Ú
__future__r   Ú	functoolsr   Ú	Exceptionr   r   r   r    r
   r
   r
   r   Ú<module>   s
   	