Ejemplo n.º 1
0
    def test_pickle_dumps_fail(self):

        class A(object):
            def __getstate__(self):
                raise Exception

        with self.assertRaises(PicklingError):
            pickle_dumps(A())
Ejemplo n.º 2
0
    def test_protocols(self):
        pickle_dumps(42, 0)
        pickle_dumps(42, 1)
        pickle_dumps(42, 2)

        with self.assertRaises(ValueError):
            pickle_dumps(42, -1)

        with self.assertRaises(ValueError):
            pickle_dumps(42, 3)
Ejemplo n.º 3
0
    def test_switch_class(self):
        def lookup_func(base, module, name):
            if name == "A":
                return B
            return base(module, name)

        value = pickle_loads(pickle_dumps(A()), lookup_func)
        assert isinstance(value, B)
Ejemplo n.º 4
0
    def test_switch_class(self):

        def lookup_func(base, module, name):
            if name == "A":
                return B
            return base(module, name)

        value = pickle_loads(pickle_dumps(A()), lookup_func)
        assert isinstance(value, B)
    def test_load_audio_files_missing_class(self):
        for protocol in [0, 1, 2]:
            data = pickle_dumps(self.instances, protocol)

            items = load_audio_files(data)
            self.assertEqual(len(items), len(formats.types))
            assert all(isinstance(i, AudioFile) for i in items)

            broken = data.replace(b"SPCFile", b"FooFile")
            items = load_audio_files(broken)
            self.assertEqual(len(items), len(formats.types) - 1)
            assert all(isinstance(i, AudioFile) for i in items)

            broken = data.replace(b"formats.spc", b"formats.foo")
            items = load_audio_files(broken)
            self.assertEqual(len(items), len(formats.types) - 1)
            assert all(isinstance(i, AudioFile) for i in items)
Ejemplo n.º 6
0
    def test_load_audio_files_missing_class(self):
        for protocol in [0, 1, 2]:
            data = pickle_dumps(self.instances, protocol)

            items = load_audio_files(data)
            self.assertEqual(len(items), len(formats.types))
            assert all(isinstance(i, AudioFile) for i in items)

            broken = data.replace(b"SPCFile", b"FooFile")
            items = load_audio_files(broken)
            self.assertEqual(len(items), len(formats.types) - 1)
            assert all(isinstance(i, AudioFile) for i in items)

            broken = data.replace(b"formats.spc", b"formats.foo")
            items = load_audio_files(broken)
            self.assertEqual(len(items), len(formats.types) - 1)
            assert all(isinstance(i, AudioFile) for i in items)
Ejemplo n.º 7
0
def dump_audio_files(item_list, process=True):
    """Pickles a list of AudioFiles

    Returns:
        bytes
    Raises:
        SerializationError
    """

    assert isinstance(item_list, list)
    assert not item_list or isinstance(item_list[0], AudioFile)

    if process:
        item_list = _py3_to_py2(item_list)

    try:
        return pickle_dumps(item_list, 2)
    except pickle.PicklingError as e:
        raise SerializationError(e)
Ejemplo n.º 8
0
def dump_audio_files(item_list, process=True):
    """Pickles a list of AudioFiles

    Returns:
        bytes
    Raises:
        SerializationError
    """

    assert isinstance(item_list, list)
    assert not item_list or isinstance(item_list[0], AudioFile)

    if PY3 and process:
        item_list = _py3_to_py2(item_list)

    try:
        return pickle_dumps(item_list, 2)
    except pickle.PicklingError as e:
        raise SerializationError(e)
    def test_sanitized_py3(self):
        i = AudioFile.__new__(list(formats.types)[0])
        # this is something that old py2 versions could pickle
        dict.__init__(
            i, {
                b"bytes": b"bytes",
                u"unicode": u"unicode",
                b"~filename": b"somefile",
                u"~mountpoint": u"somemount",
                u"int": 42,
                b"float": 1.25,
            })
        data = pickle_dumps([i], 1)
        items = load_audio_files(data, process=True)
        i = items[0]

        assert i["bytes"] == "bytes"
        assert i["unicode"] == "unicode"
        assert isinstance(i["~filename"], fsnative)
        assert isinstance(i["~mountpoint"], fsnative)
        assert i["int"] == 42
        assert i["float"] == 1.25
Ejemplo n.º 10
0
    def test_sanitized_py3(self):
        i = AudioFile.__new__(list(formats.types)[0])
        # this is something that old py2 versions could pickle
        dict.__init__(i, {
            b"bytes": b"bytes",
            u"unicode": u"unicode",
            b"~filename": b"somefile",
            u"~mountpoint": u"somemount",
            u"int": 42,
            b"float": 1.25,
        })
        data = pickle_dumps([i], 1)
        items = load_audio_files(data, process=True)
        i = items[0]

        if not PY3:
            return

        assert i["bytes"] == "bytes"
        assert i["unicode"] == "unicode"
        assert isinstance(i["~filename"], fsnative)
        assert isinstance(i["~mountpoint"], fsnative)
        assert i["int"] == 42
        assert i["float"] == 1.25
Ejemplo n.º 11
0
 def test_load_audio_files(self):
     for protocol in [0, 1, 2]:
         data = pickle_dumps(self.instances, protocol)
         items = load_audio_files(data)
         assert len(items) == len(formats.types)
         assert all(isinstance(i, AudioFile) for i in items)
Ejemplo n.º 12
0
 def test_unpickle_random_class(self):
     for protocol in [0, 1, 2]:
         data = pickle_dumps([42], protocol)
         with self.assertRaises(SerializationError):
             load_audio_files(data)
Ejemplo n.º 13
0
 def test_pickle_dumps(self):
     v = [u"foo", b"bar", 42]
     for protocol in [0, 1, 2]:
         assert pickle_loads(pickle_dumps(v)) == v
Ejemplo n.º 14
0
    def test_pickle_load(self):
        data = {b"foo": u"bar", u"quux": b"baz"}

        for protocol in [0, 1, 2]:
            assert pickle_loads(pickle_dumps(data)) == data
            assert pickle_load(BytesIO(pickle_dumps(data))) == data
Ejemplo n.º 15
0
 def test_pickle_dumps(self):
     v = [u"foo", b"bar", 42]
     for protocol in [0, 1, 2]:
         assert pickle_loads(pickle_dumps(v)) == v
Ejemplo n.º 16
0
    def test_pickle_load(self):
        data = {b"foo": u"bar", u"quux": b"baz"}

        for protocol in [0, 1, 2]:
            assert pickle_loads(pickle_dumps(data)) == data
            assert pickle_load(cBytesIO(pickle_dumps(data))) == data
Ejemplo n.º 17
0
 def test_load_audio_files(self):
     for protocol in [0, 1, 2]:
         data = pickle_dumps(self.instances, protocol)
         items = load_audio_files(data)
         assert len(items) == len(formats.types)
         assert all(isinstance(i, AudioFile) for i in items)
Ejemplo n.º 18
0
 def test_unpickle_random_class(self):
     for protocol in [0, 1, 2]:
         data = pickle_dumps([42], protocol)
         with self.assertRaises(SerializationError):
             load_audio_files(data)