{ "info": { "author": "Travis Clarke", "author_email": "travis.m.clarke@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# [mergedeep](https://mergedeep.readthedocs.io/en/latest/)\n\n[![PyPi release](https://img.shields.io/pypi/v/mergedeep.svg)](https://pypi.org/project/mergedeep/)\n[![PyPi versions](https://img.shields.io/pypi/pyversions/mergedeep.svg)](https://pypi.org/project/mergedeep/)\n[![Downloads](https://pepy.tech/badge/mergedeep)](https://pepy.tech/project/mergedeep)\n[![Documentation Status](https://readthedocs.org/projects/mergedeep/badge/?version=latest)](https://mergedeep.readthedocs.io/en/latest/?badge=latest)\n\nA deep merge function for \ud83d\udc0d.\n\n[Check out the mergedeep docs](https://mergedeep.readthedocs.io/en/latest/)\n\n## Installation\n\n```bash\n$ pip install mergedeep\n```\n\n## Usage\n\n```text\nmerge(target: Map[KT, VT], *sources: Map[KT, VT], strategy: Strategy = Strategy.REPLACE) -> Map[KT, VT]\n```\n\nDeep merge without mutating the source dicts.\n\n```python\nfrom mergedeep import merge\n\na = {\"keyA\": 1}\nb = {\"keyB\": {\"sub1\": 10}}\nc = {\"keyB\": {\"sub2\": 20}}\n\nmerged = merge({}, a, b, c) \n\nprint(merged)\n# {\"keyA\": 1, \"keyB\": {\"sub1\": 10, \"sub2\": 20}}\n```\n\nDeep merge into an existing dict.\n```python\nfrom mergedeep import merge\n\na = {\"keyA\": 1}\nb = {\"keyB\": {\"sub1\": 10}}\nc = {\"keyB\": {\"sub2\": 20}}\n\nmerge(a, b, c) \n\nprint(a)\n# {\"keyA\": 1, \"keyB\": {\"sub1\": 10, \"sub2\": 20}}\n```\n\n### Merge strategies:\n1. Replace (*default*)\n```python\n# Strategy.REPLACE\n# When `target` and `source` values are the same, replace the `target` value with one from `source` (default).\n# Note: with multiple sources, the `last` source value with be what appears in the merged result. \n\nfrom mergedeep import merge, Strategy\n\ntarget = {\"key\": [1, 2]}\nsource = {\"key\": [3, 4]}\n\nmerge(target, source, strategy=Strategy.REPLACE) \n# same as: merge(target, source)\n\nprint(target)\n# {\"key\": [3, 4]}\n```\n\n2. Additive\n```python\n# Strategy.ADDITIVE\n# When `target` and `source` values are both either `list`, `tuple`, or `set`, extend/update `target` with values from `source` collection.\n\nfrom mergedeep import merge, Strategy\n\ntarget = {\"key\": [1, 2]}\nsource = {\"key\": [3, 4]}\n\nmerge(target, source, strategy=Strategy.ADDITIVE) \n\nprint(target)\n# {\"key\": [1, 2, 3, 4]}\n```\n\n3. Typesafe\n```python\n# Strategy.TYPESAFE\n# When `target` and `source` values are of different types, raise `TypeError`.\n\nfrom mergedeep import merge, Strategy\n\ntarget = {\"key\": [1, 2]}\nsource = {\"key\": {3, 4}}\n\nmerge(target, source, strategy=Strategy.TYPESAFE) \n# TypeError: target type: differs from source type: for key: \"key\"\n```\n\n## License\n\nMIT © [**Travis Clarke**](https://blog.travismclarke.com/)\n\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/clarketm/mergedeep", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "mergedeep", "package_url": "https://pypi.org/project/mergedeep/", "platform": "", "project_url": "https://pypi.org/project/mergedeep/", "project_urls": { "Homepage": "https://github.com/clarketm/mergedeep" }, "release_url": "https://pypi.org/project/mergedeep/1.1.1/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A deep merge function for \ud83d\udc0d.", "version": "1.1.1" }, "last_serial": 5136851, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "6ab6db7637180e9f4532de4394f23c8c", "sha256": "5ec14fe105f15f44e7f9bcf19bf3b457cb5b5ffca400646a463d1e4983309c1c" }, "downloads": -1, "filename": "mergedeep-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ab6db7637180e9f4532de4394f23c8c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3912, "upload_time": "2019-02-04T01:51:52", "url": "https://files.pythonhosted.org/packages/36/78/449823d74aef23886e0e5ab5accafcc1dc5a25cbb28f6d723a2428ad9859/mergedeep-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3baedef63f4b22942cc81d0abc9d7b78", "sha256": "8bbfdd5259e436c523a8e58a817cc0772f142e0ae5c2b9e77787862c9b27387a" }, "downloads": -1, "filename": "mergedeep-0.0.0.tar.gz", "has_sig": false, "md5_digest": "3baedef63f4b22942cc81d0abc9d7b78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2923, "upload_time": "2019-02-04T01:51:54", "url": "https://files.pythonhosted.org/packages/03/57/5c9d535ad6b0892c4fba2fca913648242a8c2aa0844f42eb0a3de67f0572/mergedeep-0.0.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "a242bbdac6130c6aa7d350abb1ffac7f", "sha256": "f76b1ce02e87b99a2e12f2955736e6a2233d59bd07271530e35357558395aefe" }, "downloads": -1, "filename": "mergedeep-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a242bbdac6130c6aa7d350abb1ffac7f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3952, "upload_time": "2019-02-04T02:11:40", "url": "https://files.pythonhosted.org/packages/85/e9/ced5a2103777992ec818c481aabe54bbf3cb3261d6fee5ef024c1b931993/mergedeep-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a2fcad7b55c5830bff5efe350ffab6d", "sha256": "29ff76cc9c4d16141ac82fc222c479fca3d4ddf6afdad169cdae29e0ac3bb300" }, "downloads": -1, "filename": "mergedeep-1.0.0.tar.gz", "has_sig": false, "md5_digest": "4a2fcad7b55c5830bff5efe350ffab6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2947, "upload_time": "2019-02-04T02:11:42", "url": "https://files.pythonhosted.org/packages/75/39/94947d4f2f39ad715f8f59808b7aeb44c912223b934d4fa922a3073462d6/mergedeep-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "cf93e0faa29f0e750b1f388f2e05c65b", "sha256": "016509cba607f786b1eade811003ad7ed23d62bcc99cc5c2531036eea3cfe4d3" }, "downloads": -1, "filename": "mergedeep-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cf93e0faa29f0e750b1f388f2e05c65b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 3985, "upload_time": "2019-02-11T03:28:29", "url": "https://files.pythonhosted.org/packages/4e/9f/b3d6dfe3836215f0a5815ba7ed7208edd9cb5e1d2a99f8bdf120e59d727e/mergedeep-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe4c0956c54ad7f5e6e531a9f72be59a", "sha256": "83788ec949c2c52fd49480beb934499dda599591c5f060641d942d9f9747c61c" }, "downloads": -1, "filename": "mergedeep-1.0.1.tar.gz", "has_sig": false, "md5_digest": "fe4c0956c54ad7f5e6e531a9f72be59a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3008, "upload_time": "2019-02-11T03:28:30", "url": "https://files.pythonhosted.org/packages/c9/19/893bc0fe359bd3c004aa241661ef6a1e519956db0a9b8c2c19e521a6ffef/mergedeep-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "b8ea234ae87791d1f553cbed80565e62", "sha256": "99b8f8fe970899ba335cabfc5fa55911119cce5f7b3c4b23489a4ab50f09e438" }, "downloads": -1, "filename": "mergedeep-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b8ea234ae87791d1f553cbed80565e62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5302, "upload_time": "2019-02-11T21:26:31", "url": "https://files.pythonhosted.org/packages/b8/f9/0539e1d417d6a24b0483bd028f85ae74ece04d9253ffcea4276dc88649ac/mergedeep-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f4b383688dc82d8163c0fe909b67987", "sha256": "542cf4b0361e529113ddf5eb46fbe0b6dca33caed9ad2cad72d79817e693b103" }, "downloads": -1, "filename": "mergedeep-1.0.2.tar.gz", "has_sig": false, "md5_digest": "9f4b383688dc82d8163c0fe909b67987", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3893, "upload_time": "2019-02-11T21:26:32", "url": "https://files.pythonhosted.org/packages/f5/73/74328ffb4c800d368985110e528b32b0275bc8854631791660d191627602/mergedeep-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "5c622aa1c4aa5607803970cd952a7f47", "sha256": "9bf00d1e2b6cdf2f3db0d3edd7a66d5fee9d6dcc6e0a2ae296cbbb6fbfc5f067" }, "downloads": -1, "filename": "mergedeep-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5c622aa1c4aa5607803970cd952a7f47", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5267, "upload_time": "2019-02-24T09:45:22", "url": "https://files.pythonhosted.org/packages/00/e2/c75f6d0cb82e0d6821222c1686562609fd7f6be940a1081092b08721d723/mergedeep-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f96ba114e717be1fb7f1d5fc95a9bc54", "sha256": "4dd93dc022ff627c70c86461423c1af849cfe8412fa664553e60691af7adaed3" }, "downloads": -1, "filename": "mergedeep-1.0.3.tar.gz", "has_sig": false, "md5_digest": "f96ba114e717be1fb7f1d5fc95a9bc54", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3886, "upload_time": "2019-02-24T09:45:23", "url": "https://files.pythonhosted.org/packages/e5/5e/c607eea30613bb8180b71f0aee945188677ae99bf604f349df768ee610a1/mergedeep-1.0.3.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "03b6048479bfc00306b593829d0e81ff", "sha256": "e688378c3eb3d1297dac3a56f4a1b0d4cfec004629688bf35f01cedde479ad1f" }, "downloads": -1, "filename": "mergedeep-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "03b6048479bfc00306b593829d0e81ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5609, "upload_time": "2019-04-13T05:08:28", "url": "https://files.pythonhosted.org/packages/8a/36/2c2eb770468c96cf642eda7b62601817f63fd899d3bb0ea9a9627f36f269/mergedeep-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9734924fdb991ded8dae206bd48c9dca", "sha256": "609438501039d3832f797f50a0bce0ac61e29f3ce7679c12778baed1d0be4c3d" }, "downloads": -1, "filename": "mergedeep-1.1.1.tar.gz", "has_sig": false, "md5_digest": "9734924fdb991ded8dae206bd48c9dca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3952, "upload_time": "2019-04-13T05:08:29", "url": "https://files.pythonhosted.org/packages/e4/12/c9c93285c47a23debdc4fb810d5bdf8b1d900fc7b5fbce62fff686647596/mergedeep-1.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "03b6048479bfc00306b593829d0e81ff", "sha256": "e688378c3eb3d1297dac3a56f4a1b0d4cfec004629688bf35f01cedde479ad1f" }, "downloads": -1, "filename": "mergedeep-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "03b6048479bfc00306b593829d0e81ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5609, "upload_time": "2019-04-13T05:08:28", "url": "https://files.pythonhosted.org/packages/8a/36/2c2eb770468c96cf642eda7b62601817f63fd899d3bb0ea9a9627f36f269/mergedeep-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9734924fdb991ded8dae206bd48c9dca", "sha256": "609438501039d3832f797f50a0bce0ac61e29f3ce7679c12778baed1d0be4c3d" }, "downloads": -1, "filename": "mergedeep-1.1.1.tar.gz", "has_sig": false, "md5_digest": "9734924fdb991ded8dae206bd48c9dca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3952, "upload_time": "2019-04-13T05:08:29", "url": "https://files.pythonhosted.org/packages/e4/12/c9c93285c47a23debdc4fb810d5bdf8b1d900fc7b5fbce62fff686647596/mergedeep-1.1.1.tar.gz" } ] }