
    F	h                     t   d Z ddlmZ ddlZddlmZmZmZ  e       Zej                  d        ej                  ed      ZdZdZdZdZdZd	Zd
 Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed      d               Zej'                  d       ed       d!               Zej'                  d       ed"      d#               Zej'                  d       ed$      d%               Zeeej>                  ej>                  eeeeeeefZ eeeeej>                  eeeeeefZ!d+d&Z"d' Z# G d( d)      Z$ejJ                  d*        Z& ejN                   e(              y),z.
CFFI-Wrapper for YAJL C library version 2.x.
    )FFIN)commonbackendsutilsa  
typedef void * (*yajl_malloc_func)(void *ctx, size_t sz);
typedef void (*yajl_free_func)(void *ctx, void * ptr);
typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, size_t sz);
typedef struct
{
    yajl_malloc_func malloc;
    yajl_realloc_func realloc;
    yajl_free_func free;
    void * ctx;
} yajl_alloc_funcs;
typedef struct yajl_handle_t * yajl_handle;
typedef enum {
    yajl_status_ok,
    yajl_status_client_canceled,
    yajl_status_error
} yajl_status;
typedef enum {
    yajl_allow_comments = 0x01,
    yajl_dont_validate_strings     = 0x02,
    yajl_allow_trailing_garbage = 0x04,
    yajl_allow_multiple_values = 0x08,
    yajl_allow_partial_values = 0x10
} yajl_option;
typedef struct {
    int (* yajl_null)(void * ctx);
    int (* yajl_boolean)(void * ctx, int boolVal);
    int (* yajl_integer)(void * ctx, long long integerVal);
    int (* yajl_double)(void * ctx, double doubleVal);
    int (* yajl_number)(void * ctx, const char * numberVal,
                        size_t numberLen);
    int (* yajl_string)(void * ctx, const unsigned char * stringVal,
                        size_t stringLen);
    int (* yajl_start_map)(void * ctx);
    int (* yajl_map_key)(void * ctx, const unsigned char * key,
                         size_t stringLen);
    int (* yajl_end_map)(void * ctx);
    int (* yajl_start_array)(void * ctx);
    int (* yajl_end_array)(void * ctx);
} yajl_callbacks;
int yajl_version(void);
yajl_handle yajl_alloc(const yajl_callbacks *callbacks, yajl_alloc_funcs *afs, void *ctx);
int yajl_config(yajl_handle h, yajl_option opt, ...);
yajl_status yajl_parse(yajl_handle hand, const unsigned char *jsonText, size_t jsonTextLength);
yajl_status yajl_complete_parse(yajl_handle hand);
unsigned char* yajl_get_error(yajl_handle hand, int verbose, const unsigned char *jsonText, size_t jsonTextLength);
void yajl_free_error(yajl_handle hand, unsigned char * str);
void yajl_free(yajl_handle handle);
            c                       fd}|S )Nc                 F     t        j                          fd       }|S )Nc                 T     |i |}t         j                  |       } ||f       y)Nr   )ffifrom_handle)ctxargskwargsvaluesendeventfuncs        T/var/www/html/backend/venv/lib/python3.12/site-packages/ijson/backends/yajl2_cffi.pywrappedz5append_event_to_ctx.<locals>.wrapper.<locals>.wrappedM   s/    $)&)E??3'D%     )	functoolswraps)r   r   r   s   ` r   wrapperz$append_event_to_ctx.<locals>.wrapperL   s%    			 
	
 r    )r   r   s   ` r   append_event_to_ctxr   K   s     Nr   zint(void *ctx)nullc                       y Nr   r   r   r   r   r   W        r   zint(void *ctx, int val)booleanc                     t        |       S r!   )boolvals    r   r#   r#   ]   s     9r   z$int(void *ctx, long long integerVal)numberc                     t        |       S r!   )intr&   s    r   integerr+   c   s     s8Or   z!int(void * ctx, double doubleVal)c                     | S r!   r   r&   s    r   doubler-   i   s	     Jr   z7int(void *ctx, const char *numberVal, size_t numberLen)c                 t    t        j                  t        j                  | |      j	                  d            S N)maxlenzutf-8)r   integer_or_decimalr   stringdecoder'   lengths     r   r(   r(   o   s-     $$SZZFZ%C%J%J7%STTr   z@int(void *ctx, const unsigned char *stringVal, size_t stringLen)r2   c                 N    t         j                  | |      j                  d      S r/   r   r2   r3   r4   s     r   r2   r2   u   "     ::c&:)0099r   	start_mapc                       y r!   r   r   r   r   r9   r9   {   r"   r   z:int(void *ctx, const unsigned char *key, size_t stringLen)map_keyc                 N    t         j                  | |      j                  d      S r/   r7   )keyr5   s     r   r;   r;      r8   r   end_mapc                       y r!   r   r   r   r   r>   r>      r"   r   start_arrayc                       y r!   r   r   r   r   r@   r@      r"   r   	end_arrayc                       y r!   r   r   r   r   rB   rB      r"   r   c                    t         j                  |      | _        |r t         j                  dt              | _        nt         j                  dt              | _        t        j                  | j
                  t         j                  | j                        }|r/t        j                  |t        t         j                  dd             |r/t        j                  |t        t         j                  dd             |S )Nzyajl_callbacks*r*   r   )r   
new_handler   new_float_callback_data	callbacks_decimal_callback_datayajl
yajl_allocNULLyajl_configYAJL_ALLOW_COMMENTScastYAJL_MULTIPLE_VALUES)scoper   allow_commentsmultiple_values	use_floathandles         r   	yajl_initrV      s    t$EI''"35IJ''"35KL__U__chh		BF!4chhua6HI!5sxxq7IJMr   c                    |r!t         j                  | |t        |            }nt         j                  |       }|t        k7  rt         j                  | d|t        |            }t        j                  |      }	 |j                  d      }t         j                  | |       |t        k(  rt        j                  nt        j                  } ||      y # t        $ r Y Sw xY w)Nr   utf8)rJ   
yajl_parselenyajl_complete_parseYAJL_OKyajl_get_errorr   r2   r3   UnicodeDecodeErroryajl_free_errorYAJL_INSUFFICIENT_DATAr   IncompleteJSONError	JSONError)rU   bufferresultperrorerror	exceptions         r   rY   rY      s    V=))&1$$VQFD

6"	LL(E 	VV,28<R2RF..X^XhXh	 
 " 		s   9C 	CCc                       e Zd Zy)	ContainerN)__name__
__module____qualname__r   r   r   ri   ri      s    r   ri   c              +      K   t               }t        || j                  fi |}	 	 	 d}t	        ||       |sn	 t
        j                  |       y# t        $ r d}Y 4w xY w# t
        j                  |       w xY ww)z
    Coroutine dispatching unprefixed events.

    Parameters:

    - allow_comments: tells parser to allow comments in JSON input
    - multiple_values: allows the parser to parse multiple JSON objects
    Nr   )ri   rV   r   GeneratorExitrY   rJ   	yajl_free)targetconfigrQ   rU   rc   s        r   basic_parse_basecororr      s      KEufkk4V4F
 vv&  v !  	vs=   "A=A# A A# A=A A# A  A# #A::A=)FFF))__doc__cffir   r   ijsonr   r   r   r   cdeffind_yajl_cffirJ   r\   YAJL_CANCELLEDr`   
YAJL_ERRORrN   rP   r   callbackr   r#   r+   r-   r(   r2   r9   r;   r>   r@   rB   rL   rI   rG   rV   rY   ri   	coroutinerr   enrich_backendglobalsr   r   r   <module>r~      s     ) ) 
e  0
 0f xsA&
 
   	 V    '(Y   ) 45X  6 12X  3 GHXU  IU PQX:  R: [! "   JKY:   L: Y     ]# $   [! "  
 	'388SXXvvwi  	'7FCHHfwi  $	 	  8   gi  r   