Exemple #1
0
    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')
Exemple #2
0
 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')
     ])
Exemple #3
0
    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
Exemple #4
0
    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')))
Exemple #5
0
    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()
Exemple #6
0
    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()
Exemple #7
0
    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')
Exemple #8
0
    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)
Exemple #9
0
    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')
Exemple #10
0
    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()
Exemple #11
0
    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'}])
Exemple #12
0
    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
Exemple #13
0
    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
Exemple #14
0
    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
Exemple #15
0
    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'))
Exemple #17
0
# 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': {
Exemple #18
0
 def __writeamf__(self, output):
     output.writeObject(pyamf.MixedArray(self), use_references=False)
Exemple #19
0
 def x():
     y = pyamf.MixedArray()
     y.update({'': 1, 0: 1})
     self.encode(y)