def run_synchronous_tests(self, obj): # We can't test that coercion works correctly unless the server has # sent us introspection data. Java doesn't :-/ have_signatures = True # "Single tests" if have_signatures: self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', [1, 2, 3]) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', ['\x01', '\x02', '\x03']) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', [Byte(1), Byte(2), Byte(3)]) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', ByteArray('\x01\x02\x03')) # Main tests self.assert_method_eq(INTERFACE_TESTS, String(u'foo', variant_level=1), 'Identity', String('foo')) self.assert_method_eq(INTERFACE_TESTS, String(u'foo', variant_level=1), 'Identity', UTF8String('foo')) self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=1), 'Identity', Byte(42)) self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=23), 'Identity', Byte(42, variant_level=23)) self.assert_method_eq(INTERFACE_TESTS, Double(42.5, variant_level=1), 'Identity', 42.5) self.assert_method_eq(INTERFACE_TESTS, Double(-42.5, variant_level=1), 'Identity', -42.5) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, String(u'foo', variant_level=1), 'Identity', 'foo') self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=1), 'Identity', Byte(42)) self.assert_method_eq(INTERFACE_TESTS, Double(42.5, variant_level=1), 'Identity', Double(42.5)) self.assert_method_eq(INTERFACE_TESTS, Double(-42.5, variant_level=1), 'Identity', -42.5) for i in (0, 42, 255): self.assert_method_eq(INTERFACE_TESTS, Byte(i), 'IdentityByte', Byte(i)) for i in (True, False): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityBool', i) for i in (-0x8000, 0, 42, 0x7fff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityInt16', Int16(i)) for i in (0, 42, 0xffff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityUInt16', UInt16(i)) for i in (-0x7fffffff - 1, 0, 42, 0x7fffffff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityInt32', Int32(i)) for i in (0L, 42L, 0xffffffffL): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityUInt32', UInt32(i))
def run_synchronous_tests(self, obj): # We can't test that coercion works correctly unless the server has # sent us introspection data. Java doesn't :-/ have_signatures = True # "Single tests" if have_signatures: self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', [1, 2, 3]) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', [b'\x01', b'\x02', b'\x03']) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', [Byte(1), Byte(2), Byte(3)]) self.assert_method_eq(INTERFACE_SINGLE_TESTS, 6, 'Sum', ByteArray(b'\x01\x02\x03')) # Main tests self.assert_method_eq(INTERFACE_TESTS, String('foo', variant_level=1), 'Identity', String('foo')) if is_py2: self.assert_method_eq(INTERFACE_TESTS, String('foo', variant_level=1), 'Identity', UTF8String('foo')) self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=1), 'Identity', Byte(42)) self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=23), 'Identity', Byte(42, variant_level=23)) self.assert_method_eq(INTERFACE_TESTS, Double(42.5, variant_level=1), 'Identity', 42.5) self.assert_method_eq(INTERFACE_TESTS, Double(-42.5, variant_level=1), 'Identity', -42.5) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, String('foo', variant_level=1), 'Identity', 'foo') self.assert_method_eq(INTERFACE_TESTS, Byte(42, variant_level=1), 'Identity', Byte(42)) self.assert_method_eq(INTERFACE_TESTS, Double(42.5, variant_level=1), 'Identity', Double(42.5)) self.assert_method_eq(INTERFACE_TESTS, Double(-42.5, variant_level=1), 'Identity', -42.5) for i in (0, 42, 255): self.assert_method_eq(INTERFACE_TESTS, Byte(i), 'IdentityByte', Byte(i)) for i in (True, False): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityBool', i) for i in (-0x8000, 0, 42, 0x7fff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityInt16', Int16(i)) for i in (0, 42, 0xffff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityUInt16', UInt16(i)) for i in (-0x7fffffff - 1, 0, 42, 0x7fffffff): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityInt32', Int32(i)) for i in (0, 42, 0xffffffff): i = make_long(i) self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityUInt32', UInt32(i)) MANY = 1 for n in (0x8000, 0x10000, 0x10000, 0x10000): MANY *= make_long(n) for i in (-MANY, 0, 42, MANY - 1): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityInt64', Int64(i)) for i in (0, 42, 2 * MANY - 1): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityUInt64', UInt64(i)) self.assert_method_eq(INTERFACE_TESTS, 42.3, 'IdentityDouble', 42.3) for i in ('', 'foo'): self.assert_method_eq(INTERFACE_TESTS, i, 'IdentityString', i) for i in ('\xa9', b'\xc2\xa9'): self.assert_method_eq(INTERFACE_TESTS, '\xa9', 'IdentityString', i) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, Byte(0x42), 'IdentityByte', b'\x42') self.assert_method_eq(INTERFACE_TESTS, True, 'IdentityBool', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityInt16', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityUInt16', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityInt32', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityUInt32', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityInt64', 42) self.assert_method_eq(INTERFACE_TESTS, 42, 'IdentityUInt64', 42) self.assert_method_eq(INTERFACE_TESTS, 42.0, 'IdentityDouble', 42) self.assert_method_eq( INTERFACE_TESTS, [ Byte(b'\x01', variant_level=1), Byte(b'\x02', variant_level=1), Byte(b'\x03', variant_level=1) ], 'IdentityArray', Array([Byte(b'\x01'), Byte(b'\x02'), Byte(b'\x03')], signature='v')) self.assert_method_eq( INTERFACE_TESTS, [ Int32(1, variant_level=1), Int32(2, variant_level=1), Int32(3, variant_level=1) ], 'IdentityArray', Array([Int32(1), Int32(2), Int32(3)], signature='v')) self.assert_method_eq( INTERFACE_TESTS, [ String('a', variant_level=1), String('b', variant_level=1), String('c', variant_level=1) ], 'IdentityArray', Array([String('a'), String('b'), String('c')], signature='v')) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [ Byte(b'\x01', variant_level=1), Byte(b'\x02', variant_level=1), Byte(b'\x03', variant_level=1) ], 'IdentityArray', ByteArray(b'\x01\x02\x03')) self.assert_method_eq( INTERFACE_TESTS, [ Int32(1, variant_level=1), Int32(2, variant_level=1), Int32(3, variant_level=1) ], 'IdentityArray', [Int32(1), Int32(2), Int32(3)]) self.assert_method_eq(INTERFACE_TESTS, [ String('a', variant_level=1), String('b', variant_level=1), String('c', variant_level=1) ], 'IdentityArray', ['a', 'b', 'c']) self.assert_method_eq(INTERFACE_TESTS, [Byte(1), Byte(2), Byte(3)], 'IdentityByteArray', ByteArray(b'\x01\x02\x03')) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityByteArray', [b'\x01', b'\x02', b'\x03']) self.assert_method_eq(INTERFACE_TESTS, [False, True], 'IdentityBoolArray', [False, True]) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [False, True, True], 'IdentityBoolArray', [0, 1, 2]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityInt16Array', [Int16(1), Int16(2), Int16(3)]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt16Array', [UInt16(1), UInt16(2), UInt16(3)]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityInt32Array', [Int32(1), Int32(2), Int32(3)]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt32Array', [UInt32(1), UInt32(2), UInt32(3)]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityInt64Array', [Int64(1), Int64(2), Int64(3)]) self.assert_method_eq( INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt64Array', [UInt64(1), UInt64(2), UInt64(3)]) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityInt16Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt16Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityInt32Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt32Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityInt64Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1, 2, 3], 'IdentityUInt64Array', [1, 2, 3]) self.assert_method_eq(INTERFACE_TESTS, [1.0, 2.5, 3.1], 'IdentityDoubleArray', [1.0, 2.5, 3.1]) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [1.0, 2.5, 3.1], 'IdentityDoubleArray', [1, 2.5, 3.1]) self.assert_method_eq(INTERFACE_TESTS, ['a', 'b', 'c'], 'IdentityStringArray', ['a', 'b', 'c']) self.assert_method_eq( INTERFACE_TESTS, 6, 'Sum', [Int32(1), Int32(2), Int32(3)]) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, 6, 'Sum', [1, 2, 3]) self.assert_InvertMapping_eq(INTERFACE_TESTS, { 'fps': ['unreal', 'quake'], 'rts': ['warcraft'] }, 'InvertMapping', { 'unreal': 'fps', 'quake': 'fps', 'warcraft': 'rts' }) self.assert_method_eq(INTERFACE_TESTS, ('a', 1, 2), 'DeStruct', ('a', UInt32(1), Int16(2))) self.assert_method_eq(INTERFACE_TESTS, Array([String('x', variant_level=1)]), 'Primitize', [String('x', variant_level=1)]) self.assert_method_eq(INTERFACE_TESTS, Array([String('x', variant_level=1)]), 'Primitize', [String('x', variant_level=23)]) self.assert_method_eq( INTERFACE_TESTS, Array([ String('x', variant_level=1), Byte(1, variant_level=1), Byte(2, variant_level=1) ]), 'Primitize', Array([String('x'), Byte(1), Byte(2)], signature='v')) self.assert_method_eq( INTERFACE_TESTS, Array([ String('x', variant_level=1), Byte(1, variant_level=1), Byte(2, variant_level=1) ]), 'Primitize', Array([String('x'), Array([Byte(1), Byte(2)])], signature='v')) self.assert_method_eq(INTERFACE_TESTS, Boolean(False), 'Invert', True) self.assert_method_eq(INTERFACE_TESTS, Boolean(True), 'Invert', False) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, Boolean(False), 'Invert', 42) self.assert_method_eq(INTERFACE_TESTS, Boolean(True), 'Invert', 0)
def send(self, body, title='', notify_type=NotifyType.INFO, **kwargs): """ Perform DBus Notification """ if not self._enabled or MAINLOOP_MAP[self.schema] is None: self.logger.warning("{} notifications could not be loaded.".format( self.schema)) return False # Acquire our session session = SessionBus(mainloop=MAINLOOP_MAP[self.schema]) # acquire our dbus object dbus_obj = session.get_object( NOTIFY_DBUS_INTERFACE, NOTIFY_DBUS_SETTING_LOCATION, ) # Acquire our dbus interface dbus_iface = Interface( dbus_obj, dbus_interface=NOTIFY_DBUS_INTERFACE, ) # image path icon_path = None if not self.include_image \ else self.image_path(notify_type, extension='.ico') # Our meta payload meta_payload = {"urgency": Byte(self.urgency)} if not (self.x_axis is None and self.y_axis is None): # Set x/y access if these were set meta_payload['x'] = self.x_axis meta_payload['y'] = self.y_axis if NOTIFY_DBUS_IMAGE_SUPPORT and icon_path: try: # Use Pixbuf to create the proper image type image = GdkPixbuf.Pixbuf.new_from_file(icon_path) # Associate our image to our notification meta_payload['icon_data'] = (image.get_width(), image.get_height(), image.get_rowstride(), image.get_has_alpha(), image.get_bits_per_sample(), image.get_n_channels(), ByteArray(image.get_pixels())) except Exception as e: self.logger.warning( "Could not load Gnome notification icon ({}): {}".format( icon_path, e)) try: # Always call throttle() before any remote execution is made self.throttle() dbus_iface.Notify( # Application Identifier self.app_id, # Message ID (0 = New Message) 0, # Icon (str) - not used '', # Title str(title), # Body str(body), # Actions list(), # Meta meta_payload, # Message Timeout self.message_timeout_ms, ) self.logger.info('Sent DBus notification.') except Exception: self.logger.warning('Failed to send DBus notification.') self.logger.exception('DBus Exception') return False return True
Array([Int32(1), Int32(2), Int32(3)], signature='v')) self.assert_method_eq( INTERFACE_TESTS, [ String(u'a', variant_level=1), String(u'b', variant_level=1), String(u'c', variant_level=1) ], 'IdentityArray', Array([String('a'), String('b'), String('c')], signature='v')) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, [ Byte('\x01', variant_level=1), Byte('\x02', variant_level=1), Byte('\x03', variant_level=1) ], 'IdentityArray', ByteArray('\x01\x02\x03')) self.assert_method_eq( INTERFACE_TESTS, [ Int32(1, variant_level=1), Int32(2, variant_level=1), Int32(3, variant_level=1) ], 'IdentityArray', [Int32(1), Int32(2), Int32(3)]) self.assert_method_eq(INTERFACE_TESTS, [ String(u'a', variant_level=1), String(u'b', variant_level=1), String(u'c', variant_level=1) ], 'IdentityArray', ['a', 'b', 'c']) self.assert_method_eq(INTERFACE_TESTS, [Byte(1), Byte(2), Byte(3)], 'IdentityByteArray',
def notify(self, title, body, notify_type, **kwargs): """ Perform DBus Notification """ if not self._enabled or MAINLOOP_MAP[self.schema] is None: self.logger.warning( "{} notifications could not be loaded.".format(self.schema)) return False # Acquire our session session = SessionBus(mainloop=MAINLOOP_MAP[self.schema]) # acquire our dbus object dbus_obj = session.get_object( NOTIFY_DBUS_INTERFACE, NOTIFY_DBUS_SETTING_LOCATION, ) # Acquire our dbus interface dbus_iface = Interface( dbus_obj, dbus_interface=NOTIFY_DBUS_INTERFACE, ) # image path icon_path = self.image_path(notify_type, extension='.ico') # Our meta payload meta_payload = { "urgency": Byte(self.urgency) } if not (self.x_axis is None and self.y_axis is None): # Set x/y access if these were set meta_payload['x'] = self.x_axis meta_payload['y'] = self.y_axis if NOTIFY_DBUS_IMAGE_SUPPORT is True: try: # Use Pixbuf to create the proper image type image = GdkPixbuf.Pixbuf.new_from_file(icon_path) # Associate our image to our notification meta_payload['icon_data'] = ( image.get_width(), image.get_height(), image.get_rowstride(), image.get_has_alpha(), image.get_bits_per_sample(), image.get_n_channels(), ByteArray(image.get_pixels()) ) except Exception as e: self.logger.warning( "Could not load Gnome notification icon ({}): {}" .format(icon_path, e)) # Limit results to just the first 10 line otherwise # there is just to much content to display body = re.split('[\r\n]+', body) if title: # Place title on first line if it exists body.insert(0, title) body = '\r\n'.join(body[0:10]) try: dbus_iface.Notify( # Application Identifier self.app_id, # Message ID (0 = New Message) 0, # Icon (str) - not used '', # Title str(title), # Body str(body), # Actions list(), # Meta meta_payload, # Message Timeout self.message_timeout_ms, ) self.logger.info('Sent DBus notification.') except Exception as e: self.logger.warning('Failed to send DBus notification.') self.logger.exception('DBus Exception') return False return True