o
    /h`                     @   sv   d 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()
    N)DjangoJSONEncoder)models)expressionsc                 C   s   t  | S N)r   encode)value r   [/var/www/html/env_mimamsha/lib/python3.10/site-packages/django_extensions/db/fields/json.pydumps   s   r
   c                 C   s
   t | S r   )jsonloads)txtr   r   r	   r         
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   -   r   zJSONList.__repr__Nr   r   r   r   r	   r   '   r   r   c                       s\   e Zd ZdZdd Z fddZdd Z fdd	Zd
d Z f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$   7   s   zJSONField.__init__c                    s0   |   r| j}t|r| }| |S t  S r   )has_defaultr    callable	to_pythonsuperget_default)r   r    	__class__r   r	   r+   ;   s   

zJSONField.get_defaultc                 C   sZ   |du s|dkr
i S t |t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strr   r"   r   listr   )r   r   resr   r   r	   r)   E   s   



zJSONField.to_pythonc                    s$   t |ts	t|S ttj| |S r   )r/   r0   r
   r*   r   r#   get_prep_value)r   r   r,   r   r	   r3   V   s   
zJSONField.get_prep_valuec                 C   s
   |  |S r   )r)   )r   r   
expression
connectionr   r   r	   from_db_value[   r   zJSONField.from_db_valuec                    s>   |du r	| j r	dS t|tst|tjst|}t ||S )z2Convert our JSON object to a string before we saveN)nullr/   r0   r   
Expressionr
   r*   get_db_prep_save)r   r   r5   r&   r,   r   r	   r9   ^   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	   r:   o   s   
zJSONField.deconstruct)r   r   r   r   r$   r+   r)   r3   r6   r9   r:   __classcell__r   r   r,   r	   r   1   s    
r   )r   r   django.core.serializers.jsonr   	django.dbr   django.db.modelsr   r
   r   r"   r   r1   r   r#   r   r   r   r   r	   <module>   s   

