Hello community, here is the log from the commit of package cdemu-client for openSUSE:Factory checked in at 2017-02-16 17:04:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cdemu-client (Old) and /work/SRC/openSUSE:Factory/.cdemu-client.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cdemu-client" Changes: -------- --- /work/SRC/openSUSE:Factory/cdemu-client/cdemu-client.changes 2015-11-26 17:04:04.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.cdemu-client.new/cdemu-client.changes 2017-02-16 17:04:09.491426349 +0100 @@ -1,0 +2,7 @@ +Mon Feb 6 19:05:14 UTC 2017 - [email protected] + +- Update to new upstream release 3.0.3 + * set displayed process name to "cdemu" + * ported from dbus-python to GDBus + +------------------------------------------------------------------- Old: ---- cdemu-client-3.0.1.tar.bz2 New: ---- cdemu-client-3.0.3.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cdemu-client.spec ++++++ --- /var/tmp/diff_new_pack.BgBIx0/_old 2017-02-16 17:04:09.971358444 +0100 +++ /var/tmp/diff_new_pack.BgBIx0/_new 2017-02-16 17:04:09.971358444 +0100 @@ -1,7 +1,7 @@ # # spec file for package cdemu-client # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: cdemu-client -Version: 3.0.1 +Version: 3.0.3 Release: 0 Summary: Command-line client to control cdemu-daemon License: GPL-2.0+ ++++++ cdemu-client-3.0.1.tar.bz2 -> cdemu-client-3.0.3.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/CMakeLists.txt new/cdemu-client-3.0.3/CMakeLists.txt --- old/cdemu-client-3.0.1/CMakeLists.txt 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/CMakeLists.txt 2016-10-10 00:26:53.000000000 +0200 @@ -19,7 +19,6 @@ # Dependencies find_package (IntlTool 0.21 REQUIRED) find_package (Gettext 0.15 REQUIRED) -find_package (PythonInterp 2.6 REQUIRED) if (POST_INSTALL_HOOKS) find_program (UPDATE_DESKTOP_DATABASE_EXECUTABLE NAMES update-desktop-database) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/README new/cdemu-client-3.0.3/README --- old/cdemu-client-3.0.1/README 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/README 2016-10-10 00:26:53.000000000 +0200 @@ -1,5 +1,5 @@ CDEmu client -3.0.1 +3.0.3 ~~~~~ Table of Contents: @@ -27,7 +27,7 @@ 2. Requirements: ~~~~~~~~~~~~~~~~ - Python >= 2.6 - - D-BUS Python bindings + - PyGObject >= 3.0.0 (glib and gio modules are required) - IntlTool >= 0.21 - GetText >= 0.15 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/debian/changelog new/cdemu-client-3.0.3/debian/changelog --- old/cdemu-client-3.0.1/debian/changelog 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/debian/changelog 2016-10-10 00:26:53.000000000 +0200 @@ -1,7 +1,3 @@ -cdemu-client (3.0.1-1) debian; urgency=low - * Updated to 3.0.1 - -- Rok Mandeljc <[email protected]> Sat, 21 Nov 2015 12:00:00 +0100 - -cdemu-client (3.0.0-1) debian; urgency=low +cdemu-client (3.0.3-1) debian; urgency=low * Initial Release. Closes: #705409 - -- Henrik Stokseth <[email protected]> Sat, 05 Apr 2014 12:00:00 +0100 + -- Henrik Stokseth <[email protected]> Sat, 05 Apr 2014 12:00:00 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/debian/control new/cdemu-client-3.0.3/debian/control --- old/cdemu-client-3.0.1/debian/control 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/debian/control 2016-10-10 00:26:53.000000000 +0200 @@ -2,16 +2,16 @@ Section: utils Priority: optional Homepage: http://cdemu.sourceforge.net/ -Maintainer: Henrik Stokseth <[email protected]> +Maintainer: Henrik Stokseth <[email protected]> Build-Depends: debhelper (>= 9) Build-Depends-Indep: python (>= 2.6.6-3), intltool, cmake (>= 2.8.5) X-Python-Version: >= 2.6.6 -Standards-Version: 3.9.5 +Standards-Version: 3.9.7 Package: cdemu-client Architecture: all -Depends: python (>= 2.6.6-3), python-dbus, cdemu-daemon (>= 3.0.0), ${python:Depends}, ${misc:Depends} +Depends: python (>= 2.6.6-3), python-gi (>= 3.0.0), gir1.2-glib-2.0, cdemu-daemon (>= 3.0.0), ${python:Depends}, ${misc:Depends} Recommends: bash-completion, gcdemu (>= 3.0.0) Description: Command-line client to control CDEmu daemon This is cdemu-client, a command-line client for controlling the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/debian/copyright new/cdemu-client-3.0.3/debian/copyright --- old/cdemu-client-3.0.1/debian/copyright 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/debian/copyright 2016-10-10 00:26:53.000000000 +0200 @@ -1,4 +1,4 @@ -This package was debianized by Henrik Stokseth <henrik AT hw0 DOT org> on +This package was debianized by Henrik Stokseth <[email protected]> on Mon, 24 Des 2007 12:00:00 +0100. It was downloaded from: http://cdemu.sourceforge.net/ @@ -32,6 +32,6 @@ On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. -The Debian packaging is (C) 2007, Henrik Stokseth <henrik AT hw0 DOT org> and +The Debian packaging is (C) 2007, Henrik Stokseth <[email protected]> and is licensed under the GPL, see above. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cdemu-client-3.0.1/src/cdemu new/cdemu-client-3.0.3/src/cdemu --- old/cdemu-client-3.0.1/src/cdemu 2015-11-21 15:10:29.000000000 +0100 +++ new/cdemu-client-3.0.3/src/cdemu 2016-10-10 00:26:53.000000000 +0200 @@ -21,10 +21,15 @@ from __future__ import print_function import argparse +import datetime import sys import os.path import getpass -import dbus + +import gi +from gi.repository import GLib +from gi.repository import Gio + try: import configparser @@ -35,15 +40,27 @@ from gettext import bindtextdomain, textdomain # *** Globals *** -app_name = "cdemu-client" -app_version = "3.0.1" +app_name = "cdemu" +app_version = "3.0.3" supported_daemon_interface_version = [ 7, 0 ] # I18n -bindtextdomain("cdemu") -textdomain("cdemu") +bindtextdomain(app_name) +textdomain(app_name) + + +# Set process name +if sys.platform == "linux2": + # Set process name. Only works on Linux >= 2.1.57. + try: + import ctypes + libc = ctypes.CDLL("libc.so.6") + libc.prctl(15, app_name, 0, 0, 0) # 15 = PR_SET_NAME + except Exception: + pass +# String to boolean conversion helper def str2bool (value): return value.lower() in ("yes", "true", "t", "1") @@ -97,31 +114,31 @@ parser.add_argument("--encoding", type=str, help=_("encoding for text-based images")) parser.add_argument("--dvd-report-css", action="store_true", help=_("flag the DVD disc as CSS-encoded")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # We need to pass absolute filenames to daemon filenames = map(os.path.abspath, arguments.image_file) # Gather parser parameters into a dictionary parser_params = {} if hasattr(arguments, "encoding"): - parser_params["encoding"] = arguments.encoding + parser_params["encoding"] = GLib.Variant("s", arguments.encoding) if hasattr(arguments, "password"): - parser_params["password"] = arguments.password + parser_params["password"] = GLib.Variant("s", arguments.password) if hasattr(arguments, "dvd_report_css"): - parser_params["dvd-report-css"] = arguments.dvd_report_css + parser_params["dvd-report-css"] = GLib.Variant("b", arguments.dvd_report_css) # Particular device vs. any device if arguments.device == "any": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) for device in range(0, num_devices): # Device's status try: - status = dbus_iface.DeviceGetStatus(device) - except dbus.DBusException as e: + status = proxy.DeviceGetStatus(device) + except GLib.Error as e: print_warning(_("Failed to get status of device %i: %s") % (device, e)) continue @@ -130,7 +147,7 @@ continue # Load device - return self.load_device(dbus_iface, device, filenames, parser_params) + return self.load_device(proxy, device, filenames, parser_params) else: # If we're here, it means we didn't get an empty device raise CDEmuError(_("No empty device found")) @@ -140,23 +157,23 @@ except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) - return self.load_device(dbus_iface, device, filenames, parser_params) + return self.load_device(proxy, device, filenames, parser_params) # Device loading with password query support - def load_device (self, dbus_iface, device, filenames, params={}): + def load_device (self, proxy, device, filenames, params={}): # Try to load it try: - dbus_iface.DeviceLoad(device, filenames, params) - except dbus.DBusException as e: - if e.get_dbus_name() == "net.sf.cdemu.CDEmuDaemon.errorMirage.EncryptedImage": + proxy.DeviceLoad(device, filenames, params) + except GLib.Error as e: + if "net.sf.cdemu.CDEmuDaemon.errorMirage.EncryptedImage" in str(e): # We need password print(_("The image you are trying to load is encrypted.")) - params["password"] = getpass.getpass(_("Password: ")) # Append password to params + password = getpass.getpass(_("Password: ")) # Append password to params + params["password"] = GLib.Variant("s", password) return load_device(device, filenames, params) else: raise CDEmuError(_("Failed to load image: %s") % (e)) - ######################################################################## # Create blank # ######################################################################## @@ -175,36 +192,36 @@ parser.add_argument("--medium-type", type=str, nargs="?", choices=['cdr74', 'cdr80', 'cdr90', 'cdr99', 'dvd+r'], help=_("medium type")) parser.add_argument("--param", type=str, nargs="?", action='append', help=_("additional writer parameter(s)")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # We need to pass absolute filename/basename to daemon filename = os.path.abspath(arguments.image_file) # Gather writer parameters into a dictionary parameters = {} if hasattr(arguments, "writer_id"): - parameters["writer-id"] = arguments.writer_id + parameters["writer-id"] = GLib.Variant("s", arguments.writer_id) if hasattr(arguments, "medium_type"): - parameters["medium-type"] = arguments.medium_type + parameters["medium-type"] = GLib.Variant("s", arguments.medium_type) if hasattr(arguments, "param"): # Process parameters writer_parameters = self.process_writer_parameters(arguments.param) # Validate parameters using writer's parameter sheet - writer_parameters = self.validate_writer_parameters(dbus_iface, arguments.writer_id, writer_parameters) + writer_parameters = self.validate_writer_parameters(proxy, arguments.writer_id, writer_parameters) # Set to parameters dictionary that we will send to daemon parameters.update(writer_parameters) # Particular device vs. any device if arguments.device == "any": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) for device in range(0, num_devices): # Device's status try: - status = dbus_iface.DeviceGetStatus(device) - except dbus.DBusException as e: + status = proxy.DeviceGetStatus(device) + except GLib.Error as e: print_warning(_("Failed to get status of device %i: %s") % (device, e)) continue @@ -213,7 +230,7 @@ continue # Load device - return self.load_device(dbus_iface, device, filename, parameters) + return self.load_device(proxy, device, filename, parameters) else: # If we're here, it means we didn't get an empty device raise CDEmuError(_("No empty device found")) @@ -223,14 +240,14 @@ except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) - return self.load_device(dbus_iface, device, filename, parameters) + return self.load_device(proxy, device, filename, parameters) # Device loading - def load_device (self, dbus_iface, device, filenames, params={}): + def load_device (self, proxy, device, filenames, params={}): # Try to load it try: - dbus_iface.DeviceCreateBlank(device, filenames, params) - except dbus.DBusException as e: + proxy.DeviceCreateBlank(device, filenames, params) + except GLib.Error as e: raise CDEmuError(_("Failed to load blank image: %s") % (e)) # Image writer parameter processing @@ -257,11 +274,11 @@ return parameters # Writer parameter validation - def validate_writer_parameters (self, dbus_iface, writer_id, parameters): + def validate_writer_parameters (self, proxy, writer_id, parameters): # Grab writer's parameter sheet try: - parameter_sheet = dbus_iface.EnumWriterParameters(writer_id) - except dbus.DBusException as e: + parameter_sheet = proxy.EnumWriterParameters(writer_id) + except GLib.Error as e: raise CDEmuError(_("Failed to get parameter sheet for writer: %s") % (e)) # Convert the XML tree into a dictionary for convenience @@ -275,6 +292,7 @@ parameter_entry = valid_parameters[key] except KeyError as e: print_warning(_("Parameter '%s' not found in writer's parameter sheet!") % (key)) + parameters.pop(key, '') # Remove from dictionary continue # Determine type @@ -283,19 +301,20 @@ # on the list of valid values, and if not, print a warning for enum_value in parameter_entry[4]: if value == enum_value: + parameters[key] = GLib.Variant("s", value) break else: print_warning(_("Invalid value '%s' given for parameter '%s'!") % (value, key)) - elif isinstance(parameter_entry[3], dbus.String): - # String; nothing to do here - continue - elif isinstance(parameter_entry[3], dbus.Boolean): + elif isinstance(parameter_entry[3], str): + # String + parameters[key] = GLib.Variant("s", value) + elif isinstance(parameter_entry[3], bool): # Boolean; convert string value to boolean - parameters[key] = str2bool(value) - elif isinstance(parameter_entry[3], dbus.Int32): + parameters[key] = GLib.Variant("b", str2bool(value)) + elif isinstance(parameter_entry[3], int): # Convert string value to integer try: - parameters[key] = int(value, 0) + parameters[key] = GLib.Variant("i", int(value, 0)) except ValueError: raise CDEmuError(_("String '%s' given as value for parameter '%s' is not a number!") % (value, key)) else: @@ -319,25 +338,25 @@ parser.add_argument("device", type=str, help=_("device")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) for device in range(0, num_devices): try: - dbus_iface.DeviceUnload(device) - except dbus.DBusException as e: + proxy.DeviceUnload(device) + except GLib.Error as e: print_warning(_("Failed to unload device %i: %s") % (device, e)) continue else: try: device = int(arguments.device, 0) - dbus_iface.DeviceUnload(device) - except dbus.DBusException as e: + proxy.DeviceUnload(device) + except GLib.Error as e: raise CDEmuError(_("Failed to unload device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -355,19 +374,19 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Print status for all devices try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' status:")) print("%-5s %-10s %s" % (_("DEV"), _("LOADED"), _("FILENAME"))) for device in range (0, num_devices): try: - [loaded, filenames] = dbus_iface.DeviceGetStatus(device, utf8_strings=True) - except dbus.DBusException as e: + [loaded, filenames] = proxy.DeviceGetStatus(device) + except GLib.Error as e: print_warning(_("Failed to get status of device %i: %s") % (device, e)) continue @@ -392,19 +411,19 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Print device mapping for all devices try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Device mapping:")) print("%-5s %-15s %-15s" % (_("DEV"), _("SCSI CD-ROM"), _("SCSI generic"))) for device in range (0, num_devices): try: - [dev_sr, dev_sg] = dbus_iface.DeviceGetMapping(device) - except dbus.DBusException as e: + [dev_sr, dev_sg] = proxy.DeviceGetMapping(device) + except GLib.Error as e: print_warning(_("Failed to get device mapping of device %i: %s") % (device, e)) continue @@ -427,7 +446,7 @@ parser.add_argument("new_value", nargs="?", type=str, help=_("new value")) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set daemon debug mask if hasattr(arguments, "new_value"): try: @@ -437,15 +456,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting daemon debug mask of all devices to 0x%X.") % (mask)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "daemon-debug-mask", mask) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "daemon-debug-mask", GLib.Variant("i", mask)) + except GLib.Error as e: print_warning(_("Failed to set daemon debug mask of device %i to 0x%X: %s") % (device, mask, e)) continue else: @@ -456,8 +475,8 @@ print(_("Setting daemon debug mask of device %i to 0x%X.") % (device, mask)) try: - dbus_iface.DeviceSetOption(device, "daemon-debug-mask", mask) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "daemon-debug-mask", GLib.Variant("i", mask)) + except GLib.Error as e: raise CDEmuError(_("Failed to set daemon debug mask of device %i to 0x%X: %s") % (device, mask, e)) # Get daemon debug mask @@ -465,8 +484,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' daemon debug masks:")) @@ -474,8 +493,8 @@ for device in range(0, num_devices): try: - mask = dbus_iface.DeviceGetOption(device, "daemon-debug-mask") - except dbus.DBusException as e: + mask = proxy.DeviceGetOption(device, "daemon-debug-mask") + except GLib.Error as e: print_warning(_("Failed to get daemon debug mask of device %i: %s") % (device, e)) continue @@ -483,8 +502,8 @@ else: try: device = int(arguments.device, 0) - mask = dbus_iface.DeviceGetOption(device, "daemon-debug-mask") - except dbus.DBusException as e: + mask = proxy.DeviceGetOption(device, "daemon-debug-mask") + except GLib.Error as e: raise CDEmuError(_("Failed to get daemon debug mask of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -507,7 +526,7 @@ parser.add_argument("device", type=str, help=_("device")) parser.add_argument("new_value", nargs="?", type=str, help=_("new value")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set debug mask if hasattr(arguments, "new_value"): try: @@ -517,15 +536,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting library debug mask of all devices to 0x%X.") % (mask)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "library-debug-mask", mask) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "library-debug-mask", GLib.Variant("i", mask)) + except GLib.Error as e: print_warning(_("Failed to set library debug mask of device %i to 0x%X: %s") % (device, mask, e)) continue else: @@ -536,8 +555,8 @@ print(_("Setting library debug mask of device %i to 0x%X.") % (device, mask)) try: - dbus_iface.DeviceSetOption(device, "library-debug-mask", mask) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "library-debug-mask", GLib.Variant("i", mask)) + except GLib.Error as e: raise CDEmuError(_("Failed to set library debug mask of device %i to 0x%X: %s") % (device, mask, e)) # Get debug mask @@ -545,8 +564,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' library debug masks:")) @@ -554,16 +573,16 @@ for device in range(0, num_devices): try: - mask = dbus_iface.DeviceGetOption(device, "library-debug-mask") - except dbus.DBusException as e: + mask = proxy.DeviceGetOption(device, "library-debug-mask") + except GLib.Error as e: print_warning(_("Failed to get library debug mask of device %i: %s") % (device, e)) print("%-5s 0x%08X" % (device, mask)) else: try: device = int(arguments.device, 0) - mask = dbus_iface.DeviceGetOption(device, "library-debug-mask") - except dbus.DBusException as e: + mask = proxy.DeviceGetOption(device, "library-debug-mask") + except GLib.Error as e: raise CDEmuError(_("Failed to get library debug mask of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (mask)) @@ -586,7 +605,7 @@ parser.add_argument("device", type=str, help=_("device")) parser.add_argument("new_value", nargs="?", type=str, help=_("new value")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set DPM emulation flag if hasattr(arguments, "new_value"): try: @@ -596,15 +615,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting DPM emulation flag of all devices to %i.") % (enabled)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "dpm-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "dpm-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: print_warning(_("Failed to set DPM emulation flag of device %i to %i: %s") % (device, enabled, e)) continue else: @@ -615,8 +634,8 @@ print(_("Setting DPM emulation flag of device %i to %i.") % (device, enabled)) try: - dbus_iface.DeviceSetOption(device, "dpm-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "dpm-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: raise CDEmuError(_("Failed to set DPM emulation flag of device %i to %i: %s") % (device, enabled, e)) # Get DPM emulation flag @@ -624,8 +643,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' DPM emulation flag:")) @@ -633,8 +652,8 @@ for device in range(0, num_devices): try: - enabled = dbus_iface.DeviceGetOption(device, "dpm-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "dpm-emulation") + except GLib.Error as e: print_warning(_("Failed to get DPM emulation flag of device %i: %s") % (device, e)) continue @@ -642,8 +661,8 @@ else: try: device = int(arguments.device, 0) - enabled = dbus_iface.DeviceGetOption(device, "dpm-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "dpm-emulation") + except GLib.Error as e: raise CDEmuError(_("Failed to get DPM emulation flag of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -666,7 +685,7 @@ parser.add_argument("device", type=str, help=_("device")) parser.add_argument("new_value", nargs="?", type=str, help=_("new value")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set TR emulation flag if hasattr(arguments, "new_value"): try: @@ -676,15 +695,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting transfer rate emulation flag of all devices to %i.") % (enabled)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "tr-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "tr-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: print_warning(_("Failed to set transfer rate emulation flag of device %i to %i: %s") % (device, enabled, e)) continue else: @@ -695,8 +714,8 @@ print(_("Setting transfer rate emulation flag of device %i to %i.") % (device, enabled)) try: - dbus_iface.DeviceSetOption(device, "tr-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "tr-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: raise CDEmuError(_("Failed to set transfer rate emulation flag of device %i to %i: %s") % (device, enabled, e)) # Get TR emulation flag @@ -704,8 +723,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Devices' transfer rate emulation flag:")) @@ -713,8 +732,8 @@ for device in range(0, num_devices): try: - enabled = dbus_iface.DeviceGetOption(device, "tr-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "tr-emulation") + except GLib.Error as e: print_warning(_("Failed to get transfer rate emulation flag of device %i: %s") % (device, e)) continue @@ -722,8 +741,8 @@ else: try: device = int(arguments.device, 0) - enabled = dbus_iface.DeviceGetOption(device, "tr-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "tr-emulation") + except GLib.Error as e: raise CDEmuError(_("Failed to get transfer rate emulation flag of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -746,7 +765,7 @@ parser.add_argument("device", type=str, help=_("device")) parser.add_argument("new_value", nargs="?", type=str, help=_("new value")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set bad sector emulation flag if hasattr(arguments, "new_value"): try: @@ -756,15 +775,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting bad sector emulation flag of all devices to %i.") % (enabled)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "bad-sector-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "bad-sector-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: print_warning(_("Failed to set bad sector emulation flag of device %i to %i: %s") % (device, enabled, e)) continue else: @@ -775,8 +794,8 @@ print(_("Setting bad sector emulation flag of device %i to %i.") % (device, enabled)) try: - dbus_iface.DeviceSetOption(device, "bad-sector-emulation", enabled) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "bad-sector-emulation", GLib.Variant("b", enabled)) + except GLib.Error as e: raise CDEmuError(_("Failed to set bad sector emulation flag of device %i to %i: %s") % (device, enabled, e)) # Get bad sector emulation flag @@ -784,8 +803,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' bad sector emulation flag:")) @@ -793,8 +812,8 @@ for device in range(0, num_devices): try: - enabled = dbus_iface.DeviceGetOption(device, "bad-sector-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "bad-sector-emulation") + except GLib.Error as e: print_warning(_("Failed to get bad sector emulation flag of device %i: %s") % (device, e)) continue @@ -802,8 +821,8 @@ else: try: device = int(arguments.device, 0) - enabled = dbus_iface.DeviceGetOption(device, "bad-sector-emulation") - except dbus.DBusException as e: + enabled = proxy.DeviceGetOption(device, "bad-sector-emulation") + except GLib.Error as e: raise CDEmuError(_("Failed to get bad sector emulation flag of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -826,7 +845,7 @@ parser.add_argument("device", type=str, help=_("device")) parser.add_argument("new_id", nargs='*', type=str, help=_("new device ID: vendor ID, product ID, revision and vendor-specific string")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Set device ID if hasattr(arguments, "new_id"): device_id = tuple(arguments.new_id) @@ -836,15 +855,15 @@ if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print(_("Setting device ID of all devices to %s.") % (device_id)) for device in range(0, num_devices): try: - dbus_iface.DeviceSetOption(device, "device-id", device_id) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "device-id", GLib.Variant("(ssss)", device_id)) + except GLib.Error as e: print_warning(_("Failed to set device ID of device %i to %s: %s") % (device, device_id, e)) continue else: @@ -855,8 +874,8 @@ print(_("Setting device ID of device %i to %s.") % (device, device_id)) try: - dbus_iface.DeviceSetOption(device, "device-id", device_id) - except dbus.DBusException as e: + proxy.DeviceSetOption(device, "device-id", GLib.Variant("(ssss)", device_id)) + except GLib.Error as e: raise CDEmuError(_("Failed to set device ID of device %i to %s: %s") % (device, device_id, e)) @@ -865,8 +884,8 @@ # Particular device vs. all devices if arguments.device == "all": try: - num_devices = dbus_iface.GetNumberOfDevices() - except dbus.DBusException as e: + num_devices = proxy.GetNumberOfDevices() + except GLib.Error as e: raise CDEmuError(_("Failed to get number of devices: %s") % (e)) print_header(_("Devices' IDs:")) @@ -874,9 +893,9 @@ for device in range(0, num_devices): try: - values = dbus_iface.DeviceGetOption(device, "device-id") + values = proxy.DeviceGetOption(device, "device-id") device_id = map(str, values) - except dbus.DBusException as e: + except GLib.Error as e: print_warning(_("Failed to get device ID of device %i: %s") % (device, e)) continue @@ -884,9 +903,9 @@ else: try: device = int(arguments.device, 0) - values = dbus_iface.DeviceGetOption(device, "device-id") + values = proxy.DeviceGetOption(device, "device-id") device_id = map (str, values) - except dbus.DBusException as e: + except GLib.Error as e: raise CDEmuError(_("Failed to get device ID of device %i: %s") % (device, e)) except ValueError: raise CDEmuError(_("String '%s' is not a number") % (arguments.device)) @@ -906,11 +925,11 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Display supported parsers try: - parsers = dbus_iface.EnumSupportedParsers() - except dbus.DBusException as e: + parsers = proxy.EnumSupportedParsers() + except GLib.Error as e: raise CDEmuError(_("Failed to enumerate supported parsers: %s") % (e)) return False @@ -934,11 +953,11 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Display supported writers try: - writers = dbus_iface.EnumSupportedWriters() - except dbus.DBusException as e: + writers = proxy.EnumSupportedWriters() + except GLib.Error as e: raise CDEmuError(_("Failed to enumerate supported writers: %s") % (e)) # Print all writers @@ -959,11 +978,11 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Display supported filter streams try: - filter_streams = dbus_iface.EnumSupportedFilterStreams() - except dbus.DBusException as e: + filter_streams = proxy.EnumSupportedFilterStreams() + except GLib.Error as e: raise CDEmuError(_("Failed to enumerate supported filter streams: %s") % (e)) # Print all filter streams @@ -987,11 +1006,11 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Print module's debug masks try: - debug_masks = dbus_iface.EnumDaemonDebugMasks() - except dbus.DBusException as e: + debug_masks = proxy.EnumDaemonDebugMasks() + except GLib.Error as e: raise CDEmuError(_("Failed to enumerate supported daemon debug masks: %s") % (e)) print_header(_("Supported daemon debug masks:")) @@ -1011,11 +1030,11 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Print module's debug masks try: - debug_masks = dbus_iface.EnumLibraryDebugMasks() - except dbus.DBusException as e: + debug_masks = proxy.EnumLibraryDebugMasks() + except GLib.Error as e: raise CDEmuError(_("Failed to enumerate supported library debug masks: %s") % (e)) print_header(_("Supported library debug masks:")) @@ -1037,11 +1056,11 @@ parser.add_argument("writer", type=str, help=_("writer ID")) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Get parameter sheet for the specified writer try: - parameter_sheet = dbus_iface.EnumWriterParameters(arguments.writer) - except dbus.DBusException as e: + parameter_sheet = proxy.EnumWriterParameters(arguments.writer) + except GLib.Error as e: raise CDEmuError(_("Failed to get parameter sheet for writer: %s") % (e)) # Print the sheet @@ -1061,11 +1080,11 @@ def parameter_type_name (self, parameter): if len(parameter[4]): return _("enum") - elif isinstance(parameter[3], dbus.String): + elif isinstance(parameter[3], str): return _("string") - elif isinstance(parameter[3], dbus.Boolean): + elif isinstance(parameter[3], bool): return _("boolean") - elif isinstance(parameter[3], dbus.Int32): + elif isinstance(parameter[3], int): return _("integer") else: return _("unknown") @@ -1073,15 +1092,13 @@ # This is a stand-alone function because it is shared between # enum-writer-parameters and create-blank implementations -def fetch_and_parse_writer_parameter_sheet (dbus_iface, writer_id): +def fetch_and_parse_writer_parameter_sheet (proxy, writer_id): # Enumerate all supported writers try: - parameter_sheet = dbus_iface.EnumWriterParameters(writer_id) - except dbus.DBusException as e: + parameter_sheet = proxy.EnumWriterParameters(writer_id) + except GLib.Error as e: raise CDEmuError(_("Failed to get parameter sheet for writer: %s") % (e)) - print(parameter_sheet) - # Find the one we want for writer in writers: if writer[0] == writer_id: @@ -1110,16 +1127,16 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): # Print version information try: - library_version = dbus_iface.GetLibraryVersion() - except dbus.DBusException as e: + library_version = proxy.GetLibraryVersion() + except GLib.Error as e: raise CDEmuError(_("Failed to get library version: %s") % (e)) try: - daemon_version = dbus_iface.GetDaemonVersion() - except dbus.DBusException as e: + daemon_version = proxy.GetDaemonVersion() + except GLib.Error as e: raise CDEmuError(_("Failed to get daemon version: %s") % (e)) print(_("Library version: %s") % (str(library_version))) @@ -1138,10 +1155,10 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): try: - dbus_iface.AddDevice() - except dbus.DBusException as e: + proxy.AddDevice() + except GLib.Error as e: raise CDEmuError(_("Failed to add device: %s") % (e)) print(_("Device added successfully.")) @@ -1159,10 +1176,10 @@ parser = subparsers.add_parser(name, description=description_msg, help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.set_defaults(command_function=self) - def __call__ (self, dbus_iface, arguments): + def __call__ (self, proxy, arguments): try: - dbus_iface.RemoveDevice() - except dbus.DBusException as e: + proxy.RemoveDevice() + except GLib.Error as e: raise CDEmuError(_("Failed to remove device: %s") % (e)) print(_("Device removed successfully.")) @@ -1185,9 +1202,10 @@ def create_parser (): parser = CDEmuCommandLineParser(description=_("Command-line CDEmu client."), formatter_class=argparse.ArgumentDefaultsHelpFormatter, argument_default=argparse.SUPPRESS) parser.add_argument("--bus", metavar="BUS", choices=["system", "session"], help=_("sets D-BUS bus type to use")) - parser.add_argument("--version", action="version", version="%s %s - (C) Rok Mandeljc" % (app_name, app_version)) + parser.add_argument("--version", action="version", version="%s %s - (C) 2006-%d Rok Mandeljc" % (app_name, app_version, datetime.date.today().year)) subparsers = parser.add_subparsers(title=_("valid commands"), metavar="command", help=_("command help")) + subparsers.required = True # Command sub-parsers cmd_load(subparsers) # Load @@ -1215,35 +1233,95 @@ ######################################################################## -# D-Bus connection # +# CDEmuDaemonProxy: Daemon proxy object # ######################################################################## -def connect_to_daemon (bus_type): - try: - if bus_type == "system": - dbus_bus = dbus.SystemBus() - elif bus_type == "session": - dbus_bus = dbus.SessionBus() - else: - print_warning(_("Invalid bus parameter '%s', using default!") % (bus_type)) - dbus_bus = dbus.SessionBus() # Use session bus by default +class CDEmuDaemonProxy (): + _name = 'net.sf.cdemu.CDEmuDaemon' + _object_path = '/Daemon' - dbus_proxy = dbus_bus.get_object("net.sf.cdemu.CDEmuDaemon", "/Daemon") - dbus_iface = dbus.Interface(dbus_proxy, "net.sf.cdemu.CDEmuDaemon") - except dbus.DBusException as e: - raise CDEmuError(_("Failed to connect to CDEmu daemon: %s") % (e)) + def __init__ (self, bus_type): + try: + if bus_type == "system": + bus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None) + elif bus_type == "session": + bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) + else: + print_warning(_("Invalid bus parameter '%s', using default!") % (bus_type)) + bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) # Use session bus by default - # Get daemon interface version - try: - interface_version = dbus_iface.GetDaemonInterfaceVersion2() - except dbus.DBusException as e: - raise CDEmuError(_("Failed to acquire daemon interface version (this most likely means your daemon is out-of-date): %s") % (e)) + self.proxy = Gio.DBusProxy.new_sync(bus, 0, None, "net.sf.cdemu.CDEmuDaemon", "/Daemon", "net.sf.cdemu.CDEmuDaemon", None) + except GLib.Error as e: + raise CDEmuError(_("Failed to connect to CDEmu daemon: %s") % (e)) + + # Get daemon interface version + try: + interface_version = self.GetDaemonInterfaceVersion2() + except GLib.Error as e: + raise CDEmuError(_("Failed to acquire daemon interface version (this most likely means your daemon is out-of-date): %s") % (e)) + + # Check daemon interface version + if interface_version[0] != supported_daemon_interface_version[0] or interface_version[1] < supported_daemon_interface_version[1]: + raise CDEmuError(_("CDEmu daemon interface version %i.%i detected, but version %i.%i is required!") % (interface_version[0], interface_version[1], supported_daemon_interface_version[0], supported_daemon_interface_version[1])) + + def GetDaemonVersion (self): + return self.proxy.GetDaemonVersion() + + def GetLibraryVersion (self): + return self.proxy.GetLibraryVersion() + + def GetDaemonInterfaceVersion2 (self): + return self.proxy.GetDaemonInterfaceVersion2() + + def EnumDaemonDebugMasks (self): + return self.proxy.EnumDaemonDebugMasks() + + def EnumLibraryDebugMasks (self): + return self.proxy.EnumLibraryDebugMasks() + + def EnumSupportedParsers (self): + return self.proxy.EnumSupportedParsers() + + def EnumSupportedWriters (self): + return self.proxy.EnumSupportedWriters() + + def EnumSupportedFilterStreams (self): + return self.proxy.EnumSupportedFilterStreams() + + def EnumWriterParameters (self, writer_id): + return self.proxy.EnumWriterParameters('(s)', writer_id) + + + def GetNumberOfDevices (self): + return self.proxy.GetNumberOfDevices() + + + def DeviceGetMapping (self, device_number): + return self.proxy.DeviceGetMapping('(i)', device_number) + + def DeviceGetStatus (self, device_number): + return self.proxy.DeviceGetStatus('(i)', device_number) + + def DeviceLoad (self, device_number, filenames, parameters): + return self.proxy.DeviceLoad('(iasa{sv})', device_number, filenames, parameters) + + def DeviceCreateBlank (self, device_number, filename, parameters): + return self.proxy.DeviceCreateBlank('(isa{sv})', device_number, filename, parameters) + + def DeviceUnload (self, device_number): + return self.proxy.DeviceUnload('(i)', device_number) + + def DeviceGetOption (self, device_number, option_name): + return self.proxy.DeviceGetOption('(is)', device_number, option_name) + + def DeviceSetOption (self, device_number, option_name, option_value): + return self.proxy.DeviceSetOption('(isv)', device_number, option_name, option_value) - # Check daemon interface version - if interface_version[0] != supported_daemon_interface_version[0] or interface_version[1] < supported_daemon_interface_version[1]: - raise CDEmuError(_("CDEmu daemon interface version %i.%i detected, but version %i.%i is required!") % (interface_version[0], interface_version[1], supported_daemon_interface_version[0], supported_daemon_interface_version[1])) + def AddDevice (self): + return self.proxy.AddDevice() - return dbus_iface + def RemoveDevice (self): + return self.proxy.RemoveDevice() ######################################################################## @@ -1281,10 +1359,10 @@ bus_type = arguments.bus # *** Connect to daemon *** - dbus_iface = connect_to_daemon(bus_type) + proxy = CDEmuDaemonProxy(bus_type) # *** Execute command *** - arguments.command_function(dbus_iface, arguments) + arguments.command_function(proxy, arguments) if __name__ == "__main__": try:
