#!/usr/bin/env python3
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from __future__ import print_function

import sys

import dbus
import flimflam

if len(sys.argv) < 3:
    print('Usage: %s <profile_name> <entry_name>' % (sys.argv[0]))
    sys.exit(1)

(_, profile_name, entry_name) = sys.argv

flim = flimflam.FlimFlam(dbus.SystemBus())

profile = flim.FindElementByNameSubstring('Profile', profile_name)
if profile is None:
    device = flim.FindElementByPropertySubstring('Profile',
                                                 'Interface',
                                                 profile_name)

print('Found profile %s' % (profile.object_path))

try:
    properties = profile.GetEntry(entry_name)
    for key in properties.keys():
        print('    %s = %s' %
              (key, flimflam.convert_dbus_value(properties[key], 4)))
except dbus.DBusException:
    print('Entry %s not found' % (entry_name))
