o
    tBhM!                     @   s  d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
 ddlZddlmZ ddlZddlZe ZeeefZdd ej D Zd	d
 Zdd Zdd Zd'ddZdd ZefddZefddZefddZefddZ d(ddZ!dd  Z"d!d" Z#G d#d$ d$eZ$d%d& Z%dS ))z-Generic utility methods not part of main API.    N)HashableIterableMappingSequence)Decimalwraps)getfullargspecc                 C   s    i | ]\}}t |tr||qS  )
isinstancer   ).0keyvaluer
   r
   e/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/pydash/helpers.py
<dictcomp>   s     r   c                 O   s>   t |}d|v r|d nt| |}t||g}| |d|  S )zaInspect argspec of `iteratee` function and only pass the supported arguments when calling
    it.argcountN)lengetargcountmin)iterateeargskwargsmaxargsr   argstopr
   r
   r   callit   s   r   c                 C   sV   t | dr| jS t| tst| rd}|S d}zt| |}W |S  ty*   Y |S w )z+Return argument count of iteratee function.	_argcount   )hasattrr   r   typepyd
is_builtin_getargcount	TypeError)r   r   r   r
   r
   r   r   "   s   
	r   c              
   C   s   d }zt | }W n tttfy   Y nw tdd |j D s't|j}|d u r9t	| }|r9|j
s9t|j}|d u r?|}|S )Nc                 s   s    | ]
}|j tjjkV  qd S N)kindinspect	ParameterVAR_POSITIONAL)r   paramr
   r
   r   	<genexpr>C   s    
z_getargcount.<locals>.<genexpr>)r%   	signaturer"   
ValueErrorAttributeErrorany
parametersvaluesr   r	   varargsr   )r   r   r   sigargspecr
   r
   r   r!   7   s"   


r!   Fc                 c   sr    |du rt j}d}nt |}t|dd}t| }|r"tt|}|D ]\}}t|||| |d||| fV  q$dS )z3Return iterative iteratee based on collection type.Nr      )r   )r   )r   identityr   r   iteratorreversedtupler   )objr   reversecbkr   itemsr   itemr
   r
   r   iteriterateeU   s   
r=   c                 C   s\   t | tr	|  S t| dr|  S t| drt|  S t | tr&t| S t| di  S )z&Return iterative based on object type.	iteritemsr;   __dict__)	r   r   r;   r   r>   iterr   	enumerategetattr)r8   r
   r
   r   r5   g   s   



r5   c                 C   s   t | trt| ||d}n t | ttfrt | tr&t| dr&t| ||d}nt| ||d}|t	u r>t
dt|  d| d|S )a  
    Safely get an item by `key` from a sequence or mapping object when `default` provided.

    Args:
        obj (list|dict): Sequence or mapping to retrieve item from.
        key (mixed): Key or index identifying which item to retrieve.
        default (mixed, optional): Default value to return if `key` not found in `obj`.

    Returns:
        mixed: `obj[key]`, `obj.key`, or `default`.

    Raises:
        KeyError: If `obj` is missing key, index, or attribute and no default value provided.
    default_fieldszObject "z" does not have key "")r   dict_base_get_dictr   r   r7   r   _base_get_object_base_get_itemUNSETKeyErrorreprr8   r   rD   r   r
   r
   r   base_getu   s   
rO   c                 C   sR   |  |t}|tu r'|}t|ts'z|  t||}W |S  ty&   Y |S w |S r#   )getrK   r   int	ExceptionrN   r
   r
   r   rH      s   
rH   c                 C   sP   z| | W S  t y   Y nw t|ts&z| t| W S  t y%   Y |S w |S r#   )rR   r   rQ   )r8   r   rD   r
   r
   r   rJ      s   

rJ   c                 C   sD   t | |td}|tu r |}zt| |}W |S  ty   Y |S w |S )NrC   )rJ   rK   rB   rR   rN   r
   r
   r   rI      s   rI   Tc                 C   s   t | tr|s|| vr|| |< | S t | trDt|}|t| k r(|r&|| |< | S |t| kr=| dg|  d| | dd< | | | S |sKt| |sU| durUt| || | S )a  
    Set an object's `key` to `value`. If `obj` is a ``list`` and the `key` is the next available
    index position, append to list; otherwise, pad the list of ``None`` and then append to the list.

    Args:
        obj (list|dict): Object to assign value to.
        key (mixed): Key or index to assign to.
        value (mixed): Value to assign.
        allow_override (bool): Whether to allow overriding a previously set key.
    N)r   rG   listrQ   r   appendr   setattr)r8   r   r   allow_overrider
   r
   r   base_set   s"   



rW   c                 C   s<   | du r
|du r
dS | du rdS |du rdS | |k| |k  S )z
    Replacement for built-in function ``cmp`` that was removed in Python 3.

    Note: Mainly used for comparison during sorting.
    Nr   r   r
   )abr
   r
   r   cmp   s   r[   c                 O   sV   | | }|d }|du r't|st|tst|ts|du r'|}|dd }||fS )zvTry to find iteratee function passed in either as a keyword argument or as the last
    positional argument in `args`.rX   N)rP   callabler   strrG   )iteratee_keywordr   r   r   last_argr
   r
   r   parse_iteratee   s   
r`   c                   @   s4   e Zd ZdZdd Zdd Zdd Zdd	 ZeZd
S )iterator_with_defaultz<A wrapper around an iterator object that provides a default.c                 C   s   t || _ || _d S r#   )r@   rD   )self
collectionrD   r
   r
   r   __init__  s   

ziterator_with_default.__init__c                 C   s   | S r#   r
   )rb   r
   r
   r   __iter__  s   ziterator_with_default.__iter__c                 C   s   | j }t| _ |S r#   )rD   rK   rb   retr
   r
   r   next_default  s   z"iterator_with_default.next_defaultc                 C   s    t | j|  }|tu rt|S r#   )nextr@   rh   rK   StopIterationrf   r
   r
   r   __next__  s   ziterator_with_default.__next__N)	__name__
__module____qualname____doc__rd   re   rh   rk   ri   r
   r
   r
   r   ra      s    ra   c                    s   t   fdd}|S )z
    This is a decorator which can be used to mark functions as deprecated.

    It will result in a warning being emitted when the function is used.
    c                     s(   t jd j dtdd  | i |S )NzCall to deprecated function .r3   )category
stacklevel)warningswarnrl   DeprecationWarning)r   r   funcr
   r   wrapper  s   zdeprecated.<locals>.wrapperr   )rw   rx   r
   rv   r   
deprecated  s   ry   )NF)T)&ro   builtinscollections.abcr   r   r   r   decimalr   	functoolsr   r%   r	   rs   pydashr   objectrK   rQ   floatNUMBER_TYPESr?   r;   BUILTINSr   r   r!   r=   r5   rO   rH   rJ   rI   rW   r[   r`   ra   ry   r
   r
   r
   r   <module>   s4    


!
 