a
    ΝGd(&                     @   s   d dl mZ d dlmZmZ d dlmZ d dlZdd Zdd Z	d	d
 Z
dd Zedg dZdej_G dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )    )unicode_literals)OrderedDict
namedtuple)string_typesNc                 C   s(   t | trt| S t | tr$t| S | S N)
isinstancedictObjectlistArray)value r   L/var/www/html/django/DPS/env/lib/python3.9/site-packages/coreapi/document.py_to_immutable   s
    

r   c                 C   s   ddl m} | | S )Nr   )PythonCodec)Zcoreapi.codecs.pythonr   encode)noder   r   r   r   _repr   s    r   c                 C   s   ddl m} | | S )Nr   )DisplayCodec)Zcoreapi.codecs.displayr   r   )r   r   r   r   r   _str   s    r   c                 C   sB   | \}}t |tr:dddddd|jd}d|j|ffS d|fS )z
    Document and Object sorting.
    Regular attributes sorted alphabetically.
    Links are sorted based on their URL and action.
    r               )getpostputpatchdelete   )r   Linkr   actionurl)itemkeyr   Zaction_priorityr   r   r   _key_sorting   s    
r%   Field)namerequiredlocationZschemadescriptiontypeZexample)F NNNNc                       s   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Z fddZ	e
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Z  ZS )Documentz
    The Core API document type.

    Expresses the data that the client may access,
    and the actions that the client may perform.
    Nc                 C   s  |d u ri n|}|d ur*t |ts*td|d urDt |tsDtd|d ur^t |ts^td|d urxt |tsxtdt |tstdtdd | D rtd|d u rd	n|| _|d u rd	n|| _|d u rd	n|| _|d u rd	n|| _	d
d |
 D | _d S )Nz'url' must be a string.'title' must be a string.z'description' must be a string.z'media_type' must be a string.'content' must be a dict.c                 S   s   g | ]}t |t qS r   r   r   .0r$   r   r   r   
<listcomp>K       z%Document.__init__.<locals>.<listcomp>content keys must be strings.r,   c                 S   s   i | ]\}}|t |qS r   r   r2   r$   r   r   r   r   
<dictcomp>R   r4   z%Document.__init__.<locals>.<dictcomp>)r   r   	TypeErrorr   anykeys_url_title_description_media_typeitems_data)selfr"   titler*   
media_typecontentr   r   r   __init__>   s$    
zDocument.__init__c                 C   s   |  | j| j| j| j|S r   )	__class__r"   rC   r*   rD   )rB   datar   r   r   cloneT   s    zDocument.clonec                 C   s$   t | j td}tdd |D S )Nr$   c                 S   s   g | ]\}}|qS r   r   r7   r   r   r   r3   Y   r4   z%Document.__iter__.<locals>.<listcomp>sortedrA   r@   r%   iterrB   r@   r   r   r   __iter__W   s    zDocument.__iter__c                 C   s   t | S r   r   rB   r   r   r   __repr__[   s    zDocument.__repr__c                 C   s   t | S r   r   rQ   r   r   r   __str__^   s    zDocument.__str__c                    s@   | j |j kr0| j|jko.| j|jko.| j|jkS tt| |S r   )rG   r"   rC   rA   superr-   __eq__rB   otherrG   r   r   rV   a   s    

zDocument.__eq__c                 C   s   | j S r   r<   rQ   r   r   r   r"   j   s    zDocument.urlc                 C   s   | j S r   r=   rQ   r   r   r   rC   n   s    zDocument.titlec                 C   s   | j S r   r>   rQ   r   r   r   r*   r   s    zDocument.descriptionc                 C   s   | j S r   )r?   rQ   r   r   r   rD   v   s    zDocument.media_typec                 C   s   t dd |  D S )Nc                 S   s"   g | ]\}}t |ts||fqS r   r   r    r7   r   r   r   r3   |   s   
z!Document.data.<locals>.<listcomp>r   r@   rQ   r   r   r   rH   z   s    zDocument.datac                 C   s   t dd |  D S )Nc                 S   s"   g | ]\}}t |tr||fqS r   r]   r7   r   r   r   r3      s   
z"Document.links.<locals>.<listcomp>r^   rQ   r   r   r   links   s    zDocument.links)NNNNN)__name__
__module____qualname____doc__rF   rI   rO   rR   rT   rV   propertyr"   rC   r*   rD   rH   r_   __classcell__r   r   rY   r   r-   7   s&   
	




r-   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zed
d Z	edd Z
dS )r	   z4
    An immutable mapping of strings to values.
    c                 O   sD   t |i |}tdd | D r,tddd | D | _d S )Nc                 S   s   g | ]}t |t qS r   r0   r1   r   r   r   r3      r4   z#Object.__init__.<locals>.<listcomp>zObject keys must be strings.c                 S   s   i | ]\}}|t |qS r   r6   r7   r   r   r   r8      r4   z#Object.__init__.<locals>.<dictcomp>)r   r:   r;   r9   r@   rA   )rB   argskwargsrH   r   r   r   rF      s    zObject.__init__c                 C   s$   t | j td}tdd |D S )NrJ   c                 S   s   g | ]\}}|qS r   r   r7   r   r   r   r3      r4   z#Object.__iter__.<locals>.<listcomp>rK   rN   r   r   r   rO      s    zObject.__iter__c                 C   s   t | S r   rP   rQ   r   r   r   rR      s    zObject.__repr__c                 C   s   t | S r   rS   rQ   r   r   r   rT      s    zObject.__str__c                 C   s   t dd |  D S )Nc                 S   s"   g | ]\}}t |ts||fqS r   r]   r7   r   r   r   r3      s   
zObject.data.<locals>.<listcomp>r^   rQ   r   r   r   rH      s    zObject.datac                 C   s   t dd |  D S )Nc                 S   s"   g | ]\}}t |tr||fqS r   r]   r7   r   r   r   r3      s   
z Object.links.<locals>.<listcomp>r^   rQ   r   r   r   r_      s    zObject.linksN)r`   ra   rb   rc   rF   rO   rR   rT   rd   rH   r_   r   r   r   r   r	      s   
r	   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r   z+
    An immutable list type container.
    c                 G   s   dd t | D | _d S )Nc                 S   s   g | ]}t |qS r   r6   )r2   r   r   r   r   r3      r4   z"Array.__init__.<locals>.<listcomp>)r
   rA   )rB   rf   r   r   r   rF      s    zArray.__init__c                 C   s   t | S r   rP   rQ   r   r   r   rR      s    zArray.__repr__c                 C   s   t | S r   rS   rQ   r   r   r   rT      s    zArray.__str__N)r`   ra   rb   rc   rF   rR   rT   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdddZedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zdd Zdd Zdd ZdS )r    z@
    Links represent the actions that a client may perform.
    Nc                 C   sv  |d urt |tstd|d ur4t |ts4td|d urNt |tsNtd|d urht |tshtd|d urt |tstd|d urt |tstd|d urt |ttfstd|d urtdd	 |D rtd
|d u rdn|| _|d u rdn|| _|d u rdn|| _|d u r"dn|| _	|d u r6dn|| _
|d u rJdn|| _|d u r^dntdd	 |D | _d S )Nz Argument 'url' must be a string.z#Argument 'action' must be a string.z%Argument 'encoding' must be a string.z&Argument 'transform' must be a string.z"Argument 'title' must be a string.z(Argument 'description' must be a string.z!Argument 'fields' must be a list.c                 S   s"   g | ]}t |tpt |t qS r   )r   r   r&   r2   r#   r   r   r   r3      s   z!Link.__init__.<locals>.<listcomp>z6Argument 'fields' must be a list of strings or fields.r,   r   c                 S   s(   g | ] }t |tr|nt|d ddqS )Fr,   )r(   r)   )r   r&   rh   r   r   r   r3      s   )r   r   r9   r
   tupler:   r<   _action	_encoding
_transformr=   r>   _fields)rB   r"   r!   encoding	transformrC   r*   fieldsr   r   r   rF      s6    zLink.__init__c                 C   s   | j S r   rZ   rQ   r   r   r   r"      s    zLink.urlc                 C   s   | j S r   )rj   rQ   r   r   r   r!      s    zLink.actionc                 C   s   | j S r   )rk   rQ   r   r   r   rn      s    zLink.encodingc                 C   s   | j S r   )rl   rQ   r   r   r   ro      s    zLink.transformc                 C   s   | j S r   r[   rQ   r   r   r   rC      s    z
Link.titlec                 C   s   | j S r   r\   rQ   r   r   r   r*      s    zLink.descriptionc                 C   s   | j S r   )rm   rQ   r   r   r   rp      s    zLink.fieldsc                 C   sj   t |toh| j|jkoh| j|jkoh| j|jkoh| j|jkoh| j|jkoht| jdd dt|jdd dkS )Nc                 S   s   | j S r   )r'   )fr   r   r   <lambda>  r4   zLink.__eq__.<locals>.<lambda>rJ   )	r   r    r"   r!   rn   ro   r*   rL   rp   rW   r   r   r   rV      s    





"zLink.__eq__c                 C   s   t | S r   rP   rQ   r   r   r   rR     s    zLink.__repr__c                 C   s   t | S r   rS   rQ   r   r   r   rT     s    zLink.__str__)NNNNNNN)r`   ra   rb   rc   rF   rd   r"   r!   rn   ro   rC   r*   rp   rV   rR   rT   r   r   r   r   r       s&   
 






r    c                   @   sJ   e Zd ZdddZdd Zdd Zdd	 Zd
d Zedd Z	dd Z
dS )ErrorNc                 C   s   |d u ri n|}|d ur*t |ts*td|d urDt |tsDtdtdd | D rbtd|d u rndn|| _dd | D | _d S )	Nr.   r/   c                 S   s   g | ]}t |t qS r   r0   r1   r   r   r   r3     r4   z"Error.__init__.<locals>.<listcomp>r5   r,   c                 S   s   i | ]\}}|t |qS r   r6   r7   r   r   r   r8     r4   z"Error.__init__.<locals>.<dictcomp>)	r   r   r9   r   r:   r;   r=   r@   rA   )rB   rC   rE   rH   r   r   r   rF     s    zError.__init__c                 C   s$   t | j td}tdd |D S )NrJ   c                 S   s   g | ]\}}|qS r   r   r7   r   r   r   r3     r4   z"Error.__iter__.<locals>.<listcomp>rK   rN   r   r   r   rO     s    zError.__iter__c                 C   s   t | S r   rP   rQ   r   r   r   rR     s    zError.__repr__c                 C   s   t | S r   rS   rQ   r   r   r   rT   !  s    zError.__str__c                 C   s"   t |to | j|jko | j|jkS r   )r   rs   rC   rA   rW   r   r   r   rV   $  s
    


zError.__eq__c                 C   s   | j S r   r[   rQ   r   r   r   rC   +  s    zError.titlec                 C   s2   g }|   D ] }t|tr|dd |D 7 }q|S )Nc                 S   s   g | ]}t |tr|qS r   r0   rh   r   r   r   r3   3  s   z&Error.get_messages.<locals>.<listcomp>)valuesr   r   )rB   messagesr   r   r   r   get_messages/  s    

zError.get_messages)NN)r`   ra   rb   rF   rO   rR   rT   rV   rd   rC   rv   r   r   r   r   rs     s   

rs   )
__future__r   collectionsr   r   Zcoreapi.compatr   Zitypesr   r   r   r%   r&   __new____defaults__Dictr-   r	   Listr   r    rs   r   r   r   r   <module>   s   R#R