Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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)
Exemplo n.º 3
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
Exemplo n.º 4
0
            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',
Exemplo n.º 5
0
    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