o
    e                     @   sT   d Z dgZddlZddlZddlZddlZddlZG dd dZ	G dd de	Z
dS )af  cssutils ErrorHandler

ErrorHandler
    used as log with usual levels (debug, info, warn, error)

    if instanciated with ``raiseExceptions=True`` raises exeptions instead
    of logging

log
    defaults to instance of ErrorHandler for any kind of log message from
    lexerm, parser etc.

    - raiseExceptions = [False, True]
    - setloglevel(loglevel)
ErrorHandler    Nc                   @   sH   e Zd ZdZejdfddZdd Zddej	j
d	dfd
dZdd ZdS )_ErrorHandlerz-
    handles all errors and log messages
    Tc                 C   sh   d| _ |r	|| _n&ddl}td| _t|j}td}|| | j	| | j
| || _dS )a  
        inits log if none given

        log
            for parse messages, default logs to sys.stderr
        defaultloglevel
            if none give this is logging.DEBUG
        raiseExceptions
            - True: Errors will be raised e.g. during building
            - False: Errors will be written to the log, this is the
              default behaviour when parsing
        Tr   NZCSSUTILSz%(levelname)s	%(message)s)enabled_logsyslogging	getLoggerStreamHandlerstderr	FormattersetFormatter
addHandlersetLevelraiseExceptions)selflogdefaultloglevelr   r   hdlr	formatter r   ED:\Projects\ConvertPro\env\Lib\site-packages\cssutils/errorhandler.py__init__   s   


z_ErrorHandler.__init__c                 C   sP   d}d}||v r|dkrd}t | j|| _| jS ||v r"t | j|S td| )zuse self._log items)debuginfowarnerrorcriticalfatal)r   getEffectiveLevelr   removeHandlerr   warningz$(errorhandler) No Attribute %r found)getattrr   _logcall_ErrorHandler__handleAttributeError)r   nameZcallsotherr   r   r   __getattr__<   s   z_ErrorHandler.__getattr__ NFc           	      C   s   | j rl|du rtjj}d\}}|r>t|tr%|d |d |d }}}n|j|j|j}}}| d| d| d| d	}|re| j	re|set|t
jjsSt|t
jjrT t|tjjra||_||_||| | dS dS )
zD
        handles all calls
        logs or raises exception
        N)NN         z [:z: ])r   xmldom	SyntaxErr
isinstancetuplevaluelinecolr   urllibr   	HTTPErrorURLError
issubclassZDOMExceptionr"   )	r   msgtokenr   Z
neverraiseargsr4   r5   r3   r   r   r   Z__handleK   s(   
z_ErrorHandler.__handlec                 C   s
   || _ dS )zset log of errorhandler's logN)r   )r   r   r   r   r   setLogj   s   
z_ErrorHandler.setLog)__name__
__module____qualname____doc__r   INFOr   r'   r.   r/   r0   r#   r=   r   r   r   r   r      s    
r   c                   @   s&   e Zd ZdZdZdejdfddZdS )r   zSingleton, see _ErrorHandlerNTc                 C   s(   t jd u rt|||dt _t jj| _d S )N)r   r   r   )r   instancer   __dict__)r   r   r   r   r   r   r   r   s   s   
zErrorHandler.__init__)r>   r?   r@   rA   rC   r   rB   r   r   r   r   r   r   o   s    )rA   __all__r   urllib.requestr6   urllib.errorurllib.parseZxml.domr.   r   r   r   r   r   r   <module>   s    V