summaryrefslogtreecommitdiffstats
path: root/obmc/mapper/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'obmc/mapper/utils.py')
-rw-r--r--obmc/mapper/utils.py130
1 files changed, 0 insertions, 130 deletions
diff --git a/obmc/mapper/utils.py b/obmc/mapper/utils.py
deleted file mode 100644
index a7b93b2..0000000
--- a/obmc/mapper/utils.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# Contributors Listed Below - COPYRIGHT 2016
-# [+] International Business Machines Corp.
-#
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# permissions and limitations under the License.
-
-import sys
-import dbus
-import dbus.mainloop.glib
-# TODO: openbmc/openbmc#2994 remove python 2 support
-try: # python 2
- import gobject
-except ImportError: # python 3
- from gi.repository import GObject as gobject
-import obmc.mapper
-
-
-class Wait(object):
- def __init__(self, bus, waitlist, *a, **kw):
- self.bus = bus
- self.waitlist = dict(list(zip(waitlist, [None] * len(waitlist))))
- mapper = bus.get_object(
- obmc.mapper.MAPPER_NAME,
- obmc.mapper.MAPPER_PATH,
- introspect=False)
- self.iface = dbus.Interface(
- mapper, dbus_interface=obmc.mapper.MAPPER_IFACE)
- self.done = False
- self.callback = kw.pop('callback', None)
- self.error_callback = kw.pop('error_callback', self.default_error)
- self.busy_retries = kw.pop('busy_retries', 20)
- self.busy_retry_delay_milliseconds = kw.pop(
- 'busy_retry_delay_milliseconds', 500)
- self.waitlist_keyword = kw.pop('waitlist_keyword', None)
-
- self.bus.add_signal_receiver(
- self.introspection_handler,
- dbus_interface=obmc.mapper.MAPPER_IFACE + '.Private',
- signal_name='IntrospectionComplete')
- self.bus.add_signal_receiver(
- self.introspection_handler,
- dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager')
-
- self.introspection_handler()
-
- @staticmethod
- def default_error(e):
- raise e
-
- def force_done(self):
- if self.done:
- return
-
- self.done = True
- self.bus.remove_signal_receiver(
- self.introspection_handler,
- dbus_interface=obmc.mapper.MAPPER_IFACE + '.Private',
- signal_name='IntrospectionComplete')
- self.bus.remove_signal_receiver(
- self.introspection_handler,
- dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager',
- signal_name='InterfacesAdded')
-
- def check_done(self):
- if not all(self.waitlist.values()) or self.done:
- return
-
- self.force_done()
-
- if self.callback:
- kwargs = {}
- if self.waitlist_keyword:
- kwargs[waitlist_keyword] = self.waitlist
- self.callback(**kwargs)
-
- def get_object_async(self, path, retry):
- method = getattr(self.iface, 'GetObject')
- method.call_async(
- path,
- [],
- signature='sas',
- reply_handler=lambda x: self.get_object_callback(
- path, x),
- error_handler=lambda x: self.get_object_error(
- path, retry, x))
- return False
-
- def get_object_error(self, path, retry, e):
- if self.done:
- return
-
- if e.get_dbus_name() == 'org.freedesktop.DBus.Error.FileNotFound':
- pass
- elif e.get_dbus_name() in \
- ['org.freedesktop.DBus.Error.ObjectPathInUse',
- 'org.freedesktop.DBus.Error.LimitsExceeded']:
- if retry > self.busy_retries:
- self.force_done()
- self.error_callback(e)
- else:
- gobject.timeout_add(
- self.busy_retry_delay_milliseconds,
- self.get_object_async,
- path,
- retry + 1)
- else:
- self.force_done()
- self.error_callback(e)
-
- def get_object_callback(self, path, info):
- self.waitlist[path] = list(info)[0]
- self.check_done()
-
- def introspection_handler(self, *a, **kw):
- if self.done:
- return
-
- for path in [
- x for x in list(self.waitlist.keys()) if not self.waitlist[x]]:
- self.get_object_async(path, 0)
OpenPOWER on IntegriCloud