RubyMarshal
Read and write Ruby-marshalled data. Only basics Ruby data types can be directly read and written, but you can use any custom Python and Ruby types:
float,bool,int,str(mapped torubymarshal.classes.RubyStringif dumped with instance variables),nil(mapped toNonein Python),array(mapped tolist),hash(mapped todict),- symbols and other classes are mapped to specific Python classes.
Installation
pip install rubymarshal
Usage
from rubymarshal.reader import loads, load
from rubymarshal.writer import writes, write
with open('my_file', 'rb') as fd:
content = load(fd)
with open('my_file', 'wb') as fd:
write(fd, my_object)
loads(b"\x04\bi\xfe\x00\xff")
writes(-256)
You can map custom Ruby types to Python ones:
from rubymarshal.reader import loads
from rubymarshal.classes import RubyObject, registry
class DomainError(RubyObject):
ruby_class_name = "Math::DomainError"
registry.register(DomainError)
loads(b'\x04\x08c\x16Math::DomainError', registry=registry)
You can use custom registries instead of the global one:
from rubymarshal.reader import loads
from rubymarshal.classes import RubyObject, ClassRegistry
class DomainError(RubyObject):
ruby_class_name = "Math::DomainError"
registry = ClassRegistry()
registry.register(DomainError)
loads(b'\x04\x08c\x16Math::DomainError', registry=registry)
You can use Ruby's symbols:
from rubymarshal.reader import loads
from rubymarshal.writer import writes
from rubymarshal.classes import Symbol
x = Symbol("test")
dump = writes(Symbol("test"))
y = loads(dump)
assert y is x
The default Writer class is customizable to write custom Python classes:
from rubymarshal.writer import writes, Writer
from rubymarshal.classes import Symbol
class Constant:
def __init__(self, name):
self.name = name
class ConstantWriter(Writer):
def write_python_object(self, obj):
if isinstance(obj, Constant):
return self.write(Symbol(obj.name))
super().write_python_object(obj)
dump = writes([Constant("test")], cls=ConstantWriter)
print(dump)
Infos
- Code is on github: https://github.com/d9pouces/RubyMarshal
- Documentation is on readthedocs: http://rubymarshal.readthedocs.org/en/latest/
- Tests are on travis-ci: https://travis-ci.org/d9pouces/RubyMarshal
Release files for rubymarshal 1.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rubymarshal-1.2.4.tar.gz | 13.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rubymarshal-1.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.4 kB
Release files / rubymarshal-1.2.4.tar.gz
| Download URL | rubymarshal-1.2.4.tar.gz |
|---|---|
| Size | 13.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a6f8658556bb0f7484c7bcb3c6ccf7a06feadb9297a5eedeb80a193ec001d681
|
|
BLAKE2b-256 checksum How to use checksums |
9fa8fb894a95550eb242c16930c0fbe8bdda995dd8bcfe0f68a5aae78de3c249
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.1
|
Release files / rubymarshal-1.2.4-py3-none-any.whl
| Download URL | rubymarshal-1.2.4-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
182728a79259e12cc4ff87843451017ec99b490ea2e2db3a2916f90a4d3ae171
|
|
BLAKE2b-256 checksum How to use checksums |
d5cd778c3763a774f4bf1b14bc7258154599ab322e12c5ed2c9a869e658bdd87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.1
|