a
    »ÏOcã
  ã                   @   s`   d dl mZ d dlZd dlmZmZmZmZm	Z	 d dl
mZmZ G dd„ dƒZG dd„ dƒZdS )	é    )ÚOrderedDictN)Úbackend_initializedÚconfigÚget_backendÚinitialize_backendÚresource)ÚFetcherÚUpdaterc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_Queryz%Wrapper to access a specific resourcec                 C   s   || _ || _d S ©N)ÚclientÚres)Úselfr   r   © r   úG/var/www/html/gsl.tools/lib/python3.9/site-packages/peeringdb/client.pyÚ__init__   s    z_Query.__init__c                 C   s   | j  | j|¡S r   )r   Úgetr   )r   Úpkr   r   r   r      s    z
_Query.getc                 K   s   | j j| jfi |¤ŽS r   )r   Úallr   )r   Úkwargsr   r   r   r      s    z
_Query.allN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r
      s   r
   c                   @   sJ   e Zd ZdZddd„Zddd„Zddd	„Zd
d„ Zdd„ Ze	dd„ ƒZ
dS )ÚClientzMain PeeringDB client.Nc                    sì   |du rt  ¡ }|ˆ _ |d }|d }tƒ s<t|fi |¤Ž |d }tj ||¡ tf i |¤Žˆ _t	ˆ jfi |¤Žˆ _
ˆ j
jˆ _ˆ j
jˆ _ˆ j
jˆ _t‡ fdd„t ¡ D ƒƒ‰i ˆ¥‡fdd„‡fd	d„d
œ¥}tdd|ƒˆ _ˆ  ¡ ˆ _dS )ag  
        Arguments:
            - cfg <dict>: dict of complete config options (see config.ClientSchema),
                by default loads from DEFAULT_CONFIG_DIR
            - url<str>: URL to connect to
            - user<str>: username to connect to api with
            - password<str>: password
            - timeout<float>: timeout to fail after
        NZormÚbackendÚsyncc                    s   g | ]}|j tˆ |ƒf‘qS r   )Útagr
   )Ú.0r   ©r   r   r   Ú
<listcomp>>   ó    z#Client.__init__.<locals>.<listcomp>c                    s   t ˆ  ¡ ƒS r   )ÚlistÚkeysr   ©Útag_resr   r   Ú<lambda>C   r!   z!Client.__init__.<locals>.<lambda>c                    s   t ˆ  ¡ ƒS r   )r"   Úvaluesr   r$   r   r   r&   D   r!   )r#   r   Ú_Tagsr   )r   Zload_configr   r   ÚmungeÚutilZrecursive_updater   Ú_fetcherr	   Z_updaterZ
update_allÚupdateZupdate_wherer   r   Zall_resourcesÚtyper(   Útags)r   Úcfgr   Z
orm_configZorm_nameZsync_configZ	tag_attrsr   )r   r%   r   r       s4    



ÿÿ

þþzClient.__init__é   c                 C   s    | j  |||¡\}}|r|‚|S )zRequest object from API)r+   Úfetch)r   ÚRr   ÚdepthÚdÚer   r   r   r1   J   s    zClient.fetchc                 K   s    | j  |||¡\}}|r|‚|S )z!Request multiple objects from API)r+   Ú	fetch_all)r   r2   r3   r   r4   r5   r   r   r   r6   Q   s    zClient.fetch_allc                 C   s   t ƒ }| | |¡|¡S )z+Get a resource instance by primary key (id))r   Z
get_objectÚget_concrete)r   r   r   ÚBr   r   r   r   X   s    z
Client.getc                 C   s   t ƒ }| | |¡¡S )z&Get resources using a filter condition)r   Zget_objectsr7   )r   r   r8   r   r   r   r   ]   s    z
Client.allc                 C   s   t ƒ S r   )r   r   r   r   r   r   b   s    zClient.backend)N)r0   )r0   )r   r   r   r   r   r1   r6   r   r   Úpropertyr   r   r   r   r   r      s   
*

r   )Úcollectionsr   Z
munge.utilr)   Z	peeringdbr   r   r   r   r   Zpeeringdb.syncr   r	   r
   r   r   r   r   r   Ú<module>   s
   