python-rubymarshal
Port variant v11
Summary Read and write Ruby-marshalled data (3.11)
BROKEN
Package version 1.2.10
Homepage https://github.com/d9pouces/RubyMarshal
Keywords python
Maintainer Python Automaton
License Not yet specified
Other variants v12
Ravenports Buildsheet | History
Ravensource Port Directory | History
Last modified 10 OCT 2023, 04:40:21 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)
PY311 ON Build using Python 3.11 PY312 OFF Build using Python 3.12
Package Dependencies by Type
Build (only) python-setuptools:single:v11
autoselect-python:single:std
Build and Runtime python311:single:std
Download groups
main mirror://GITHUB/d9pouces:RubyMarshal:1.2.10
Distribution File Information
a09bccd8125e8e09f9c11146fafaba5283d16c369d0751f9765ddc009321df9e 49095 d9pouces-RubyMarshal-1.2.10.tar.gz
Ports that require python-rubymarshal:v11
No other ports depend on this one.