o
    tBhb                     @   s   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	 e
dZG dd dZG dd deZG dd	 d	eZd
d ZG dd dZdS )    N)AnyIteratorListOptionalTypeUnionzpycountry.dbc                       sh   e Zd ZdefddZdd Zdededd	f fd
dZdefddZdee fddZ	dd Z
  ZS )Datafieldsc                 K   s
   || _ d S N)_fields)selfr	    r   c/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/pycountry/db.py__init__
   s   
zData.__init__c                 C   s   || j v r
| j | S t|r
   )r   AttributeError)r   keyr   r   r   __getattr__   s   

zData.__getattr__r   valuereturnNc                    s$   |dkr	|| j |< t || d S )Nr   )r   super__setattr__)r   r   r   	__class__r   r   r      s   
zData.__setattr__c                 C   s6   | j j}ddd t| j D }| d| dS )Nz, c                 s   s    | ]}d | V  qdS )z%s=%rNr   ).0ir   r   r   	<genexpr>   s    z Data.__repr__.<locals>.<genexpr>())r   __name__joinsortedr   items)r   cls_namer	   r   r   r   __repr__   s   zData.__repr__c                 C   s   t | jt| j S r
   )dirr   listr   r   r   r   r   __dir__   s   zData.__dir__c                 c   s"    | j D ]
}|t| |fV  qd S r
   )r   getattr)r   fieldr   r   r   __iter__   s   
zData.__iter__)r   
__module____qualname__strr   r   r   r#   r   r'   r*   __classcell__r   r   r   r   r   	   s    r   c                   @      e Zd ZdS )CountryNr   r+   r,   r   r   r   r   r0   %       r0   c                   @   r/   )SubdivisionNr1   r   r   r   r   r3   )   r2   r3   c                    s    fdd}|S )Nc                    sJ   | j s| j |   W d    n1 sw   Y   | g|R i |S r
   )
_is_loaded
_load_lock_load)r   argskwfr   r   load_if_needed.   s
   
z!lazy_load.<locals>.load_if_neededr   )r:   r;   r   r9   r   	lazy_load-   s   r<   c                	   @   s   e Zd ZU eeef ed< dZee ed< g Z	e
e ed< deddfddZd	d
 ZdddZedd Zedd Zeded  fddZedefddZedddee dee dee fddZededefddZdS )Database
data_classNroot_keyno_indexfilenamer   c                 C   sD   || _ d| _t | _t| jtrt| jt	fi | _
d S | j| _
d S NF)rA   r4   	threadingLockr5   
isinstancer>   r-   typer   factory)r   rA   r   r   r   r   <   s   
zDatabase.__init__c                 C   s   d| _ g | _t | _i | _d S rB   )r4   objectssetindex_namesindicesr&   r   r   r   _clearF   s   
zDatabase._clearc                 C   s   | j rd S |   t| jdd}t|}W d    n1 s w   Y  || j D ]>}| jdi |}| j	| |
 D ])\}}|| jv rHq>| j|i }| }||v rctd| jj||f  |||< q>q*d| _ d S )Nzutf-8)encodingzW%s %r already taken in index %r and will be ignored. This is an error in the databases.Tr   )r4   rL   openrA   jsonloadr?   rG   rH   appendr!   r@   rK   
setdefaultlowerloggerdebugr   )r   r:   treeentryobjr   r   indexr   r   r   r6   L   s.   


zDatabase._loadc                 K   s\   | j di |}| j| | D ]\}}|| jv rq| }| j|i }|||< qd S )Nr   )rG   rH   rQ   r!   r@   rS   rK   rR   r   r8   rX   r   r   rY   r   r   r   	add_entrym   s   

zDatabase.add_entryc                 K   s   d|v r|d= | j di |}|st| jj d| | j| |D ]\}}|| jv r.q$| }| j	|i }||v r@||= q$d S )Ndefaultz" not found and cannot be removed: r   )
getKeyErrorrG   r   rH   remover@   rS   rK   rR   rZ   r   r   r   remove_entry}   s"   
zDatabase.remove_entryc                 C   
   t | jS r
   )iterrH   r&   r   r   r   r*         
zDatabase.__iter__c                 C   ra   r
   )lenrH   r&   r   r   r   __len__   rc   zDatabase.__len__)r\   r\   r8   c                K   sd   t |dkr
td| \}}t|tst | }| j| }z|| W S  ty1   | Y S w )N   zOnly one criteria may be given)	rd   	TypeErrorpopitemrE   r-   LookupErrorrS   rK   r^   )r   r\   r8   r)   r   rY   r   r   r   r]      s   


zDatabase.getr   c              	   C   s   t |tst | }| jD ]}z
| j| | W   S  ty$   Y qw | D ]}| jD ]}|j|}|d u r9q,| |krE|    S q,q'td| )NzCould not find a record for %r)rE   r-   ri   rS   rK   r@   r   r]   )r   r   r   	candidatekvr   r   r   lookup   s&   


zDatabase.lookup)r   N)r   r+   r,   r   r   r-   __annotations__r?   r   r@   r   r   rL   r6   r<   r[   r`   r   r*   intre   r   r]   rm   r   r   r   r   r=   7   s4   
 

!

r=   )rO   loggingrC   typingr   r   r   r   r   r   	getLoggerrT   r   r0   r3   r<   r=   r   r   r   r   <module>   s     

