o
    i"                     @   sn  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dZ"de#de#fddZ$de#fddZ%dededefddZ&dedefddZ'dede de	e fddZ(dedefddZ)dededefd d!Z*d"e
e#ef dede
e#ef fd#d$Z+dS )%    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                 C   s   t | d | dS )N   little)randomgetrandbitsto_bytes)r    r   T/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/fastavro/utils.py
_randbytes   s   r    stringc                 C   s   t |   S )N)r   encode	hexdigest)r!   r   r   r   _md5!   s   r$   c                   C   s   d tjtddS )N 
   )k)joinr   choicesr   r   r   r   r   	_gen_utf8%   s   r*   schemanamed_schemasc           
         s  t | }t| }|dkrd S |dkr|dkrt jS t S |dkrI|dkr5tt d t	j
j t S |dkrCtdtd	 d S tttS |d
kr}|dkr[tdtd	 d S |dksc|dkritdtS |dksq|dkrwtdtS tttS |dkrt S |dkrt S |dkrttddS |dkrtdS |dkrttttf | }t|d S |dkrttttf | }tdt|d d }|d | S |dkrttttf |   fddtdD S |dkrttttf | fddtdD S |dks|d kr(ttt | }tdt|d }t|| S |d!ks2|d"krFttttf | }fd#d|d$ D S tt| }	t|	 S )%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arrayc                    s   g | ]	}t  d  qS )itemsgen_data.0_)array_schemar,   r   r   
<listcomp>\   s    zgen_data.<locals>.<listcomp>mapc                    s   i | ]}t  t d  qS )values)r*   r<   r=   )
map_schemar,   r   r   
<dictcomp>_   s    zgen_data.<locals>.<dictcomp>unionerror_unionrecorderrorc                    s    i | ]}|d  t |d  qS )nametyper;   r>   fieldr,   r   r   rE   i   s    fields) 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   ranger   r<   )
r+   r,   record_typelogical_typefixed_schemaenum_schema
real_indexunion_schemarecord_schemanamed_schemar   )r@   rD   r,   r   r<   )   sx   



r<   c                 C   s   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)r+   r   r   r   generate_oner   s   rh   countc                 c   s.    i }t | |}t|D ]}t||V  qdS )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   r]   r<   )r+   ri   r,   parsed_schemar?   r   r   r   rg      s   !
rg   c                 C   s   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)r+   r,   rj   r   r   r   anonymize_schema   s   

rl   c                    sf  t | tr fdd| D S t | ts | tv r| S dt|  S | d }i }||d< d| v r6t| d |d< |dkrEt| d  |d< |S |dkrTt| d	  |d	< |S |d
krpdt| d  |d< dd | d D |d< |S |dkrdt| d  |d< | d |d< |S |dks|dkrdt| d  |d<  fdd| d D |d< |S |tv r||d< |S )Nc                       g | ]}t | qS r   )rk   )r>   srN   r   r   rA      s    z%_anonymize_schema.<locals>.<listcomp>A_rK   docr9   r:   rB   rC   r7   rJ   c                 S   s   g | ]	}d t | qS )ro   r$   )r>   symbolr   r   r   rA      s    r8   r5   r6   rH   rI   c                    rm   r   )anonymize_fieldrL   rN   r   r   rA      s    
rO   )
isinstancelistdictr   r$   rk   )r+   r,   schema_typerj   r   rN   r   rk      sH   




rk   rM   c                 C   st   i }d| v rt | d |d< d| v rdd | d D |d< d| v r'| d |d< t | d |d< t| d ||d< |S )Nrp   aliasesc                 S   s   g | ]}t |qS r   rq   )r>   aliasr   r   r   rA   	  s    z#anonymize_field.<locals>.<listcomp>defaultrJ   rK   )r$   rk   )rM   r,   parsed_fieldr   r   r   rs     s   rs   ),rT   rP   hashlibr   r   r!   r   typingr   r   r   r   r   constr
   r   r   r   r   r   r   r+   r   r   r   typesr   r   _schema_commonr   rX   rY   r.   r4   r    r[   r$   r*   r<   rh   rg   rl   rk   rs   r   r   r   r   <module>   s6    $	I!'3

