def test_mixed_array(self): x = pyamf.MixedArray() x.update({0:'hello', 'spam': 'eggs'}) self.assertEncoded(x, '\t\x03\tspam\x06\teggs\x01\x06\x0bhello') x = pyamf.MixedArray() x.update({0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 'a': 'a'}) self.assertEncoded(x, '\x09\x0d\x03\x61\x06\x00\x01\x04\x00\x04\x01' '\x04\x02\x04\x03\x04\x04\x04\x05')
def test_mixed_array(self): self._run([ (pyamf.MixedArray(a=1, b=2, c=3), '\x08\x00\x00\x00\x00\x00\x01a' '\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x01c\x00@\x08\x00\x00' '\x00\x00\x00\x00\x00\x01b\x00@\x00\x00\x00\x00\x00\x00\x00' '\x00\x00\t') ])
def readMixedArray(self): """ Read mixed array. @rtype: C{dict} @return: C{dict} read from the stream """ len = self.stream.read_ulong() obj = pyamf.MixedArray() self.context.addObject(obj) self._readObject(obj) ikeys = [] for key in obj.keys(): try: ikey = int(key) ikeys.append((key, ikey)) obj[ikey] = obj[key] del obj[key] except ValueError: # XXX: do we want to ignore this? pass ikeys.sort() return obj
def test_encode(self): stream = util.BufferedByteStream() encoder = amf3.Encoder(stream) x = flex.ObjectProxy(pyamf.MixedArray(a='spam', b=5)) encoder.writeElement(x) self.assertTrue(check_buffer(stream.getvalue(), ( '\n\x07;flex.messaging.io.ObjectProxy\t\x01', ('\x03a\x06\x09spam', '\x03b\x04\x05'), '\x01')))
def test_mixed_array(self): bytes = ( '\x08\x00\x00\x00\x00\x00\x01a\x00?\xf0\x00\x00\x00\x00\x00' '\x00\x00\x01c\x00@\x08\x00\x00\x00\x00\x00\x00\x00\x01b\x00@\x00' '\x00\x00\x00\x00\x00\x00\x00\x00\t') self.assertDecoded(pyamf.MixedArray(a=1, b=2, c=3), bytes) self.buf.write(bytes) self.buf.seek(0) d = self.decoder.readElement()
def test_object(self): obj = pyamf.MixedArray(spam='eggs') self.x.writeObject(obj) self.assertEqual(self.buf.getvalue(), '\t\x01\tspam\x06\teggs\x01') self.buf.truncate() # check references self.x.writeObject(obj) self.assertEqual(self.buf.getvalue(), '\t\x00') self.buf.truncate()
def test_mixed_array(self): d = pyamf.MixedArray(a=1, b=2, c=3) bytes = ('\x08\x00\x00\x00\x00', ('\x00\x01a\x00?\xf0\x00\x00\x00\x00\x00\x00', '\x00\x01c\x00@\x08\x00\x00\x00\x00\x00\x00', '\x00\x01b\x00@\x00\x00\x00\x00\x00\x00\x00'), '\x00\x00\t') self.assertEncoded(d, bytes) # test the reference self.assertEqual(self.encode(d), '\x07\x00\x00')
def test_mixed_array(self): bytes = '\x08\x00\x00\x00\x00\x00\x01a\x00?\xf0\x00\x00\x00\x00' + \ '\x00\x00\x00\x01c\x00@\x08\x00\x00\x00\x00\x00\x00\x00\x01' + \ 'b\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\t' self._run([(pyamf.MixedArray(a=1, b=2, c=3), bytes)]) self.buf.write(bytes) self.buf.seek(0) d = self.decoder.readElement() self.assertEquals(type(d.keys()[0]), str)
def test_encode(self): stream = util.BufferedByteStream() encoder = amf3.Encoder(stream) x = flex.ObjectProxy(pyamf.MixedArray(a='spam', b=5)) encoder.writeElement(x) self.assertEquals( stream.getvalue(), '\x0a\x07;flex.messaging.io.ObjectProxy\x09\x01\x03a\x06\x09spam' '\x03b\x04\x05\x01')
def test_object_proxy_mixed_array(self): self.encoder.use_proxies = True obj = pyamf.MixedArray(spam='eggs') self.x.writeObject(obj) self.assertEqual(self.buf.getvalue(), '\n\x07;flex.messaging.io.ObjectProxy\n\x0b\x01\tspam\x06\teggs\x01') self.buf.truncate() # check references self.x.writeObject(obj) self.assertEqual(self.buf.getvalue(), '\n\x00') self.buf.truncate()
def test_numerical_keys_mixed_array(self): """ Numerical keys in L{pyamf.MixedArray} must not cause a KeyError on decode. @see: #843 """ x = pyamf.MixedArray({'10': u'foobar'}) bytes = pyamf.encode(x, encoding=pyamf.AMF0) d = list(pyamf.decode(bytes, encoding=pyamf.AMF0)) self.assertEqual(d, [{10: u'foobar'}])
def readMixedArray(self): """ Read mixed array. @rtype: L{pyamf.MixedArray} """ # TODO: something with the length/strict self.stream.read_ulong() # length obj = pyamf.MixedArray() self.context.addObject(obj) attrs = self.readObjectAttributes(obj) itemlist = [] for item in attrs.items(): #print items["name"] itemlist = itemlist + [item] #obj[key] = value return itemlist
def readArray(self): """ Reads an array from the stream. @warning: There is a very specific problem with AMF3 where the first three bytes of an encoded empty C{dict} will mirror that of an encoded C{{'': 1, '2': 2}} """ size = self.readInteger(False) if size & REFERENCE_BIT == 0: return self.context.getObject(size >> 1) size >>= 1 key = self.readBytes() if key == '': # integer indexes only -> python list result = [] self.context.addObject(result) for i in range(size): result.append(self.readElement()) return result result = pyamf.MixedArray() self.context.addObject(result) while key: if isinstance(key, bytes): key = key.decode() result[key] = self.readElement() key = self.readBytes() for i in range(size): el = self.readElement() result[i] = el return result
def readMixedArray(self): """ Read mixed array. @rtype: L{pyamf.MixedArray} """ # TODO: something with the length/strict self.stream.read_ulong() # length obj = pyamf.MixedArray() self.context.addObject(obj) attrs = self.readObjectAttributes(obj) for key, value in attrs.items(): try: key = int(key) except ValueError: pass obj[key] = value return obj
def readMixedArray(self): """ Read mixed array. @rtype: L{pyamf.MixedArray} """ # TODO: something with the length/strict self.stream.read_ulong() # length obj = pyamf.MixedArray() self.context.addObject(obj) attrs = self.readObjectAttributes(obj) for key in list(attrs.keys()): okey = key try: okey = int(key) except ValueError: pass obj[okey] = attrs[key] return obj
def test_encode(self): x = flex.ObjectProxy(pyamf.MixedArray(a='spam', b=5)) self.assertEncoded(x, '\n\x07;flex.messaging.io.ObjectProxy\n\x0b\x01', ('\x03a\x06\tspam', '\x03b\x04\x05', '\x01'))
# create a typed object class Foo: class __amf__: dynamic = False static = ('bar', ) pyamf.register_class(Foo, 'Foo') foo = Foo() foo.bar = 'baz' # create an associative array (ECMA Array) ecmaArray = pyamf.MixedArray({ 'a': 'b', 'c': 'd', }) #----------------------------------------------- # AMF0 all data types #----------------------------------------------- envelope = Envelope(amfVersion=0) message0 = Response({ 'integer': 42, 'dbl': 90.01, 'tru': True, 'fls': False, 'str': 'sencha', 'obj': {
def __writeamf__(self, output): output.writeObject(pyamf.MixedArray(self), use_references=False)
def x(): y = pyamf.MixedArray() y.update({'': 1, 0: 1}) self.encode(y)