
    g"                     b   d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZm	Z	m
Z
mZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ d
ZdZde de!fdZ"de#de#fdZ$de#fdZ%dededefdZ&dedefdZ'dede de	e   fdZ(dedefdZ)dededefdZ*de
e#ef   dede
e#ef   fdZ+y)    N)md5)ascii_letters)AnyIteratorDictListcast   )INT_MIN_VALUEINT_MAX_VALUELONG_MIN_VALUELONG_MAX_VALUE
DAYS_SHIFTMLS_PER_HOURMCS_PER_HOUR)extract_record_typeextract_logical_typeparse_schema)SchemaNamedSchemas)
PRIMITIVESl          l          numreturnc                 R    t        j                  | dz        j                  | d      S )N   little)randomgetrandbitsto_bytes)r   s    C/var/www/openai/venv/lib/python3.12/site-packages/fastavro/utils.py
_randbytesr!      s$    cAg&//X>>    stringc                 P    t        | j                               j                         S )N)r   encode	hexdigest)r#   s    r    _md5r'   !   s    v}}))++r"   c                  V    dj                  t        j                  t        d            S )N 
   )k)joinr   choicesr    r"   r    	_gen_utf8r/   %   s    776>>-2677r"   schemanamed_schemasc                    t        |       }t        |       }|dk(  ry |dk(  r-|dk(  rt        j                         j                  S t               S |dk(  r|dk(  rKt        j                  t         dz   t        j                  j                  j                         t        z
        S |dk(  r t        j                  dt        d	z  dz
        S t        j                  t        t              S |d
k(  r|dk(  r t        j                  dt         d	z  dz
        S |dk(  s|dk(  rt        j                  dt"              S |dk(  s|dk(  rt        j                  dt$              S t        j                  t&        t(              S |dk(  rt        j                         S |dk(  rt        j                         S |dk(  rt+        t        j                  dd            S |dk(  rt-        d      S |dk(  r+t/        t0        t2        t4        f   |       }t-        |d         S |dk(  rJt/        t0        t2        t4        f   |       }t        j                  dt7        |d         dz
        }|d   |   S |dk(  rCt/        t0        t2        t8        f   |       }t;        d      D cg c]  }t=        |d   |       c}S |dk(  rLt/        t0        t2        t8        f   |       }	t;        d      D ci c]  }t               t=        |	d   |       c}S |dk(  s|dk(  rHt/        t>        t8           |       }
t        j                  dt7        |
      dz
        }t=        |
|   |      S |dk(  s|d k(  rAt/        t0        t2        t4        f   |       }|d!   D ci c]  }|d"   t=        |d#   |       c}S t/        t2        |       }t=        ||   |      S c c}w c c}w c c}w )$Nnullr#   zstring-uuidintzint-dater
   zint-time-millisr      longzlong-time-microszlong-timestamp-milliszlong-local-timestamp-milliszlong-timestamp-microszlong-local-timestamp-microsfloatdoublebooleanbytesr*   fixedsizeenumsymbolsarrayitemsmapvaluesunionerror_unionrecorderrorfieldsnametype) r   r   uuiduuid4hexr/   r   randintr   datetimedatemax	toordinalr   r   r   r   MAX_TIMESTAMP_MILLISMAX_TIMESTAMP_MICROSr   r   boolr!   r	   r   strr   lenr   rangegen_datar   )r0   r1   record_typelogical_typefixed_schemaenum_schema
real_indexarray_schema_
map_schemaunion_schemarecord_schemafieldnamed_schemas                 r    rX   rX   )   s   %f-K'/Lf		 =(::<###{		:% >>a!2!2!<!<!>!K  ,,>>!\B%6%:;;~~m];;		-->>!\B%6%:;;33<<>>!%9::33<<>>!%9::~~nn==		}}		 }}			!FNN1a())		"~		DcNF3,v.//		4S>62^^As;y+A'BQ'FG
9%j11		Df-v6HMb	R	1g.>	RR		$sF{+V4
 2Y
 K*X"6FF
 	
 
	;-#?DL&1^^As<'81'<=
Z0-@@		 K7$:T#s(^V4 'x0
0 &M8E&M=AA0
 	

 C(l3]CC' S

s   N1N65N;c                 ,    t        t        | d            S )a  
    Returns a single instance of arbitrary data that conforms to the schema.

    Parameters
    ----------
    schema
        Schema that data should conform to


    Example::

        from fastavro import schemaless_writer
        from fastavro.utils import generate_one

        schema = {
            'doc': 'A weather reading.',
            'name': 'Weather',
            'namespace': 'test',
            'type': 'record',
            'fields': [
                {'name': 'station', 'type': 'string'},
                {'name': 'time', 'type': 'long'},
                {'name': 'temp', 'type': 'int'},
            ],
        }

        with open('weather.avro', 'wb') as out:
            schemaless_writer(out, schema, generate_one(schema))
    r
   )nextgenerate_many)r0   s    r    generate_onerh   r   s    < fa())r"   countc              #   d   K   i }t        | |      }t        |      D ]  }t        ||        yw)a[  
    A generator that yields arbitrary data that conforms to the schema. It will
    yield a number of data structures equal to what is given in the count

    Parameters
    ----------
    schema
        Schema that data should conform to
    count
        Number of objects to generate


    Example::

        from fastavro import writer
        from fastavro.utils import generate_many

        schema = {
            'doc': 'A weather reading.',
            'name': 'Weather',
            'namespace': 'test',
            'type': 'record',
            'fields': [
                {'name': 'station', 'type': 'string'},
                {'name': 'time', 'type': 'long'},
                {'name': 'temp', 'type': 'int'},
            ],
        }

        with open('weather.avro', 'wb') as out:
            writer(out, schema, generate_many(schema, 5))
    N)r   rW   rX   )r0   ri   r1   parsed_schemar_   s        r    rg   rg      s5     B #%M 7M5\}m44 s   .0c                 6    i }t        | |      }t        ||      S )zReturns an anonymized schema

    Parameters
    ----------
    schema
        Schema to anonymize


    Example::

        from fastavro.utils import anonymize_schema

        anonymized_schema = anonymize_schema(original_schema)
    )r   _anonymize_schema)r0   r1   rk   s      r    anonymize_schemarn      s"     #%M 7M]M::r"   c                    t        | t              r| D cg c]  }t        ||       c}S t        | t              s| t        v r| S dt        |        S | d   }i }||d<   d| v rt        | d         |d<   |dk(  rt        | d   |      |d<   |S |dk(  rt        | d   |      |d<   |S |dk(  r8dt        | d	          |d	<   | d
   D cg c]  }dt        |        c}|d
<   |S |dk(  rdt        | d	          |d	<   | d   |d<   |S |dk(  s|dk(  r6dt        | d	          |d	<   | d   D cg c]  }t        ||       c}|d<   |S |t        v r||d<   |S c c}w c c}w c c}w )NA_rI   docr?   r@   rA   rB   r=   rH   r>   r;   r<   rE   rF   rG   )
isinstancelistrm   dictr   r'   anonymize_field)r0   r1   sschema_typerk   symbolrc   s          r    rm   rm      s   &$=CDV!!]3VDD %ZMV~&& Vn +fF?#'u#6M% '!%6vg%VM'"2 / E!&7x8H-&XM(#, ) F"&(fVn)=(>$?M&!282C(2C"T&\N#2C(M)$$  G#&(fVn)=(>$?M&!$*6NM&!  H$w(>&(fVn)=(>$?M&!CI(CS'CS%}5CS'M(#  J&$/M&![ E6('s   EE+Erc   c                     i }d| v rt        | d         |d<   d| v r| d   D cg c]  }t        |       c}|d<   d| v r| d   |d<   t        | d         |d<   t        | d   |      |d<   |S c c}w )Nrq   aliasesdefaultrH   rI   )r'   rm   )rc   r1   parsed_fieldaliass       r    ru   ru     s     $&L~"5<0UE<A)<L"M<L54;<L"MYE"'	"2Y  f.L,U6]MJL #Ns   A,),rN   rJ   hashlibr   r   r#   r   typingr   r   r   r   r	   constr   r   r   r   r   r   r   r0   r   r   r   typesr   r   _schema_commonr   rR   rS   r4   r:   r!   rU   r'   r/   rX   rh   rg   rn   rm   ru   r.   r"   r    <module>r      s)         2 2   L K ' &   ?C ?E ?
, , ,83 8FDV FDL FDS FDR* *C *B$5& $5 $5# $5N;V ; ;(0f 0\ 0f 0fS>*6	#s(^r"   