{ "info": { "author": "Jeff Hubbard", "author_email": "j3ffhubb@users.noreply.github.com", "bugtrack_url": null, "classifiers": [], "description": "## PyMarshal\n\npymarshal replicates the feature of (un)marshalling structs in Golang.\nRather than attempting to replicate the exact feature as it exists in Go,\npymarshal aims for elegant, Pythonic simplicity, and to fix the flaws in\nGo's implementation such as:\n - extra keys being silently ignored\n - lack of mandatory fields\n - lack of default values\n\nBeyond fixing the flaws of Golang's implementation:\n - The design of PyMarshal encourages [writing unit testable code](http://misko.hevery.com/code-reviewers-guide/)\n - [Integrated API documentation](https://github.com/j3ffhubb/pymarshal/tree/master/examples/api_docs.md)\n\n## Currently supported serialization formats\n - [JSON](https://github.com/j3ffhubb/pymarshal/tree/master/examples/usage_json.md)\n - [BSON](https://github.com/j3ffhubb/pymarshal/tree/master/examples/usage_bson.md)\n - [YAML](https://github.com/j3ffhubb/pymarshal/tree/master/examples/usage_yaml.md)\n\nAs YAML is compatible with JSON, use PyYAML to load or dump data\nwith the `pymarshal.json` module, there is no explicit YAML module.\n\n## Installation\nIt is recommended that you install\n[from PyPI](https://pypi.python.org/pypi/pymarshal/)\nusing `pip install pymarshal`\n\npymarshal is compatible with Python2.7, and Python3.x\n\n[CLICK HERE](https://github.com/j3ffhubb/mpwdga) for an example of a\nmodern REST API that uses PyMarshal\n\n## Overview\n\nThe only modification required to your class code is to use the `type_assert`\nfunctions to assign `__init__` arguments to self variables of the same\nname. pymarshal provides the `type_assert` functions to both enforce the type,\nand to unmarshal nested objects.\n\nExample (including the YAML-based docstring for API docs):\n```python\nclass MyModel:\n def __init__(\n self,\n a,\n b=5,\n ):\n \"\"\"\n desc: >\n An example model\n Blah blah, blah blah\n args:\n - name: a\n type: str\n desc: The a thing\n - name: b\n type: str\n desc: The b thing\n required: false\n default: 5\n \"\"\"\n self.a = type_assert(a, str)\n self.b = type_assert(b, int)\n\n>>> from pymarshal.json import *\n>>> x = marshal_json(MyModel(\"test\", 6))\n>>> x\n{\"a\": \"test\", \"b\": 6}\n>>> y = unmarshal_json(x, MyModel)\n>>> y.a\n\"test\"\n```\n\nNOTE: Your classes must not implement `__call__` (which is an antipattern\nanyway). Whatever you would've implemented with `__call__` should just be\na normal, named method.\n\nYour `__init__` methods should only use simple assignment through the\n`type_assert` functions. If you have a use-case for a constructor that\ndoes more than simple assignment, use a separate\n['factory' static method](https://github.com/j3ffhubb/pymarshal/tree/master/examples/factory.md).\n\nThere is also:\n - `type_assert_iter` for iterables\n - `type_assert_dict` for anything that implements .items() -> k, v\n\nRather than using the Golang \"tag\" syntax, simply create a\n`_marshal_key_swap` and `_unmarshal_key_swap` dict in your class,\nand any re-named keys will be swapped before being passed to the\nclass constructor or before being marshalled to JSON. The full list\nof control variables are documented\n[HERE](https://github.com/j3ffhubb/pymarshal/tree/master/examples/control_variables.md).\n\n## Examples\n\n[Examples](https://github.com/j3ffhubb/pymarshal/tree/master/examples/)", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/j3ffhubb/pymarshal/archive/1.6.1.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/j3ffhubb/pymarshal", "keywords": "go,golang,json,bson,yaml,marshal,unmarshal,struct", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "pymarshal", "package_url": "https://pypi.org/project/pymarshal/", "platform": "", "project_url": "https://pypi.org/project/pymarshal/", "project_urls": { "Download": "https://github.com/j3ffhubb/pymarshal/archive/1.6.1.tar.gz", "Homepage": "https://github.com/j3ffhubb/pymarshal" }, "release_url": "https://pypi.org/project/pymarshal/1.6.1/", "requires_dist": null, "requires_python": "", "summary": "Pythonic implementation of Golang's (un)marshalling of structs to/from various data serialization formats", "version": "1.6.1" }, "last_serial": 4703512, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "632612e4ff8127b89e30f5c5c1e124d1", "sha256": "28bae615e5e6ea5fa15d8452b643c49770a5166bd952881950f2e656f4f33204" }, "downloads": -1, "filename": "pymarshal-1.0.0.tar.gz", "has_sig": false, "md5_digest": "632612e4ff8127b89e30f5c5c1e124d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4620, "upload_time": "2017-10-14T22:00:44", "url": "https://files.pythonhosted.org/packages/19/79/6b3f4fcfb801059c5435491dca7425f1101eae4f94d6399e703ef0d6fa65/pymarshal-1.0.0.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "85497ccc6d1ba45e2545a81fde00b85b", "sha256": "5a8aac699cbe648ce33fa290bff5335202a22ad17dda3c61c97400f6b30cbb8c" }, "downloads": -1, "filename": "pymarshal-1.0.9.tar.gz", "has_sig": false, "md5_digest": "85497ccc6d1ba45e2545a81fde00b85b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4643, "upload_time": "2017-10-15T01:35:08", "url": "https://files.pythonhosted.org/packages/44/61/2341c5f8db3f10256604fb2bf0f59b378cc36f468704ea5a3162dfeebdee/pymarshal-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "a7159f40d69236d0e04e23c8d6e4176c", "sha256": "dbde31ca715594597c02f309920d7601a134db0b53086d888850c699bbfdfc28" }, "downloads": -1, "filename": "pymarshal-1.1.0.tar.gz", "has_sig": false, "md5_digest": "a7159f40d69236d0e04e23c8d6e4176c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4981, "upload_time": "2017-10-18T06:37:22", "url": "https://files.pythonhosted.org/packages/98/ed/441a4c952bc5196b72622347db62d64c768358a3155c3ea9b979a9ea79a4/pymarshal-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "c1df49b66481299e9d9b768e865c7667", "sha256": "1c89931613bd9576f9b2c6558c17597fef261d0c562ca6dfefc57a14a39b7a73" }, "downloads": -1, "filename": "pymarshal-1.1.1.tar.gz", "has_sig": false, "md5_digest": "c1df49b66481299e9d9b768e865c7667", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5422, "upload_time": "2017-10-18T06:47:25", "url": "https://files.pythonhosted.org/packages/4d/d0/04e776a0fc681b506f97305d90493250a2cc116a30ae4f737b559937ea51/pymarshal-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "138def4a16bd93b183dab704f560c20c", "sha256": "e88f9904cfa37e86b649ef5cd661db2e116e2b0141ed7b1cdb1391d1bb189b18" }, "downloads": -1, "filename": "pymarshal-1.1.2.tar.gz", "has_sig": false, "md5_digest": "138def4a16bd93b183dab704f560c20c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5942, "upload_time": "2017-10-20T06:23:31", "url": "https://files.pythonhosted.org/packages/fa/32/53b07c87f3c24f4fae850826a96521b5bc8ddf0e51e16882b9bc725d704b/pymarshal-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "e64d6a200658f0e8fb38e649151d43f3", "sha256": "39c927c7ee414ce2eeb0fef95c22edc7985513ecf6c78b5d43f2d2f516be6a17" }, "downloads": -1, "filename": "pymarshal-1.2.0.tar.gz", "has_sig": false, "md5_digest": "e64d6a200658f0e8fb38e649151d43f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6412, "upload_time": "2017-10-24T02:35:09", "url": "https://files.pythonhosted.org/packages/c2/85/65477d3c2a687dbb7c0037bbba991e469a913e3239a0e78bfc76bcba32b0/pymarshal-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "1edefb181148ea688366df15d4d93aaf", "sha256": "5f81bdd2e6c70474b3e361774017372a8ab8460185e0b8e78506cebe8923da8a" }, "downloads": -1, "filename": "pymarshal-1.2.1.tar.gz", "has_sig": false, "md5_digest": "1edefb181148ea688366df15d4d93aaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6644, "upload_time": "2017-10-28T18:38:07", "url": "https://files.pythonhosted.org/packages/87/20/11457ca0535136e1701c888120b4bb51a1ac0aa8c07889dfcaa921b8139d/pymarshal-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "91e6acad258157a176dbd4759790666a", "sha256": "99fe960664300ee436c8df05ca0da262fe3d443ada440d68b07741d487e5bb90" }, "downloads": -1, "filename": "pymarshal-1.2.2.tar.gz", "has_sig": false, "md5_digest": "91e6acad258157a176dbd4759790666a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6813, "upload_time": "2017-10-28T19:23:14", "url": "https://files.pythonhosted.org/packages/b4/c0/c6d4b750bae427b72abf12bacbd9100f4b978b973f193f60ec45c2a4c89e/pymarshal-1.2.2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "93d388194682bcbf9db64759b16fc644", "sha256": "24cad211f23847e7d420ac992237a75b2214c9ab7c6fb014612ff9e382214033" }, "downloads": -1, "filename": "pymarshal-1.3.0.tar.gz", "has_sig": false, "md5_digest": "93d388194682bcbf9db64759b16fc644", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8017, "upload_time": "2017-11-05T15:49:33", "url": "https://files.pythonhosted.org/packages/81/0d/1f3c77b8909339d8a22cf60359a4b602b235cc04750ff3694c174e5de0da/pymarshal-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "5db19d3d1e71e8650e665f57c4530801", "sha256": "1f46c74d62e20e044f425a86a6fcd2fe91cebe1fd60c15951a2d851341ede768" }, "downloads": -1, "filename": "pymarshal-1.3.1.tar.gz", "has_sig": false, "md5_digest": "5db19d3d1e71e8650e665f57c4530801", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8354, "upload_time": "2017-11-14T05:34:45", "url": "https://files.pythonhosted.org/packages/a6/a5/0e6869f2e28bc2cbf88a509ccce38df0c43d69e36207cd61e98d840461a4/pymarshal-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "09e93186de0d6ebd9c05b20893e694c1", "sha256": "b8dc8b89c48d1d21e095363902cbdd60a2066d8769c48dd664b553e5f016792e" }, "downloads": -1, "filename": "pymarshal-1.3.2.tar.gz", "has_sig": false, "md5_digest": "09e93186de0d6ebd9c05b20893e694c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8413, "upload_time": "2017-11-16T03:09:30", "url": "https://files.pythonhosted.org/packages/ad/c8/e085e6e1ea39edfa8fc3768457430f1c0df3c76cde5c0567592e7536a28c/pymarshal-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "2e867331780e1385b3a4198a2e61d783", "sha256": "18571cc1ef6a6970bcd0ed25894956281d3925ccf1d62d19acb5ae29bb6ad0e9" }, "downloads": -1, "filename": "pymarshal-1.3.3.tar.gz", "has_sig": false, "md5_digest": "2e867331780e1385b3a4198a2e61d783", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8564, "upload_time": "2017-11-17T03:03:14", "url": "https://files.pythonhosted.org/packages/96/53/192d52680d1902113b3f346392e20ed1dcca986e6dde7e4cc0285af225d3/pymarshal-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "a90b0e3a2c0dd060ff56db7d304f7cdc", "sha256": "fe0533866465e22873180bc551d06c037f01af77f6bcd7dbd6c14eacd002b9ff" }, "downloads": -1, "filename": "pymarshal-1.3.4.tar.gz", "has_sig": false, "md5_digest": "a90b0e3a2c0dd060ff56db7d304f7cdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8783, "upload_time": "2017-12-13T04:17:14", "url": "https://files.pythonhosted.org/packages/5f/1f/18cdb8e1d7c72dca873818b43935270e588719e1c67ac0e5b2dd988455d0/pymarshal-1.3.4.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "a2e57ccabd9a288b39c3636aa1714623", "sha256": "37301e3b562a98b1529b6133ec3224031ddfab399758da3543674c0437ca00c1" }, "downloads": -1, "filename": "pymarshal-1.3.5.tar.gz", "has_sig": false, "md5_digest": "a2e57ccabd9a288b39c3636aa1714623", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8796, "upload_time": "2017-12-28T06:33:08", "url": "https://files.pythonhosted.org/packages/0f/63/09446d5546b645857b7d75b7b259ec08f437f89db324eb85b1d40ddfa029/pymarshal-1.3.5.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "82b9bec2a1cc40be2fe92762b3b66da2", "sha256": "08856dfdaf8e4fe95237b3d3742e98577ff6096e28e4c1981399d4646c1b6ea0" }, "downloads": -1, "filename": "pymarshal-1.5.0.tar.gz", "has_sig": false, "md5_digest": "82b9bec2a1cc40be2fe92762b3b66da2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12210, "upload_time": "2018-01-08T06:00:58", "url": "https://files.pythonhosted.org/packages/d2/f3/dffa19de8e3b30b2a3a18a05c27c5ee6ae584b72e62662f986ad65d22717/pymarshal-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "9d8a0a91b5a25d125cfa2eb49bebeb35", "sha256": "1e1d0aca354d572fb1f9a97a24d008e3a544caac3fcdf0edd0094595aac7dd99" }, "downloads": -1, "filename": "pymarshal-1.5.1.tar.gz", "has_sig": false, "md5_digest": "9d8a0a91b5a25d125cfa2eb49bebeb35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12673, "upload_time": "2018-01-14T04:26:23", "url": "https://files.pythonhosted.org/packages/b5/14/e06bdac845dd60c7e64e92ca09f6603e33cc66a7aaf1e9d47716a162f0ec/pymarshal-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "bfe54af6f3ad6e7df0812a91ea4d8d12", "sha256": "577b3f00297f44fae0f8f2e86058f0168e71e325c910e6f8df405df4f447fd34" }, "downloads": -1, "filename": "pymarshal-1.5.2.tar.gz", "has_sig": false, "md5_digest": "bfe54af6f3ad6e7df0812a91ea4d8d12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12965, "upload_time": "2018-01-15T03:33:39", "url": "https://files.pythonhosted.org/packages/49/7b/080aafd5e7da2951f9fc59188fbff8583f83d55d68d67c675f0275fa7acd/pymarshal-1.5.2.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "52ef2cd6b86eb5b4c5f8cb25501f8d45", "sha256": "f247ad927dc46a9a752476ea446c76a40e39614be1401bf44ac6763d335c3c22" }, "downloads": -1, "filename": "pymarshal-1.6.0.tar.gz", "has_sig": false, "md5_digest": "52ef2cd6b86eb5b4c5f8cb25501f8d45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13434, "upload_time": "2018-02-05T02:12:15", "url": "https://files.pythonhosted.org/packages/7a/9e/201d92856c6d149d5705f85d16ccda2f8b2556aadb0197f90a9b682ca3f3/pymarshal-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "a2c5c3e1d3428f6cdedbdd87071832f5", "sha256": "2b51e130f70586938e51c159e45753d14ffcfd62578f150cafb9adf6eb1bf129" }, "downloads": -1, "filename": "pymarshal-1.6.1.tar.gz", "has_sig": false, "md5_digest": "a2c5c3e1d3428f6cdedbdd87071832f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13484, "upload_time": "2019-01-16T13:59:27", "url": "https://files.pythonhosted.org/packages/bd/46/434d5dd3fc21b8694734fabc263b3910cce97af9537c0ca6256b93235d88/pymarshal-1.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a2c5c3e1d3428f6cdedbdd87071832f5", "sha256": "2b51e130f70586938e51c159e45753d14ffcfd62578f150cafb9adf6eb1bf129" }, "downloads": -1, "filename": "pymarshal-1.6.1.tar.gz", "has_sig": false, "md5_digest": "a2c5c3e1d3428f6cdedbdd87071832f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13484, "upload_time": "2019-01-16T13:59:27", "url": "https://files.pythonhosted.org/packages/bd/46/434d5dd3fc21b8694734fabc263b3910cce97af9537c0ca6256b93235d88/pymarshal-1.6.1.tar.gz" } ] }