
    5de                         	 d dl mZmZmZmZmZ n# e$ r Y nw xY wd dlmZm	Z	m
Z
 d dlZd dlZ G d de          Z G d de          ZdS )    )ListOptionalDictAnyUnion)datetime_nowdatetime_to_strstr_to_datetimeNc                   J    e Zd ZdZd ZdedefdZd Ze	d             Z
d Zd	S )
Devicesz9
    A container for Device instances with reporting
    c                 4    t          |d           | _        d S )Nc                 "    | j         r| j         ndS )N )path)ds    ;/usr/lib/python3/dist-packages/ceph/deployment/inventory.py<lambda>z"Devices.__init__.<locals>.<lambda>   s    QVC[166Y[     )key)sorteddevices)selfr   s     r   __init__zDevices.__init__   s      &,G9[9[%\%\%\r   otherreturnc                     t          |t                    st          S t          | j                  t          |j                  k    rdS t          |j        | j                  D ]\  }}||k    r dS dS )NFT)
isinstancer   NotImplementedlenr   zip)r   r   d1d2s       r   __eq__zDevices.__eq__   sy    %)) 	"!!t|EM 2 2225%-66 	 	FBRxxuu tr   c                 $    d | j         D             S )Nc                 6    g | ]}|                                 S  )to_json).0r   s     r   
<listcomp>z#Devices.to_json.<locals>.<listcomp>!   s     222		222r   r   r   s    r   r'   zDevices.to_json   s    22T\2222r   c                 ,     | d |D                       S )Nc                 B    g | ]}t                               |          S r&   )Device	from_json)r(   is     r   r)   z%Devices.from_json.<locals>.<listcomp>&   s&    777AF$$Q''777r   r&   )clsinputs     r   r/   zDevices.from_json#   s#     s77777888r   c                 F    t          t          | j                            S )Nr*   )r   listr   r+   s    r   copyzDevices.copy(   s    tDL112222r   N)__name__
__module____qualname____doc__r   r   boolr#   r'   classmethodr/   r5   r&   r   r   r   r      s         ] ] ]
C D    3 3 3 9 9 [93 3 3 3 3r   r   c                   t    e Zd Zg dZ	 	 	 	 	 	 	 	 	 d
dZd Zd Zed             Ze	d             Z
defd	ZdS )r.   )ceph_devicerejected_reasons	availabler   sys_apicreatedlvshuman_readable_type	device_idlsm_datacrush_device_classNc                     || _         ||ni | _        || _        ||ng | _        || _        || _        ||ni | _        ||nt                      | _        |	| _	        |
| _
        d S )N)r   r@   r?   r>   rB   rD   rE   r   rA   r=   rF   )r   r   r@   r?   r>   rB   rD   rE   rA   r=   rF   s              r   r   zDevice.__init__<   s~     	")"5ww2"4D4P 0 0VX"$,$8b")"5ww<>>&"4r   c                 l     t          t                    st          S  fd j        D             }| S )Nc                 d    g | ],}|d k    t          |          t          |          k    *|-S rA   )getattr)r(   kr   r   s     r   r)   z!Device.__eq__.<locals>.<listcomp>X   s`     \ \ \aiWTSTEUEUHOPUWXHYHYFZ FZ FZ FZ FZr   )r   r.   r   report_fields)r   r   diffs   `` r   r#   zDevice.__eq__T   sZ    %(( 	"!!\ \ \ \ \4- \ \ \xr   c                 *      fd j         D             S )Nc           	          i | ]^}||d k    s(t          t          |          t          j                  st          |          nt          t          |                    _S rJ   )r   rK   datetimer	   )r(   rL   r   s     r   
<dictcomp>z"Device.to_json.<locals>.<dictcomp>^   sv     
 
 
  ANN!'$"2"2H4EFF %3a   $WT1%5%566
 
 
r   )rM   r+   s   `r   r'   zDevice.to_json\   s3    
 
 
 
 '	
 
 
 	
r   c                 &   t          t                    s<t          d                    t	          j                  d d                              | di fdt          j        D             }|j        rt          |j                  |_        |S )Nz"Device: Expected dict. Got `{}...`
   c           	          i | ]^}|d k    ||dk    s                     |d          s                     |d          n"t                               |d                    _S )rC   rA   N)getr
   )r(   r   r2   s     r   rR   z$Device.from_json.<locals>.<dictcomp>k   s}        ///	 cY.>.>"YYsD11 /?eiiT****599S$+?+?@@///r   r&   )
r   dict
ValueErrorformatjsondumpsr.   rM   r>   r   )r1   r2   rets    ` r   r/   zDevice.from_jsone   s     %&& 	bAHHTYIZIZ[^\^[^I_``aaac 
 
    "/	  
 
  	@#)#*>#?#?C 
r   c                 P    | j         	d| j         vrdS | j         d         dk    rdndS )N
rotationalunknown1hddssd)r@   r+   s    r   rC   zDevice.human_readable_typew   s8     <<t|#C#C9\2c99uuuDr   r   c                 t   | j         | j         nd| j        r| j        ndt          | j                  t          | j                  t          | j                  d| j        s| j        r
| j        d<   d                    d                    fd	                                D                                 S )Nr_   None)r   rB   r?   r=   rF   zrejection reasonsz
Device({})z, c              3   P   K   | ] }d                      ||                   V  !dS )z{}={}N)rY   )r(   r   device_descs     r   	<genexpr>z"Device.__repr__.<locals>.<genexpr>   s6      ZZgnnS+c*:;;ZZZZZZr   )
r   rB   strr?   r=   rF   r>   rY   joinkeys)r   rf   s    @r   __repr__zDevice.__repr__~   s    !%!6DIII#x3488VT^,,t/00"%d&=">">O
 O
 ~ 	E$"7 	E/3/DK+,""IIZZZZ{GWGWGYGYZZZZZ
 
 	
r   )	NNNNNNNNN)r6   r7   r8   rM   r   r#   r'   r;   r/   propertyrC   rh   rk   r&   r   r   r.   r.   -   s          M  "&!$(5 5 5 50  
 
 
   [" E E XE
# 
 
 
 
 
 
r   r.   )typingr   r   r   r   r   ImportError
ceph.utilsr   r	   r
   rQ   rZ   objectr   r.   r&   r   r   <module>rq      s   	777777777777777 	 	 	D	 F E E E E E E E E E  3 3 3 3 3f 3 3 3D]
 ]
 ]
 ]
 ]
V ]
 ]
 ]
 ]
 ]
s    