Add the 'bool' type and its values 'False' and 'True', as described in
PEP 285. Everything described in the PEP is here, and there is even
some documentation. I had to fix 12 unit tests; all but one of these
were printing Boolean outcomes that changed from 0/1 to False/True.
(The exception is test_unicode.py, which did a type(x) == type(y)
style comparison. I could've fixed that with a single line using
issubtype(x, type(y)), but instead chose to be explicit about those
places where a bool is expected.
Still to do: perhaps more documentation; change standard library
modules to return False/True from predicates.
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 21ea215..96ee5c1 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -101,6 +101,9 @@
EMPTY_TUPLE = ')'
SETITEMS = 'u'
BINFLOAT = 'G'
+TRUE = 'Z'
+FALSE = 'z'
+
__all__.extend([x for x in dir() if re.match("[A-Z][A-Z0-9_]+$",x)])
del x
@@ -256,6 +259,13 @@
self.write(NONE)
dispatch[NoneType] = save_none
+ def save_bool(self, object):
+ if object:
+ self.write(TRUE)
+ else:
+ self.write(FALSE)
+ dispatch[bool] = save_bool
+
def save_int(self, object):
if self.bin:
# If the int is small enough to fit in a signed 4-byte 2's-comp
@@ -629,6 +639,14 @@
self.append(None)
dispatch[NONE] = load_none
+ def load_false(self):
+ self.append(False)
+ dispatch[FALSE] = load_false
+
+ def load_true(self):
+ self.append(True)
+ dispatch[TRUE] = load_true
+
def load_int(self):
data = self.readline()
try: