a
    lJh+                     @   s  d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZ e	eeef Ze	eee f Ze	deeeef eeeef  f Zeedd	d
Zeee	eef ef  edddZeee	eef ef  edddZeee	edf dddZdS )zQuery string handling.    N)IterableMappingSequence)AnySupportsIntUnion)istr   )QUERY_PART_QUOTERQUERY_QUOTER)vreturnc                 C   s   t | }|tu rt| S t| tr&| S t| tr`t| rBtdt| rTtdtt| S |t	ur~t| t
r~tt| S td| |dS )z%Convert a query variable to a string.zfloat('inf') is not supportedzfloat('nan') is not supportedzMInvalid variable type: value should be str, int or float, got {!r} of type {}N)typeintstr
isinstancefloatmathisinf
ValueErrorisnanboolr   	TypeErrorformat)r   cls r   =/var/www/shaz/venv/lib/python3.9/site-packages/yarl/_query.py	query_var   s$    



r   )itemsr   c                    s    t   fdd| D }d|S )zReturn a query string from a sequence of (key, value) pairs.

    value is a single value or a sequence of values for the key

    The sequence of values must be a list or tuple.
    c                    sd   g | ]\\}}t |tur*t|ttfr*|n|fD ].} | d  t |tu rP|nt| q0qS =)r   r   r   listtupler   ).0kvalr   quoterr   r   
<listcomp>2   s   &z8get_str_query_from_sequence_iterable.<locals>.<listcomp>&r
   joinr   pairsr   r&   r   $get_str_query_from_sequence_iterable(   s
    	
r.   c                    s    t   fdd| D }d|S )zReturn a query string from an iterable.

    The iterable must contain (key, value) pairs.

    The values are not allowed to be sequences, only single values are
    allowed. For sequences, use `_get_str_query_from_sequence_iterable`.
    c                    s:   g | ]2\}} | d  t |tu r(|nt| qS r   )r   r   r   )r#   r$   r   r&   r   r   r(   I   s   z/get_str_query_from_iterable.<locals>.<listcomp>r)   r*   r,   r   r&   r   get_str_query_from_iterable<   s
    

r/   )argskwargsr   c                  O   s   |r| rd}t ||}nt| dkr0| d }nt d|du rDdS |sLdS t|tu rdt| S t|tu szt|trt|S t|t	rt| S t|t
ttfrd}t|t|trt|S tddS )z*Return a query string from supported args.z7Either kwargs or single query parameter must be presentr	   r   N zAInvalid query type: bytes, bytearray and memoryview are forbiddenzRInvalid query type: only str, mapping or sequence of (key, value) pairs is allowed)r   lenr   dictr.   r   r   r   r   r   bytes	bytearray
memoryviewr   r   r/   )r0   r1   msgqueryr   r   r   get_str_queryO   s4    


r:   )__doc__r   collections.abcr   r   r   typingr   r   r   Z	multidictr   Z_quotersr
   r   r   r   ZSimpleQueryZQueryVariabler"   ZQueryr   r.   r/   r:   r   r   r   r   <module>   s$   