o
    uvXjÃ  ã                   @   s’   d Z ddlmZ ddlZddlZddlZddlm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()
é    )Úabsolute_importN)Úsettings)ÚDjangoJSONEncoder)Úmodelsc                 C   s   t ƒ  | ¡S ©N)r   Úencode)Úvalue© r	   ú]/var/www/html/myproject/venv/lib/python3.10/site-packages/django_extensions/db/fields/json.pyÚdumps   s   r   c                 C   s   t j| tjd�}|S )N)Úencoding)ÚjsonÚloadsr   ÚDEFAULT_CHARSET)Útxtr   r	   r	   r
   r      s
   þr   c                   @   ó   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   ó   t | ƒS r   ©r   ©Úselfr	   r	   r
   Ú__repr__*   ó   zJSONDict.__repr__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   r	   r	   r
   r   $   ó    r   c                   @   r   )ÚJSONListr   c                 C   r   r   r   r   r	   r	   r
   r   4   r   zJSONList.__repr__Nr   r	   r	   r	   r
   r    .   r   r    c                       sl   e Zd ZdZdd„ Z‡ fdd„Zdd„ Z‡ fdd	„Zej	d
k r$dd„ Z
n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&   >   s   zJSONField.__init__c                    s4   |   ¡ r| j}t|ƒr|ƒ }|  |¡S tt| ƒ ¡ S r   )Úhas_defaultr"   ÚcallableÚ	to_pythonÚsuperr!   Úget_default)r   r"   ©Ú	__class__r	   r
   r-   B   s   
zJSONField.get_defaultc                 C   s\   |du s|dkr
i S t |tjƒrt|ƒ}n|}t |tƒr#tdi |¤ŽS t |tƒr,t|ƒS |S )z=Convert our string value to JSON after we load it from the DBNÚ r	   )Ú
isinstanceÚsixÚstring_typesr   r$   r   Úlistr    )r   r   Úresr	   r	   r
   r+   L   s   


zJSONField.to_pythonc                    s&   t |tjƒs
t|ƒS ttj| ƒ |¡S r   )r1   r2   r3   r   r,   r   r%   Úget_prep_value)r   r   r.   r	   r
   r6   ]   s   zJSONField.get_prep_value)é   c                 C   ó
   |   |¡S r   ©r+   )r   r   Ú
expressionÚ
connectionÚcontextr	   r	   r
   Úfrom_db_valuec   ó   
zJSONField.from_db_valuec                 C   r8   r   r9   )r   r   r:   r;   r	   r	   r
   r=   f   r>   c                 K   s*   |du r	| j r	dS t|tjƒst|ƒ}|S )z2Convert our JSON object to a string before we saveN)Únullr1   r2   r3   r   )r   r   r;   r(   r	   r	   r
   Úget_db_prep_savei   s
   zJSONField.get_db_prep_savec                    s2   t t| ƒ ¡ \}}}}| jdkr|d= ||||fS )Nz{}r"   )r,   r!   Údeconstructr"   )r   ÚnameÚpathr'   r(   r.   r	   r
   rA   t   s   
zJSONField.deconstruct)r   r   r   r   r&   r-   r+   r6   ÚdjangoÚVERSIONr=   r@   rA   Ú__classcell__r	   r	   r.   r
   r!   8   s    


r!   )r   Ú
__future__r   r   rD   r2   Údjango.confr   Údjango.core.serializers.jsonr   Ú	django.dbr   r   r   r$   r   r4   r    r%   r!   r	   r	   r	   r
   Ú<module>   s   

