#!/usr/bin/env python3
# Copyright 2019 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 pprint
import sys
import time

import dbus
import flimflam

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

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

timeout = time.time() + 30
while time.time() < timeout:
    service = flim.FindElementByProperty('Service', 'Name', sys.argv[1])
    if service:
        break
    time.sleep(.5)

if service is None:
    print('Unknown service %s' % sys.argv[1])
    sys.exit(2)

(success, diagnostics) = flim.ConnectService(service=service)

print('Success:', success)
pprint.pprint(diagnostics)
