
    Bf                     P    d Z ddlZddlZddZddZd ZddZddZdd	Zdd
Z	dS )zHelpers for rest transports.    NFc                 r    | $t          | t                    st          d          t          | g |          S )a  Flatten a dict into a list of (name,value) tuples.

    The result is suitable for setting query params on an http request.

    .. code-block:: python

        >>> obj = {'a':
        ...         {'b':
        ...           {'c': ['x', 'y', 'z']} },
        ...      'd': 'uvw',
        ...      'e': True, }
        >>> flatten_query_params(obj, strict=True)
        [('a.b.c', 'x'), ('a.b.c', 'y'), ('a.b.c', 'z'), ('d', 'uvw'), ('e', 'true')]

    Note that, as described in
    https://github.com/googleapis/googleapis/blob/48d9fb8c8e287c472af500221c6450ecd45d7d39/google/api/http.proto#L117,
    repeated fields (i.e. list-valued fields) may only contain primitive types (not lists or dicts).
    This is enforced in this function.

    Args:
      obj: a possibly nested dictionary (from json), or None
      strict: a bool, defaulting to False, to enforce that all values in the
              result tuples be strings and, if boolean, lower-cased.

    Returns: a list of tuples, with each tuple having a (possibly) multi-part name
      and a scalar value.

    Raises:
      TypeError if obj is not a dict or None
      ValueError if obj contains a list of non-primitive values.
    Nz4flatten_query_params must be called with dict objectkey_pathstrict)
isinstancedict	TypeError_flatten)objr   s     k/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/google/api_core/rest_helpers.pyflatten_query_paramsr      s<    B z#t44NOOOC"V4444    c                     | g S t          | t                    rt          | ||          S t          | t                    rt	          | ||          S t          | ||          S )Nr   )r   r   _flatten_dictlist_flatten_list_flatten_valuer   r   r   s      r   r
   r
   <   sq    
{	#t DS8FCCCC#t DS8FCCCC#@@@@r   c                 d    | dS t          | t          t          f          rt          d          dS )NFz4query params may not contain repeated dicts or listsT)r   r   r   
ValueError)r   s    r   _is_primitive_valuer   F   s7    
{u#d|$$ QOPPP4r   c                 P    d                     |          t          | |          fgS )N.)r   )join_canonicalizer   s      r   r   r   P   s)    XXhs6!B!B!BCDDr   c                     fd|                                  D             }t          j        t          j        |g           S )Nc              3   J   K   | ]\  }}t          ||gz              V  dS r   N)r
   ).0keyvaluer   r   s      r   	<genexpr>z _flatten_dict.<locals>.<genexpr>U   sQ        C 	SE!1&AAA     r   )items	functoolsreduceoperatorconcat)r   r   r   r#   s    `` r   r   r   T   sR        ))++  E HOUB777r   c                 d    fd| D             }t          j        t          j        |g           S )Nc              3   Z   K   | ]%}t          |          t          |           V  &dS r   )r   r   )r   elemr   r   s     r   r"   z _flatten_list.<locals>.<genexpr>_   sT        t$$thv>>>     r   )r$   r%   r&   r'   )elemsr   r   r#   s    `` r   r   r   \   sJ          E
 HOUB777r   c                 ~    |r:t          |           }t          | t                    r|                                }|S | S )N)strr   boollower)r   r   r!   s      r   r   r   g   s>     Cc4   	"KKMMEJr   )F)
__doc__r$   r&   r   r
   r   r   r   r   r    r   r   <module>r2      s    # "     $5 $5 $5 $5NA A A A  E E E E8 8 8 88 8 8 8     r   