
    f                         d dl mZmZmZ d dlmZ 	 d dlZd dlZ G d d      Z	d e
       v r  G d dej                  j                        Zyy# e$ r Y ;w xY w)	    )divisionprint_functionunicode_literals)minidomNc                   J    e Zd ZdZddZd ZddZd Zd Zd Z	d	 Z
d
 Zd Zy)dbus_propertya  
    Decorator for exposing a property over D-Bus.

    Example, read-only:

        @dbus_property(dbus_interface=ITEM_IFACE, signature='s')
        def IconName(self):
            return self._icon_name

    Example, read-write:

        @dbus_property(dbus_interface=ITEM_IFACE, signature='s')
        def IconName(self):
            return self._icon_name

        @IconName.setter
        def IconName(self, value):
            self._icon_name = value
    Nc                 <    || _         || _        || _        || _        y N)dbus_interface	signaturefgetfset)selfr   r   r   r   s        3/usr/lib/python3/dist-packages/Onboard/DBusUtils.py__init__zdbus_property.__init__4   s    ,"		    c                     || _         |j                  | _        |j                  | _        |j                  | _        | j	                  d       S r
   )r   __doc____name__
__module____get__r   r   s     r   __call__zdbus_property.__call__:   s9    	||//||D!!r   c                 Z    || S | j                   t        d      | j                  |      S )Nzunreadable attribute)r   AttributeError)r   objobjtypes      r   r   zdbus_property.__get__A   s0    ;K99 !788yy~r   c                 V    | j                   t        d      | j                  ||       y )Nzcan't set attribute)r   r   )r   r   values      r   __set__zdbus_property.__set__H   s&    99 !677		#ur   c                     || _         | S r
   )r   r   s     r   getterzdbus_property.getterM       	r   c                     || _         | S r
   )r   )r   r   s     r   setterzdbus_property.setterQ   r#   r   c                      y)NT r   s    r   is_dbus_propertyzdbus_property.is_dbus_propertyU   s    r   c                     | j                   S )z  D-Bus property name "attribute )r   r(   s    r   get_namezdbus_property.get_nameX   s    }}r   c                 j    | j                   r| j                  ry| j                   ry| j                  ryy)z" D-Bus property access "attribute 	readwritereadwriteN)r   r   r(   s    r   
get_accesszdbus_property.get_access\   s+    999999 r   )NNr
   )r   r   __qualname__r   r   r   r   r    r"   r%   r)   r+   r0   r'   r   r   r   r       s4    &"
r   r   dbusc                       e Zd ZdZdZ G d dej                        Zd Ze	d        Z
d Zej                  j                  ej                  d	      d
        Zej                  j                  ej                   dd      d        Zej                  j                  ej                   dd      d        Zej                  j                  ej                   d      d        Zej                  j)                  ej                   d      d        Zy)ServiceBasez< Base class for D-Bus services with D-Bus property support. Nc                       e Zd ZdZy)#ServiceBase.ServiceOnboardExceptionzorg.onboard.ExceptionN)r   r   r1   _dbus_error_namer'   r   r   ServiceOnboardExceptionr6   l   s    6r   r8   c                     d }|r!t         j                  j                  ||      }t         j                  j                  j	                  | |||       y )N)bus)r2   serviceBusNameObjectr   )r   r:   service_nameobject_pathbus_names        r   r   zServiceBase.__init__o   sA    H<<//#/FLL((sKJr   c                    | j                   ki }| j                  j                         D ]E  \  }}t        |d      s|j	                         }|j
                  }|j                  |i       }|||<   G || _         | j                   S )Nr)   )_properties__dict__itemshasattrr+   r   
setdefault)cls
propertiesnameprop
iface_nameiface_propss         r   _get_class_propertiesz!ServiceBase._get_class_propertiesv   s    &
"%,,"4"4"6 1JD$t%78#}}%)%8%8
&0&;&;J&K,0D)1 #-??"r   c                     | j                         }	 ||   }	 ||   }|S # t        $ r! | j                  dj                  |            w xY w# t        $ r! | j                  dj                  |            w xY w)NUnknown interface '{0}'zUnknown property '{0}')rM   KeyErrorr8   format)r   rK   	prop_namerH   rL   rJ   s         r   _get_propertyzServiceBase._get_property   s    335JD(4
D"9-
 K  D22/66zBD DD  D22/77	BD DDs    A *A	*A6s)r   out_signaturec                    | j                         }t        j                  j                  j	                  | | j
                  | j                        }t        j                  |j                  dd            5 }|j                  d      D ]  }|j                  d   j                  }|j                  |i       j                         D ]  \  }}|j                  |k(  s|j!                  d      }|j#                  d|j%                                |j#                  d|j&                         |j#                  d|j)                                |j+                  |         dj-                  |j/                  d	      j1                  d      D 	cg c]  }	|	j3                         r|	 c}	      }d d d        |S c c}	w # 1 sw Y   |S xY w)
N
 	interfacerI   propertytypeaccessz    )indent)rM   r2   r;   r=   
Introspect_object_path
connectionr   parseStringreplacegetElementsByTagName
attributesr   getrD   r   createElementsetAttributer+   r   r0   appendChildjointoprettyxmlsplitstrip)
r   rH   refdomrY   rK   rI   rJ   nodelines
             r   r^   zServiceBase.Introspect   s    335J,,%%00d'':C $$S[[s%;< 3!$!9!9+!F 8I!*!5!5f!=!C!CJ&0nnZ&D&J&J&L 8
d..*<#&#4#4Z#@D --fdmmoF --fdnnE --h8IJ%11$788 ii$'OO6O$B$H$H$N!2$$(JJL "& !2 33 J!23 Js&   5A#F8B0F8	F3
"F83F88Gza{sv})r   in_signaturerU   c                     | j                         }i }|j                  |i       j                         D ]  \  }}|j                  |       ||<    |r|S | j	                  dj                  |            )NrO   )rM   re   rD   r   r8   rQ   )r   rK   rH   resultsrI   rZ   s         r   GetAllzServiceBase.GetAll   s{     335JG",..R"@"F"F"H 4h (d 3422/66zBD Dr   ssvc                     | j                  ||      }|j                  s | j                  dj                  |            |j                  |       S )NzProperty not readable '{0}')rS   r   r8   rQ   )r   rK   rR   rJ   s       r   GetzServiceBase.Get   sP     %%j)<D99224<<YGI I 99T?"r   ssv)r   rq   c                     | j                  ||      }|j                  s | j                  dj                  |            |j                  | |       y )NzProperty not writable '{0}')rS   r   r8   rQ   )r   rK   rR   r   rJ   s        r   SetzServiceBase.Set   sP     %%j)<D99224<<YGI I IIdE"r   zsa{sv}as)r   r   c                     |||fS r
   r'   )r   ifacechangedinvalidateds       r   PropertiesChangedzServiceBase.PropertiesChanged   s     ';..r   )r   r   r1   r   rB   r2   DBusExceptionr8   r   classmethodrM   rS   r;   methodINTROSPECTABLE_IFACEr^   PROPERTIES_IFACErt   rx   r{   signalr   r'   r   r   r4   r4   g   sD   J	7d&8&8 	7	K 
	# 
	#	" 
		D,E,E.1 
 
3	
3	, 
		D,A,A-0 
 
I		D
I		D 
		D,A,A-1 
 
F	#
F	# 
		D,A,A-2 
 
4	#
4	# 
		D,A,A'1 
 
3	/
3	/r   r4   )
__future__r   r   r   xml.domr   r2   dbus.serviceImportErrorr   globalsr;   r=   r4   r'   r   r   <module>r      sg   * B A 	
C CL 
WYl/dll)) l/ U  		s   A AA