/usr/lib/python3/dist-packages/dbusmock/__main__.py is in python3-dbusmock 0.10.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | # coding: UTF-8
'''Main entry point for running mock server.'''
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
# of the license.
__author__ = 'Martin Pitt'
__email__ = 'martin.pitt@ubuntu.com'
__copyright__ = '(c) 2012 Canonical Ltd.'
__license__ = 'LGPL 3+'
import argparse
import dbus.service
import dbusmock.mockobject
import dbusmock.testcase
def parse_args():
parser = argparse.ArgumentParser(description='mock D-BUS object')
parser.add_argument('-s', '--system', action='store_true',
help='put object(s) on system bus (default: session bus)')
parser.add_argument('-l', '--logfile', metavar='PATH',
help='path of log file')
parser.add_argument('-t', '--template', metavar='NAME',
help='template to load (instead of specifying name, path, interface)')
parser.add_argument('name', metavar='NAME', nargs='?',
help='D-BUS name to claim (e. g. "com.example.MyService") (if not using -t)')
parser.add_argument('path', metavar='PATH', nargs='?',
help='D-BUS object path for initial/main object (if not using -t)')
parser.add_argument('interface', metavar='INTERFACE', nargs='?',
help='main D-BUS interface name for initial object (if not using -t)')
parser.add_argument('-m', '--is-object-manager', action='store_true',
help='automatically implement the org.freedesktop.DBus.ObjectManager interface')
args = parser.parse_args()
if args.template:
if args.name or args.path or args.interface:
parser.error('--template and specifying NAME/PATH/INTERFACE are mutually exclusive')
else:
if not args.name or not args.path or not args.interface:
parser.error('Not using a template, you must specify NAME, PATH, and INTERFACE')
return args
if __name__ == '__main__':
import dbus.mainloop.glib
from gi.repository import GLib
args = parse_args()
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
if args.template:
module = dbusmock.mockobject.load_module(args.template)
args.name = module.BUS_NAME
args.path = module.MAIN_OBJ
args.system = module.SYSTEM_BUS
if hasattr(module, 'IS_OBJECT_MANAGER'):
args.is_object_manager = module.IS_OBJECT_MANAGER
else:
args.is_object_manager = False
if args.is_object_manager and not hasattr(module, 'MAIN_IFACE'):
args.interface = dbusmock.mockobject.OBJECT_MANAGER_IFACE
else:
args.interface = module.MAIN_IFACE
main_loop = GLib.MainLoop()
bus = dbusmock.testcase.DBusTestCase.get_dbus(args.system)
# quit mock when the bus is going down
bus.add_signal_receiver(main_loop.quit, signal_name='Disconnected',
path='/org/freedesktop/DBus/Local',
dbus_interface='org.freedesktop.DBus.Local')
bus_name = dbus.service.BusName(args.name,
bus,
allow_replacement=True,
replace_existing=True,
do_not_queue=True)
main_object = dbusmock.mockobject.DBusMockObject(bus_name, args.path,
args.interface, {},
args.logfile,
args.is_object_manager)
if args.template:
main_object.AddTemplate(args.template, None)
dbusmock.mockobject.objects[args.path] = main_object
main_loop.run()
|