a
    »ÏOcû  ã                   @   s.   d dl Zd dlZd dlmZ G dd„ dƒZdS )é    N)Úpretty_speedc                   @   s¤   e Zd Zejfdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd&dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )'ÚWhoisFormatc                 C   s   || _ ddi| _d S )NZfac_setZ
Facilities)ÚfobjÚdisplay_names)Úselfr   © r   úF/var/www/html/gsl.tools/lib/python3.9/site-packages/peeringdb/whois.pyÚ__init__   s    ÿzWhoisFormat.__init__c                 G   s   dd  tt|ƒ¡ d S )Nz%-zs %-Ús)ÚjoinÚmapÚstr)r   Zwidthsr   r   r   Úmk_fmt   s    zWhoisFormat.mk_fmtc              	      sT   t |ƒ}g }|D ]4‰ t‡ fdd„|D ƒƒ}| t|t|  ˆ ¡ƒƒ¡ q| j|Ž }|S )z&figure out sizes and create header fmtc                 3   s"   | ]}t t| ˆ d ¡ƒƒV  qdS )Ú N)Úlenr   Úget)Ú.0Úeach©Úkeyr   r   Ú	<genexpr>   ó    z-WhoisFormat.mk_set_headers.<locals>.<genexpr>)ÚtupleÚmaxÚappendr   Ú	_get_namer   )r   ÚdataÚcolumnsZlensZ	value_lenÚfmtr   r   r   Úmk_set_headers   s    
zWhoisFormat.mk_set_headersc                 C   s   || j v r| j | S | ¡ S )z1get display name for a key, or mangle for display)r   Ú
capitalize)r   r   r   r   r   r      s    

zWhoisFormat._get_namec                 C   s   |  |d¡S )z*get value from a dict, format if necessaryr   )r   )r   r   r   r   r   r   Ú_get_val&   s    zWhoisFormat._get_valc                 C   s   |  ¡ S )zget columns from a dict)Úkeys)r   r   r   r   r   Ú_get_columns*   s    zWhoisFormat._get_columnsc                 C   s*   |   |¡ |   dt|ƒ ¡ |   d¡ d S )Nú=r   )Ú_printr   )r   Únamer   r   r   Údisplay_section.   s    
zWhoisFormat.display_sectionc                 C   s.   |   || ¡ |   |tdd„ |D ƒƒ ¡ d S )Nc                 s   s   | ]}d t |ƒ V  qdS )ú-N)r   )r   Úxr   r   r   r   5   r   z.WhoisFormat.display_headers.<locals>.<genexpr>)r%   r   )r   r   Úheadersr   r   r   Údisplay_headers3   s    zWhoisFormat.display_headersc                    s†   ˆ  dˆ |¡t|ƒf ¡ ttˆj|ƒƒ}ˆ ||¡}ˆ ||¡ |D ].‰ t‡ ‡fdd„ˆ  ¡ D ƒƒ}ˆ || ¡ qHˆ d¡ dS )zdisplay a list of dictsz%s (%d)c                 3   s   | ]\}}ˆ  ˆ |¡V  qd S ©N)r!   )r   ÚkÚv©r   r   r   r   r   ?   r   z*WhoisFormat.display_set.<locals>.<genexpr>Ú
N)	r'   r   r   r   r   r   r+   Úitemsr%   )r   Útypr   r   r*   r   Úrowr   r/   r   Údisplay_set7   s    zWhoisFormat.display_setNc                 C   s(   |s|   |¡}|  |||| f ¡ d S r,   )r   r%   )r   r   ÚobjÚfieldÚdisplayr   r   r   Údisplay_fieldD   s    
zWhoisFormat.display_fieldc                 C   s4   |  |d ¡r0t| d| ƒr0t| d| ƒ|| ƒ d S )NÚprint_)r   ÚhasattrÚgetattr)r   r   r&   r   r   r   Ú	check_setI   s    zWhoisFormat.check_setc                 C   sd  |   d¡ d}|  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||d	d
¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  ||dd¡ |  d¡ |   d¡ |  ||dd¡ |  ||dd ¡ |  ||d!d"¡ |  ||d#d$¡ |  ||d%d&¡ |  d¡ |  |d'¡ |  |d(¡ |  |d)¡ d S )*NzNetwork Informationz	%-21s: %sr&   ÚNameÚasnzPrimary ASNZakazAlso Known AsZwebsiteZWebsiteZ
irr_as_setz
IRR AS-SETZ	info_typezNetwork TypeZinfo_prefixes6zApprox IPv6 PrefixesZinfo_prefixes4zApprox IPv4 PrefixesZlooking_glasszLooking GlassZroute_serverzRoute ServerÚcreatedz
Created atÚupdatedz
Updated atr0   zPeering Policy InformationZ
policy_urlÚURLZpolicy_generalzGeneral PolicyZpolicy_locationszLocation RequirementZpolicy_ratiozRatio RequirementZpolicy_contractszContract RequirementZpoc_setZnetixlan_setZ
netfac_set)r'   r8   r%   r<   )r   r   r   r   r   r   Ú	print_netN   s2    



zWhoisFormat.print_netc                 C   s„   |   d¡ |  ddddd¡}d}|  ||¡ |D ]D}|  || dd¡| d	d¡| d
d¡| dd¡| dd¡f ¡ q0|  d¡ d S )NzContact Informationé   é   é   é   )ZRoler=   ZEmailrA   ZPhoneÚroler   r&   ÚemailÚurlZphoner0   )r'   r   r+   r%   r   )r   r   r   ÚhdrZpocr   r   r   Úprint_poc_setk   s     





ûÿÿzWhoisFormat.print_poc_setc                 C   s†   |   dt|ƒ ¡ |  dddd¡}d}|  ||¡ |D ]@}|  || d| d¡¡| d	d
¡| dd
¡| dd
¡f ¡ q6|  d¡ d S )NzPrivate Peering Facilities (%d)é3   é   rE   é   )zFacility NameÚASNZCityZCOr&   ÚidZ	local_asnr   ZcityZcountryr0   )r'   r   r   r+   r%   r   )r   r   r   rJ   r   r   r   r   Úprint_netfac_set   s    


üÿÿ	zWhoisFormat.print_netfac_setc              
   C   sè   |   dt|ƒ ¡ |  dddd¡}d}|  ||¡ |D ]¢}| dd ¡rz|  || d| d	¡¡|d
 |d t|d ƒf ¡ | dd ¡r6| dd ¡r®|  |dd|d df ¡ q6|  ||d |d
 |d t|d ƒf ¡ q6|  d¡ d S )NzPublic Peering Points (%d)é$   rM   é   é   )zExchange PointrO   z
IP AddressZSpeedZipaddr4r&   Zixlan_idr>   ÚspeedZipaddr6r   r0   )r'   r   r   r+   r   r%   r   )r   r   r   rJ   Úixr   r   r   Úprint_netixlan_set�   s8    
üÿÿ	
üÿÿ	zWhoisFormat.print_netixlan_setc                 G   s   d  |¡d }| j |¡ dS )zinternal print to self.fobjú r0   N)r   r   Úwrite)r   ÚargsÚstringr   r   r   r%   ¯   s    zWhoisFormat._printc                 C   s   |   ||¡S )z*deprecated* - use display())r7   )r   r2   r   r   r   r   Úprint´   s    zWhoisFormat.printc                 C   sê   t | d| ƒr"t| d| ƒ|ƒ nº|s<|  |› d|› �¡ n t|tjjƒrv|  d|¡ | ¡ D ]\}}|  ||¡ q^nft|t	t
fƒrÈt|d tjjƒr°|  |||  |d ¡¡ qÜ|D ]}|  ||¡ q´n|  |› d|› �¡ | j ¡  dS )z display section of typ with datar9   z: r0   r   N)r:   r;   r%   Ú
isinstanceÚcollectionsÚabcÚMappingr1   r\   Úlistr   r4   r#   r   Úflush)r   r2   r   r-   r.   r   r   r   r   r7   ¸   s    zWhoisFormat.display)N)Ú__name__Ú
__module__Ú__qualname__ÚsysÚstdoutr	   r   r   r   r!   r#   r'   r+   r4   r8   r<   rB   rK   rQ   rW   r%   r\   r7   r   r   r   r   r      s$   
r   )Úcollections.abcr^   rf   Zpeeringdb.utilr   r   r   r   r   r   Ú<module>   s   