U
    f                     @   s  d Z ddlZddlmZ G dd deZG dd deZG dd	 d	eZG d
d deZG dd deZ	G dd de	Z
G dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd de	ZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZd*ZG d+d, d,eZG d-d. d.eZG d/d0 d0eZG d1d2 d2eZdS )3z.
Global Django exception and warning classes.
    N)make_hashablec                   @   s   e Zd ZdZdS )FieldDoesNotExistz(The requested model field does not existN__name__
__module____qualname____doc__ r	   r	   :/tmp/pip-unpacked-wheel-_jot26k8/django/core/exceptions.pyr   	   s   r   c                   @   s   e Zd ZdZdS )AppRegistryNotReadyz-The django.apps registry is not populated yetNr   r	   r	   r	   r
   r      s   r   c                   @   s   e Zd ZdZdZdS )ObjectDoesNotExistz#The requested object does not existTN)r   r   r   r   Zsilent_variable_failurer	   r	   r	   r
   r      s   r   c                   @   s   e Zd ZdZdS )MultipleObjectsReturnedz?The query returned multiple objects when only one was expected.Nr   r	   r	   r	   r
   r      s   r   c                   @   s   e Zd ZdZdS )SuspiciousOperationz!The user did something suspiciousNr   r	   r	   r	   r
   r   !   s   r   c                   @   s   e Zd ZdZdS )SuspiciousMultipartFormz+Suspect MIME request in multipart form dataNr   r	   r	   r	   r
   r   %   s   r   c                   @   s   e Zd ZdZdS )SuspiciousFileOperationz/A Suspicious filesystem operation was attemptedNr   r	   r	   r	   r
   r   +   s   r   c                   @   s   e Zd ZdZdS )DisallowedHostz'HTTP_HOST header contains invalid valueNr   r	   r	   r	   r
   r   1   s   r   c                   @   s   e Zd ZdZdS )DisallowedRedirectz&Redirect to scheme not in allowed listNr   r	   r	   r	   r
   r   7   s   r   c                   @   s   e Zd ZdZdS )TooManyFieldsSentzl
    The number of fields in a GET or POST request exceeded
    settings.DATA_UPLOAD_MAX_NUMBER_FIELDS.
    Nr   r	   r	   r	   r
   r   =   s   r   c                   @   s   e Zd ZdZdS )TooManyFilesSentzk
    The number of fields in a GET or POST request exceeded
    settings.DATA_UPLOAD_MAX_NUMBER_FILES.
    Nr   r	   r	   r	   r
   r   F   s   r   c                   @   s   e Zd ZdZdS )RequestDataTooBigzq
    The size of the request (excluding any file uploads) exceeded
    settings.DATA_UPLOAD_MAX_MEMORY_SIZE.
    Nr   r	   r	   r	   r
   r   O   s   r   c                   @   s   e Zd ZdZdS )RequestAbortedz=The request was closed before it was completed, or timed out.Nr   r	   r	   r	   r
   r   X   s   r   c                   @   s   e Zd ZdZdS )
BadRequestz1The request is malformed and cannot be processed.Nr   r	   r	   r	   r
   r   ^   s   r   c                   @   s   e Zd ZdZdS )PermissionDeniedz+The user did not have permission to do thatNr   r	   r	   r	   r
   r   d   s   r   c                   @   s   e Zd ZdZdS )ViewDoesNotExistz!The requested view does not existNr   r	   r	   r	   r
   r   j   s   r   c                   @   s   e Zd ZdZdS )MiddlewareNotUsedz8This middleware is not used in this server configurationNr   r	   r	   r	   r
   r   p   s   r   c                   @   s   e Zd ZdZdS )ImproperlyConfiguredz'Django is somehow improperly configuredNr   r	   r	   r	   r
   r   v   s   r   c                   @   s   e Zd ZdZdS )
FieldErrorz(Some kind of problem with a model field.Nr   r	   r	   r	   r
   r   |   s   r   __all__c                       sj   e Zd ZdZd fdd	Zedd Zedd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Z  ZS )ValidationErrorzAn error while validating data.Nc                    s  t  ||| t|trTt|dr,|j}n(t|ds>|j}n|j|j|j	  }}}t|t
ri | _| D ]&\}}t|tst|}|j| j|< qlnzt|trg | _|D ]H}t|tst|}t|dr| jt|j g  q| j|j qn|| _|| _|| _	| g| _dS )a  
        The `message` argument can be a single error, a list of errors, or a
        dictionary that maps field names to lists of errors. What we define as
        an "error" can be either a simple string or an instance of
        ValidationError with its message attribute set, and what we define as
        list or dictionary can be an actual `list` or `dict` or an instance
        of ValidationError with its `error_list` or `error_dict` attribute set.
        
error_dictmessageN)super__init__
isinstancer   hasattrr   
error_listr    codeparamsdictitemslistextendsumvalues)selfr    r&   r'   fieldmessages	__class__r	   r
   r"      s2    	







zValidationError.__init__c                 C   s   t | d t| S Nr   )getattrr(   r.   r	   r	   r
   message_dict   s    
zValidationError.message_dictc                 C   s$   t | drtt|  g S t| S r3   )r$   r,   r(   r-   r*   r5   r	   r	   r
   r0      s    
zValidationError.messagesc                 C   sJ   t | dr2| j D ]\}}||g | qn|tg | j |S r3   )r$   r   r)   
setdefaultr+   NON_FIELD_ERRORSr%   )r.   r   r/   r%   r	   r	   r
   update_error_dict   s
    
z!ValidationError.update_error_dictc                 c   sb   t | dr2| j D ]\}}|tt|fV  qn,| jD ]$}|j}|jrR||j; }t|V  q8d S r3   )	r$   r   r)   r*   r   r%   r    r'   str)r.   r/   errorserrorr    r	   r	   r
   __iter__   s    


zValidationError.__iter__c                 C   s"   t | drtt| S tt| S r3   )r$   reprr(   r*   r5   r	   r	   r
   __str__   s    
zValidationError.__str__c                 C   s   d|  S )NzValidationError(%s)r	   r5   r	   r	   r
   __repr__   s    zValidationError.__repr__c                 C   s   t |tstS t| t|kS )N)r#   r   NotImplementedhash)r.   otherr	   r	   r
   __eq__   s    
zValidationError.__eq__c                 C   sV   t | dr"t| j| jt| jfS t | dr:tt| jS ttt| j	t
ddS )Nr    r   )key)r$   rB   r    r&   r   r'   r   tuplesortedr%   operator
attrgetterr5   r	   r	   r
   __hash__   s    

zValidationError.__hash__)NN)r   r   r   r   r"   propertyr6   r0   r9   r=   r?   r@   rD   rJ   __classcell__r	   r	   r1   r
   r      s   +

r   c                   @   s   e Zd ZdZdS )EmptyResultSetz)A database query predicate is impossible.Nr   r	   r	   r	   r
   rM      s   rM   c                   @   s   e Zd ZdZdS )FullResultSetz1A database query predicate is matches everything.Nr   r	   r	   r	   r
   rN      s   rN   c                   @   s   e Zd ZdZdS )SynchronousOnlyOperationzBThe user tried to call a sync-only function from an async context.Nr   r	   r	   r	   r
   rO      s   rO   )r   rH   Zdjango.utils.hashabler   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   rM   rN   rO   r	   r	   r	   r
   <module>   s4   			j