summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2021-07-20 09:45:22 +0000
committerSimon McVittie <smcv@collabora.com>2021-07-20 09:45:22 +0000
commitdeac6f6aaee74a2f78c4d165664fee28930c2190 (patch)
tree29681ea7d65a6250ce2b537b6cbe1197723af684
parent6772bc492b359d6bc3de7b862a94ce93afc8d815 (diff)
parent4e11070f1b2a5141047ceaded7ea4506531fac56 (diff)
Merge branch 'wip/smcv/py3' into 'master'
Move towards Python-3-only See merge request dbus/dbus-python!12
-rw-r--r--Makefile.am2
-rw-r--r--NEWS21
-rw-r--r--configure.ac1
-rwxr-xr-xexamples/example-async-client.py24
-rwxr-xr-xexamples/example-client.py22
-rwxr-xr-xexamples/example-service.py18
-rwxr-xr-xexamples/example-signal-emitter.py14
-rwxr-xr-xexamples/example-signal-recipient.py28
-rwxr-xr-xexamples/gconf-proxy-client.py6
-rwxr-xr-xexamples/gconf-proxy-service2.py28
-rwxr-xr-xexamples/list-system-services.py8
-rwxr-xr-xexamples/unix-fd-client.py16
-rwxr-xr-xexamples/unix-fd-service.py22
13 files changed, 136 insertions, 74 deletions
diff --git a/Makefile.am b/Makefile.am
index 0fd75c2..fb5390f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,6 +4,8 @@ installed_testdir = ${libexecdir}/installed-tests/${PACKAGE_TARNAME}
installed_test_testdir = ${installed_testdir}/test
installed_test_metadir = ${datadir}/installed-tests/${PACKAGE_TARNAME}
+AM_DISTCHECK_CONFIGURE_FLAGS = PYTHON=$(PYTHON)
+
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = dbus-gmain .
diff --git a/NEWS b/NEWS
index 39652c4..41c7056 100644
--- a/NEWS
+++ b/NEWS
@@ -1,11 +1,25 @@
dbus Python Bindings 1.2.18 (UNRELEASED)
========================================
+Build-time configuration changes:
+
+• dbus-python will be built for python3 if neither PYTHON nor
+ PYTHON_VERSION is specified. Use a command like
+
+ ./configure PYTHON=$(command -v python2)
+
+ if installation for Python 2 (EOL 2020-01-01) is required.
+
+Dependencies:
+
+• Python 2 reached end-of-life on 2020-01-01. A future version of
+ dbus-python is likely to remove Python 2 support.
+
Fixes:
• Move from collections.Sequence to collections.abc.Sequence on
Python ≥ 3.3, for Python 3.10 compatibility
- (dbus-python#37, Simon McVittie)
+ (dbus-python#37; Simon McVittie)
• Avoid another deprecation warning for inspect.getargspec().
This is similar to the one fixed in 1.2.4, but for dbus.decorators.signal
@@ -26,6 +40,11 @@ Fixes:
declarations and statements in its headers, so we can no longer
enforce this. (Simon McVittie)
+• Convert examples to Python 3 (Simon McVittie)
+
+• Use the same Python executable for build and dist/distcheck by default
+ (Simon McVittie)
+
CI fixes:
• Stop installing tap.py for Python 2. The latest version only supports
diff --git a/configure.ac b/configure.ac
index fb5c6ee..a0f85a9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -77,6 +77,7 @@ AC_ARG_VAR([PYTHON_INCLUDES], [deprecated form of PYTHON_CPPFLAGS])
AS_IF([test -n "$PYTHON_INCLUDES"],
[PYTHON_CPPFLAGS="$PYTHON_CPPFLAGS $PYTHON_INCLUDES"])
+AS_IF([test -z "$PYTHON_VERSION" && test -z "$PYTHON"], [PYTHON_VERSION=3])
AX_PYTHON_DEVEL([>= '2.7'])
AM_PATH_PYTHON
diff --git a/examples/example-async-client.py b/examples/example-async-client.py
index 0d024c3..7b97943 100755
--- a/examples/example-async-client.py
+++ b/examples/example-async-client.py
@@ -1,9 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python example-service.py &
-python example-async-client.py
-python example-client.py --exit-service
+python3 example-service.py &
+python3 example-async-client.py
+python3 example-client.py --exit-service
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -45,7 +47,7 @@ def handle_hello_reply(r):
global hello_replied
hello_replied = True
- print str(r)
+ print("async client:", str(r))
if hello_replied and raise_replied:
loop.quit()
@@ -56,8 +58,8 @@ def handle_hello_error(e):
hello_replied = True
failed = True
- print "HelloWorld raised an exception! That's not meant to happen..."
- print "\t", str(e)
+ print("async client: HelloWorld raised an exception! That's not meant to happen...")
+ print("\t", str(e))
if hello_replied and raise_replied:
loop.quit()
@@ -68,7 +70,7 @@ def handle_raise_reply():
raise_replied = True
failed = True
- print "RaiseException returned normally! That's not meant to happen..."
+ print("async client: RaiseException returned normally! That's not meant to happen...")
if hello_replied and raise_replied:
loop.quit()
@@ -77,8 +79,8 @@ def handle_raise_error(e):
global raise_replied
raise_replied = True
- print "RaiseException raised an exception as expected:"
- print "\t", str(e)
+ print("async client: RaiseException raised an exception as expected:")
+ print("\t", str(e))
if hello_replied and raise_replied:
loop.quit()
@@ -106,7 +108,7 @@ if __name__ == '__main__':
remote_object = bus.get_object("com.example.SampleService","/SomeObject")
except dbus.DBusException:
traceback.print_exc()
- print usage
+ print(usage)
sys.exit(1)
# Make the method call after a short delay
diff --git a/examples/example-client.py b/examples/example-client.py
index d9ff776..6f7ade2 100755
--- a/examples/example-client.py
+++ b/examples/example-client.py
@@ -1,9 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python example-service.py &
-python example-client.py
-python example-client.py --exit-service
+python3 example-service.py &
+python3 example-client.py
+python3 example-client.py --exit-service
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -48,30 +50,30 @@ def main():
dbus_interface = "com.example.SampleInterface")
except dbus.DBusException:
print_exc()
- print usage
+ print(usage)
sys.exit(1)
- print (hello_reply_list)
+ print("client:", hello_reply_list)
# ... or create an Interface wrapper for the remote object
iface = dbus.Interface(remote_object, "com.example.SampleInterface")
hello_reply_tuple = iface.GetTuple()
- print hello_reply_tuple
+ print("client:", hello_reply_tuple)
hello_reply_dict = iface.GetDict()
- print hello_reply_dict
+ print("client:", hello_reply_dict)
# D-Bus exceptions are mapped to Python exceptions
try:
iface.RaiseException()
except dbus.DBusException as e:
- print str(e)
+ print("client:", str(e))
# introspection is automatically supported
- print remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable")
+ print("client:", remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable"))
if sys.argv[1:] == ['--exit-service']:
iface.Exit()
diff --git a/examples/example-service.py b/examples/example-service.py
index 12c81d9..e1ed325 100755
--- a/examples/example-service.py
+++ b/examples/example-service.py
@@ -1,10 +1,12 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python example-service.py &
-python example-client.py
-python example-async-client.py
-python example-client.py --exit-service
+python3 example-service.py &
+python3 example-client.py
+python3 example-async-client.py
+python3 example-client.py --exit-service
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -46,7 +48,7 @@ class SomeObject(dbus.service.Object):
@dbus.service.method("com.example.SampleInterface",
in_signature='s', out_signature='as')
def HelloWorld(self, hello_message):
- print (str(hello_message))
+ print("service:", str(hello_message))
return ["Hello", " from example-service.py", "with unique name",
session_bus.get_unique_name()]
@@ -80,6 +82,6 @@ if __name__ == '__main__':
object = SomeObject(session_bus, '/SomeObject')
mainloop = GLib.MainLoop()
- print "Running example service."
- print usage
+ print("Running example service.")
+ print(usage)
mainloop.run()
diff --git a/examples/example-signal-emitter.py b/examples/example-signal-emitter.py
index 48349a8..fc3f0db 100755
--- a/examples/example-signal-emitter.py
+++ b/examples/example-signal-emitter.py
@@ -1,9 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python example-signal-emitter.py &
-python example-signal-recipient.py
-python example-signal-recipient.py --exit-service
+python3 example-signal-emitter.py &
+python3 example-signal-recipient.py
+python3 example-signal-recipient.py --exit-service
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -66,6 +68,6 @@ if __name__ == '__main__':
object = TestObject(session_bus)
loop = GLib.MainLoop()
- print "Running example signal emitter service."
- print usage
+ print("Running example signal emitter service.")
+ print(usage)
loop.run()
diff --git a/examples/example-signal-recipient.py b/examples/example-signal-recipient.py
index 63f53d6..6e89ace 100755
--- a/examples/example-signal-recipient.py
+++ b/examples/example-signal-recipient.py
@@ -1,9 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python example-signal-emitter.py &
-python example-signal-recipient.py
-python example-signal-recipient.py --exit-service
+python3 example-signal-emitter.py &
+python3 example-signal-recipient.py
+python3 example-signal-recipient.py --exit-service
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -40,10 +42,10 @@ import dbus
import dbus.mainloop.glib
def handle_reply(msg):
- print msg
+ print("recipient:", msg)
def handle_error(e):
- print str(e)
+ print("recipient:", str(e))
def emit_signal():
#call the emitHelloSignal method
@@ -58,20 +60,20 @@ def emit_signal():
return False
def hello_signal_handler(hello_string):
- print ("Received signal (by connecting using remote object) and it says: "
+ print("recipient: Received signal (by connecting using remote object) and it says: "
+ hello_string)
def catchall_signal_handler(*args, **kwargs):
- print ("Caught signal (in catchall handler) "
+ print("recipient: Caught signal (in catchall handler) "
+ kwargs['dbus_interface'] + "." + kwargs['member'])
for arg in args:
- print " " + str(arg)
+ print(" " + str(arg))
def catchall_hello_signals_handler(hello_string):
- print "Received a hello signal and it says " + hello_string
-
+ print("recipient: Received a hello signal and it says " + hello_string)
+
def catchall_testservice_interface_handler(hello_string, dbus_message):
- print "com.example.TestService interface says " + hello_string + " when it sent signal " + dbus_message.get_member()
+ print("recipient: com.example.TestService interface says " + hello_string + " when it sent signal " + dbus_message.get_member())
if __name__ == '__main__':
@@ -84,7 +86,7 @@ if __name__ == '__main__':
object.connect_to_signal("HelloSignal", hello_signal_handler, dbus_interface="com.example.TestService", arg0="Hello")
except dbus.DBusException:
traceback.print_exc()
- print usage
+ print(usage)
sys.exit(1)
#lets make a catchall
diff --git a/examples/gconf-proxy-client.py b/examples/gconf-proxy-client.py
index 8d81486..c03e947 100755
--- a/examples/gconf-proxy-client.py
+++ b/examples/gconf-proxy-client.py
@@ -1,4 +1,6 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
# Client for gconf-proxy-service2.py.
@@ -36,4 +38,4 @@ gconf_key_object = dbus.Interface(bus.get_object("com.example.GConfProxy", "/org
value = gconf_key_object.getString()
-print ("Value of GConf key %s is %s" % (gconf_key, value))
+print("client: Value of GConf key %s is %s" % (gconf_key, value))
diff --git a/examples/gconf-proxy-service2.py b/examples/gconf-proxy-service2.py
index d31277f..74cc814 100755
--- a/examples/gconf-proxy-service2.py
+++ b/examples/gconf-proxy-service2.py
@@ -1,4 +1,6 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
# Example of implementing an entire subtree of objects using
# a FallbackObject.
@@ -37,7 +39,12 @@ import dbus.mainloop.glib
import dbus.service
from gi.repository import GLib
-import gconf
+
+try:
+ import gconf
+except ImportError:
+ print('service: gconf not available, using mock implementation')
+ gconf = None
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -47,22 +54,37 @@ name = dbus.service.BusName("com.example.GConfProxy", dbus.SessionBus())
class GConfObject(dbus.service.FallbackObject):
def __init__(self):
dbus.service.FallbackObject.__init__(self, dbus.SessionBus(), '/org/gnome/GConf')
- self.client = gconf.client_get_default()
+ if gconf is None:
+ self.client = None
+ else:
+ self.client = gconf.client_get_default()
@dbus.service.method("org.gnome.GConf", in_signature='', out_signature='s', rel_path_keyword='object_path')
def getString(self, object_path):
+ if self.client is None:
+ return '<gconf not available>'
+
return self.client.get_string(object_path)
@dbus.service.method("org.gnome.GConf", in_signature='s', out_signature='', rel_path_keyword='object_path')
def setString(self, value, object_path):
+ if self.client is None:
+ raise RuntimeError('gconf not available')
+
self.client.set_string(object_path, value)
@dbus.service.method("org.gnome.GConf", in_signature='', out_signature='i', rel_path_keyword='object_path')
def getInt(self, object_path):
+ if self.client is None:
+ return 42
+
return self.client.get_int(object_path)
@dbus.service.method("org.gnome.GConf", in_signature='i', out_signature='', rel_path_keyword='object_path')
def setInt(self, value, object_path):
+ if self.client is None:
+ raise RuntimeError('gconf not available')
+
self.client.set_int(object_path, value)
gconf_service = GConfObject()
diff --git a/examples/list-system-services.py b/examples/list-system-services.py
index 4734f5e..aad9e9a 100755
--- a/examples/list-system-services.py
+++ b/examples/list-system-services.py
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
-"""Usage: python list-system-services.py [--session|--system]
+from __future__ import print_function
+
+"""Usage: python3 list-system-services.py [--session|--system]
List services on the system bus (default) or the session bus."""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -65,7 +67,7 @@ def main(argv):
services = dbus_iface.ListNames()
services.sort()
for service in services:
- print service
+ print(service)
if __name__ == '__main__':
main(sys.argv)
diff --git a/examples/unix-fd-client.py b/examples/unix-fd-client.py
index ad421b3..5725513 100755
--- a/examples/unix-fd-client.py
+++ b/examples/unix-fd-client.py
@@ -1,10 +1,12 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
import time
usage = """Usage:
-python unix-fd-service.py <file name> &
-python unix-fd-client.py
+python3 unix-fd-service.py <file name> &
+python3 unix-fd-client.py
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -48,18 +50,18 @@ def main():
except dbus.DBusException:
print_exc()
- print usage
+ print(usage)
sys.exit(1)
iface = dbus.Interface(remote_object, "com.example.SampleInterface")
# UnixFd is an opaque object that takes care of received fd
fd_object = iface.GetFd()
- print fd_object
+ print("client: fd_object = %s" % fd_object)
# Once we take the fd number, we are in charge of closing it!
fd = fd_object.take()
- print fd
+ print("client: fd = %s" % fd)
# We want to encapsulate the integer fd into a Python file or socket object
f = os.fdopen(fd, "r")
@@ -72,7 +74,7 @@ def main():
# otherwise it 'leaks' (stays open until program exits).
f.seek(0)
- print f.read()
+ print("client: read from fd = %r" % f.read())
if __name__ == '__main__':
main()
diff --git a/examples/unix-fd-service.py b/examples/unix-fd-service.py
index 8b65bf2..e7a6b50 100755
--- a/examples/unix-fd-service.py
+++ b/examples/unix-fd-service.py
@@ -1,8 +1,10 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
+from __future__ import print_function
usage = """Usage:
-python unix-fd-service.py <file name> &
-python unix-fd-client.py
+python3 unix-fd-service.py <file name> &
+python3 unix-fd-client.py
"""
# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
@@ -49,20 +51,20 @@ class SomeObject(dbus.service.Object):
self.counter = (self.counter + 1) % 3
if self.counter == 0:
- print "sending UnixFd(filelike)"
+ print("service: sending UnixFd(filelike)")
return dbus.types.UnixFd(f)
elif self.counter == 1:
- print "sending int"
+ print("service: sending int")
return f.fileno()
else:
- print "sending UnixFd(int)"
+ print("service: sending UnixFd(int)")
return dbus.types.UnixFd(f.fileno())
if len(sys.argv) < 2:
- print usage
+ print(usage)
sys.exit(1)
-f = file(sys.argv[1], "r")
+f = open(sys.argv[1], "r")
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -72,6 +74,6 @@ if __name__ == '__main__':
object = SomeObject(session_bus, '/SomeObject')
mainloop = GLib.MainLoop()
- print "Running fd service."
- print usage
+ print("Running fd service.")
+ print(usage)
mainloop.run()