File: no_test_pickle_extra.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (40 lines) | stat: -rw-r--r-- 1,039 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""
Disabled for now.  This should run at app-level, too.
"""
import pickle

class Picklable(object):
    def __init__(self, a=555):
        self.a = a
    def __eq__(self, other):
        return self.a == other.a
    def __str__(self):
        return '%s(%r)' % (self.__class__.__name__, self.a)
    __repr__ = __str__

class PicklableSpecial2(Picklable):
    def __reduce__(self):
        return self.__class__, (self.a,)

class PicklableSpecial3(Picklable):
    def __reduce__(self):
        return self.__class__, (), self.a
    def __setstate__(self, a):
        self.a = a

class PicklableSpecial4(Picklable):
    def __reduce_ex__(self, proto):
        return self.__class__, (), self.a
    def __setstate__(self, a):
        self.a = a

def _pickle_some(x):
    for proto in range(pickle.HIGHEST_PROTOCOL + 1):
        s = pickle.dumps(x, proto)
        y = pickle.loads(s)
        assert x == y

_pickle_some(Picklable(5))
_pickle_some(PicklableSpecial2(66))
_pickle_some(PicklableSpecial3(7))
_pickle_some(PicklableSpecial4(17))