{ "info": { "author": "Dotan Nahum", "author_email": "jondotan@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "![](media/carve.png)\n\n# \ud83c\udf32Carve\n\nA minimalist Python library for manipulating nested data structures with ease and performance.\n\nTake a look:\n\n```\n>>> from carve import treemap\n>>> obj = {\"john\": {\"doe\": [{\"puma\": \"yes\", \"adidas\": None}]}}\n>>> treemap(obj, remove_empty)\n{\"john\": {\"doe\": [{\"puma\": \"yes\"}]}}\n>>> treemap(obj, lambda k,v,p: (\"PUMA\", \"puma\") if k == \"puma\" else (k,v))\n{\"john\": {\"doe\": [{\"PUMA\": \"puma\", \"adidas\": None}]}}\n```\n\n## Quick Start\n\nInstall using pip/pipenv/etc. (we recommend [poetry](https://github.com/sdispater/poetry) for sane dependency management):\n\n```\n$ poetry add carve\n```\n\nTransform your dictionary using a `k,v,p` context for each operation:\n\n* k - key.\n* v - value.\n* p - path, in the form of a tuple: (\"john\", \"doe\") means the nested key \"john.doe\".\n\nAnd return a key-value tuple: `(key, value)`. You can:\n\n* Return a custom value to change both key and value `(\"foo\", \"bar\")`\n* Just modify a key: `(\"foo\", v)`\n* Just modify a value: `(k, \"bar\")`\n* Remove the current entry: `(None, None)`\n* Decide what to do based on your current path: `(None, None) if \"secret\" in p else (k,v)`\n\n## Builtins\n\nYou can use the following builtins for shortcut operations:\n\n```python\nfrom carve import treemap, mapkey, mapval, remove, on_key, remove_empty, flow\n\ntreemap(target, remove(lambda k, v, p: k == \"adidas\"))\ntreemap(target, mapval(lambda k, v, p: \"X\" if len(p) > 2 else v))\ntreemap(target, mapkey(lambda k, v, p: \"X\" + v if len(p) > 2 else k))\ntreemap(target, on_key(\"puma\", lambda k, v, p: (k, \"X\")))\ntreemap(target, remove_empty)\n\n# multiple builtins, left-to-right with 'flow'\nassert treemap(target, flow(scream, remove_empty))\n```\n\n\n### Thanks:\n\nTo all [Contributors](https://github.com/jondot/carve/graphs/contributors) - you make this happen, thanks!\n\n# Copyright\n\nCopyright (c) 2018 [@jondot](http://twitter.com/jondot). See [LICENSE](LICENSE.txt) for further details.", "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/jondot/carve", "keywords": "dict,data,nested,functional", "license": "MIT", "maintainer": "Dotan Nahum", "maintainer_email": "jondotan@gmail.com", "name": "carve", "package_url": "https://pypi.org/project/carve/", "platform": "", "project_url": "https://pypi.org/project/carve/", "project_urls": { "Homepage": "https://github.com/jondot/carve" }, "release_url": "https://pypi.org/project/carve/0.2.1/", "requires_dist": [ "toolz (>=0.9.0,<0.10.0)", "cytoolz (>=0.9.0,<0.10.0)" ], "requires_python": "", "summary": "A minimalist Python library for manipulating nested data structures with ease and performance.", "version": "0.2.1" }, "last_serial": 4283367, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "1d46cc8d9a13be4efdb908342da9423f", "sha256": "a4f2a32fb1b53c52f6f1c293e9cc5f5d7e2ad1b0f7b7f005357da9c8f04b2f75" }, "downloads": -1, "filename": "carve-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1d46cc8d9a13be4efdb908342da9423f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2913, "upload_time": "2018-09-18T11:29:20", "url": "https://files.pythonhosted.org/packages/01/04/e9ce66b570c13608c346a200e2ee5abcb2a2c0d7b47156e4ac3c349ea01d/carve-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e5e6bc3fbee2a9cec754fbe79f0be37", "sha256": "7933aef062f68dd70600798d544937b85f3afe37a95a73093dbe717f8f39da40" }, "downloads": -1, "filename": "carve-0.1.0.tar.gz", "has_sig": false, "md5_digest": "8e5e6bc3fbee2a9cec754fbe79f0be37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1607, "upload_time": "2018-09-18T11:29:22", "url": "https://files.pythonhosted.org/packages/56/1c/4d10de48fb0cb9089344bedb82947f658b0a779bd51216f624c8f9d860eb/carve-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "53f31f59064d74fa9386c850b1dfdcf1", "sha256": "b98ca5a49e24edc6f69432e60bd8903fa548e30a055b3d3817289523ec50e895" }, "downloads": -1, "filename": "carve-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "53f31f59064d74fa9386c850b1dfdcf1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3905, "upload_time": "2018-09-18T11:50:02", "url": "https://files.pythonhosted.org/packages/09/c2/25b11623906e5e46f8722729275f6fcf47116e705f2c5b433b030897e810/carve-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d39603da1541d3968135a52f6aa7dc51", "sha256": "2d8c135b09a44a77638c28b786b3e420c2943ba07dc850f2f80885ae4667a416" }, "downloads": -1, "filename": "carve-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d39603da1541d3968135a52f6aa7dc51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2868, "upload_time": "2018-09-18T11:50:03", "url": "https://files.pythonhosted.org/packages/82/e8/03590f4f127025d052ae32fe8b7dfb9c75d15fbaff7fdc4314b8fb85d57e/carve-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "4b0987c609f5c97f290b4613ebbb54ba", "sha256": "2eb0302d6871c3ea620528d9325060a70382d4c4c2d1dc0d97e00dc6b655efc8" }, "downloads": -1, "filename": "carve-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b0987c609f5c97f290b4613ebbb54ba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4109, "upload_time": "2018-09-18T12:23:10", "url": "https://files.pythonhosted.org/packages/67/25/8882529fc892e181b038a257fc1c52dcd9d0e38cf8ae862a6ae691c8ce35/carve-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09ca2d0c29dd5ef97c2fd74e216bc2f4", "sha256": "7fb83859cc1e6f71f132ac402d9ab607d2e3eeb5fb3d0784f4223dfee676dc31" }, "downloads": -1, "filename": "carve-0.2.1.tar.gz", "has_sig": false, "md5_digest": "09ca2d0c29dd5ef97c2fd74e216bc2f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2963, "upload_time": "2018-09-18T12:23:11", "url": "https://files.pythonhosted.org/packages/c7/ae/ca9022c8fe24636026c4d50113a1aee71d42eaafef8e5fe66a4ad1e5f2e8/carve-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4b0987c609f5c97f290b4613ebbb54ba", "sha256": "2eb0302d6871c3ea620528d9325060a70382d4c4c2d1dc0d97e00dc6b655efc8" }, "downloads": -1, "filename": "carve-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b0987c609f5c97f290b4613ebbb54ba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4109, "upload_time": "2018-09-18T12:23:10", "url": "https://files.pythonhosted.org/packages/67/25/8882529fc892e181b038a257fc1c52dcd9d0e38cf8ae862a6ae691c8ce35/carve-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09ca2d0c29dd5ef97c2fd74e216bc2f4", "sha256": "7fb83859cc1e6f71f132ac402d9ab607d2e3eeb5fb3d0784f4223dfee676dc31" }, "downloads": -1, "filename": "carve-0.2.1.tar.gz", "has_sig": false, "md5_digest": "09ca2d0c29dd5ef97c2fd74e216bc2f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2963, "upload_time": "2018-09-18T12:23:11", "url": "https://files.pythonhosted.org/packages/c7/ae/ca9022c8fe24636026c4d50113a1aee71d42eaafef8e5fe66a4ad1e5f2e8/carve-0.2.1.tar.gz" } ] }