#!/usr/bin/python

import dbus, flimflam, sys

if (len(sys.argv) < 4):
    print "Usage: %s <service-name> <property> <value>" % (sys.argv[0])
    sys.exit(1)

(_, name, property_key, value) = sys.argv

flim = flimflam.FlimFlam()
service = flim.FindElementByProperty('Service', 'Name', name)

if not service:
    print "Could not find service: %s" % (sys.argv[1])
    sys.exit(1)

if property_key in ["Priority"]:
    service.SetProperty(property_key, int(value))
elif property_key in ["AutoConnect", "WiFi.HiddenSSID", "EAP.UseSystemCAs",
  "SaveCredentials", "LinkMonitorDisable", "ManagedCredentials"]:
    service.SetProperty(property_key,
                        dbus.Boolean(value.lower() in ("true", "1")))
else:
    service.SetProperty(property_key, value)
