{ "info": { "author": "Matthieu Gallet", "author_email": "github@19pouces.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: System Administrators", "License :: OSI Approved", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Utilities" ], "description": "RubyMarshal\n===========\n\nRead and write Ruby-marshalled data.\nOnly basics Ruby data types can be directly read and written, but you can use any custom Python and Ruby types: \n\n * `float`,\n * `bool`,\n * `int`,\n * `str` (mapped to `rubymarshal.classes.RubyString` if dumped with instance variables),\n * `nil` (mapped to `None` in Python),\n * `array` (mapped to `list`),\n * `hash` (mapped to `dict`),\n * symbols and other classes are mapped to specific Python classes.\n\nInstallation\n------------\n\n```python3\n pip install rubymarshal\n```\n\nUsage\n-----\n\n```python3\n from rubymarshal.reader import loads, load\n from rubymarshal.writer import writes, write\n with open('my_file', 'rb') as fd:\n content = load(fd)\n with open('my_file', 'wb') as fd:\n write(fd, my_object)\n loads(b\"\\x04\\bi\\xfe\\x00\\xff\")\n writes(-256)\n```\n\nYou can map custom Ruby types to Python ones:\n\n```python3\n from rubymarshal.reader import loads\n from rubymarshal.classes import RubyObject, registry\n\n class DomainError(RubyObject):\n ruby_class_name = \"Math::DomainError\"\n\n registry.register(DomainError)\n\n loads(b'\\x04\\x08c\\x16Math::DomainError')\n```\n\n\nYou can use custom registries instead of the global one:\n\n\n```python3\n from rubymarshal.reader import loads\n from rubymarshal.classes import RubyObject, ClassRegistry\n\n class DomainError(RubyObject):\n ruby_class_name = \"Math::DomainError\"\n\n registry = ClassRegistry()\n registry.register(DomainError)\n\n loads(b'\\x04\\x08c\\x16Math::DomainError', registry=registry)\n```\n\nYou can use Ruby's symbols:\n\n```python3\n from rubymarshal.reader import loads\n from rubymarshal.writer import writes\n from rubymarshal.classes import Symbol\n\n x = Symbol(\"test\")\n dump = writes(Symbol(\"test\"))\n y = loads(dump)\n assert y is x\n```\n\n\nThe default Writer class is customizable to write custom Python classes:\n\n```python3\n from rubymarshal.writer import writes, Writer\n from rubymarshal.classes import Symbol\n\n class Constant:\n def __init__(self, name):\n self.name = name\n\n class ConstantWriter(Writer):\n def write_python_object(self, obj):\n if isinstance(obj, Constant):\n return self.write(Symbol(obj.name))\n super().write_python_object(obj)\n\n dump = writes([Constant(\"test\")], cls=ConstantWriter)\n print(dump)\n\n```\n\nInfos\n-----\n\n * Code is on github: https://github.com/d9pouces/RubyMarshal \n * Documentation is on readthedocs: http://rubymarshal.readthedocs.org/en/latest/ \n * Tests are on travis-ci: https://travis-ci.org/d9pouces/RubyMarshal\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/d9pouces/RubyMarshal", "keywords": "", "license": "WTFPL", "maintainer": "", "maintainer_email": "", "name": "rubymarshal", "package_url": "https://pypi.org/project/rubymarshal/", "platform": "", "project_url": "https://pypi.org/project/rubymarshal/", "project_urls": { "Homepage": "https://github.com/d9pouces/RubyMarshal" }, "release_url": "https://pypi.org/project/rubymarshal/1.2.6/", "requires_dist": null, "requires_python": "", "summary": "Read and write Ruby-marshalled data", "version": "1.2.6" }, "last_serial": 5380023, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "00a2323ca557c31d5f7bc4880dbcd2ae", "sha256": "0c8c61b9c5144245e14b4b63fe831bb446a580e040377b02447dc04b0e9a70ff" }, "downloads": -1, "filename": "rubymarshal-1.0.0.tar.gz", "has_sig": false, "md5_digest": "00a2323ca557c31d5f7bc4880dbcd2ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42395, "upload_time": "2015-07-11T16:10:29", "url": "https://files.pythonhosted.org/packages/3b/d5/ac089fa9bc4a545b8336e5b143fa86fa224163ce3d28faaf0b3ecee06847/rubymarshal-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "fe5bf3a01dd701878b519b54b8d4782a", "sha256": "3989777fc480c7b37ca4e9bcf68bf06afed2cad805dc2edab6aa83474f9fcb4c" }, "downloads": -1, "filename": "rubymarshal-1.0.1.tar.gz", "has_sig": false, "md5_digest": "fe5bf3a01dd701878b519b54b8d4782a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35118, "upload_time": "2015-08-13T09:02:44", "url": "https://files.pythonhosted.org/packages/b5/ae/e6148ce7371b83ee3d13e29e83dc8ff28f16a3e27d99c3edb7423fb86e45/rubymarshal-1.0.1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "df3c6b114637993adc5d3941c941f0d3", "sha256": "2227fbfcb5a9b34f603d06f4dd0dc76f84af2b897bdd26fcaa340f8d025b348c" }, "downloads": -1, "filename": "rubymarshal-1.0.3.tar.gz", "has_sig": false, "md5_digest": "df3c6b114637993adc5d3941c941f0d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9386, "upload_time": "2016-01-21T15:11:18", "url": "https://files.pythonhosted.org/packages/c9/92/b45f487d81d5d7e56a37ad85b9e903a5165a8c33ab952fd0235b5e7fc35c/rubymarshal-1.0.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c32b541ba6d927169394980682b1e2dc", "sha256": "0945e358df8d7f18ea5ebe9ed0986e0f923f7a569544b96a3deef36868f7bb31" }, "downloads": -1, "filename": "rubymarshal-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c32b541ba6d927169394980682b1e2dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12430, "upload_time": "2019-06-08T15:01:00", "url": "https://files.pythonhosted.org/packages/6a/20/2553222fc5686d367f7d9d6734c29ea31bafc0803f08f118ff774618ea93/rubymarshal-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "45911df248548ef0c340d2faed5d3bef", "sha256": "63d9e465dcbc74a802a8cb7ca8165cf67307ca4b88fde2a40eb97df31f560b37" }, "downloads": -1, "filename": "rubymarshal-1.2.1.tar.gz", "has_sig": false, "md5_digest": "45911df248548ef0c340d2faed5d3bef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12509, "upload_time": "2019-06-09T12:30:54", "url": "https://files.pythonhosted.org/packages/87/e3/4109eb7a79a0db203837abce33206c72e59786c3bf008ec3b4f891aa8e43/rubymarshal-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "12aac167406fdbaaa4feb07c4534da68", "sha256": "ae29dcb7f07bc6c6f3665ca1b145b95a041f0daa10f332e6674fb1e1b5396050" }, "downloads": -1, "filename": "rubymarshal-1.2.2.tar.gz", "has_sig": false, "md5_digest": "12aac167406fdbaaa4feb07c4534da68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12667, "upload_time": "2019-06-09T12:42:54", "url": "https://files.pythonhosted.org/packages/42/35/660872cf5845bf780d0bf3f0bb4917fe0fc2a191b419bb7e36ca9c22bccb/rubymarshal-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "7a0e96004f1902832012073a7c9d75e4", "sha256": "01410567d3821a29a2b373afb72f6846b29bf6533407be381e0642edb444a9b8" }, "downloads": -1, "filename": "rubymarshal-1.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7a0e96004f1902832012073a7c9d75e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16233, "upload_time": "2019-06-09T14:31:02", "url": "https://files.pythonhosted.org/packages/92/9c/7fc694586455893bf058fabddc0114d5381842819aa0569dcc98c9986560/rubymarshal-1.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d38748af3418f838cf13e3bd323aed0a", "sha256": "de406933d15ef7d759a2eacbbdbbb80e5ccf1dee834d3a6b5d988b24ce276e7b" }, "downloads": -1, "filename": "rubymarshal-1.2.3.tar.gz", "has_sig": false, "md5_digest": "d38748af3418f838cf13e3bd323aed0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13675, "upload_time": "2019-06-09T14:31:05", "url": "https://files.pythonhosted.org/packages/d1/2f/49d3dec91256a71ca77073afaf2e24ff2efae8b2d51a93101167b78bd2e6/rubymarshal-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "3c197bc3279777861836da33ec5e0773", "sha256": "182728a79259e12cc4ff87843451017ec99b490ea2e2db3a2916f90a4d3ae171" }, "downloads": -1, "filename": "rubymarshal-1.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3c197bc3279777861836da33ec5e0773", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16457, "upload_time": "2019-06-09T14:59:23", "url": "https://files.pythonhosted.org/packages/d5/cd/778c3763a774f4bf1b14bc7258154599ab322e12c5ed2c9a869e658bdd87/rubymarshal-1.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "886ecff8042f2b5002e59c5f3c620e70", "sha256": "a6f8658556bb0f7484c7bcb3c6ccf7a06feadb9297a5eedeb80a193ec001d681" }, "downloads": -1, "filename": "rubymarshal-1.2.4.tar.gz", "has_sig": false, "md5_digest": "886ecff8042f2b5002e59c5f3c620e70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13938, "upload_time": "2019-06-09T14:59:26", "url": "https://files.pythonhosted.org/packages/9f/a8/fb894a95550eb242c16930c0fbe8bdda995dd8bcfe0f68a5aae78de3c249/rubymarshal-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "56e9f22c1d77d6c7ae848fe1e94c44dd", "sha256": "44037e00fff26859b682f95523fa85dbd3e86596b059a4bc5d53b02a78be1c21" }, "downloads": -1, "filename": "rubymarshal-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "56e9f22c1d77d6c7ae848fe1e94c44dd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16492, "upload_time": "2019-06-09T21:47:52", "url": "https://files.pythonhosted.org/packages/0a/fa/00f0baa44c78fd3c24c90f430c5fbd9040a03bbd911885d2fbf2557acf71/rubymarshal-1.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b6d388d3a6562bc6636cd5abb74b386e", "sha256": "5e07bc54f09fca9c4c46bb2bbea2c2f2540e80bafa4ed381bdfc15540325fa33" }, "downloads": -1, "filename": "rubymarshal-1.2.5.tar.gz", "has_sig": false, "md5_digest": "b6d388d3a6562bc6636cd5abb74b386e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13949, "upload_time": "2019-06-09T21:47:55", "url": "https://files.pythonhosted.org/packages/5a/04/bbc09041ba68ad154ee99f48fc35a97cb1bac9c49767c8a081ac99174fba/rubymarshal-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "707d14f044fec40d6c700ffba8f710be", "sha256": "8500e3e224b47cdf56f63d82d3641dfb8f93f48850f16d4c0a7e169353694081" }, "downloads": -1, "filename": "rubymarshal-1.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "707d14f044fec40d6c700ffba8f710be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16498, "upload_time": "2019-06-10T06:56:53", "url": "https://files.pythonhosted.org/packages/53/db/45551c2c8b63fab0c97beea255aa0debd07a6ea7ba9f0f7895240ae4888d/rubymarshal-1.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "25530924003c016776c1ac1d24d9e3bc", "sha256": "c65d6870ad2a831696cb86cfab216c8c154625c7f2c87eff5593a7452521033f" }, "downloads": -1, "filename": "rubymarshal-1.2.6.tar.gz", "has_sig": false, "md5_digest": "25530924003c016776c1ac1d24d9e3bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13965, "upload_time": "2019-06-10T06:56:58", "url": "https://files.pythonhosted.org/packages/b0/33/87822658085b679d0988a925ddfa588fb2b3cfcb4e60b23117c485228307/rubymarshal-1.2.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "707d14f044fec40d6c700ffba8f710be", "sha256": "8500e3e224b47cdf56f63d82d3641dfb8f93f48850f16d4c0a7e169353694081" }, "downloads": -1, "filename": "rubymarshal-1.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "707d14f044fec40d6c700ffba8f710be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16498, "upload_time": "2019-06-10T06:56:53", "url": "https://files.pythonhosted.org/packages/53/db/45551c2c8b63fab0c97beea255aa0debd07a6ea7ba9f0f7895240ae4888d/rubymarshal-1.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "25530924003c016776c1ac1d24d9e3bc", "sha256": "c65d6870ad2a831696cb86cfab216c8c154625c7f2c87eff5593a7452521033f" }, "downloads": -1, "filename": "rubymarshal-1.2.6.tar.gz", "has_sig": false, "md5_digest": "25530924003c016776c1ac1d24d9e3bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13965, "upload_time": "2019-06-10T06:56:58", "url": "https://files.pythonhosted.org/packages/b0/33/87822658085b679d0988a925ddfa588fb2b3cfcb4e60b23117c485228307/rubymarshal-1.2.6.tar.gz" } ] }