Esempio n. 1
0
 def __call__(self, state, scope, pos, paramTypes, original, replacement):
     if isinstance(original, bytes):
         original = bytesToString(original)
     if isinstance(replacement, bytes):
         replacement = bytesToString(replacement)
     length = min(len(original), len(replacement))
     return replacement[0:length] + original[length:len(original)]
Esempio n. 2
0
 def __call__(self, state, scope, pos, paramTypes, haystack, pattern,
              replacement):
     original = haystack
     if isinstance(original, bytes):
         original = bytesToString(original)
     haystack, pattern, to = convert(haystack, pattern, paramTypes[0])
     if isinstance(replacement, bytes):
         replacement = bytesToString(replacement)
     re = Regexer(haystack, pattern, self.errcodeBase + 0, self.name, pos)
     found = re.search(0)
     region = re.getRegion()
     beg = 0
     end = region.beg[0]
     out = ""
     if found:
         while found:
             out = out + to(haystack[beg:end]) + replacement
             beg = region.end[0]
             found = re.search(beg)
             region = re.getRegion()
             end = region.beg[0]
         if beg != len(haystack):
             out = out + to(haystack[beg:])
     else:
         out = original
     re.free()
     return out
Esempio n. 3
0
 def __call__(self, state, scope, pos, paramTypes, x):
     try:
         out_bytes = codecs.encode(x, self.codec, "strict")
         return bytesToString(out_bytes)
     except UnicodeEncodeError:
         raise PFARuntimeException("invalid string", self.errcodeBase + 0,
                                   self.name, pos)
Esempio n. 4
0
 def __call__(self, state, scope, pos, paramTypes, size, *args):
     if size <= 0:
         raise PFARuntimeException("size must be positive",
                                   self.errcodeBase + 0, self.name, pos)
     if len(args) == 0:
         return "".join(
             chr(state.rand.randint(0, 255)) for x in range(size))
     elif len(args) == 1:
         if len(args[0]) == 0:
             raise PFARuntimeException("population must be non-empty",
                                       self.errcodeBase + 3, self.name, pos)
         if isinstance(args[0], str):
             population = list(args[0])
         elif isinstance(args[0], bytes):
             population = list(bytesToString(args[0]))
         return "".join(population[state.rand.randint(0,
                                                      len(args[0]) - 1)]
                        for x in range(size))
     else:
         low, high = args
         if high <= low:
             raise PFARuntimeException("high must be greater than low",
                                       self.errcodeBase + 1, self.name, pos)
         if low < 0 or low > 255 or high < 0 or high > 256:
             raise PFARuntimeException("invalid byte", self.errcodeBase + 2,
                                       self.name, pos)
         return "".join(
             chr(state.rand.randint(low, high - 1)) for x in range(size))
Esempio n. 5
0
 def __call__(self, state, scope, pos, paramTypes, x):
     schema = avro.schema.Parse(json.dumps(paramTypes[0]))
     x = untagUnion(x, paramTypes[0])
     bytes_io = io.BytesIO()
     writer = DatumWriter(schema)
     writer.write(x, BinaryEncoder(bytes_io))
     bytes_io.flush()
     return bytesToString(bytes_io.getvalue())
Esempio n. 6
0
 def __call__(self, state, scope, pos, paramTypes, s):
     try:
         if re.match("^[A-Za-z0-9\+/]*=*$", s) is None:
             raise TypeError
         out = base64.b64decode(s)
         return bytesToString(out)
     except TypeError:
         raise PFARuntimeException("invalid base64", self.errcodeBase + 0,
                                   self.name, pos)
Esempio n. 7
0
 def __call__(self, state, scope, pos, paramTypes, x, start, end,
              replacement):
     if isinstance(replacement, str):
         replacement = stringToBytes(replacement)
     if isinstance(x, str):
         x = stringToBytes(x)
     normStart, normEnd = startEnd(len(x), start, end)
     before = x[:normStart]
     after = x[normEnd:]
     return bytesToString(before + replacement + after)
Esempio n. 8
0
    def testBase64(self):
        self.assertEqual(
            EngineConfig(
                "test", Method.MAP, AvroInt(), AvroString(), [],
                [LiteralBase64(bytesToString("hello".encode("utf-8")))], [],
                {}, None, None, {}, {}, None, None, None, {}, {}),
            jsonToAst('''{
  "name": "test",
  "input": "int",
  "output": "string",
  "action": [{"base64": "aGVsbG8="}]
}'''))
Esempio n. 9
0
def convert(haystack, pattern, paramType0):
    if paramType0 == "string":
        return haystack.encode("utf-8"), pattern.encode(
            "utf-8"), lambda x: x.decode("utf-8")
    else:
        if isinstance(haystack, bytes):
            cnvtHaystack = haystack
        else:
            cnvtHaystack = stringToBytes(haystack)
        if isinstance(pattern, bytes):
            cnvtPattern = pattern
        else:
            cnvtPattern = stringToBytes(pattern)
        return cnvtHaystack, cnvtPattern, lambda x: bytesToString(x)
Esempio n. 10
0
 def __call__(self, state, scope, pos, paramTypes, haystack, pattern,
              replacement):
     haystack, pattern, to = convert(haystack, pattern, paramTypes[0])
     if isinstance(replacement, bytes):
         replacement = bytesToString(replacement)
     re = Regexer(haystack, pattern, self.errcodeBase + 0, self.name, pos)
     found = re.search(0)
     region = re.getRegion()
     if found:
         out = to(haystack[:region.beg[0]]) + replacement + to(
             haystack[region.end[0]:])
     else:
         out = to(haystack)
     re.free()
     return out
Esempio n. 11
0
 def __call__(self, state, scope, pos, paramTypes, x, start, end):
     if isinstance(x, str):
         return x[start:end]
     else:
         return bytesToString(x[start:end])
Esempio n. 12
0
 def __call__(self, state, scope, pos, paramTypes, x):
     if isinstance(x, bytes):
         return bytesToString(x)
     return x
Esempio n. 13
0
 def testBase64(self):
     self.assertEqual(json.loads(LiteralBase64(bytesToString("hello".encode('utf-8'))).toJson(lineNumbers=False)), json.loads('''{"base64":"aGVsbG8="}'''))
     self.assertEqual(json.loads(LiteralBase64(bytesToString('Δ'.encode('utf-8'))).toJson(lineNumbers=False)), json.loads('''{"base64":"zpQ="}'''))