
    kh`                         d Z ddlZddlmZ ddlmZ ddlmZ d Zd Z	 G d d	e
          Z G d
 de          Z G 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                 D    t                                          |           S N)r   encode)values    W/var/www/histauto/venv/lib/python3.11/site-packages/django_extensions/db/fields/json.pydumpsr      s    %%e,,,    c                 *    t          j        |           S r   )jsonloads)txts    r
   r   r      s    :c??r   c                       e Zd ZdZ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                      t          |           S r   r   selfs    r
   __repr__zJSONDict.__repr__#       T{{r   N__name__
__module____qualname____doc__r    r   r
   r   r      -         
    r   r   c                       e Zd ZdZd ZdS )JSONListr   c                      t          |           S r   r   r   s    r
   r   zJSONList.__repr__-   r   r   Nr   r   r   r
   r"   r"   '   r    r   r"   c                   R     e Zd ZdZd Z fdZd Z fdZd Z fdZ	 fdZ
 xZS )		JSONFieldz
    JSONField is a generic textfield that neatly serializes/unserializes
    JSON objects seamlessly.  Main thingy must be a dict object.
    c                 v    |                     dt                    |d<   t          j        j        | g|R i | d S )Ndefault)getdictr   	TextField__init__)r   argskwargss      r
   r+   zJSONField.__init__7   sD    "JJy$77y!$888888888r   c                     |                                  r5| j        }t          |          r
 |            }|                     |          S t	                                                      S r   )has_defaultr'   callable	to_pythonsuperget_default)r   r'   	__class__s     r
   r3   zJSONField.get_default;   sa     	+lG   $!'))>>'***ww""$$$r   c                     ||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	   ress      r
   r1   zJSONField.to_pythonE   s}    =ERKKIeS!! 	,,CCCc4   	!??c??"T"" 	!C== 
r   c                     t          |t                    st          |          S t          t          j        |                               |          S r   )r7   r8   r   r2   r   r*   get_prep_value)r   r	   r4   s     r
   r<   zJSONField.get_prep_valueV   sB    %%% 	 <<V%t,,;;EBBBr   c                 ,    |                      |          S r   )r1   )r   r	   
expression
connections       r
   from_db_valuezJSONField.from_db_value[   s    ~~e$$$r   c                     |	| j         rdS t          |t                    s)t          |t          j                  st          |          }t                                          ||          S )z2Convert our JSON object to a string before we saveN)nullr7   r8   r   
Expressionr   r2   get_db_prep_save)r   r	   r?   r-   r4   s       r
   rD   zJSONField.get_db_prep_save^   se    =TY=4
 5#&&	! uk&<==		! %LLEww''z:::r   c                 v    t                                                      \  }}}}| j        dk    r|d= ||||fS )Nz{}r'   )r2   deconstructr'   )r   namepathr,   r-   r4   s        r
   rF   zJSONField.deconstructo   sE    #(77#6#6#8#8 dD&<4y!T4''r   )r   r   r   r   r+   r3   r1   r<   r@   rD   rF   __classcell__)r4   s   @r
   r%   r%   1   s         
9 9 9% % % % %  "C C C C C
% % %; ; ; ; ;"( ( ( ( ( ( ( ( (r   r%   )r   r   django.core.serializers.jsonr   	django.dbr   django.db.modelsr   r   r   r)   r   r9   r"   r*   r%   r   r   r
   <module>rM      s  
 
  : : : : : :       ( ( ( ( ( (- - -      t       t   B( B( B( B( B(  B( B( B( B( B(r   