示例#1
0
    def ParseArgs(self, request):
        """Parse the request into a KeyValue proto."""
        key = request.REQ.get("%s_key" % self.prefix)
        value = request.REQ.get("%s_value" % self.prefix)
        value_type = request.REQ.get("%s_type" % self.prefix)

        if key is None:
            return

        result = rdf_protodict.KeyValue()
        result.k.SetValue(key)

        # Automatically try to detect the value
        if value_type is None:
            value = self.GuessValueType(value)
        elif value_type == "Integer":
            value = int(value)
        elif value_type == "Float":
            value = float(value)
        elif value_type == "Boolean":
            if value in ["True", "true", "yes", "1"]:
                value = True

            elif value in ["False", "false", "no", "0"]:
                value = False

            else:
                raise ValueError("Value %s is not a boolean" % value)
        elif value_type == "String":
            value = value.decode("utf8")

        result.v.SetValue(value)

        return result
示例#2
0
 def testRdfFormatterHandlesKeyValuePair(self):
     """rdfvalue.KeyValue items need special handling to expand k and v."""
     key = rdf_protodict.DataBlob().SetValue("skynet")
     value = rdf_protodict.DataBlob().SetValue([1997])
     rdf = rdf_protodict.KeyValue(k=key, v=value)
     template = "{k}: {v}"
     hinter = hints.Hinter(template=template)
     expected = "skynet: 1997"
     result = hinter.Render(rdf)
     self.assertEqual(expected, result)