a
    ÆZEg.  ã                   @   sj   d Z ddlZddlmZ ddlmZ dd„ Zdd„ ZG d	d
„ d
eƒZ	G dd„ de
ƒZG dd„ dejƒZdS )a%  
JSONField automatically serializes most Python terms to JSON data.
Creates a TEXT field with a default value of "{}".  See test_json.py for
more information.

 from django.db import models
 from django_extensions.db.fields import json

 class LOL(models.Model):
     extra = json.JSONField()
é    N)ÚDjangoJSONEncoder)Úmodelsc                 C   s   t ƒ  | ¡S ©N)r   Úencode)Úvalue© r   úY/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_extensions/db/fields/json.pyÚdumps   s    r	   c                 C   s
   t  | ¡S r   )ÚjsonÚloads)Útxtr   r   r   r      s    r   c                   @   s   e Zd ZdZdd„ ZdS )ÚJSONDictú€
    Hack so repr() called by dumpdata will output JSON instead of
    Python formatted data.  This way fixtures will work!
    c                 C   s   t | ƒS r   ©r	   ©Úselfr   r   r   Ú__repr__!   s    zJSONDict.__repr__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚJSONListr   c                 C   s   t | ƒS r   r   r   r   r   r   r   +   s    zJSONList.__repr__Nr   r   r   r   r   r   %   s   r   c                       sX   e Zd ZdZdd„ Z‡ fdd„Zdd„ Z‡ fdd	„Zd
d„ Zdd„ Z	‡ fdd„Z
‡  ZS )Ú	JSONFieldz�
    JSONField is a generic textfield that neatly serializes/unserializes
    JSON objects seamlessly.  Main thingy must be a dict object.
    c                 O   s.   |  dt¡|d< tjj| g|¢R i |¤Ž d S )NÚdefault)ÚgetÚdictr   Ú	TextFieldÚ__init__)r   ÚargsÚkwargsr   r   r   r   5   s    zJSONField.__init__c                    s0   |   ¡ r&| j}t|ƒr|ƒ }|  |¡S tƒ  ¡ S r   )Zhas_defaultr   ÚcallableÚ	to_pythonÚsuperÚget_default)r   r   ©Ú	__class__r   r   r$   9   s    
zJSONField.get_defaultc                 C   sZ   |du s|dkri S t |tƒr(t|ƒ}n|}t |tƒrDtf i |¤ŽS t |tƒrVt|ƒS |S )z=Convert our string value to JSON after we load it from the DBNÚ )Ú
isinstanceÚstrr   r   r   Úlistr   )r   r   Úresr   r   r   r"   C   s    



zJSONField.to_pythonc                    s$   t |tƒst|ƒS ttj| ƒ |¡S r   )r(   r)   r	   r#   r   r   Úget_prep_value)r   r   r%   r   r   r,   T   s    
zJSONField.get_prep_valuec                 C   s
   |   |¡S r   )r"   )r   r   Z
expressionÚ
connectionr   r   r   Úfrom_db_valueY   s    zJSONField.from_db_valuec                 K   s(   |du r| j rdS t|tƒs$t|ƒ}|S )z2Convert our JSON object to a string before we saveN)Únullr(   r)   r	   )r   r   r-   r    r   r   r   Úget_db_prep_save\   s
    
zJSONField.get_db_prep_savec                    s.   t ƒ  ¡ \}}}}| jdkr"|d= ||||fS )Nz{}r   )r#   Údeconstructr   )r   ÚnameÚpathr   r    r%   r   r   r1   g   s    
zJSONField.deconstruct)r   r   r   r   r   r$   r"   r,   r.   r0   r1   Ú__classcell__r   r   r%   r   r   /   s   
r   )r   r
   Zdjango.core.serializers.jsonr   Z	django.dbr   r	   r   r   r   r*   r   r   r   r   r   r   r   Ú<module>   s   

