
    Ha|                         d Z ddlZddlZddlmZ ej
                  dk  rddlmZ nddlmZ dZ	dZ
dgZd	 Zdd
Zd Zd Zd Zy)z Ancillary functions     Ndeepcopy)   r   )MappingzVince Reuterzvreuter@virginia.eduget_data_linesc                     d }|| _         | S )Nc                     t        |       S )z,
        Copy self to a new object.
        r   )selfs    .lib/python3.12/site-packages/attmap/helpers.pycopyzcopy.<locals>.copy   s     ~    )r   )objr   s     r   r   r      s     CHJr   c                     xs fdfdfd t        | j                               dg       S )a  
    Get text representation lines for a mapping's data.

    :param Mapping data: collection of data for which to get repr lines
    :param function(object, prefix) -> str fun_key: function to render key
        as text
    :param function(object, prefix) -> str fun_val: function to render value
        as text
    :param int space_per_level: number of spaces per level of nesting
    :return Iterable[str]: collection of lines
    c                     d| z  z  S )N  )levspace_per_levels    r   spacezget_data_lines.<locals>.space-   s    Sy?**r   c           
           |      dz   }	 |d   } |       dj                  ||d      z   S  | |                   z   S # t        $ r  |       |z   cY S w xY w)N:valz{} {}null)formatKeyError)r   keykwargsktextr   fun_keyfun_valr   s        r   renderzget_data_lines.<locals>.render1   s    s"	-C :v!  29#uSz2J!    	&:%%	&s   A AAc           
      ~   	 t        |       \  }}t        |t              rt	        |      dk(  r|j                   |||             nZ|j                   ||             |j                  dj                   t        |j                               |dz   g                     | ||      S # t        $ r |cY S w xY w)Nr   )r   
   )	nextStopIteration
isinstancer   lenappendjoiniteritems)kvscurr_levacckvgor!   s        r   r2   zget_data_lines.<locals>.go<   s    	9DAq !W%Q1JJvhq12 JJvh*+JJtyyDOX\2!FGH#x%%  	J	s   B. .B<;B<r   )r+   r,   )datar   r   r    r2   r!   r   s    ```@@@r   r   r      s:      G+	& d4::< !R((r   c                 v    t        j                  |       }|j                  t        j                                |S )z
    Return a logger equipped with a null handler.

    :param str name: name for the Logger
    :return logging.Logger: simple Logger instance with a NullHandler
    )logging	getLogger
addHandlerNullHandler)namelogs     r   
get_loggerr;   M   s.     

D
!CNN7&&()Jr   c                 H    t        | t              xr t        |       t        uS )z
    Determine whether an object is a Mapping other than dict.

    :param object obj: object to examine
    :return bool: whether the object is a Mapping other than dict
    )r'   r   typedict)r   s    r   is_custom_mapr?   Y   s     c7#=S	(==r   c                 $    dj                  |       S )z
    Create safe deletion log message.

    :param hashable key: unmapped key for which deletion/removal was tried
    :return str: message to log unmapped key deletion attempt.
    zNo key {} to delete)r   )r   s    r   safedel_messagerA   c   s     !'',,r   )   N)__doc__r5   sysr   r   version_infocollectionsr   collections.abc
__author__	__email____all__r   r;   r?   rA   r   r   r   <module>rK      sQ      
 f#'
"	
-)`	>-r   