python-rubymarshal
Port variant py37
Summary Read and write Ruby-marshalled data (PY37)
Package version 1.2.7
Homepage https://github.com/d9pouces/RubyMarshal
Keywords python
Maintainer Python Automaton
License Not yet specified
Other variants py38
Ravenports Buildsheet | History
Ravensource Port Directory | History
Last modified 11 AUG 2020, 12:11:45 UTC
Port created 01 APR 2018, 16:48:53 UTC
Subpackage Descriptions
single 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 to `rubymarshal.classes.RubyString` if dumped with instance variables), * `nil` (mapped to `None` in Python), * `array` (mapped to `list`), * `hash` (mapped to `dict`), * symbols and other classes are mapped to specific Python classes. Installation ------------ `python3 pip install rubymarshal ` Usage ----- ```python3 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: ```python3 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') ``` You can use custom registries instead of the global one: ```python3 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: ```python3 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: ```python3 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) ```
Configuration Switches (platform-specific settings discarded)
PY37 ON Build using Python 3.7 PY38 OFF Build using Python 3.8
Package Dependencies by Type
Build and Runtime python37:single:standard
python-setuptools:single:py37
Download groups
main mirror://PYPI/r/rubymarshal
Distribution File Information
94aa84fa42393f773c8215fab679bd3b72bbdb9f7931643d3672184cde9981d9 9647 rubymarshal-1.2.7.tar.gz
Ports that require python-rubymarshal:py37
No other ports depend on this one.