summaryrefslogtreecommitdiffstats
path: root/pimgen.py
diff options
context:
space:
mode:
Diffstat (limited to 'pimgen.py')
-rwxr-xr-xpimgen.py52
1 files changed, 50 insertions, 2 deletions
diff --git a/pimgen.py b/pimgen.py
index de5419d..7c9ee53 100755
--- a/pimgen.py
+++ b/pimgen.py
@@ -26,6 +26,10 @@ from sdbusplus.namedelement import NamedElement
from sdbusplus.renderer import Renderer
+# Global busname for use within classes where necessary
+busname = "xyz.openbmc_project.Inventory.Manager"
+
+
def cppTypeName(yaml_type):
''' Convert yaml types to cpp types.'''
return sdbusplus.property.Property(type=yaml_type).cppTypeName
@@ -269,6 +273,14 @@ class PathCondition(MethodCall):
super(PathCondition, self).__init__(**kw)
+class GetProperty(MethodCall):
+ '''Convenience type for getting inventory properties'''
+
+ def __init__(self, **kw):
+ kw['name'] = 'make_get_property'
+ super(GetProperty, self).__init__(**kw)
+
+
class CreateObjects(MethodCall):
'''Assemble a createObjects functor.'''
@@ -388,8 +400,10 @@ class PropertyIs(MethodCall):
path = TrivialArgument(value=path, type='string')
args.append(path)
- args.append(TrivialArgument(value=kw.pop('interface'), type='string'))
- args.append(TrivialArgument(value=kw.pop('property'), type='string'))
+ iface = TrivialArgument(value=kw.pop('interface'), type='string')
+ args.append(iface)
+ prop = TrivialArgument(value=kw.pop('property'), type='string')
+ args.append(prop)
args.append(TrivialArgument(
decorators=[
Literal(kw['value'].get('type', None))], **kw.pop('value')))
@@ -398,6 +412,34 @@ class PropertyIs(MethodCall):
if service:
args.append(TrivialArgument(value=service, type='string'))
+ dbusMember = kw.pop('dbusMember', None)
+ if dbusMember:
+ # Inventory manager's service name is required
+ if not service or service != busname:
+ args.append(TrivialArgument(value=busname, type='string'))
+
+ gpArgs = []
+ gpArgs.append(path)
+ gpArgs.append(iface)
+ # Prepend '&' and append 'getPropertyByName' function on dbusMember
+ gpArgs.append(TrivialArgument(
+ value='&'+dbusMember+'::getPropertyByName'))
+ gpArgs.append(prop)
+ fArg = MethodCall(
+ name='getProperty',
+ namespace=['functor'],
+ templates=[Template(
+ name=dbusMember,
+ namespace=[])],
+ args=gpArgs)
+
+ # Append getProperty functor
+ args.append(GetProperty(
+ templates=[Template(
+ name=dbusMember+'::PropertiesVariant',
+ namespace=[])],
+ args=[fArg]))
+
kw['args'] = args
kw['namespace'] = ['functor']
super(PropertyIs, self).__init__(**kw)
@@ -505,6 +547,8 @@ class Everything(Renderer):
os.path.join(args.inputdir, 'extra_interfaces.d'))
interface_composite.update(extra_interface_composite)
interface_composite = InterfaceComposite(interface_composite)
+ # Update busname if configured differenly than the default
+ busname = args.busname
return Everything(
*events,
@@ -613,6 +657,10 @@ if __name__ == '__main__':
default=os.path.join(script_dir, 'example'),
help='Location of files to process.')
parser.add_argument(
+ '-b', '--bus-name', dest='busname',
+ default='xyz.openbmc_project.Inventory.Manager',
+ help='Inventory manager busname.')
+ parser.add_argument(
'command', metavar='COMMAND', type=str,
choices=valid_commands.keys(),
help='%s.' % " | ".join(valid_commands.keys()))
OpenPOWER on IntegriCloud