def change_type(sysadmin, key, newtype): existing = sysadmin.get(key) if existing.status == sysadminctl_pb2.KEY_NOT_FOUND: print("Key {} must exist to have it's type changed".format(key)) return oldtype = str(existing.get.kvs[0].value.WhichOneof("value")) value = UnpackFromProto(existing.get.kvs[0].value) if "list" in oldtype and "list" not in newtype: if len(getattr(existing.get.kvs[0].value, oldtype).list) > 1: print("Can't type convert a list larger than one element") return value = value[0] # sysadmin's type system requires that we remove the old value # completely before being able to set it with a new type cloneClient = SysAdminClient(sysadmin.ip, sysadmin.port, 10) cloneClient.erase(key) cloneClient.commit(sysadminctl_pb2.NO_HOOKS) sysadmin.set(key, value, newtype)
def test_erase(self): client = SysAdminClient("127.0.0.1", 4000) client.set("wireless.wl0.psk", "password") client.set("wireless.wl0.channel", 40) client.set("wireless.wl0.enabled", True) client.set("wireless.wl0.frequencies", [1, 2, 3]) client.commit() self.assertEqual( "password", UnpackFromProto(client.get("wireless.wl0.psk").get.kvs[0].value)) client.erase("wireless.wl0.psk") self.assertEqual( "password", UnpackFromProto(client.get("wireless.wl0.psk").get.kvs[0].value)) client.erase("not.a.key") client.commit() self.assertEqual(sysadminctl_pb2.KEY_NOT_FOUND, client.get("wireless.wl0.psk").status)