def handle(self, namespace):
     m=re.match("(?P<key>\w+)=(?P<value>.+)", namespace.keyvalue)
     if m:
         key=m.group('key').lower()
         value=m.group('value').lower()
     else:
         key=namespace.keyvalue.lower()
         value=''
     keyid=checkKey(key)
     for host in namespace.host:
         hostid=getHost(host)
         if not hostid:
             raise HostinfoException("Unknown host: %s" % host)
         if value:
             kvlist=KeyValue.objects.filter(hostid=hostid, keyid=keyid, value=value)
         else:
             kvlist=KeyValue.objects.filter(hostid=hostid, keyid=keyid)
         if not kvlist:
             raise HostinfoException("Host %s doesn't have key %s" % (host, key))
         else:
             for kv in kvlist:
                 try:
                     kv.delete(readonlychange=namespace.readonlyupdate)
                 except ReadonlyValueException:
                     raise HostinfoException("Cannot delete a readonly value")
     return None,0
    def handle(self, namespace):
	m=re.match("(?P<key>\w+)=(?P<value>.+)", namespace.keyvalue[0])
	if not m:
	    raise HostinfoException("Must be specified in key=value format, not %s" % namespace.keyvalue[0])
        key=m.group('key').lower()
        value=m.group('value').lower()
        keyid=checkKey(key)
        if not namespace.hosts and not namespace.all:
            raise HostinfoException("Must specify a list of hosts or the --all flag")

        kvlist=KeyValue.objects.filter(keyid=keyid, value=value)
        for kv in kvlist:
            if (namespace.hosts and kv.hostid.hostname in namespace.hosts) or not namespace.hosts:
                if not namespace.kidding:
                    kv.value=namespace.newvalue[0]
                    kv.save()
                else:
                    sys.stderr.write("Would replace %s=%s with %s on %s\n" % (kv.keyid, kv.value, namespace.newvalue[0], kv.hostid))
        return None,0