unpickle 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -5
- data/lib/unpickle.rb +12 -11
- data/test/test_unpickle.rb +2 -2
- metadata +1 -1
data/README.md
CHANGED
@@ -7,9 +7,9 @@ This is a very limited tool to unpickle python 'pickle' objects.
|
|
7
7
|
require 'unpickle'
|
8
8
|
|
9
9
|
fh = File.open('some.pickle')
|
10
|
-
o =
|
10
|
+
o = Unpickle.loads(fh.read)
|
11
11
|
|
12
|
-
|
12
|
+
loads() will raise Unpickle::UnpickleException if it doesn't support an
|
13
13
|
opcode in the picklestream, or encounters some kind of problem or invalid
|
14
14
|
sequence.
|
15
15
|
|
@@ -28,9 +28,6 @@ None will be returned as nil.
|
|
28
28
|
|
29
29
|
* Support more of protocol 0.
|
30
30
|
* Support newer protocols.
|
31
|
-
* Test object identity mapping.
|
32
|
-
* Package as a gem
|
33
|
-
* fix namespace.
|
34
31
|
|
35
32
|
# Author
|
36
33
|
|
data/lib/unpickle.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# baby-unpickler to handle limited protocol 0 crap.
|
4
|
-
#
|
5
|
-
# vim:et sts=4 sw=4 ts=8:
|
1
|
+
# Library to handle a limited subset of python objects
|
2
|
+
# picked using protocol 0.
|
6
3
|
#
|
4
|
+
# Author:: Chris Collins (mailto:kuroneko-rubygems@sysadninjas.net)
|
5
|
+
# Copyright:: Copyright (c) 2012 Chris Collins, Anchor Systems Pty Ltd
|
7
6
|
module Unpickle
|
7
|
+
# UnpickleException is the superclass for all exceptions thrown by
|
8
|
+
# the unpickler.
|
9
|
+
#
|
10
|
+
# Currently this gets thrown directly, but future versions may
|
11
|
+
# subclass this to provide better granularity in error reporting.
|
8
12
|
class UnpickleException < RuntimeError
|
9
13
|
end
|
10
14
|
|
11
|
-
class Mark
|
15
|
+
class Mark #:nodoc:
|
12
16
|
end
|
13
17
|
|
14
|
-
class PickleMachine
|
18
|
+
class PickleMachine #:nodoc: all
|
15
19
|
def initialize(input)
|
16
20
|
@stack = []
|
17
21
|
@memo = {}
|
@@ -201,13 +205,10 @@ module Unpickle
|
|
201
205
|
# (dicts, lists, tuples, strings, ints, bools, None) and only with
|
202
206
|
# protocol 0.
|
203
207
|
#
|
204
|
-
# Object uniqueness should obey the python semantics but is largely
|
205
|
-
# untested.
|
206
|
-
#
|
207
208
|
# Raises an UnpickleException if anything goes wrong.
|
208
209
|
def Unpickle.loads(str)
|
209
210
|
p = Unpickle::PickleMachine.new(str)
|
210
211
|
return p.unpickle
|
211
212
|
end
|
212
213
|
end
|
213
|
-
|
214
|
+
# vim:et sts=4 sw=4 ts=8:
|
data/test/test_unpickle.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
# tests for
|
1
|
+
# tests for lib/unpickle.rb
|
2
2
|
#
|
3
|
-
# vim:et sts=4 sw=4 ts=8:
|
4
3
|
require 'test/unit'
|
5
4
|
require 'unpickle'
|
6
5
|
|
@@ -97,3 +96,4 @@ class UnpickleTests < Test::Unit::TestCase
|
|
97
96
|
assert(o.object_id == o['b']['a'].object_id)
|
98
97
|
end
|
99
98
|
end
|
99
|
+
# vim:et sts=4 sw=4 ts=8:
|