pickle-interpreter 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +54 -11
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDAwZDlmNmU1MDg5Yjc2Y2I5MTAwYzIxYjQ4NGMyNGExOWQxODMxMg==
4
+ YTRkZmQzNGYwNTFiZWMyY2IzYmE4YjYyMjk0ZjYzYWZjNWUzZDA5Ng==
5
5
  data.tar.gz: !binary |-
6
- MzBhOTI2MGVlMjM3ZDMwYmM1MGZhMjg0MDYzNmEzYTZjZWIwMzg2Mw==
6
+ NTJkMTYyMmM1ODk2ZDc5ZmYzZmZhZDQzMjAyYTcwZjg4ZjcyODNiYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzA4MGI5ZjVjMDQ1MzBhNTY3NWExMzA0MTIzMGQ2YWNmNGQ2ZmUzYTRhMDgx
10
- Yzc3ZTdhMzkwNzk0Y2I2MzY4M2E5NmMyNzM1MWI4ZDgwNjFhOGY0N2Y5YjU1
11
- NGM3MDAyMDdkYzQwZDljODFkNDQzOWVmMzU2NmQ5NGI1ZDYzZDM=
9
+ MTViNTQ0ZDZjYzk5OWViNWM3MTljZjcyYmM1OTVlMTg2ZDk3YTU1ZjlkZmYx
10
+ YTkyZGRlYmZjOTdhYTA4NWYxMDkzODI3ZGExYWIyZDllYjhiN2Q0NzYzMmE4
11
+ OWU2YWJjYWRjZDI2NjRmN2Y5NGEyMDVkY2ZjYTFkYjYxMzgxNTk=
12
12
  data.tar.gz: !binary |-
13
- ODM4MGVhODc3MDg1ZmNjNGYyNTM3OWU1ZGQyMzhjMjg2YzBjNzYyOGRlMTRi
14
- OWU4MGY4YmNhMmQyMzA2MjYzMjdhOTM4YzMwMGU0MzIyYWQ1M2NjNDc1M2Fi
15
- ZWY4MmNmOTZiNmU5ODZmNWMxM2IzYzRmYjhlMTEyMDEzYjAwNzc=
13
+ MDY2N2VkOGE5Nzg4MTk5OThiMmY3MjYxNTc2NzE3MWYzMGMxNmFjNzI4Yjdm
14
+ YmRiZTA3YmQ3ZDZiZTM5MDZkNWM0N2MwMmNkOTNmOTZmMTcwMTYxODM3ZGEy
15
+ OTE1MzVmMWM1OTQ3MmFhYjQ2YjcyMmMyYzFjMzI4OTcwM2Y0NzE=
data/README.md CHANGED
@@ -1,17 +1,60 @@
1
- This is a library for reading Python pickle objects.
2
-
3
- If you have a Base64-encoded string, you can just do PickleInterpreter.unpickle_base64(my_string)
4
-
5
- If you have the actual binary string, be sure it is using the ASCII-8bit character encoding. Then you can do PickleInterpreter.unpickle(my_string)
6
-
7
- If you are reading from the django_session table (which is why I bothered with this in the first place), you can do PickleInterpreter.unpickle_base64_signed(my_string). Note that in this function we don't check the signature, we just ignore it.
8
-
1
+ # We can unpickle that!
2
+
3
+ This is a library for deserializing Python pickle objects (proto 2). The goal was to be able to unpickle Django session data directly from Ruby.
4
+
5
+ ## Install
6
+ As a gem:
7
+ ```
8
+ gem install pickle-interpreter
9
+ ```
10
+
11
+ Or in your Gemfile:
12
+ ```
13
+ gem 'pickle-interpreter'
14
+ ```
15
+
16
+ Require:
17
+ ```ruby
18
+ require 'pickle_interpreter'
19
+ ```
20
+
21
+ ## Usage
22
+ For Base64-encoded strings:
23
+ ```ruby
24
+ PickleInterpreter.unpickle_base64(my_string)
25
+ ```
26
+
27
+ For binary strings, be sure it is using the ASCII-8bit character encoding:
28
+ ```ruby
29
+ PickleInterpreter.unpickle(my_string)
30
+ ```
31
+
32
+ For reading `session_data` from a `django_session` table:
33
+ ```ruby
34
+ PickleInterpreter.unpickle_base64_signed(my_string).
35
+ ```
36
+ *Note that this doesn't check the signature, the hash before the `:` is ignored.*
37
+
38
+ ## Python Testing
39
+ ```python
40
+ import base64
41
+ import pickle
42
+
43
+ session_data = <Base64 encoded string, such as django_session.session_data>
44
+ encoded_data = base64.b64decode(session_data)
45
+ hash, serialized = encoded_data.split(b':', 1)
46
+ data = pickle.loads(serialized)
47
+
48
+ # Pickle using protocol 2
49
+ serialized = pickle.dumps(data, 2)
50
+ session_data = base64.b64encode("hash" + b":" + serialized)
51
+ ```
52
+
53
+ ## Notes
9
54
  I *think* I have at least a rudimentary implementation of all of the pickle instructions. However, I don't use a lot of Python, so I don't really have anything to test on. If you use this, and something breaks, if you send me the pickle file, and what it should decode to, I will get it fixed. jonathan@newmedio.com
10
55
 
11
56
  For objects, however, I pretty much just create a hash with the initialization parameters baked in somewhere (i.e. with a key like "__init_args" or something appropriate to how it was called). This is certainly an area that can be improved. However, you can also just walk the tree after the fact and look for these.
12
57
 
13
58
  Let me know how it works, and if there is anything else I need to implement. This is based on the 2014-06-10 version of this file:
14
59
 
15
- http://svn.python.org/projects/python/trunk/Lib/pickletools.py
16
-
17
-
60
+ http://svn.python.org/projects/python/trunk/Lib/pickletools.py
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pickle-interpreter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Bartlett
@@ -10,7 +10,7 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-06-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A library to read pickled objects from pythong in Ruby
13
+ description: A library to read pickled objects (proto 2) from Python in Ruby
14
14
  email: jonathan@newmedio.com
15
15
  executables: []
16
16
  extensions: []