S-expression-based persistence of python objects.
It does something very much like Pickle
; however, pickle's main goal seems to be efficiency (both in space and time); jelly's main goals are security, human readability, and portability to other environments.
This is how Jelly converts various objects to s-expressions.
Boolean:
True --> ['boolean', 'true']
Integer:
1 --> 1
List:
[1, 2] --> ['list', 1, 2]
String:
"hello" --> "hello"
Float:
2.3 --> 2.3
Dictionary:
{'a': 1, 'b': 'c'} --> ['dictionary', ['b', 'c'], ['a', 1]]
Module:
UserString --> ['module', 'UserString']
Class:
UserString.UserString --> ['class', ['module', 'UserString'], 'UserString']
Function:
string.join --> ['function', 'join', ['module', 'string']]
Instance: s is an instance of UserString.UserString, with a __dict__ {'data': 'hello'}:
["UserString.UserString", ['dictionary', ['data', 'hello']]]
Class Method: UserString.UserString.center:
['method', 'center', ['None'], ['class', ['module', 'UserString'], 'UserString']]
Instance Method: s.center, where s is an instance of UserString.UserString:
['method', 'center', ['instance', ['reference', 1, ['class', ['module', 'UserString'], 'UserString']], ['dictionary', ['data', 'd']]], ['dereference', 1]]
The set builtin and the sets.Set class are serialized to the same thing, and unserialized to set if available, else to sets.Set. It means that there's a possibility of type switching in the serialization process. The solution is to always use set.
The same rule applies for frozenset and sets.ImmutableSet.
Author | |
Glyph Lefkowitz |
Class | DummySecurityOptions |
DummySecurityOptions() -> insecure security options Dummy security options -- this class will allow anything. |
Class | InsecureJelly |
This exception will be raised when a jelly is deemed `insecure'; e.g. it contains a type, class, or module disallowed by the specified `taster' |
Class | SecurityOptions |
This will by default disallow everything, except for 'none'. |
Class | Unjellyable |
Inherit from me to Unjelly yourself directly with the setStateFor convenience method. |
Class | Unpersistable |
This is an instance of a class that comes back when something couldn't be unpersisted. |
Function | getInstanceState |
Utility method to default to 'normal' state rules in serialization. |
Function | jelly |
Serialize to s-expression. |
Function | setInstanceState |
Utility method to default to 'normal' state rules in unserialization. |
Function | unjelly |
Unserialize from s-expression. |
Variable | class_atom |
Undocumented |
Variable | dereference_atom |
Undocumented |
Variable | dictionary_atom |
Undocumented |
Variable | DictTypes |
Undocumented |
Variable | frozenset_atom |
Undocumented |
Variable | function_atom |
Undocumented |
Variable | globalSecurity |
Undocumented |
Variable | instance_atom |
Undocumented |
Variable | list_atom |
Undocumented |
Variable | module_atom |
Undocumented |
Variable | None_atom |
Undocumented |
Variable | persistent_atom |
Undocumented |
Variable | reference_atom |
Undocumented |
Variable | set_atom |
Undocumented |
Variable | tuple_atom |
Undocumented |
Variable | unjellyableFactoryRegistry |
Undocumented |
Variable | unpersistable_atom |
Undocumented |
Class | _Jellier |
(Internal) This class manages state for a call to jelly() |
Class | _Unjellier |
No class docstring; 0/5 instance variable, 8/29 methods documented |
Function | _createBlank |
Given an object, if that object is a type, return a new, blank instance of that type which has not had __init__ called on it. If the object is not a type, return None . |
Function | _maybeClass |
Undocumented |
Function | _newInstance |
Make a new instance of a class without calling its __init__ method. |
Variable | _ImmutableSetTypes |
Undocumented |
Variable | _sets |
Undocumented |
Variable | _SetTypes |
Undocumented |
Serialize to s-expression.
Returns a list which is the serialized representation of an object. An optional 'taster' argument takes a SecurityOptions and will mark any insecure objects as unpersistable rather than serializing them.
Unserialize from s-expression.
Takes a list that was the result from a call to jelly() and unserializes an arbitrary object from it. The optional 'taster' argument, an instance of SecurityOptions, will cause an InsecureJelly exception to be raised if a disallowed type, module, or class attempted to unserialize.
None
.Parameters | |
cls:type or something else that cannot be instantiated. | The type (or class) to create an instance of. |
Returns | |
a new blank instance or None if cls is not a class or type. |