a
    »ÏOcÙ
  ã                   @   st   d dl Z d dlZd dlZd dlmZ d dlmZmZ dd„ Zdd„ Z	ddd	„Z
d
d„ Zddd„Zdd„ Zdd„ ZdS )é    N)Úserializers)Úget_backendÚresourcec                 C   sD   t  d¡}| | ¡}|s(td| › d�ƒ‚| d¡ ¡ t| d¡ƒfS )zsplits a string into (tag, id)z%^(?P<tag>[a-zA-Z]+)[\s-]*(?P<pk>\d+)$zunable to split string 'ú'ÚtagÚpk)ÚreÚcompileÚsearchÚ
ValueErrorÚgroupÚlowerÚint)ÚstringZre_tagÚm© r   úE/var/www/html/gsl.tools/lib/python3.9/site-packages/peeringdb/util.pyÚ	split_ref
   s
    

r   c                 C   sf   | sdS zBt | ƒ} | dkr(d| d  W S | dkr>d| d  W S d|  W S W n ty`   |  Y S 0 d S )NÚ i@B z%dTiè  z%dGz%dM)r   r   )Úvaluer   r   r   Úpretty_speed   s    r   c                 C   sn   |dur| › dt |ƒ› d�} | › d�} zt| ƒ}W n. tyL   tdƒ Y n ty`   d}Y n0 |sj|}|S )zPrompt for inputNz (ú)z: é   r   )ÚreprÚinputÚKeyboardInterruptÚexitÚEOFError)ÚmsgÚdefaultÚsr   r   r   Úprompt#   s    

r!   c           
      C   sr   d}t ƒ }dd„ |D ƒ}| | ¡}|D ]F}|j}| | |¡\}}|r\|rR|d }	qd|d }	n|d }	||	|< q&|S )z7Partition a concrete's fields into groups based on type)ÚscalarsÚsingle_refsÚ	many_refsc                 S   s   i | ]
}|i “qS r   r   )Ú.0Úkindr   r   r   Ú
<dictcomp>7   ó    z group_fields.<locals>.<dictcomp>r$   r#   r"   )r   Z
get_fieldsÚnameZis_field_related)
ZconcreteZGROUPSÚBÚretÚfieldsÚfieldr)   ÚrelatedÚmultipler   r   r   r   Úgroup_fields3   s    



r0   ì        c                 C   sZ   t j}t  |¡\}}t  || |f¡ t  |¡\}}|| ks>J ‚t t¡}| d||¡ dS )zSet soft memory limitzSet soft memory limit: %s => %sN)r   ZRLIMIT_DATAZ	getrlimitZ	setrlimitÚloggingÚ	getLoggerÚ__name__Údebug)ÚlimitZrsrcZsoftÚhardZsoftnewÚ_Ú_logr   r   r   Ú	limit_memI   s    
r:   c              	   C   sš   |  ¡ sJ |ƒ‚| j ¡ D ]z}t d| ¡ ¡}||jj› d� }t|dƒ�:}td|› �ƒ t	 
|¡}t	j||ddd� W d  ƒ q1 sŠ0    Y  qdS )	z2Serialize all objects into JSON files in directoryÚjsonú.jsonÚwzWriting é   T)ÚindentÚ	sort_keysN)Úis_dirÚtagsÚallr   Ú	serializeÚresr   ÚopenÚprintr;   ÚloadsÚdump)ÚclientÚpathÚqZserZoutpathÚoutÚjr   r   r   Úclient_dumpU   s    
rO   c              	   C   sp   | j  ¡ D ]`}||jj› d� }tt|ƒƒ�.}t d|¡}|D ]}| ¡  q>W d  ƒ q
1 s`0    Y  q
dS )z+Deserialize from JSON files under directoryr<   r;   N)	rB   rC   rE   r   rF   Ústrr   ZdeserializeÚsave)rJ   rK   rL   ZrespathZfinZdesÚobjr   r   r   Úclient_loadb   s    rS   )N)r1   )r;   r2   r   Zdjango.corer   Z	peeringdbr   r   r   r   r!   r0   r:   rO   rS   r   r   r   r   Ú<module>   s   


