summaryrefslogtreecommitdiffstats
path: root/Lib/pickle.py
Commit message (Collapse)AuthorAgeFilesLines
...
* Fixed odd whitespace after "if", which I believe I introduced long ago.Tim Peters2003-01-281-1/+1
|
* save_int(): Fixed two new off-by-1 glitches.Tim Peters2003-01-281-2/+2
|
* Add a comment explaining that struct.pack() beats marshal.dumps(), butGuido van Rossum2003-01-281-0/+3
| | | | | marshal.loads() beats struct.unpack()! Possibly because the latter creates a one-tuple. :-(
* Got rid of mdumps; I timed it, and struct.pack("<i", x) is more thanGuido van Rossum2003-01-281-30/+26
| | | | | 40% faster than marshal.dumps(x)[1:]! (That's not counting the module attribute lookups, which can be avoided in either case.)
* save_tuple(): Minor rewriting, and added a comment about the subtletyTim Peters2003-01-281-8/+13
| | | | created by recursive tuples.
* load_appends(): replaced .append() loop with an .extend().Tim Peters2003-01-281-3/+1
|
* Comments.Tim Peters2003-01-281-1/+9
|
* save_dict(): Untangled most of the bin-vs-not-bin logic. Also usedTim Peters2003-01-281-15/+14
| | | | | iteritems() instead of materializing a (possibly giant) list of the items.
* save_list(): Rewrote, to untangle the proto 0 from the proto 1 cases.Tim Peters2003-01-281-15/+17
| | | | The code is much easier to follow now, and I bet it's faster too.
* save_list(): removed unused local "d".Tim Peters2003-01-281-2/+0
|
* save_list(): removed unused local "memo".Tim Peters2003-01-281-1/+0
|
* save_pers(): Switched the order of cases, to get rid of a "not", and toTim Peters2003-01-281-3/+3
| | | | | make the bin-vs-not-bin order consistent with what other routines try to do (they almost all handle the bin case first).
* Several routines appeared to inline the guts of memoize(), possibly forTim Peters2003-01-281-12/+9
| | | | | | some notion of low-level efficiency. Undid that, but left one routine alone: save_inst() claims it has a reason for not using memoize(). I don't understand that comment, so added an XXX comment there.
* save(): Fiddled the control flow to put the normal case where itTim Peters2003-01-281-44/+47
| | | | | belongs. This is a much smaller change than it may appear: the bulk of the function merely got unindented by one level.
* Added XXX about save()'s special-casing of tuples -- I don't get it.Tim Peters2003-01-281-0/+1
|
* save_bool(): simplified.Tim Peters2003-01-281-4/+1
|
* Repaired grammar in new comment.Tim Peters2003-01-281-1/+1
|
* clear_memo(): Repaired grammar in docstring.Tim Peters2003-01-281-3/+3
|
* Added one-line comments to the proto 2 opcodes.Tim Peters2003-01-281-14/+14
|
* Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,Tim Peters2003-01-281-7/+6
| | | | | | | | | | | | | | | | | | | then the embedded argument consumes at least 256 bytes. The difference between a 3-byte prefix (LONG2 + 2 bytes) and a 5-byte prefix (LONG4 + 4 bytes) is at worst less than 1%. Note that binary strings and binary Unicode strings also have only "size is 1 byte, or size is 4 bytes?" flavors, and I expect for the same reason. The only place a 2-byte thingie was used was in BININT2, where the 2 bytes make up the *entire* embedded argument (and now EXT2 also does this); that's a large savings over 4 bytes, because the total opcode+argument size is so small in the BININT2/EXT2 case. Removed the TAKEN_FROM_ARGUMENT "number of bytes" code, and bifurcated it into TAKEN_FROM_ARGUMENT1 and TAKEN_FROM_ARGUMENT4. Now there's enough info in ArgumentDescriptor objects to deduce the # of bytes consumed by each opcode. Rearranged the order in which proto2 opcodes are listed in pickle.py.
* Begin the change from 'binary vs. text mode' to 'protocol 0, 1, 2'.Guido van Rossum2003-01-271-11/+24
| | | | The protocol now defaults to 1. Protocol 2 is still unimplemented.
* Begin documenting protocol 2.Guido van Rossum2003-01-271-0/+16
|
* Added some comments.Tim Peters2003-01-271-0/+2
|
* memoize(): Reworded the docs to try to disentangle the Pickler's memoTim Peters2003-01-271-7/+11
| | | | dict from the Unpickler's memo (which is a different beast!).
* Using marshal functions to pack & unpack 1-byte ints is an obscure &Tim Peters2003-01-271-11/+10
| | | | expensive way to spell chr() and ord().
* Added a brief comment to each pickle opcode declaration.Tim Peters2003-01-271-45/+50
|
* Raise PicklingError when __reduce__() fails, andJeremy Hylton2003-01-241-32/+30
| | | | | | | | | | | add memoize() helper function to update the memo. The first element of the tuple returned by __reduce__() must be a callable. If it isn't the Unpickler will raise an error. Catch this error in the pickler and raise the error there. The memoize() helper also has a comment explaining how the memo works. So methods can't use memoize() because the write funny codes.
* Remove inst_persistent_id() WANNI (we ain't never needed it).Jeremy Hylton2002-11-131-15/+6
| | | | Add some simple tests of the persistence hooks.
* Fiddle comments and variable names in whichmodule().Jeremy Hylton2002-09-191-11/+10
|
* whichmodule() should skip dummy package entries in sys.modules.Jeremy Hylton2002-09-191-0/+2
| | | | | | | | This fixes the charming, but unhelpful error message for >>> pickle.dumps(type.__new__) Can't pickle <built-in method __new__ of type object at 0x812a440>: it's not the same object as datetime.math.__new__ Bugfix candidate.
* Patch #505705: Remove eval in pickle and cPickle.Martin v. Löwis2002-08-141-3/+10
|
* Given the persistent id code a shot at a class before calling save_global().Jeremy Hylton2002-07-161-5/+5
| | | | | Some persistent picklers (well, probably, the *only* persistent pickler) would like to pickle some classes in a special way.
* Code modernization. Replace v=s[i]; del s[i] with single lookup v=s.pop(i)Raymond Hettinger2002-06-301-14/+6
|
* SF 563203. Replaced 'has_key()' with 'in'.Raymond Hettinger2002-06-011-4/+4
|
* Remove comment about inheritance, look one line upNeal Norwitz2002-05-301-5/+1
|
* Patch 560023 adding docstrings. 2.2 Candidate (after verifying modules were ↵Raymond Hettinger2002-05-291-3/+69
| | | | not updated after 2.2).
* Whitespace normalization.Tim Peters2002-05-231-1/+1
|
* Patch 533291. Deprecate None return form of __reduce__.Raymond Hettinger2002-05-211-0/+4
|
* Add Pickler.clear_memo() so the pickle and cPickle modules are more similar.Fred Drake2002-05-011-0/+3
|
* Implement an idea by Paul Rubin:Guido van Rossum2002-04-051-14/+12
| | | | | | | | Change pickling format for bools to use a backwards compatible encoding. This means you can pickle True or False on Python 2.3 and Python 2.2 or before will read it back as 1 or 0. The code used for pickling bools before would create pickles that could not be read in previous Python versions.
* Add the 'bool' type and its values 'False' and 'True', as described inGuido van Rossum2002-04-031-0/+18
| | | | | | | | | | | | | 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.
* Fix for SF 502085.Guido van Rossum2002-03-261-1/+5
| | | | | | Don't die when issubclass(t, TypeType) fails. Bugfix candidate (but I think it's too late for 2.2.1).
* SF #515018, delete global variable that was apparently used onlyNeal Norwitz2002-02-111-0/+1
| | | | in a list comprehension.
* Pickler.save(): Fix for SF bug #494904: Cannot pickle a class with aGuido van Rossum2001-12-191-0/+4
| | | | | | | | | | | metaclass, reported by Dan Parisien. Objects that are instances of custom metaclasses, i.e. whose class is a subclass of 'type', should be pickled the same as new-style classes (objects whose class is 'type'). This can't be done through a dispatch table entry, and the __reduce__ trick doesn't work for these, since it finds the unbound __reduce__ for instances of the class (inherited from 'object'). So check explicitly using issubclass().
* Two changes:Barry Warsaw2001-11-151-8/+6
| | | | | | | | | | | | | | load_inst(): Implement the security hook that cPickle already had. When unpickling callables which are not classes, we look to see if the object has an attribute __safe_for_unpickling__. If this exists and has a true value, then we can call it to create the unpickled object. Otherwise we raise an UnpicklingError. find_class(): We no longer mask ImportError, KeyError, and AttributeError by transforming them into SystemError. The latter is definitely not the right thing to do, so we let the former three exceptions simply propagate up if they occur, i.e. we remove the try/except!
* A better new, unique objectJeremy Hylton2001-11-091-1/+1
|
* Use cStringIO when available.Jeremy Hylton2001-10-151-36/+4
| | | | Remove test code. It's available in Lib/test/picklertester.py.
* Make these modules work when Python is compiled without Unicode support.Guido van Rossum2001-09-211-4/+10
|
* pickle.py, load_int(): Match cPickle's just-repaired ability to unpickleTim Peters2001-08-281-1/+5
| | | | | | | | 64-bit INTs on 32-bit boxes (where they become longs). Also exploit that int(str) and long(str) will ignore a trailing newline (saves creating a new string at the Python level). pickletester.py: Simulate reading a pickle produced by a 64-bit box.
* Address SF #451547. The approach is a bit draconian: any object thatGuido van Rossum2001-08-171-0/+14
| | | | | | | | | | is pickled as a global must now exist by the name under which it is pickled, otherwise the pickling fails. Previously, such things would fail on unpickling, or unpickle as the wrong global object. I'm hoping that this won't break existing code that is playing tricks with this. I need a volunteer to do this for cPickle too.