python-pickle 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +3 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +14 -0
- data/Gemfile +15 -0
- data/LICENSE.txt +20 -0
- data/README.md +149 -0
- data/Rakefile +13 -0
- data/gemspec.yml +25 -0
- data/lib/python/pickle/byte_array.rb +40 -0
- data/lib/python/pickle/deserializer.rb +595 -0
- data/lib/python/pickle/exceptions.rb +12 -0
- data/lib/python/pickle/instruction.rb +52 -0
- data/lib/python/pickle/instructions/add_items.rb +26 -0
- data/lib/python/pickle/instructions/append.rb +24 -0
- data/lib/python/pickle/instructions/appends.rb +26 -0
- data/lib/python/pickle/instructions/bin_bytes.rb +32 -0
- data/lib/python/pickle/instructions/bin_bytes8.rb +32 -0
- data/lib/python/pickle/instructions/bin_float.rb +29 -0
- data/lib/python/pickle/instructions/bin_get.rb +27 -0
- data/lib/python/pickle/instructions/bin_int1.rb +29 -0
- data/lib/python/pickle/instructions/bin_put.rb +29 -0
- data/lib/python/pickle/instructions/bin_string.rb +32 -0
- data/lib/python/pickle/instructions/bin_unicode.rb +32 -0
- data/lib/python/pickle/instructions/bin_unicode8.rb +32 -0
- data/lib/python/pickle/instructions/build.rb +24 -0
- data/lib/python/pickle/instructions/byte_array8.rb +32 -0
- data/lib/python/pickle/instructions/dict.rb +17 -0
- data/lib/python/pickle/instructions/dup.rb +24 -0
- data/lib/python/pickle/instructions/empty_dict.rb +26 -0
- data/lib/python/pickle/instructions/empty_list.rb +26 -0
- data/lib/python/pickle/instructions/empty_set.rb +26 -0
- data/lib/python/pickle/instructions/empty_tuple.rb +26 -0
- data/lib/python/pickle/instructions/ext1.rb +29 -0
- data/lib/python/pickle/instructions/ext2.rb +29 -0
- data/lib/python/pickle/instructions/ext4.rb +29 -0
- data/lib/python/pickle/instructions/float.rb +24 -0
- data/lib/python/pickle/instructions/frame.rb +29 -0
- data/lib/python/pickle/instructions/frozen_set.rb +26 -0
- data/lib/python/pickle/instructions/get.rb +27 -0
- data/lib/python/pickle/instructions/global.rb +62 -0
- data/lib/python/pickle/instructions/has_length_and_value.rb +58 -0
- data/lib/python/pickle/instructions/has_value.rb +50 -0
- data/lib/python/pickle/instructions/int.rb +24 -0
- data/lib/python/pickle/instructions/list.rb +24 -0
- data/lib/python/pickle/instructions/long.rb +24 -0
- data/lib/python/pickle/instructions/long1.rb +32 -0
- data/lib/python/pickle/instructions/long4.rb +32 -0
- data/lib/python/pickle/instructions/long_bin_get.rb +27 -0
- data/lib/python/pickle/instructions/mark.rb +24 -0
- data/lib/python/pickle/instructions/memoize.rb +26 -0
- data/lib/python/pickle/instructions/new_false.rb +24 -0
- data/lib/python/pickle/instructions/new_obj.rb +26 -0
- data/lib/python/pickle/instructions/new_obj_ex.rb +26 -0
- data/lib/python/pickle/instructions/new_true.rb +24 -0
- data/lib/python/pickle/instructions/next_buffer.rb +26 -0
- data/lib/python/pickle/instructions/none.rb +24 -0
- data/lib/python/pickle/instructions/pop.rb +24 -0
- data/lib/python/pickle/instructions/pop_mark.rb +24 -0
- data/lib/python/pickle/instructions/proto.rb +29 -0
- data/lib/python/pickle/instructions/put.rb +24 -0
- data/lib/python/pickle/instructions/readonly_buffer.rb +26 -0
- data/lib/python/pickle/instructions/reduce.rb +24 -0
- data/lib/python/pickle/instructions/set_item.rb +24 -0
- data/lib/python/pickle/instructions/set_items.rb +26 -0
- data/lib/python/pickle/instructions/short_bin_bytes.rb +32 -0
- data/lib/python/pickle/instructions/short_bin_string.rb +32 -0
- data/lib/python/pickle/instructions/short_bin_unicode.rb +32 -0
- data/lib/python/pickle/instructions/stack_global.rb +26 -0
- data/lib/python/pickle/instructions/stop.rb +24 -0
- data/lib/python/pickle/instructions/string.rb +24 -0
- data/lib/python/pickle/instructions/tuple.rb +24 -0
- data/lib/python/pickle/instructions/tuple1.rb +24 -0
- data/lib/python/pickle/instructions/tuple2.rb +24 -0
- data/lib/python/pickle/instructions/tuple3.rb +24 -0
- data/lib/python/pickle/protocol.rb +56 -0
- data/lib/python/pickle/protocol0.rb +399 -0
- data/lib/python/pickle/protocol1.rb +183 -0
- data/lib/python/pickle/protocol2.rb +229 -0
- data/lib/python/pickle/protocol3.rb +163 -0
- data/lib/python/pickle/protocol4.rb +285 -0
- data/lib/python/pickle/protocol5.rb +218 -0
- data/lib/python/pickle/py_class.rb +75 -0
- data/lib/python/pickle/py_object.rb +141 -0
- data/lib/python/pickle/tuple.rb +19 -0
- data/lib/python/pickle/version.rb +6 -0
- data/lib/python/pickle.rb +226 -0
- data/python-pickle.gemspec +62 -0
- data/spec/byte_array_spec.rb +54 -0
- data/spec/deserializer_spec.rb +1201 -0
- data/spec/fixtures/ascii_str_v3.pkl +0 -0
- data/spec/fixtures/ascii_str_v4.pkl +0 -0
- data/spec/fixtures/ascii_str_v5.pkl +0 -0
- data/spec/fixtures/bin_str_v0.pkl +3 -0
- data/spec/fixtures/bin_str_v1.pkl +0 -0
- data/spec/fixtures/bin_str_v2.pkl +0 -0
- data/spec/fixtures/bin_str_v3.pkl +0 -0
- data/spec/fixtures/bin_str_v4.pkl +0 -0
- data/spec/fixtures/bin_str_v5.pkl +0 -0
- data/spec/fixtures/bytearray_v0.pkl +10 -0
- data/spec/fixtures/bytearray_v1.pkl +0 -0
- data/spec/fixtures/bytearray_v2.pkl +0 -0
- data/spec/fixtures/bytearray_v3.pkl +0 -0
- data/spec/fixtures/bytearray_v4.pkl +0 -0
- data/spec/fixtures/bytearray_v5.pkl +0 -0
- data/spec/fixtures/class_v0.pkl +4 -0
- data/spec/fixtures/class_v1.pkl +0 -0
- data/spec/fixtures/class_v2.pkl +0 -0
- data/spec/fixtures/class_v3.pkl +0 -0
- data/spec/fixtures/class_v4.pkl +0 -0
- data/spec/fixtures/class_v5.pkl +0 -0
- data/spec/fixtures/dict_v0.pkl +6 -0
- data/spec/fixtures/dict_v1.pkl +0 -0
- data/spec/fixtures/dict_v2.pkl +0 -0
- data/spec/fixtures/dict_v3.pkl +0 -0
- data/spec/fixtures/dict_v4.pkl +0 -0
- data/spec/fixtures/dict_v5.pkl +0 -0
- data/spec/fixtures/escaped_str_v0.pkl +3 -0
- data/spec/fixtures/escaped_str_v1.pkl +0 -0
- data/spec/fixtures/escaped_str_v2.pkl +0 -0
- data/spec/fixtures/false_v0.pkl +2 -0
- data/spec/fixtures/false_v1.pkl +2 -0
- data/spec/fixtures/false_v2.pkl +1 -0
- data/spec/fixtures/false_v3.pkl +1 -0
- data/spec/fixtures/false_v4.pkl +1 -0
- data/spec/fixtures/false_v5.pkl +1 -0
- data/spec/fixtures/float_v0.pkl +2 -0
- data/spec/fixtures/float_v1.pkl +1 -0
- data/spec/fixtures/float_v2.pkl +1 -0
- data/spec/fixtures/float_v3.pkl +1 -0
- data/spec/fixtures/float_v4.pkl +0 -0
- data/spec/fixtures/float_v5.pkl +0 -0
- data/spec/fixtures/function_v0.pkl +4 -0
- data/spec/fixtures/function_v1.pkl +0 -0
- data/spec/fixtures/function_v2.pkl +0 -0
- data/spec/fixtures/function_v3.pkl +0 -0
- data/spec/fixtures/function_v4.pkl +0 -0
- data/spec/fixtures/function_v5.pkl +0 -0
- data/spec/fixtures/hex_str_v0.pkl +3 -0
- data/spec/fixtures/hex_str_v1.pkl +0 -0
- data/spec/fixtures/hex_str_v2.pkl +0 -0
- data/spec/fixtures/int_v0.pkl +2 -0
- data/spec/fixtures/int_v1.pkl +1 -0
- data/spec/fixtures/int_v2.pkl +1 -0
- data/spec/fixtures/int_v3.pkl +1 -0
- data/spec/fixtures/int_v4.pkl +1 -0
- data/spec/fixtures/int_v5.pkl +1 -0
- data/spec/fixtures/list_v0.pkl +7 -0
- data/spec/fixtures/list_v1.pkl +0 -0
- data/spec/fixtures/list_v2.pkl +0 -0
- data/spec/fixtures/list_v3.pkl +0 -0
- data/spec/fixtures/list_v4.pkl +0 -0
- data/spec/fixtures/list_v5.pkl +0 -0
- data/spec/fixtures/long_v0.pkl +2 -0
- data/spec/fixtures/long_v1.pkl +2 -0
- data/spec/fixtures/long_v2.pkl +0 -0
- data/spec/fixtures/long_v3.pkl +0 -0
- data/spec/fixtures/long_v4.pkl +0 -0
- data/spec/fixtures/long_v5.pkl +0 -0
- data/spec/fixtures/nested_dict_v0.pkl +12 -0
- data/spec/fixtures/nested_dict_v1.pkl +0 -0
- data/spec/fixtures/nested_dict_v2.pkl +0 -0
- data/spec/fixtures/nested_dict_v3.pkl +0 -0
- data/spec/fixtures/nested_dict_v4.pkl +0 -0
- data/spec/fixtures/nested_dict_v5.pkl +0 -0
- data/spec/fixtures/nested_list_v0.pkl +9 -0
- data/spec/fixtures/nested_list_v1.pkl +0 -0
- data/spec/fixtures/nested_list_v2.pkl +0 -0
- data/spec/fixtures/nested_list_v3.pkl +0 -0
- data/spec/fixtures/nested_list_v4.pkl +0 -0
- data/spec/fixtures/nested_list_v5.pkl +0 -0
- data/spec/fixtures/none_v0.pkl +1 -0
- data/spec/fixtures/none_v1.pkl +1 -0
- data/spec/fixtures/none_v2.pkl +1 -0
- data/spec/fixtures/none_v3.pkl +1 -0
- data/spec/fixtures/none_v4.pkl +1 -0
- data/spec/fixtures/none_v5.pkl +1 -0
- data/spec/fixtures/object_v0.pkl +19 -0
- data/spec/fixtures/object_v1.pkl +0 -0
- data/spec/fixtures/object_v2.pkl +0 -0
- data/spec/fixtures/object_v3.pkl +0 -0
- data/spec/fixtures/object_v4.pkl +0 -0
- data/spec/fixtures/object_v5.pkl +0 -0
- data/spec/fixtures/str_v0.pkl +3 -0
- data/spec/fixtures/str_v1.pkl +0 -0
- data/spec/fixtures/str_v2.pkl +0 -0
- data/spec/fixtures/str_v3.pkl +0 -0
- data/spec/fixtures/str_v4.pkl +0 -0
- data/spec/fixtures/str_v5.pkl +0 -0
- data/spec/fixtures/true_v0.pkl +2 -0
- data/spec/fixtures/true_v1.pkl +2 -0
- data/spec/fixtures/true_v2.pkl +1 -0
- data/spec/fixtures/true_v3.pkl +1 -0
- data/spec/fixtures/true_v4.pkl +1 -0
- data/spec/fixtures/true_v5.pkl +1 -0
- data/spec/fixtures/unicode_str_v0.pkl +3 -0
- data/spec/fixtures/unicode_str_v1.pkl +0 -0
- data/spec/fixtures/unicode_str_v2.pkl +0 -0
- data/spec/fixtures/unicode_str_v3.pkl +0 -0
- data/spec/fixtures/unicode_str_v4.pkl +0 -0
- data/spec/fixtures/unicode_str_v5.pkl +0 -0
- data/spec/generate_pickles2.py +41 -0
- data/spec/generate_pickles3.py +40 -0
- data/spec/integration/load/protocol0_spec.rb +258 -0
- data/spec/integration/load/protocol1_spec.rb +258 -0
- data/spec/integration/load/protocol2_spec.rb +258 -0
- data/spec/integration/load/protocol3_spec.rb +258 -0
- data/spec/integration/load/protocol4_spec.rb +258 -0
- data/spec/integration/load/protocol5_spec.rb +258 -0
- data/spec/integration/parse/protocol0_spec.rb +467 -0
- data/spec/integration/parse/protocol1_spec.rb +459 -0
- data/spec/integration/parse/protocol2_spec.rb +471 -0
- data/spec/integration/parse/protocol3_spec.rb +407 -0
- data/spec/integration/parse/protocol4_spec.rb +439 -0
- data/spec/integration/parse/protocol5_spec.rb +419 -0
- data/spec/pickle_spec.rb +163 -0
- data/spec/protocol0_read_instruction_examples.rb +211 -0
- data/spec/protocol0_spec.rb +445 -0
- data/spec/protocol1_read_instruction_examples.rb +156 -0
- data/spec/protocol1_spec.rb +59 -0
- data/spec/protocol2_read_instruction_examples.rb +135 -0
- data/spec/protocol2_spec.rb +128 -0
- data/spec/protocol3_read_instruction_examples.rb +29 -0
- data/spec/protocol3_spec.rb +32 -0
- data/spec/protocol4_read_instruction_examples.rb +142 -0
- data/spec/protocol4_spec.rb +58 -0
- data/spec/protocol5_spec.rb +68 -0
- data/spec/py_class_spec.rb +62 -0
- data/spec/py_object_spec.rb +149 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/tuple_spec.rb +18 -0
- metadata +325 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `READONLY_BUFFER` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 5.
|
10
|
+
#
|
11
|
+
class ReadonlyBuffer < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `READONLY_BUFFER` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:READONLY_BUFFER)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `READONLY_BUFFER` instruction.
|
23
|
+
READONLY_BUFFER = ReadonlyBuffer.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `REDUCE` instruction.
|
8
|
+
#
|
9
|
+
class Reduce < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `REDUCE` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:REDUCE)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `REDUCE` instruction.
|
21
|
+
REDUCE = Reduce.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `SETITEM` instruction.
|
8
|
+
#
|
9
|
+
class SetItem < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `SETITEM` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:SETITEM)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `SETITEM` instruction.
|
21
|
+
SETITEM = SetItem.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `SETITEMS` instruction.
|
8
|
+
#
|
9
|
+
# @note Introduced in protocol 1.
|
10
|
+
#
|
11
|
+
class SetItems < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `SETITEMS` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:SETITEMS)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `SETITEMS` instruction.
|
23
|
+
SETITEMS = SetItems.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_length_and_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `SHORT_BINBYTES` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 3.
|
11
|
+
#
|
12
|
+
class ShortBinBytes < Instruction
|
13
|
+
|
14
|
+
include HasLengthAndValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `SHORT_BINBYTES` instruction.
|
18
|
+
#
|
19
|
+
# @param [Integer] length
|
20
|
+
# The length of the `SHORT_BINBYTES` value.
|
21
|
+
#
|
22
|
+
# @param [String] value
|
23
|
+
# The `SHORT_BINBYTES` instruction's value.
|
24
|
+
#
|
25
|
+
def initialize(length,value)
|
26
|
+
super(:SHORT_BINBYTES,length,value)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_length_and_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `SHORT_BINSTRING` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 1.
|
11
|
+
#
|
12
|
+
class ShortBinString < Instruction
|
13
|
+
|
14
|
+
include HasLengthAndValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `SHORT_BINSTRING` instruction.
|
18
|
+
#
|
19
|
+
# @param [Integer] length
|
20
|
+
# The length of the `SHORT_BINSTRING` value.
|
21
|
+
#
|
22
|
+
# @param [String] value
|
23
|
+
# The `SHORT_BINSTRING` instruction's value.
|
24
|
+
#
|
25
|
+
def initialize(length,value)
|
26
|
+
super(:SHORT_BINSTRING,length,value)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_length_and_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
#
|
8
|
+
# Represents the `SHORT_BINUNICODE` instruction.
|
9
|
+
#
|
10
|
+
# @note introduces in protocol 4.
|
11
|
+
#
|
12
|
+
class ShortBinUnicode < Instruction
|
13
|
+
|
14
|
+
include HasLengthAndValue
|
15
|
+
|
16
|
+
#
|
17
|
+
# Initializes the `SHORT_BINUNICODE` instruction.
|
18
|
+
#
|
19
|
+
# @param [Integer] length
|
20
|
+
# The length of the `SHORT_BINUNICODE` value.
|
21
|
+
#
|
22
|
+
# @param [String] value
|
23
|
+
# The `SHORT_BINUNICODE` instruction's value.
|
24
|
+
#
|
25
|
+
def initialize(length,value)
|
26
|
+
super(:SHORT_BINUNICODE,length,value)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `STACK_GLOBAL` instruction.
|
8
|
+
#
|
9
|
+
# @note introduced in protocol 4.
|
10
|
+
#
|
11
|
+
class StackGlobal < Instruction
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the `STACK_GLOBAL` instruction.
|
15
|
+
#
|
16
|
+
def initialize
|
17
|
+
super(:STACK_GLOBAL)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# The `STACK_GLOBAL` instruction.
|
23
|
+
STACK_GLOBAL = StackGlobal.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `STOP` instruction.
|
8
|
+
#
|
9
|
+
class Stop < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `STOP` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:STOP)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `STOP` instruction.
|
21
|
+
STOP = Stop.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
require 'python/pickle/instructions/has_value'
|
3
|
+
|
4
|
+
module Python
|
5
|
+
module Pickle
|
6
|
+
module Instructions
|
7
|
+
class String < Instruction
|
8
|
+
|
9
|
+
include HasValue
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `STRING` instruction.
|
13
|
+
#
|
14
|
+
# @param [String] value
|
15
|
+
# The `STRING` instruction's value.
|
16
|
+
#
|
17
|
+
def initialize(value)
|
18
|
+
super(:STRING,value)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `TUPLE` instruction.
|
8
|
+
#
|
9
|
+
class Tuple < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `TUPLE` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:TUPLE)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `TUPLE` instruction.
|
21
|
+
TUPLE = Tuple.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `TUPLE1` instruction.
|
8
|
+
#
|
9
|
+
class Tuple1 < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `TUPLE1` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:TUPLE1)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `TUPLE1` instruction.
|
21
|
+
TUPLE1 = Tuple1.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `TUPLE2` instruction.
|
8
|
+
#
|
9
|
+
class Tuple2 < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `TUPLE2` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:TUPLE2)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `TUPLE2` instruction.
|
21
|
+
TUPLE2 = Tuple2.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'python/pickle/instruction'
|
2
|
+
|
3
|
+
module Python
|
4
|
+
module Pickle
|
5
|
+
module Instructions
|
6
|
+
#
|
7
|
+
# Represents a pickle `TUPLE3` instruction.
|
8
|
+
#
|
9
|
+
class Tuple3 < Instruction
|
10
|
+
|
11
|
+
#
|
12
|
+
# Initializes the `TUPLE3` instruction.
|
13
|
+
#
|
14
|
+
def initialize
|
15
|
+
super(:TUPLE3)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# The `TUPLE3` instruction.
|
21
|
+
TUPLE3 = Tuple3.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Python
|
2
|
+
module Pickle
|
3
|
+
#
|
4
|
+
# Common base class for all protocol implementations.
|
5
|
+
#
|
6
|
+
class Protocol
|
7
|
+
|
8
|
+
# The Pickle stream to read or write to.
|
9
|
+
#
|
10
|
+
# @return [IO]
|
11
|
+
attr_reader :io
|
12
|
+
|
13
|
+
#
|
14
|
+
# Initializes the protocol.
|
15
|
+
#
|
16
|
+
# @param [IO] io
|
17
|
+
# The Pickle stream to read or write to.
|
18
|
+
#
|
19
|
+
def initialize(io)
|
20
|
+
@io = io
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# Reads all instructions from the Pickle stream.
|
25
|
+
#
|
26
|
+
# @yield [instruction]
|
27
|
+
# If a block is given, it will be passed each parsed Pickle instruction.
|
28
|
+
#
|
29
|
+
# @yieldparam [Instruction] instruction
|
30
|
+
# A parsed Pickle instruction from the Pickle stream.
|
31
|
+
#
|
32
|
+
# @return [Array<Instruction>]
|
33
|
+
# All parsed Pickle instructions from the Pickle stream.
|
34
|
+
#
|
35
|
+
def read
|
36
|
+
return enum_for(__method__).to_a unless block_given?
|
37
|
+
|
38
|
+
until @io.eof?
|
39
|
+
yield read_instruction
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Reads an instruction from the pickle stream.
|
45
|
+
#
|
46
|
+
# @return [Instruction]
|
47
|
+
#
|
48
|
+
# @abstract
|
49
|
+
#
|
50
|
+
def read_instruction
|
51
|
+
raise(NotImplementedError,"#{self.class}##{__method__} was not implemented")
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|