{ "info": { "author": "Hiroki KIYOHARA", "author_email": "hirokiky@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "=======\ndripper\n=======\n\nCleaning your messy data.\n\n.. contents::\n :depth: 1\n\nGetting started\n===============\n\nConsider cleaning up some messy data.\nHere is a deep nested dictionary containing lots of unnecessary nesting and tuple.\n\n.. code-block:: python\n\n some_messy_data = {\n \"body\": {\n \"article\": {\n \"articlesbody\": {\n \"articlesmeta\": {\n \"articles_meta_3\": \"Monty Python\",\n }\n }\n },\n },\n \"published\": {\n \"datetime\": (\"2014-11-05\", \"23:00:00\"),\n }\n }\n\nValues you want are ``'Monty Python'`` and ``'2014-11-05'``,\nshould be named ``'title'`` and ``'published_date'``\n\nNow let the hack begin with the ``dripper``.\n\n* Defile ``declaration`` dictionary\n* Create dripper object by ``dripper.dripper_factory``\n* Drip essential data\n\n.. code-block:: python\n\n # Define\n declaration = {\n \"title\": (\"body\", \"article\", \"articlesbody\", \"articlesmeta\", \"articles_meta_3\"),\n \"published_date\": (\"published\", \"datetime\", 0)\n }\n \n # Create\n import dripper\n d = dripper.dripper_factory(declaration)\n \n # And drip\n dripped = d(some_messy_data)\n \n assert dripped == {\n \"title\": \"Monty Python\",\n \"published_date\": \"2014-11-05\",\n }\n\nInstallation\n============\n\nJust use pip to install\n\n.. code-block:: console\n\n pip install dripper\n\nRequirements\n------------\n\n``dripper`` won't require any kind of outer libraries.\nSupporting Python versions are:\n\n* Python 2.7\n* Python 3.3\n* Python 3.4\n* Python 3.5\n\nBasics\n======\n\nAbove example is not all features of ``dripper``.\nIt is created to handle various data to clean up.\n\nAs value\n--------\n\n.. code-block:: python\n\n from dripper import dripper_factory\n declaration = {\n \"title\": (\"meta\", \"meta1\")\n })\n d = dripper_factory(declaration)\n d({\"meta\": {\"meta1\": \"Monty Python\"}}) == {\"title\": \"Monty Python\"}\n\nAlso you can specify string or integer directly.\nIt is as same as one-element tuple.\n\n.. code-block:: python\n\n from dripper import dripper_factory\n declaration = {\n \"title\": \"meta\"\n })\n d = dripper_factory(declaration)\n d({\"meta\": \"Monty Python\"}) == {\"title\": \"Monty Python\"}\n\nAs dict\n-------\n\n``dripper`` can define nested dictionary.\nJust pass nested dictionary to ``dripper_factory``.\n\n.. code-block:: python\n\n from dripper import dripper_factory\n declaration = {\n \"article\": {\n \"title\": [\"meta\", \"meta1\"],\n }\n })\n d = dripper_factory(declaration)\n d({\n \"meta\": {\n \"meta1\": \"Monty Python\",\n },\n }) == {\n \"article\": {\n \"title\": \"Monty Python\",\n }\n }\n\nYou can apply ``'__source_root__'`` to set root path for dripping.\n\n.. code-block:: python\n\n declaration = {\n \"article\": {\n \"__source_root__\": (\"body\", \"meta\"),\n ...\n \"title\": \"meta1\",\n \"author\": (\"meta2\", \"meta22\"),\n }\n })\n d = dripper_factory(declaration)\n d({\n \"body\": {\n \"meta\": {\n \"meta1\": \"Monty Python\",\n \"meta2\": {\"meta22\": \"John Due\"}\n }\n }\n }) == {\n \"article\": {\n \"title\": \"Monty Python\",\n \"author\": \"John Due\",\n }\n }\n\nTechnically, outermost dictionary of ``declaration`` is as same as inner dictionaries.\nSo you can specify ``'__source_root__'`` the dictionary.\n\nAs list\n-------\n\n``dripper`` can define list of dictionaries.\nYou need to apply ``'__type__': 'list'``.\n\n.. code-block:: python\n\n from dripper import dripper_factory\n declaration = {\n \"articles\": {\n \"__type__\": \"list\",\n \"__source_root__\": \"articles\",\n ...\n \"title\": \"meta1\",\n \"author\": [\"meta2\", \"meta22\"],\n }\n })\n d = dripper_factory(declaration)\n d({\n \"articles\": [\n {\"meta1\": \"Monty Python\", \"meta2\": {\"meta22\": \"John Doe\"}},\n {\"meta1\": \"Flying Circus\", \"meta2\": {\"meta22\": \"Jane Doe\"}},\n ]\n }) == {\n \"articles\": [\n {\"title\": \"Monty Python\", \"author\": \"John Doe\"},\n {\"title\": \"Flying Circus\", \"author\": \"Jane Doe\"},\n ]\n }\n\nAdvanced\n========\n\nConverting\n----------\n\nUse ``dripper.ValueDripper`` to pass converter function.\n\n.. code-block:: python\n\n import dripper\n declaration = {\n \"title\": dripper.ValueDripper([\"title\"], converter=lambda s: s.lower())\n }\n d = dripper.dripper_factory(declaration)\n d({\"title\": \"TITLE\"}) == {\"title\": \"title\"}\n\n\nTechnically, each ends (list) will be replaced by instance of ``dripper.ValueDripper``.\n\ndefault value\n-------------\n\nSpecify ``default`` keyword argument to change default value.\n``None`` will be applied as default.\n\n.. code-block:: python\n\n import dripper\n declaration = {\n \"title\": dripper.ValueDripper([\"title\"], default=\"default\")\n }\n d = dripper.dripper_factory(declaration)\n d({}) == {\"title\": \"default\"}\n\n\nTechnically, each ends (list) will be replaced by instance of ``dripper.ValueDripper``.\n\nCombining\n---------\n\nBy combining ``dripper.ValueDripper``, result value of that key will be combined.\n\n.. code-block:: python\n\n import dripper\n declaration = {\n \"fullname\": (dripper.ValueDripper([\"firstname\"]) +\n dripper.ValueDripper([\"lastname\"]))\n }\n d = dripper.dripper_factory(declaration)\n d({\"firstname\": \"Hrioki\", \"lastname\": \"Kiyohara\"}) == {\"fullname\": \"HriokiKiyohara\"}\n\n\nCHANGES\n=======\n\n1.2\n----\n\n- Avoid deepcopy to improve speed\n\n - https://github.com/hirokiky/dripper/pull/6\n - Thanks @afiram\n\n1.1\n---\n\n- ``None`` is default value of ``ValueDripper``\n\n - Before this change ``ValueDripper`` without ``default`` keyword argument\n will raise ``DrippingError``\n - In order to this behavior ``DictDripper`` will return empty dict\n when inner value dripper could not dig out values\n - Thanks for @bungoume to suggest this behavior\n\n1.0\n---\n\n- Officially supported Python 3.5\n\n0.3.1\n-----\n\n- ValueDripper now accepts ``default`` argument.\n\n0.3\n---\n\n- Fixed to accept string or integer directly as source_root.\n\n0.2\n---\n\n- Improved error handling.\n- Added MixDripper.\n\n0.1\n---\n\n- Initial version\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hirokiky/dripper", "keywords": "dict data converter cleaning mapping", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "dripper", "package_url": "https://pypi.org/project/dripper/", "platform": "", "project_url": "https://pypi.org/project/dripper/", "project_urls": { "Homepage": "https://github.com/hirokiky/dripper" }, "release_url": "https://pypi.org/project/dripper/1.2/", "requires_dist": null, "requires_python": "", "summary": "Cleaning your messy data.", "version": "1.2" }, "last_serial": 3209102, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "4bc9819502b63a49915e3066bf972b6e", "sha256": "63da4466f667dfa247b019cb77c807e668d491b15320ee2a1ce903f59d63b037" }, "downloads": -1, "filename": "dripper-0.1.tar.gz", "has_sig": false, "md5_digest": "4bc9819502b63a49915e3066bf972b6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3480, "upload_time": "2015-02-04T01:57:21", "url": "https://files.pythonhosted.org/packages/bf/5c/520ab3066709206843b496c42dd7f8735c1d55a0e4cd90f76b1486047028/dripper-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "f25d09e60f1dfa379eb0722c774c5be9", "sha256": "2a21c17367af2ef589ad3f0eec863b76897713cc33e434278b08335d9d5b3a0a" }, "downloads": -1, "filename": "dripper-0.2.tar.gz", "has_sig": false, "md5_digest": "f25d09e60f1dfa379eb0722c774c5be9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3847, "upload_time": "2015-02-04T08:22:47", "url": "https://files.pythonhosted.org/packages/93/69/89164975b835e1134479807ccd40ea478b501b3c2e71fb116c11d5e19879/dripper-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "ce9146a2909552ed9bbdce2cf0fdd288", "sha256": "66b7c44e61a33f5af2666d9a2eae7542221137daf575ab3e5cde5a94d19ac1c8" }, "downloads": -1, "filename": "dripper-0.3.tar.gz", "has_sig": false, "md5_digest": "ce9146a2909552ed9bbdce2cf0fdd288", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4918, "upload_time": "2015-02-06T13:36:01", "url": "https://files.pythonhosted.org/packages/e5/e1/3c024d3e0c8056392f2e10a3ace5a5bfc65f2d498647467df4920733f9c2/dripper-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "6ccfe47d537a866944130c2a805a9093", "sha256": "8e68f35df24ba285438883912f259e1df7fab3a2edc96276659ef7d00ee346df" }, "downloads": -1, "filename": "dripper-0.3.1.tar.gz", "has_sig": false, "md5_digest": "6ccfe47d537a866944130c2a805a9093", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5195, "upload_time": "2015-02-10T05:46:10", "url": "https://files.pythonhosted.org/packages/4e/b8/2555668faaddaec98158a76cbdae09517818d8fd0a5574df7cd2da4c02f0/dripper-0.3.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "e1bca3cb88ad85a2b53f81bb0b884980", "sha256": "1526c34e1bec6df31a0248ab65db1f1a17a12120be6700b368fd5e319cdaccd0" }, "downloads": -1, "filename": "dripper-1.0.tar.gz", "has_sig": false, "md5_digest": "e1bca3cb88ad85a2b53f81bb0b884980", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5249, "upload_time": "2015-11-10T05:19:57", "url": "https://files.pythonhosted.org/packages/a6/5c/4bedec5d2b5c4d3c44e9a3add4a39e9a74db8968317eb72af9c0e4cbc383/dripper-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "dd60c9a0621cc47e6568283933affcbe", "sha256": "ec5723fef187a057a50e2e45497e1323fcbee17716be3554bb8c7cbc8637348c" }, "downloads": -1, "filename": "dripper-1.1.tar.gz", "has_sig": false, "md5_digest": "dd60c9a0621cc47e6568283933affcbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5425, "upload_time": "2016-01-13T08:45:12", "url": "https://files.pythonhosted.org/packages/24/8d/3788d4302f6b8ce6a57be7d581035b6b77910bface78342e1cdad09b0de5/dripper-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "2ce8b434fcafdda2289f0b83abe9646b", "sha256": "66385c7d1364a3fc8a8c404fca1f85760d36d27077f3dba5e05b6ed55a03a94a" }, "downloads": -1, "filename": "dripper-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2ce8b434fcafdda2289f0b83abe9646b", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 7054, "upload_time": "2017-09-28T06:28:41", "url": "https://files.pythonhosted.org/packages/8d/7e/f131cec4891f718ed027dbe7677f15cab488b4d520fa77828cf3f63201c9/dripper-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfe6776d4303ddf8b1e8a891f35f0aac", "sha256": "f9ca9905d9997d4866064d5411d586533894515b8239f523455f20d58acfe5fb" }, "downloads": -1, "filename": "dripper-1.2.tar.gz", "has_sig": false, "md5_digest": "cfe6776d4303ddf8b1e8a891f35f0aac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5524, "upload_time": "2017-09-28T06:28:40", "url": "https://files.pythonhosted.org/packages/fd/89/f3436998ada1dc099d7b937f7b32e443eec4df2200f518aaf81e5f8d8a89/dripper-1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2ce8b434fcafdda2289f0b83abe9646b", "sha256": "66385c7d1364a3fc8a8c404fca1f85760d36d27077f3dba5e05b6ed55a03a94a" }, "downloads": -1, "filename": "dripper-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2ce8b434fcafdda2289f0b83abe9646b", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 7054, "upload_time": "2017-09-28T06:28:41", "url": "https://files.pythonhosted.org/packages/8d/7e/f131cec4891f718ed027dbe7677f15cab488b4d520fa77828cf3f63201c9/dripper-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfe6776d4303ddf8b1e8a891f35f0aac", "sha256": "f9ca9905d9997d4866064d5411d586533894515b8239f523455f20d58acfe5fb" }, "downloads": -1, "filename": "dripper-1.2.tar.gz", "has_sig": false, "md5_digest": "cfe6776d4303ddf8b1e8a891f35f0aac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5524, "upload_time": "2017-09-28T06:28:40", "url": "https://files.pythonhosted.org/packages/fd/89/f3436998ada1dc099d7b937f7b32e443eec4df2200f518aaf81e5f8d8a89/dripper-1.2.tar.gz" } ] }