o
    T۷iB                     @   s   d dl Z d dlZd dlZd dlmZmZ d dl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e	dedef dZdedefddZe	dedZG dd dee ZdS )    N)CallableIterator)AnyGenericTypeVarcastzpycountry.dbc                       sr   e Zd ZdefddZdedef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   B/home/ubuntu/vllm_env/lib/python3.10/site-packages/pycountry/db.py__init__   s   
zData.__init__keyreturnc                 C   s   || j v r
| j | S t|r
   )r   AttributeError)r   r   r   r   r   __getattr__   s   

zData.__getattr__valueNc                    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   F.)boundfr   c                    s    fdd}t t|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r6   r   r   load_if_needed2   s
   
z!lazy_load.<locals>.load_if_needed)r   r4   )r6   r=   r   r<   r   	lazy_load1   s   
r>   Tc                	   @   s  e Zd ZU eeB ed< dZedB ed< g 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d&ddZd&ddZd&ddZd&ddZedd Zedd Zedee fddZedefddZedddedB d edB dedB fd!d"Zed#edefd$d%ZdS )'Database
data_classNroot_keyno_indexspecial_indexfilenamer   c                 C   sD   || _ d| _t | _t| jtrt| jt	fi | _
d S | j| _
d S NF)rE   r7   	threadingLockr8   
isinstancerA   r-   typer   factory)r   rE   r   r   r   r   D   s   
zDatabase.__init__c                 C   s   d| _ g | _i | _d S rF   )r7   objectsindicesr&   r   r   r   _clearN   s   
zDatabase._clearc                 C      t dNzMust be implemented in subclassNotImplementedErrorr   objr   r   r   r   _special_indexS      zDatabase._special_indexc                 C   rO   rP   rQ   rS   r   r   r   _special_deindexV   rV   zDatabase._special_deindexc                 C   sz   |j  D ]5\}}|| jv rq|| jv r| || q| j|i }| }||v r6t	d| j
j||f  |||< qd S )NzW%s %r already taken in index %r and will be ignored. This is an error in the databases.)r   r!   rC   rD   rU   rM   
setdefaultlowerloggerdebugrK   r   r   rT   r   r   indexr   r   r   _index_objectY   s    


zDatabase._index_objectc                 C   s`   |j  D ](\}}|| jv rq|| jv r| || q| }| j|i }||v r-||= qd S r
   )r   r!   rC   rD   rW   rY   rM   rX   r\   r   r   r   _deindex_objectl   s   

zDatabase._deindex_objectc                 C   s   | j rd S |   t| jdd}t|}W d    n1 s w   Y  || j D ]}| jdi |}| j	| | 
| q*d| _ d S )Nzutf-8)encodingTr   )r7   rN   openrE   jsonloadrB   rK   rL   appendr^   )r   r6   treeentryrT   r   r   r   r9   x   s   
zDatabase._loadc                 K   s*   | j di |}| j| | | d S )Nr   )rK   rL   rd   r^   r   r;   rT   r   r   r   	add_entry   s   zDatabase.add_entryc                 K   sP   | dd  | jdi |}|st| jj d| | j| | | d S )Ndefaultz" not found and cannot be removed: r   )popgetKeyErrorrK   r   rL   remover_   rg   r   r   r   remove_entry   s   zDatabase.remove_entryc                 C   
   t | jS r
   )iterrL   r&   r   r   r   r*         
zDatabase.__iter__c                 C   ro   r
   )lenrL   r&   r   r   r   __len__   rq   zDatabase.__len__)ri   ri   r;   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)	rr   	TypeErrorpopitemrI   r-   LookupErrorrY   rM   rl   )r   ri   r;   r)   r   r]   r   r   r   rk      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)rI   r-   rw   rY   rM   rC   r   rk   )r   r   r   	candidatekvr   r   r   lookup   s&   


zDatabase.lookup)r   N)r   r+   r,   rJ   r-   __annotations__rB   rC   r%   rD   r   rN   rU   rW   r^   r_   r9   r>   rh   rn   r   r?   r*   intrs   rk   r{   r   r   r   r   r@   >   s0   
 








*r@   )rb   loggingrG   collections.abcr   r   typingr   r   r   r   	getLoggerrZ   r   r0   r3   r4   r>   r?   r@   r   r   r   r   <module>   s    

