ó
½-'Nc           @   sf   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ	 d S(   iÿÿÿÿN(   t   succeed(   t   log_failure(   t   diff(   t   MonitorPlugint   HardwareInventoryc           B   sJ   e  Z d  Z d d „ Z d „  Z d „  Z e d „ Z d „  Z	 d „  Z
 RS(   s   hardware-inventoryc         C   su   t  t |  ƒ j ƒ  g  |  _ g  |  _ t |  _ y d d l m } Wn t	 k
 r^ t
 |  _ n X| pk | ƒ  |  _ d  S(   Niÿÿÿÿ(   t
   HALManager(   t   superR   t   __init__t   _persist_setst   _persist_removest   Truet   enabledt   landscape.halR   t   ImportErrort   Falset   _hal_manager(   t   selft   hal_managerR   (    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR      s    			c         C   s=   |  j  s d  St t |  ƒ j | ƒ |  j d |  j t ƒ d  S(   Ns   hardware-inventory(   R   R   R   t   registert   call_on_acceptedt   exchangeR
   (   R   t   manager(    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR      s    	c         C   s~   |  j  ƒ  } | rn i d d 6| d 6} |  j j j | d | ƒ} | j |  j ƒ | j t ƒ t j	 d ƒ n t
 d  ƒ } | S(   Ns   hardware-inventoryt   typet   devicest   urgents7   Queueing a message with hardware-inventory information.(   t   create_messaget   registryt   brokert   send_messaget   addCallbackt   persist_datat
   addErrbackR   t   loggingt   infoR    t   None(   R   R   R   t   messaget   result(    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR   !   s    c         C   s)   |  j  s d  S|  j j j d |  j | ƒ S(   Ns   hardware-inventory(   R   R   R   t   call_if_acceptedR   (   R   R   (    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR   .   s    	c         C   sy   x3 |  j  D]( \ } } } |  j j | | f | ƒ q
 Wx! |  j D] } |  j j | ƒ q@ W|  j  2|  j 2|  j j ƒ  d  S(   N(   R   t   _persistt   setR	   t   removeR   t   flush(   R   t
   message_idt   keyt   udit   value(    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR   4   s    c         C   sý  |  j  2|  j 2g  } |  j j d i  ƒ } t ƒ  } xÃ |  j j ƒ  D]² } | j | j ƒ } | sy | j d | j	 f ƒ nL | | j	 k rÅ t
 | | j	 ƒ \ } } } | j d | j | | | f ƒ n  | j | j ƒ |  j  j d | j | j	 f ƒ qB Wi  }	 t ƒ  }
 xS | j ƒ  D]E \ } } | | k rd | k rI| d |	 | <n  |
 j | ƒ qqWx$ |
 D] } |  j j d | f ƒ qdW|
 j ƒ  } xB |	 j ƒ  D]4 \ } } | |
 k r| |
 k r| j | ƒ qqWx! | D] } | j d | f ƒ qÜW| S(   NR   t   createt   updates   info.parentt   delete(   R   R	   R&   t   getR'   R   t   get_devicesR,   t   appendt
   propertiesR   t   addt	   iteritemst   copyR(   (   R   R   t   previous_devicest   current_devicest   devicet   previous_propertiest   createst   updatest   deletest   items_with_parentst   deleted_devicesR,   R-   t   minimal_deleted_devicest   childt   parent(    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR   @   sB    			N(   t   __name__t
   __module__t   persist_nameR"   R   R   R   R   R   R   R   (    (    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyR      s   			(
   R    t   twisted.internet.deferR    t   landscape.lib.logR   t   landscape.diffR   t   landscape.monitor.pluginR   R   (    (    (    sG   /usr/lib/python2.7/dist-packages/landscape/monitor/hardwareinventory.pyt   <module>   s
   