{ "info": { "author": null, "author_email": "Eran Rivlis ", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries", "Typing :: Typed" ], "description": "# MappingTools\n\nThis library provides utility functions for manipulating and transforming data structures which have or include\nMapping-like characteristics. Including inverting dictionaries, converting class like objects to dictionaries, creating\nnested defaultdicts, and unwrapping complex objects.\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Package\n \"PyPI\n \"PyPI\n \"PyPI\n \"PyPI\n
\n \"GitHub\"\n \"GitHub\n \"GitHub\n \"Contributors\"\n
Tools\n \"PyCharm\"\n \"Ruff\"\n \"uv\"\n \n
CI/CD\n \"Tests\"\n \"Publish\"\n \n
Scans\n \"Coverage\"\n
\n \"Quality\n \"Security\n \"Maintainability\n \"Reliability\n
\n \"Lines\n \"Vulnerabilities\"\n \"Bugs\"\n
\n \"Codacy\n \"Codacy\n
\n\n## Usage\n\n### Transformers\n\n#### `distinct`\n\nYields distinct values for a specified key across multiple mappings.\n\n```python\nfrom mappingtools import distinct\n\nmappings = [\n {'a': 1, 'b': 2},\n {'a': 2, 'b': 3},\n {'a': 1, 'b': 4}\n]\ndistinct_values = list(distinct('a', *mappings))\nprint(distinct_values)\n# Output: [1, 2]\n```\n\n#### `keep`\n\nYields subsets of mappings by retaining only the specified keys.\n\n```python\nfrom mappingtools import keep\n\nmappings = [\n {'a': 1, 'b': 2, 'c': 3},\n {'a': 4, 'b': 5, 'd': 6}\n]\nkeys_to_keep = ['a', 'b']\nresult = list(keep(keys_to_keep, *mappings))\n# result: [{'a': 1, 'b': 2}, {'a': 4, 'b': 5}]\n```\n\n#### `remove`\n\nYields mappings with specified keys removed. It takes an iterable of keys and multiple mappings, and returns a generator\nof mappings with those keys excluded.\n\n```python\nfrom mappingtools import remove\n\nmappings = [\n {'a': 1, 'b': 2, 'c': 3},\n {'a': 4, 'b': 5, 'd': 6}\n]\nkeys_to_remove = ['a', 'b']\nresult = list(remove(keys_to_remove, *mappings))\n# result: [{'c': 3}, {'d': 6}]\n```\n\n#### `inverse`\n\nSwaps keys and values in a dictionary.\n\n```python\nfrom mappingtools import inverse\n\noriginal_mapping = {'a': {1, 2}, 'b': {3}}\ninverted_mapping = inverse(original_mapping)\nprint(inverted_mapping)\n# Output: defaultdict(, {1: {'a'}, 2: {'a'}, 3: {'b'}})\n```\n\n#### `strictify`\n\nStrictify function applies a strict structural conversion to an object using optional converters for keys and values.\n\n```python\nfrom mappingtools import strictify\n\n\ndef uppercase_key(key):\n return key.upper()\n\n\ndef double_value(value):\n return value * 2\n\n\ndata = {'a': 1, 'b': 2}\nresult = strictify(data, key_converter=uppercase_key, value_converter=double_value)\nprint(result)\n# Output: {'A': 2, 'B': 4}\n```\n\n#### `simplify`\n\nConverts objects to strictly structured dictionaries.\n\n```python\nfrom collections import Counter\nfrom dataclasses import dataclass\nfrom datetime import datetime\nfrom typing import Mapping\n\nfrom mappingtools import simplify\n\ndata = {'key1': 'value1', 'key2': ['item1', 'item2']}\nsimplified_data = simplify(data)\nprint(simplified_data)\n# Output: {'key1': 'value1', 'key2': ['item1', 'item2']}\n\ncounter = Counter({'a': 1, 'b': 2})\nprint(counter)\n# Output: Counter({'b': 2, 'a': 1})\n\nsimplified_counter = simplify(counter)\nprint(simplified_counter)\n\n\n# Output: {'a': 1, 'b': 2}\n\n\n@dataclass\nclass SampleDataClass:\n a: int\n b: int\n aa: str\n bb: str\n c: list[int]\n d: Mapping\n e: datetime\n\n\nsample_datetime = datetime(2024, 7, 22, 21, 42, 17, 314159)\nsample_dataclass = SampleDataClass(1, 2, '11', '22', [1, 2], {'aaa': 111, 'bbb': '222'}, sample_datetime)\n\nprint(sample_dataclass)\n# Output: SampleDataClass(a=1, b=2, aa='11', bb='22', c=[1, 2], d={'aaa': 111, 'bbb': '222'}, e=datetime.datetime(2024, 7, 22, 21, 42, 17, 314159))\n\nsimplified_sample_dataclass = simplify(sample_dataclass)\nprint(simplified_sample_dataclass)\n# Output: {'a': 1, 'aa': '11', 'b': 2, 'bb': '22', 'c': [1, 2], 'd': {'aaa': 111, 'bbb': '222'}, 'e': datetime.datetime(2024, 7, 22, 21, 42, 17, 314159)}\n```\n\n#### `listify`\n\nTransforms complex objects into a list of dictionaries with key and value pairs.\n\n```python\nfrom mappingtools import listify\n\nwrapped_data = {'key1': {'subkey': 'value'}, 'key2': ['item1', 'item2']}\nunwrapped_data = listify(wrapped_data)\nprint(unwrapped_data)\n# Output: [{'key': 'key1', 'value': [{'key': 'subkey', 'value': 'value'}]}, {'key': 'key2', 'value': ['item1', 'item2']}]\n```\n\n#### `stream`\n\nTakes a mapping and an optional item factory function, and generates items from the mapping.\nIf the item factory is provided, it applies the factory to each key-value pair before yielding.\n\n```python\nfrom collections import namedtuple\n\nfrom mappingtools import stream\n\n\ndef custom_factory(key, value):\n return f\"{key}: {value}\"\n\n\nmy_mapping = {'a': 1, 'b': 2, 'c': 3}\n\nfor item in stream(my_mapping, custom_factory):\n print(item)\n# Output:\n# a: 1\n# b: 2\n# c: 3\n\n\nMyTuple = namedtuple('MyTuple', ['key', 'value'])\ndata = {'a': 1, 'b': 2}\n\nfor item in stream(data, MyTuple):\n print(item)\n\n\n# Output:\n# MyTuple(key='a', value=1)\n# MyTuple(key='b', value=2)\n\n\ndef record(k, v):\n return {'key': k, 'value': v}\n\n\nfor item in stream(data, record):\n print(item)\n# output:\n# {'key': 'a', 'value': 1}\n# {'key': 'b', 'value': 2}\n```\n\n#### `stream_dict_records`\n\ngenerates dictionary records from a given mapping, where each record contains a key-value pair from the mapping with\ncustomizable key and value names.\n\n```python\nfrom mappingtools import stream_dict_records\n\nmapping = {'a': 1, 'b': 2}\nrecords = stream_dict_records(mapping, key_name='letter', value_name='number')\nfor record in records:\n print(record)\n# Output:\n# {'letter': 'a', 'number': 1}\n# {'letter': 'b', 'number': 2}\n```\n\n### Collectors\n\n#### `nested_defaultdict`\n\nCreates a nested defaultdict with specified depth and factory.\n\n```python\nfrom mappingtools import nested_defaultdict\n\nnested_dd = nested_defaultdict(1, list)\nnested_dd[0][1].append('value')\nprint(nested_dd)\n# Output: defaultdict(.factory at ...>, {0: defaultdict(.factory at ...>, {1: ['value']})})\n```\n\n#### `CategoryCounter`\n\nThe CategoryCounter class extends a dictionary to count occurrences of data items categorized by multiple categories.\nIt maintains a total count of all data items and allows categorization using direct values or functions.\n\n```python\nfrom mappingtools import CategoryCounter\n\ncounter = CategoryCounter()\n\nfor fruit in ['apple', 'banana', 'apple']:\n counter.update({fruit: 1}, type='fruit', char_count=len(fruit), unique_char_count=len(set(fruit)))\n\nprint(counter.total)\n# Output: Counter({'apple': 2, 'banana': 1})\n\nprint(counter)\n# Output: CategoryCounter({'type': defaultdict(, {'fruit': Counter({'apple': 2, 'banana': 1})}), 'char_count': defaultdict(, {5: Counter({'apple': 2}), 6: Counter({'banana': 1})}), 'unique_char_count': defaultdict(, {4: Counter({'apple': 2}), 3: Counter({'banana': 1})})})\n```\n\n#### `MappingCollector`\n\nA class designed to collect key-value pairs into an internal mapping based on different modes.\nIt supports modes like ALL, COUNT, DISTINCT, FIRST, and LAST, each dictating how key-value pairs are\ncollected.\n\n```python\nfrom mappingtools import MappingCollector, MappingCollectorMode\n\ncollector = MappingCollector(MappingCollectorMode.ALL)\ncollector.add('a', 1)\ncollector.add('a', 2)\ncollector.collect([('b', 3), ('b', 4)])\nprint(collector.mapping)\n# Output: {'a': [1, 2], 'b': [3, 4]}\n```\n\n## Development\n\n### Ruff\n\n```shell\nruff check src\n```\n\n### Test\n\n#### Standard (cobertura) XML Coverage Report\n\n```shell\npython -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=xml\n```\n\n#### HTML Coverage Report\n\n```shell\npython -m pytest tests -n auto --cov=src --cov-branch --doctest-modules --cov-report=html\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "dynamic": null, "home_page": null, "keywords": "Mapping, manipulate, mutate, transform", "license": null, "maintainer": null, "maintainer_email": null, "name": "mappingtools", "package_url": "https://pypi.org/project/mappingtools/", "platform": null, "project_url": "https://pypi.org/project/mappingtools/", "project_urls": { "Bug Tracker": "https://github.com/erivlis/mappingtools/issues", "Homepage": "https://erivlis.github.io/mappingtools", "Source": "https://github.com/erivlis/mappingtools" }, "provides_extra": [ "dev", "docs", "test" ], "release_url": "https://pypi.org/project/mappingtools/0.2.0/", "requires_dist": [ "ruff; extra == \"dev\"", "mkdocs-gen-files; extra == \"docs\"", "mkdocs-git-revision-date-localized-plugin; extra == \"docs\"", "mkdocs-glightbox; extra == \"docs\"", "mkdocs-literate-nav; extra == \"docs\"", "mkdocs-material; extra == \"docs\"", "mkdocs-section-index; extra == \"docs\"", "mkdocstrings-python; extra == \"docs\"", "pytest; extra == \"test\"", "pytest-cov; extra == \"test\"", "pytest-randomly; extra == \"test\"", "pytest-xdist; extra == \"test\"" ], "requires_python": ">=3.10", "summary": "MappingTools. Do stuff with Mappings", "version": "0.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 24414521, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "blake2b_256": "a1d4b550c0a84df28a6b26d09b7c483a16682e62a00a14aed13547f8d094706e", "md5": "370d8b759684434992016b70d294be40", "sha256": "82afc646b0ac1333135996803a081aa65fc452815fea7338aedd7c7fe449e755" }, "downloads": -1, "filename": "mappingtools-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "370d8b759684434992016b70d294be40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 6254, "upload_time": "2024-07-23T17:14:15", "upload_time_iso_8601": "2024-07-23T17:14:15.749538Z", "url": "https://files.pythonhosted.org/packages/a1/d4/b550c0a84df28a6b26d09b7c483a16682e62a00a14aed13547f8d094706e/mappingtools-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "d6cf2882bb0943f67548dc59117459637505a7081497bbf0b16ea3c44e7b4d56", "md5": "a443c5175f2826dabf2e38fd0ec7c2f9", "sha256": "3ff070acb2f161194ed88708065d032af0c82528534c88801d454f3bab15d51d" }, "downloads": -1, "filename": "mappingtools-0.0.1.tar.gz", "has_sig": false, "md5_digest": "a443c5175f2826dabf2e38fd0ec7c2f9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 17760, "upload_time": "2024-07-23T17:14:40", "upload_time_iso_8601": "2024-07-23T17:14:40.245174Z", "url": "https://files.pythonhosted.org/packages/d6/cf/2882bb0943f67548dc59117459637505a7081497bbf0b16ea3c44e7b4d56/mappingtools-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "blake2b_256": "eccd8101820864bcbc41d4a25e1ea353815963436011a735cf98b62ed0b8552e", "md5": "5e792133ff4e27d1ebafad0e260230b9", "sha256": "26d950b32b017807306899040d142f6bdf6ef7b1e9c4dadbb70dde57df4ca5e7" }, "downloads": -1, "filename": "mappingtools-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5e792133ff4e27d1ebafad0e260230b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 6591, "upload_time": "2024-07-24T10:41:05", "upload_time_iso_8601": "2024-07-24T10:41:05.995675Z", "url": "https://files.pythonhosted.org/packages/ec/cd/8101820864bcbc41d4a25e1ea353815963436011a735cf98b62ed0b8552e/mappingtools-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "90388b201466a1874f6544600f9e51a6ae449471be4494c73fd81830fb2caad3", "md5": "a2a7fdadbe9bd25b4a398ee50422d56b", "sha256": "e2fba5defcc8b86e4c93872f9c7734844e1f3f4bd246ea3fc60592b6bf78b4d3" }, "downloads": -1, "filename": "mappingtools-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a2a7fdadbe9bd25b4a398ee50422d56b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8", "size": 18301, "upload_time": "2024-07-24T10:41:06", "upload_time_iso_8601": "2024-07-24T10:41:06.909348Z", "url": "https://files.pythonhosted.org/packages/90/38/8b201466a1874f6544600f9e51a6ae449471be4494c73fd81830fb2caad3/mappingtools-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "blake2b_256": "bcefcc91d8a7b468f15449c78b081a5a4e68ef3daab6edad1737fd4e21974e96", "md5": "5042b91770a3314b4f78d4048d4f57fa", "sha256": "ba7ed75b375b9b0c58c9f2fa19e942e6c4bf360408635d4b8f9c41ddfec65bf0" }, "downloads": -1, "filename": "mappingtools-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5042b91770a3314b4f78d4048d4f57fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 6583, "upload_time": "2024-07-24T10:48:55", "upload_time_iso_8601": "2024-07-24T10:48:55.019295Z", "url": "https://files.pythonhosted.org/packages/bc/ef/cc91d8a7b468f15449c78b081a5a4e68ef3daab6edad1737fd4e21974e96/mappingtools-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "317c68a429e2ee058e87ff416df1d8d06e7d5c2edcf2accdaae7fe77a9b03f3c", "md5": "ed15f2c4a763bdd0a875a0710e6efb12", "sha256": "348ad916c360a44b4713c1196d30cd2e140b106280163778b445c931a768cbda" }, "downloads": -1, "filename": "mappingtools-0.0.3.tar.gz", "has_sig": false, "md5_digest": "ed15f2c4a763bdd0a875a0710e6efb12", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 18291, "upload_time": "2024-07-24T10:48:56", "upload_time_iso_8601": "2024-07-24T10:48:56.556460Z", "url": "https://files.pythonhosted.org/packages/31/7c/68a429e2ee058e87ff416df1d8d06e7d5c2edcf2accdaae7fe77a9b03f3c/mappingtools-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "blake2b_256": "35967ced97a6a0c38370d469bfdd4e9517d733a17f7b2f88ed6b0db61cd68530", "md5": "7624dbcfa809c9b26456419bccb16e0b", "sha256": "8a2587f24799da68cb3aa8c9a7564bc62810b91b4bdcaf291f16baf700376836" }, "downloads": -1, "filename": "mappingtools-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "7624dbcfa809c9b26456419bccb16e0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 7435, "upload_time": "2024-07-24T13:55:52", "upload_time_iso_8601": "2024-07-24T13:55:52.736649Z", "url": "https://files.pythonhosted.org/packages/35/96/7ced97a6a0c38370d469bfdd4e9517d733a17f7b2f88ed6b0db61cd68530/mappingtools-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "5059c581e1ad52a1fbfb6bc5362557240c1d32cc9589772e94ff9ff184e850cb", "md5": "ce952694be16e761b7f7b7dd8c047e32", "sha256": "50f477fe10d73e754a6ec646bf17ef229c010d8a8fc576873feb521913292e6e" }, "downloads": -1, "filename": "mappingtools-0.0.4.tar.gz", "has_sig": false, "md5_digest": "ce952694be16e761b7f7b7dd8c047e32", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 19878, "upload_time": "2024-07-24T13:55:53", "upload_time_iso_8601": "2024-07-24T13:55:53.982554Z", "url": "https://files.pythonhosted.org/packages/50/59/c581e1ad52a1fbfb6bc5362557240c1d32cc9589772e94ff9ff184e850cb/mappingtools-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "blake2b_256": "5159fe26a290ba6db01fa5babe749b8dfb1efce7e6877e8bea6d92b759a268e4", "md5": "bd8d15ad31678d807d8c540c5507dd8a", "sha256": "667a4ab2f711c40a79550bfe86e842f4ec8e594ad0316bc6aef24dcbbffda02c" }, "downloads": -1, "filename": "mappingtools-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "bd8d15ad31678d807d8c540c5507dd8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 8048, "upload_time": "2024-07-25T15:44:51", "upload_time_iso_8601": "2024-07-25T15:44:51.785358Z", "url": "https://files.pythonhosted.org/packages/51/59/fe26a290ba6db01fa5babe749b8dfb1efce7e6877e8bea6d92b759a268e4/mappingtools-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "a9e33d936fee7a0e72fde75021f77e58b461291c15d6357a6ac4371671b7bf82", "md5": "7c0900247879ca86154025fb49ecef80", "sha256": "35ba7aba781715758f00e0dc816fddd6995c2ff90c4c1366f4a0fa010568d6ea" }, "downloads": -1, "filename": "mappingtools-0.0.5.tar.gz", "has_sig": false, "md5_digest": "7c0900247879ca86154025fb49ecef80", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 21631, "upload_time": "2024-07-25T15:44:52", "upload_time_iso_8601": "2024-07-25T15:44:52.809792Z", "url": "https://files.pythonhosted.org/packages/a9/e3/3d936fee7a0e72fde75021f77e58b461291c15d6357a6ac4371671b7bf82/mappingtools-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "blake2b_256": "0332c2149442ed788a4bfc0617e074542bdcab1b61dba6477029e9bbab30b617", "md5": "d5779e725fb4b5b777b26c7fd992db48", "sha256": "4e6c2af6c4d6b28fb8df4ac03de44a88096279facacba6e25808d9f2235765a8" }, "downloads": -1, "filename": "mappingtools-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d5779e725fb4b5b777b26c7fd992db48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 8497, "upload_time": "2024-07-29T11:59:32", "upload_time_iso_8601": "2024-07-29T11:59:32.638093Z", "url": "https://files.pythonhosted.org/packages/03/32/c2149442ed788a4bfc0617e074542bdcab1b61dba6477029e9bbab30b617/mappingtools-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "033859fe36eeae6d9d042c1f29b4d2bfe3a3766ed64160fda1e06e4e29750ce9", "md5": "4727fb0be8a83af401c464c898fd855c", "sha256": "06d3621985bb5dace2cf6ffcc4fa31fa26b298196bb8f2c3db3ee502d1225216" }, "downloads": -1, "filename": "mappingtools-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4727fb0be8a83af401c464c898fd855c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 22631, "upload_time": "2024-07-29T11:59:34", "upload_time_iso_8601": "2024-07-29T11:59:34.026829Z", "url": "https://files.pythonhosted.org/packages/03/38/59fe36eeae6d9d042c1f29b4d2bfe3a3766ed64160fda1e06e4e29750ce9/mappingtools-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "blake2b_256": "263f09e129b750ed4d5b54f194ff414e07aa24eba374e4c784258414cf7a8b36", "md5": "f6c971bb99d6e67e11a4a330f759dfaa", "sha256": "d2c7c748c84dcb260d078bf3224b3f7b125eebf71e56843c03e930737dd38ed9" }, "downloads": -1, "filename": "mappingtools-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f6c971bb99d6e67e11a4a330f759dfaa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 9156, "upload_time": "2024-08-03T22:07:45", "upload_time_iso_8601": "2024-08-03T22:07:45.367517Z", "url": "https://files.pythonhosted.org/packages/26/3f/09e129b750ed4d5b54f194ff414e07aa24eba374e4c784258414cf7a8b36/mappingtools-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "05354b6f418dd862d87b500c6e99a830beda51c5389e11ec4a0bbce307255d79", "md5": "8499910bd093dd35f61005789c2d4dad", "sha256": "b92d1d7ad484b8d7050b0da151f79375b369058e1da6c269dc9db6181c5cabe8" }, "downloads": -1, "filename": "mappingtools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8499910bd093dd35f61005789c2d4dad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 25367, "upload_time": "2024-08-03T22:07:46", "upload_time_iso_8601": "2024-08-03T22:07:46.990937Z", "url": "https://files.pythonhosted.org/packages/05/35/4b6f418dd862d87b500c6e99a830beda51c5389e11ec4a0bbce307255d79/mappingtools-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "blake2b_256": "263f09e129b750ed4d5b54f194ff414e07aa24eba374e4c784258414cf7a8b36", "md5": "f6c971bb99d6e67e11a4a330f759dfaa", "sha256": "d2c7c748c84dcb260d078bf3224b3f7b125eebf71e56843c03e930737dd38ed9" }, "downloads": -1, "filename": "mappingtools-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f6c971bb99d6e67e11a4a330f759dfaa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.10", "size": 9156, "upload_time": "2024-08-03T22:07:45", "upload_time_iso_8601": "2024-08-03T22:07:45.367517Z", "url": "https://files.pythonhosted.org/packages/26/3f/09e129b750ed4d5b54f194ff414e07aa24eba374e4c784258414cf7a8b36/mappingtools-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "05354b6f418dd862d87b500c6e99a830beda51c5389e11ec4a0bbce307255d79", "md5": "8499910bd093dd35f61005789c2d4dad", "sha256": "b92d1d7ad484b8d7050b0da151f79375b369058e1da6c269dc9db6181c5cabe8" }, "downloads": -1, "filename": "mappingtools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8499910bd093dd35f61005789c2d4dad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.10", "size": 25367, "upload_time": "2024-08-03T22:07:46", "upload_time_iso_8601": "2024-08-03T22:07:46.990937Z", "url": "https://files.pythonhosted.org/packages/05/35/4b6f418dd862d87b500c6e99a830beda51c5389e11ec4a0bbce307255d79/mappingtools-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }