log = Logger(__name__)
def dbus_to_str(value):
- log('converting', value, 'of type', type(value))
- if isinstance(value, dbus.Byte):
- return str(int(value))
- elif isinstance(value, dbus.ByteArray):
- return ','.join(str(ord(v)) for v in value)
- elif isinstance(value, dbus.Array):
- return ','.join(dbus_to_str(v) for v in value)
- elif isinstance(value, dbus.Dictionary):
- return ','.join('%s:%s' % (k, dbus_to_str(v)) for k, v in value.iteritems())
- else:
- return str(value)
+ try:
+ if isinstance(value, dbus.Byte):
+ result = str(int(value))
+ elif isinstance(value, dbus.ByteArray):
+ result = ','.join(str(ord(v)) for v in value)
+ elif isinstance(value, dbus.Array):
+ result = ','.join(dbus_to_str(v) for v in value)
+ elif isinstance(value, dbus.Dictionary):
+ result = ','.join('%s:%s' % (k, dbus_to_str(v)) for k, v in value.iteritems())
+ elif isinstance(value, dbus.String):
+ result = value.encode('utf-8')
+ else:
+ result = str(value)
+ return result
+ except Exception, e:
+ log.error('convert exception', e)
+ raise e
+
def get_dbus_message_type(message):
result = message.__class__.__name__[0:-7]
+# encoding: utf-8
import os
from dbuscron.bus import get_dbus_message_type, dbus_to_str
args_list = message.get_args_list()
env = dict()
env.update(environ)
- dbus_env = dict(
- (('DBUS_ARG%d' % i, dbus_to_str(a)) for i, a in enumerate(args_list)),
- DBUS_ARGN = str(len(args_list)),
- DBUS_SENDER = str(message.get_sender()),
- DBUS_DEST = str(message.get_destination()),
- DBUS_IFACE = str(message.get_interface()),
- DBUS_PATH = str(message.get_path()),
- DBUS_MEMBER = str(message.get_member()),
- DBUS_BUS = bus.__class__.__name__.lower()[0:-3],
- DBUS_TYPE = get_dbus_message_type(message)
- )
- env.update(dbus_env)
+ try:
+ dbus_env = dict(
+ (('DBUS_ARG%d' % i, dbus_to_str(a)) for i, a in enumerate(args_list)),
+ DBUS_ARGN = str(len(args_list)),
+ DBUS_SENDER = str(message.get_sender()),
+ DBUS_DEST = str(message.get_destination()),
+ DBUS_IFACE = str(message.get_interface()),
+ DBUS_PATH = str(message.get_path()),
+ DBUS_MEMBER = str(message.get_member()),
+ DBUS_BUS = bus.__class__.__name__.lower()[0:-3],
+ DBUS_TYPE = get_dbus_message_type(message)
+ )
+ env.update(dbus_env)
+ except Exception, e:
+ log.error('environ exception', e)
+ raise e
+
result = os.spawnvpe(os.P_WAIT, self.__file, self.__args, env)
if result != 0:
- log.warn('run', self.__file, self.__args, dbus_env, result)
+ log.warn('command returned non-zero status', self.__file, self.__args, dbus_env, result)
return result
@property