{ "info": { "author": "R\u00fcdiger Voigt", "author_email": "projects@ruediger-voigt.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Text Processing :: Markup :: HTML" ], "description": "# Exoskeleton\n\n![pypi version](https://img.shields.io/pypi/v/exoskeleton)\n![Supported Python Versions](https://img.shields.io/pypi/pyversions/exoskeleton)\n![Build](https://github.com/RuedigerVoigt/exoskeleton/workflows/Build/badge.svg)\n![Last commit](https://img.shields.io/github/last-commit/RuedigerVoigt/exoskeleton)\n[![Downloads](https://pepy.tech/badge/exoskeleton)](https://pepy.tech/project/exoskeleton)\n[![Coverage](https://img.shields.io/badge/coverage-85%25-lightgreen)](https://www.ruediger-voigt.eu/coverage/exoskeleton/index.html)\n\nMachine Learning and other applications make it necessary to download thousands or sometimes hundreds of thousands of files.\n\nUsing a high-speed-connection carries the risk to run an involuntary denial-of-service attack on the servers that provide those files and webpages.\n\nExoskeleton is a Python framework that helps you build a crawler / scraper that avoids too high loads on the connection and instead runs permanently and fault tolerant to ultimately download all files.\n\nIts main functionalities are:\n* Managing the download queue and document data within a MariaDB database.\n* Avoid processing the same URL more than once.\n* Working through the queue by either\n * downloading files to disk,\n * storing the page source code into a database table,\n * storing the page text,\n * or making PDF-copies of webpages.\n* Managing already downloaded files:\n * Storing multiple versions of a specific file.\n * Assigning labels to downloads, so they can be found and grouped easily.\n* Sending progress reports to the admin.\n\n# Documentation\n\n## How To Use Exoskeleton\n\n* [Installation and Requirements](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/installation.md)\n* [Create a Bot](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/create-a-bot.md)\n* [Dealing with result pages](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/parse-search-results.md)\n* [Avoiding duplicates](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/avoiding-duplicates.md)\n* [The Queue: Downloading files / Saving the page code / Creating PDF](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/handling-pages.md)\n* [Bot Behavior](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/behavior-settings.md)\n* [Progress Reports via Email](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/progress-reports-via-email.md)\n* [File Versions and Labels](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/versions-and-labels.md)\n* [Using the Blocklist](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/blocklist.md)\n\n## Example Uses\n\n* [Downloading an Archive](https://www.ruediger-voigt.eu/exoskeleton-download-an-archive.html) : A quite complex use case requiring some custom SQL. This is the actual project that triggered the development of exoskeleton.\n\n## Technical Documentation\n\n* [Contributing](https://github.com/RuedigerVoigt/exoskeleton/tree/master/contributing.md)\n* [Database Structure](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/database-schema.md)\n* [Testing](https://github.com/RuedigerVoigt/exoskeleton/tree/master/documentation/testing-exoskeleton.md)\n\n\n\n## Example\n\n```python\n#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\nimport logging\n\nimport exoskeleton\n\nlogging.basicConfig(level=logging.DEBUG)\n\n# Create a bot\n# exoskeleton makes reasonable assumptions about\n# parameters left out, like:\n# - host = localhost\n# - port = 3306 (MariaDB standard)\n# - ...\nexo = exoskeleton.Exoskeleton(\n project_name='Bot',\n database_settings={'database': 'exoskeleton',\n 'username': 'exoskeleton',\n 'passphrase': ''},\n # True, to stop after the queue is empty, Otherwise it will\n # look consistently for new tasks in the queue:\n bot_behavior={'stop_if_queue_empty': True},\n filename_prefix='bot_',\n chrome_name='chromium-browser',\n target_directory='/home/myusername/myBot/'\n)\n\nexo.add_file_download('https://www.ruediger-voigt.eu/examplefile.txt')\n# => Will be saved in the target directory. The filename will be the\n# chosen prefix followed by the database id and .txt.\n\nexo.add_file_download(\n 'https://www.ruediger-voigt.eu/examplefile.txt',\n {'example-label', 'foo'})\n# => Duplicate will be recognized and not added to the queue,\n# but the labels will be associated with the file in the\n# database.\n\n\nexo.add_file_download(\n 'https://www.ruediger-voigt.eu/file_does_not_exist.pdf')\n# => Nonexistent file: will be marked, but will not stop the bot.\n\n# Save a page's code into the database:\nexo.add_save_page_code('https://www.ruediger-voigt.eu/')\n\n# Use chromium or Google chrome to generate a PDF of the website:\nexo.add_page_to_pdf('https://github.com/RuedigerVoigt/exoskeleton')\n\n# work through the queue:\nexo.process_queue()\n```\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/RuedigerVoigt/exoskeleton", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "exoskeleton", "package_url": "https://pypi.org/project/exoskeleton/", "platform": null, "project_url": "https://pypi.org/project/exoskeleton/", "project_urls": { "Homepage": "https://github.com/RuedigerVoigt/exoskeleton" }, "release_url": "https://pypi.org/project/exoskeleton/2.1.1/", "requires_dist": [ "aiodns (>=3.0.0)", "aiohttp (>=3.8.1)", "beautifulsoup4 (>=4.11.1)", "bote (>=1.2.2)", "chardet (>=4.0.0)", "compatibility (>=1.0.1)", "lxml (>=4.8.0)", "pycares (>=4.1.2)", "pymysql (>=1.0.2)", "requests (>=2.27.1)", "urllib3 (>=1.26.9)", "userprovided (>=0.9.4)" ], "requires_python": ">=3.8", "summary": "A library to create a bot / spider / crawler.", "version": "2.1.1", "yanked": false, "yanked_reason": null }, "last_serial": 13644223, "releases": { "0.5.2": [ { "comment_text": "", "digests": { "md5": "221f3ebe4812fee4b9f4a83bc0b34df9", "sha256": "dd0f1b00d6cd2974fdc2a4bbc62b9da806ab3505680ec01f1102eeef6a540905" }, "downloads": -1, "filename": "exoskeleton-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "221f3ebe4812fee4b9f4a83bc0b34df9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 16283, "upload_time": "2019-11-07T15:17:50", "upload_time_iso_8601": "2019-11-07T15:17:50.004553Z", "url": "https://files.pythonhosted.org/packages/bb/6f/d2197893617a543bfaec2a01a30e57139121548249e7a3e42b6958c7021b/exoskeleton-0.5.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "343d79f5e1bb2e43afdb46ca005c1cff", "sha256": "85b0c26972d4e5c98e3efce20dfad7c3241af1a80546b9cb37e438da012e6b5d" }, "downloads": -1, "filename": "exoskeleton-0.5.2.tar.gz", "has_sig": false, "md5_digest": "343d79f5e1bb2e43afdb46ca005c1cff", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12510, "upload_time": "2019-11-07T15:17:51", "upload_time_iso_8601": "2019-11-07T15:17:51.598120Z", "url": "https://files.pythonhosted.org/packages/6e/60/8fe05759c103bee6aa56b2684ac0b2fb2869739be749026af2d0beb549fd/exoskeleton-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "8390243b09d205e22e0b3ce62f2cce5a", "sha256": "705d9af7ea3f4a47000297cd5f5559ae7178c910fb317facf7944ad122b53bc5" }, "downloads": -1, "filename": "exoskeleton-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8390243b09d205e22e0b3ce62f2cce5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 17330, "upload_time": "2019-11-26T13:50:51", "upload_time_iso_8601": "2019-11-26T13:50:51.539907Z", "url": "https://files.pythonhosted.org/packages/6e/c3/be7d64e907d43febe43a1c95969f548a8a255b8f3fe6a0f7d5e9a6e9c612/exoskeleton-0.6.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9ca4a91ad5cc86f0f76f9765c67753ae", "sha256": "f2cad56d0a3ab145bfe48dfed0a3fe9144429918098ab9af15c8edc7f50e4f6f" }, "downloads": -1, "filename": "exoskeleton-0.6.0.tar.gz", "has_sig": false, "md5_digest": "9ca4a91ad5cc86f0f76f9765c67753ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 13541, "upload_time": "2019-11-26T13:50:53", "upload_time_iso_8601": "2019-11-26T13:50:53.494793Z", "url": "https://files.pythonhosted.org/packages/07/89/e52191cd220b4918e14562bcad17fe972c817624aa13c1a6ed547f23397c/exoskeleton-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "226ebb8c989049472e1268263690fcd8", "sha256": "5a2d00dea6244f4799f78295c9253e0910851cb10e867d7b7c5cf5e466fd94f1" }, "downloads": -1, "filename": "exoskeleton-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "226ebb8c989049472e1268263690fcd8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 17702, "upload_time": "2019-12-07T13:00:03", "upload_time_iso_8601": "2019-12-07T13:00:03.040666Z", "url": "https://files.pythonhosted.org/packages/60/0e/3e7537f21a51e506216667c63ff7c889614e0225e89128a936ece16b0eb0/exoskeleton-0.6.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d1670d083149843a60354a6b9a5a3530", "sha256": "7b279f77717c4662ddd8a5da61aebebe92b916166e8ebcbc0ede10a3bde26c8c" }, "downloads": -1, "filename": "exoskeleton-0.6.1.tar.gz", "has_sig": false, "md5_digest": "d1670d083149843a60354a6b9a5a3530", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 13973, "upload_time": "2019-12-07T13:00:05", "upload_time_iso_8601": "2019-12-07T13:00:05.860495Z", "url": "https://files.pythonhosted.org/packages/43/05/70d4aec095d2c7a5ed2b9c5efcbef74325f5cb0131a3217fb326b7dbf470/exoskeleton-0.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "0454c1535b8ee471191ece1f06f564cf", "sha256": "977eb334e10976d4dfe5d452bbbe0128f9429e23e3797648695cbcbfd12c6972" }, "downloads": -1, "filename": "exoskeleton-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0454c1535b8ee471191ece1f06f564cf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 17952, "upload_time": "2019-12-11T20:46:09", "upload_time_iso_8601": "2019-12-11T20:46:09.982126Z", "url": "https://files.pythonhosted.org/packages/af/52/9231f9c06bf722344478bc6bf4cbe1dddc377c84874b904dfa5c9c7bc7d3/exoskeleton-0.6.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f6ae38f68fa32c9f81121a5f854d8b30", "sha256": "7dc22f6679b9aebc0a1c535889f9c639d1f8ebf67b91d3d2a52808cea9fff86e" }, "downloads": -1, "filename": "exoskeleton-0.6.2.tar.gz", "has_sig": false, "md5_digest": "f6ae38f68fa32c9f81121a5f854d8b30", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 14292, "upload_time": "2019-12-11T20:46:12", "upload_time_iso_8601": "2019-12-11T20:46:12.847046Z", "url": "https://files.pythonhosted.org/packages/5d/92/8856c71e91437d3a4220e157fb9ccd331c41adc8f87af56ea5a9caf1d099/exoskeleton-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "5fbaf5eadd7abed01d40d7607503dddb", "sha256": "ffc3e521fd290b2072682151c10fbc867760c463baf46963ecefd89704547909" }, "downloads": -1, "filename": "exoskeleton-0.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5fbaf5eadd7abed01d40d7607503dddb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 18258, "upload_time": "2019-12-20T08:08:11", "upload_time_iso_8601": "2019-12-20T08:08:11.998788Z", "url": "https://files.pythonhosted.org/packages/3c/60/670e64f6b942de0315e3bcdaca3e016bf0eb74bd9d8fc60d2474f02eb58d/exoskeleton-0.6.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a37ca44dbba80b08ade2d45de47f6b52", "sha256": "d626d1e4986f8f00dacf5e032a9b97fd90ca42a8f37073e1ba5ea93b3fec76f5" }, "downloads": -1, "filename": "exoskeleton-0.6.3.tar.gz", "has_sig": false, "md5_digest": "a37ca44dbba80b08ade2d45de47f6b52", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 14641, "upload_time": "2019-12-20T08:08:13", "upload_time_iso_8601": "2019-12-20T08:08:13.848918Z", "url": "https://files.pythonhosted.org/packages/88/d3/e0f69e0dec280e35cf33e75ad34996d938925e7480d6bd5efac8bca28d97/exoskeleton-0.6.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "179259946058b1d67f898e58647b1f80", "sha256": "77ba981776d6f5eadd6512022897548c6e56df34d18291998e8915d9ff904617" }, "downloads": -1, "filename": "exoskeleton-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "179259946058b1d67f898e58647b1f80", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 20265, "upload_time": "2020-01-16T16:02:30", "upload_time_iso_8601": "2020-01-16T16:02:30.934783Z", "url": "https://files.pythonhosted.org/packages/e3/9c/8ef7551bf3d83868cac2cd3eabb27a1f6e05d7255289308fee04b4ff29f2/exoskeleton-0.7.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "27ebf272515753834c7ea0d71f0f3dd8", "sha256": "8a1dc62e47623efcb27e813c83309b022c9187270b0c9680db61ac9b1037404d" }, "downloads": -1, "filename": "exoskeleton-0.7.0.tar.gz", "has_sig": false, "md5_digest": "27ebf272515753834c7ea0d71f0f3dd8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 16700, "upload_time": "2020-01-16T16:02:32", "upload_time_iso_8601": "2020-01-16T16:02:32.566776Z", "url": "https://files.pythonhosted.org/packages/e0/d5/1310680378bbb82d79b679d2abd66c853784399b1db681aa52c0f3c6f7e9/exoskeleton-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "b0c3d22531a3a7760ec5b6db19a00d9f", "sha256": "0f7eb4e5ea9c4e07f84bfd2ecfa0d5cfc5d5f1517ab263d438ce29c7cdba6d19" }, "downloads": -1, "filename": "exoskeleton-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b0c3d22531a3a7760ec5b6db19a00d9f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 20693, "upload_time": "2020-01-27T11:43:54", "upload_time_iso_8601": "2020-01-27T11:43:54.888088Z", "url": "https://files.pythonhosted.org/packages/63/73/ab768bf1576d505043689f347ccc32cbe6a5383fed775a7b5abe90ac5c98/exoskeleton-0.7.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e09a9215e8099206144a1fe9360f661c", "sha256": "5878ed22311783609c6e1764098a8b93a7f9782de19dd459f0aadd174253bdc1" }, "downloads": -1, "filename": "exoskeleton-0.7.1.tar.gz", "has_sig": false, "md5_digest": "e09a9215e8099206144a1fe9360f661c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 17218, "upload_time": "2020-01-27T11:43:57", "upload_time_iso_8601": "2020-01-27T11:43:57.117177Z", "url": "https://files.pythonhosted.org/packages/e1/d2/72d66c45046b801dd5a6ce51889eae8d8b46ccc71728d6492dba66b4d10f/exoskeleton-0.7.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "c606922bea88a3b6df50c51bb4a1eabd", "sha256": "ebd02fd8e2919e4fc620d7a2220cabd0503b18d44afeec33efd0583d0191c095" }, "downloads": -1, "filename": "exoskeleton-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c606922bea88a3b6df50c51bb4a1eabd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 20662, "upload_time": "2020-02-14T20:59:50", "upload_time_iso_8601": "2020-02-14T20:59:50.922541Z", "url": "https://files.pythonhosted.org/packages/66/74/8e77baa277388805a1209d80e07d92d93fc439d0165ef04a030b9d8fc59e/exoskeleton-0.8.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "95c08c238f6706ca17bdab4950d9d1e4", "sha256": "ba939c72cf01b912b77ce78fb491f81302b22e7f9dd5d77ca9ffd9e243864721" }, "downloads": -1, "filename": "exoskeleton-0.8.0.tar.gz", "has_sig": false, "md5_digest": "95c08c238f6706ca17bdab4950d9d1e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17221, "upload_time": "2020-02-14T20:59:53", "upload_time_iso_8601": "2020-02-14T20:59:53.009548Z", "url": "https://files.pythonhosted.org/packages/c3/7a/d6e72e40df7c2d7137602ab2cfd7cd8a3104994510996c364d1705325e39/exoskeleton-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "f78dc4ee35ac1ada38a03b6a5acbf45b", "sha256": "74d8cc8d14a27f05faa3f06aa62e8d998ef7c8aa6e83af3e25b89b0daeed94fb" }, "downloads": -1, "filename": "exoskeleton-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f78dc4ee35ac1ada38a03b6a5acbf45b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 21335, "upload_time": "2020-02-18T20:37:18", "upload_time_iso_8601": "2020-02-18T20:37:18.200782Z", "url": "https://files.pythonhosted.org/packages/9a/bd/dc40c5c2a15b776b99438b557fb96295583ffe912f0aa67e64e4b362eb1e/exoskeleton-0.8.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e576cfb6173c9c4781a3cc0f877a2e25", "sha256": "241fd6941fb8e2fa311aab0a05830c5cacc6bb657cdf6ac9c2167bb54b1e62b9" }, "downloads": -1, "filename": "exoskeleton-0.8.1.tar.gz", "has_sig": false, "md5_digest": "e576cfb6173c9c4781a3cc0f877a2e25", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17859, "upload_time": "2020-02-18T20:37:21", "upload_time_iso_8601": "2020-02-18T20:37:21.335848Z", "url": "https://files.pythonhosted.org/packages/f2/79/9ddd63e7b2d571984f8eefad74a34f54699eabdbc6ba128fbc168cec3a27/exoskeleton-0.8.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "1c2d38a27103ee2ec62fbf5cc810e81e", "sha256": "e40b33de33d95a9e770b207b2311108d7d66d7488402263c2d0e6fccc164dac4" }, "downloads": -1, "filename": "exoskeleton-0.8.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1c2d38a27103ee2ec62fbf5cc810e81e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 21621, "upload_time": "2020-02-21T13:16:08", "upload_time_iso_8601": "2020-02-21T13:16:08.055940Z", "url": "https://files.pythonhosted.org/packages/b9/51/6ec8e1d4995f4c5ed8c645cc17c725739fdf561d29b465d87c9e82356fd8/exoskeleton-0.8.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "155f0ca4e6e42a20f543598cc63db715", "sha256": "a2daf2a75331258c57f038ae982eaf460658115686e8f0e71a2a32364d0cbf83" }, "downloads": -1, "filename": "exoskeleton-0.8.2.tar.gz", "has_sig": false, "md5_digest": "155f0ca4e6e42a20f543598cc63db715", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18133, "upload_time": "2020-02-21T13:16:11", "upload_time_iso_8601": "2020-02-21T13:16:11.133489Z", "url": "https://files.pythonhosted.org/packages/91/8f/b179364d6dea8fb4456c40c0ae3b63501632e489006e0b2afce83aa5a1ee/exoskeleton-0.8.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "c2c632e6f8537305c21321042e3c866c", "sha256": "9a446dab3b916d2c469fc96b10f21b3389074be9067b03875b4cd6c794020470" }, "downloads": -1, "filename": "exoskeleton-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c2c632e6f8537305c21321042e3c866c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 21657, "upload_time": "2020-04-27T15:16:28", "upload_time_iso_8601": "2020-04-27T15:16:28.607482Z", "url": "https://files.pythonhosted.org/packages/18/ec/e1090190f0b4362452658f053979353b52e7d89cab5be11d2cad3357a6b1/exoskeleton-0.9.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "32cac781b8a9d154b8301141771af394", "sha256": "9156ca12eca1ab5f52720924c03983ab0f12e264b1813d3c90811697e391835e" }, "downloads": -1, "filename": "exoskeleton-0.9.0.tar.gz", "has_sig": false, "md5_digest": "32cac781b8a9d154b8301141771af394", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16790, "upload_time": "2020-04-27T15:16:30", "upload_time_iso_8601": "2020-04-27T15:16:30.114445Z", "url": "https://files.pythonhosted.org/packages/2c/68/58c320b86eb0c9a17b640462f1aad711dac38a1565e135b24593497cc7d8/exoskeleton-0.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "4eb82f8605be7b25b77a5633641a8d34", "sha256": "f65fc6c76976aaa09c57984b01908fc7cad095520c8b687f00fff0139e883a42" }, "downloads": -1, "filename": "exoskeleton-0.9.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4eb82f8605be7b25b77a5633641a8d34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 20968, "upload_time": "2020-06-22T21:55:21", "upload_time_iso_8601": "2020-06-22T21:55:21.631148Z", "url": "https://files.pythonhosted.org/packages/15/34/a9e6acf7a037eb59deda193a4bf48326940f1f60a220f7f327d9bee93944/exoskeleton-0.9.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "293575cfe33d7631ecd1d1aa7e168374", "sha256": "06ae54b21b83f652e65c504bd0e4dd69c59fbe239267f390608ded080a0c8beb" }, "downloads": -1, "filename": "exoskeleton-0.9.1.tar.gz", "has_sig": false, "md5_digest": "293575cfe33d7631ecd1d1aa7e168374", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16375, "upload_time": "2020-06-22T21:55:25", "upload_time_iso_8601": "2020-06-22T21:55:25.116124Z", "url": "https://files.pythonhosted.org/packages/5b/51/e725e61666bce1a7d3d9b97e11f0860232f2618be7dd147e2409fec79f23/exoskeleton-0.9.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "d15be3811d2ddcf54ba34c264376c5e8", "sha256": "603db5e8a1126be7de8863884dab704fdb71b5517b4bc9a749a781cfe85189e0" }, "downloads": -1, "filename": "exoskeleton-0.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d15be3811d2ddcf54ba34c264376c5e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 22011, "upload_time": "2020-07-07T17:07:21", "upload_time_iso_8601": "2020-07-07T17:07:21.062772Z", "url": "https://files.pythonhosted.org/packages/55/0e/84f19cc599cf37d790e0919d0f8fa8989fdb37e9bdbe694a306914d641ec/exoskeleton-0.9.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "601436166d70bf6e1eac7d6098369867", "sha256": "46267bbe50dedc0e5c7f218255d927e75a9824bd1d85f13b005106afb622a8ba" }, "downloads": -1, "filename": "exoskeleton-0.9.2.tar.gz", "has_sig": false, "md5_digest": "601436166d70bf6e1eac7d6098369867", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17637, "upload_time": "2020-07-07T17:07:23", "upload_time_iso_8601": "2020-07-07T17:07:23.738791Z", "url": "https://files.pythonhosted.org/packages/86/fe/4bf4b2053576663ed65739738aa17849b812e3b05ce1e13e7c91aa8d3720/exoskeleton-0.9.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "738a4426877261c700a744c630917605", "sha256": "a771ef6b109deab069dda2c455d6fff591d58db84289fd0bb22227d457ce6538" }, "downloads": -1, "filename": "exoskeleton-0.9.3-py3-none-any.whl", "has_sig": false, "md5_digest": "738a4426877261c700a744c630917605", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 23103, "upload_time": "2020-07-10T07:48:25", "upload_time_iso_8601": "2020-07-10T07:48:25.186780Z", "url": "https://files.pythonhosted.org/packages/c2/c9/0f186800bc9e6f01645a23bc1702ac7e99bc82c41e6952adee7d28de0ff9/exoskeleton-0.9.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "de66702acde6851ac4023485dbcfea65", "sha256": "b353ff6f0d6ab4d67ea9c9fa9c7736552b590db841ebfa0ec4851f19770d499e" }, "downloads": -1, "filename": "exoskeleton-0.9.3.tar.gz", "has_sig": false, "md5_digest": "de66702acde6851ac4023485dbcfea65", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18602, "upload_time": "2020-07-10T07:48:28", "upload_time_iso_8601": "2020-07-10T07:48:28.720384Z", "url": "https://files.pythonhosted.org/packages/f0/cc/a1dd45551a5f1eea452879962a8ed00532f2ff786b36685d04b0f9680aa9/exoskeleton-0.9.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "06ff64f0efbad32e33479757da6a6dce", "sha256": "887e37c4b98d90d481c6851b667c22475e89c57708aa4494396b0d0e3a256be2" }, "downloads": -1, "filename": "exoskeleton-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "06ff64f0efbad32e33479757da6a6dce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 29010, "upload_time": "2020-07-23T18:21:18", "upload_time_iso_8601": "2020-07-23T18:21:18.882616Z", "url": "https://files.pythonhosted.org/packages/fc/cb/ac5db579c39709fe4b831811aefa79ba85e7d5c8eb0b6fd855d0e7cbe48f/exoskeleton-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bffa528781b5be415b97c36a234b281d", "sha256": "410cafca26de00873e2d1d96d2b6cc9f20f034b80f18354da975c7764db825cb" }, "downloads": -1, "filename": "exoskeleton-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bffa528781b5be415b97c36a234b281d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 23240, "upload_time": "2020-07-23T18:21:20", "upload_time_iso_8601": "2020-07-23T18:21:20.608596Z", "url": "https://files.pythonhosted.org/packages/d9/be/03b404e2936b4e73822baa978eb9a93470989cd5e84fdbece89b9ca3afaf/exoskeleton-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "3ca88b3f44b9ae8a216fa3a3fef29490", "sha256": "f409ef0172c647625265e70a9a39be366d893c97168a3f3dcb2da42cc284ec74" }, "downloads": -1, "filename": "exoskeleton-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3ca88b3f44b9ae8a216fa3a3fef29490", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 30567, "upload_time": "2020-10-29T00:42:39", "upload_time_iso_8601": "2020-10-29T00:42:39.278692Z", "url": "https://files.pythonhosted.org/packages/b0/39/56ba52170db7451a0cadfc3fb6750081c057cdf48c656e98970dc8112fc4/exoskeleton-1.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7e4ec5cd3f98f1ea8cf3c27a99a2cb41", "sha256": "674e475459dc350e34a30d1a1b05dd589c51b8bd4d55d93fbeed97a158c2fdf6" }, "downloads": -1, "filename": "exoskeleton-1.1.0.tar.gz", "has_sig": false, "md5_digest": "7e4ec5cd3f98f1ea8cf3c27a99a2cb41", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 25130, "upload_time": "2020-10-29T00:42:42", "upload_time_iso_8601": "2020-10-29T00:42:42.012259Z", "url": "https://files.pythonhosted.org/packages/32/2f/41520df11c964ea7e0633639da5f7e7bd19501e9835a211c818bf1d9b80b/exoskeleton-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "930c48eed00de34e2276bff53338e2bd", "sha256": "1943b2dedb75f8d23be4853bbf8fa6e9d355ce1b0c744a4ebf64be4d4aede3ee" }, "downloads": -1, "filename": "exoskeleton-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "930c48eed00de34e2276bff53338e2bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 37254, "upload_time": "2020-11-16T22:10:03", "upload_time_iso_8601": "2020-11-16T22:10:03.653817Z", "url": "https://files.pythonhosted.org/packages/69/86/49295eabc0249e103213574fe55306e41263951a16cbaf187c62729a72b4/exoskeleton-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bd457429563e046ce223c546951dbd6f", "sha256": "2071093765a614dd763ec78c8960ce7f415ff3ad4d42fa603f74318c52019b69" }, "downloads": -1, "filename": "exoskeleton-1.2.0.tar.gz", "has_sig": false, "md5_digest": "bd457429563e046ce223c546951dbd6f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 27823, "upload_time": "2020-11-16T22:10:05", "upload_time_iso_8601": "2020-11-16T22:10:05.330509Z", "url": "https://files.pythonhosted.org/packages/87/e8/f0b281dc4179fcdd7fb286d5252580a4dffc283512cf33553b4157447198/exoskeleton-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "fb13d2d6b0231cdaa0bdce922c0bed5e", "sha256": "cb5b34643361186f81c00ddc533ac36c820f861b7e0c811456c406f4874efbe0" }, "downloads": -1, "filename": "exoskeleton-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fb13d2d6b0231cdaa0bdce922c0bed5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 37382, "upload_time": "2020-11-30T10:40:17", "upload_time_iso_8601": "2020-11-30T10:40:17.324303Z", "url": "https://files.pythonhosted.org/packages/bb/77/bf32ebfd0abb5fc460d47193e6e1b2b59faf6120a17696ad838e25bb4d32/exoskeleton-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "96e12d0c77ab76994c7af1b3ea1bed89", "sha256": "e81bd95f91d339be24049c029b5eb6789c52bfdf431de842c025e294bd5e8014" }, "downloads": -1, "filename": "exoskeleton-1.2.1.tar.gz", "has_sig": false, "md5_digest": "96e12d0c77ab76994c7af1b3ea1bed89", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 28073, "upload_time": "2020-11-30T10:40:20", "upload_time_iso_8601": "2020-11-30T10:40:20.177183Z", "url": "https://files.pythonhosted.org/packages/05/a5/340ef762b7f727e6dc1b7cb30dd15bc376d1f0b2b9edc41bda6efa29e074/exoskeleton-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "9889ce56a0d2d7edc37681a275782910", "sha256": "e53876b8256e93683ae86df88d12860f7b211ee992eac56802e9b2251d9d8e46" }, "downloads": -1, "filename": "exoskeleton-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9889ce56a0d2d7edc37681a275782910", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 37449, "upload_time": "2021-01-20T22:33:16", "upload_time_iso_8601": "2021-01-20T22:33:16.097403Z", "url": "https://files.pythonhosted.org/packages/7c/a2/5ea9f28862b20dbbec5ee9ee3f1083b5d67dde98a45b23cc55018e504a7e/exoskeleton-1.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f7c636180cf38162c4d1d6be46e92a7c", "sha256": "6cc875c9792e4e17ff7536c9673679f93ecce0d9b331ea87b71b7dde1a4eb457" }, "downloads": -1, "filename": "exoskeleton-1.2.2.tar.gz", "has_sig": false, "md5_digest": "f7c636180cf38162c4d1d6be46e92a7c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 28162, "upload_time": "2021-01-20T22:33:17", "upload_time_iso_8601": "2021-01-20T22:33:17.746787Z", "url": "https://files.pythonhosted.org/packages/9a/34/13aa6530fc970b4176a8677e3b40d7f1843ad1c7780d76c52e3d9f9c26f3/exoskeleton-1.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "0ab9532e8d2729f79f7f1674166bd5d2", "sha256": "ab303d1744a3019a481bdfdebd9e655607ddf5f844ba44422541e1a0820fb066" }, "downloads": -1, "filename": "exoskeleton-1.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0ab9532e8d2729f79f7f1674166bd5d2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 38108, "upload_time": "2021-02-07T19:19:40", "upload_time_iso_8601": "2021-02-07T19:19:40.842130Z", "url": "https://files.pythonhosted.org/packages/4d/01/3c39d6548c45d2581372cd000fa0543a36c453dd99e81688f5a861b5d7e2/exoskeleton-1.2.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "77d254880c930547cf26c35cca0742ac", "sha256": "414df00914072a3267a187480b4825e0d523165bd53ef1882630414bd05b7838" }, "downloads": -1, "filename": "exoskeleton-1.2.3.tar.gz", "has_sig": false, "md5_digest": "77d254880c930547cf26c35cca0742ac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 28602, "upload_time": "2021-02-07T19:19:42", "upload_time_iso_8601": "2021-02-07T19:19:42.417799Z", "url": "https://files.pythonhosted.org/packages/04/d7/4f819ee06b4daf244b2bd736dbf9dd38aea48d96517fd4f2e5255d64d2e0/exoskeleton-1.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "599a8148fc056f905dad822f958f5746", "sha256": "d44ad6b056f984163332a716517b96458543b4edbc82210c552ec52be5da01d8" }, "downloads": -1, "filename": "exoskeleton-1.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "599a8148fc056f905dad822f958f5746", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 38668, "upload_time": "2021-03-16T08:27:32", "upload_time_iso_8601": "2021-03-16T08:27:32.194429Z", "url": "https://files.pythonhosted.org/packages/a0/10/655ec903b77605809c0e64a556d4a1fb4d32c275837fba435d78958d2c24/exoskeleton-1.2.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2fe2684d04fc3a93b9174c6a6be8043c", "sha256": "700d0dfce94243f1982c1162cb1c5efd7da11dbd2b79c3b85d4a54b0fda25f80" }, "downloads": -1, "filename": "exoskeleton-1.2.4.tar.gz", "has_sig": false, "md5_digest": "2fe2684d04fc3a93b9174c6a6be8043c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 29159, "upload_time": "2021-03-16T08:27:33", "upload_time_iso_8601": "2021-03-16T08:27:33.741554Z", "url": "https://files.pythonhosted.org/packages/53/68/cadecc395f4c2ff94f6606a8ffc168ee78432c2150b067865ef32a44da15/exoskeleton-1.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "ba9f7105a4c197d5de8867f15167e007", "sha256": "f194877a34169418d6ccc4ba6410f67ce6f3be2cdef1ee111ea6d2fb13c3a51b" }, "downloads": -1, "filename": "exoskeleton-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "ba9f7105a4c197d5de8867f15167e007", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 38670, "upload_time": "2021-04-18T07:45:06", "upload_time_iso_8601": "2021-04-18T07:45:06.265232Z", "url": "https://files.pythonhosted.org/packages/0e/0c/65eba487600b0fceb2c7873ff7f4e7f5da77e0ebeda04e7bd936a06e6c35/exoskeleton-1.2.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9cf154403f6f327ff01fdc3b94d53641", "sha256": "6ac69766fa3f85cd2920e309d87dde2d8c8877d3852a564c5144f6cb86e8e69c" }, "downloads": -1, "filename": "exoskeleton-1.2.5.tar.gz", "has_sig": false, "md5_digest": "9cf154403f6f327ff01fdc3b94d53641", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 29119, "upload_time": "2021-04-18T07:45:08", "upload_time_iso_8601": "2021-04-18T07:45:08.235918Z", "url": "https://files.pythonhosted.org/packages/47/d9/c06fcdd95c4ec1b39a1e5cced506875cb751899362b28335619190e84ecb/exoskeleton-1.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "32b4735047763d363e57bac90874f458", "sha256": "e8742b3486cac048a977e87cba3278365f0e6fc06dd3eae4b563cb78acaacbc7" }, "downloads": -1, "filename": "exoskeleton-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "32b4735047763d363e57bac90874f458", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 38668, "upload_time": "2021-05-29T22:25:20", "upload_time_iso_8601": "2021-05-29T22:25:20.010483Z", "url": "https://files.pythonhosted.org/packages/2d/55/5b86254a2cf14c74e88e6c1bae3680095812d8e2d56d2b842ccb42ca3eef/exoskeleton-1.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e4b0764bb3ed7990a85d07cf9b8d6ab9", "sha256": "aa9188aa3274a1efb7f50ff8ece774f27ba1ca80584b104eea7c39bbd95bdaae" }, "downloads": -1, "filename": "exoskeleton-1.3.0.tar.gz", "has_sig": false, "md5_digest": "e4b0764bb3ed7990a85d07cf9b8d6ab9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 29136, "upload_time": "2021-05-29T22:25:21", "upload_time_iso_8601": "2021-05-29T22:25:21.762499Z", "url": "https://files.pythonhosted.org/packages/0f/3e/e90de0b826d9c4e3b9627f3b83abc16fb42f8654e160fec6646e197e51b5/exoskeleton-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f9251bc71b066de6b7d590527eb7c7e8", "sha256": "5e8ef203e97534939696a0b13b6f68e52b6cbde8d93b91b4e10274fff21e0a73" }, "downloads": -1, "filename": "exoskeleton-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f9251bc71b066de6b7d590527eb7c7e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 41040, "upload_time": "2021-07-02T06:14:30", "upload_time_iso_8601": "2021-07-02T06:14:30.554845Z", "url": "https://files.pythonhosted.org/packages/43/1a/592f3b9002f5d4738ae05c0e8baec5c9bccbf33872e1b676f4e4adf764bc/exoskeleton-2.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2d1f0aa33d905a6cac1533461cfc8767", "sha256": "a9d0af625ac9d2ba63b559a016f1a5f1bb3449d1818c1be5b719e492fd57bd66" }, "downloads": -1, "filename": "exoskeleton-2.0.0.tar.gz", "has_sig": false, "md5_digest": "2d1f0aa33d905a6cac1533461cfc8767", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 28635, "upload_time": "2021-07-02T06:14:32", "upload_time_iso_8601": "2021-07-02T06:14:32.212072Z", "url": "https://files.pythonhosted.org/packages/d7/27/729bbda62cc0a87b844a973c1d6f1d9bd566fb21a37e04fb349de91fbf0a/exoskeleton-2.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "ce01a95c27587a4d7cac8c69109156d1", "sha256": "86aa4d79f602f41bf6770ff04c874a7e84ef991ffe1e63ce9e8e366a03f8221a" }, "downloads": -1, "filename": "exoskeleton-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ce01a95c27587a4d7cac8c69109156d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 41042, "upload_time": "2021-11-03T22:29:25", "upload_time_iso_8601": "2021-11-03T22:29:25.460497Z", "url": "https://files.pythonhosted.org/packages/5e/aa/3183284867b6a21e601525208fa006d2e89fe893d4f6ec6846a148c86189/exoskeleton-2.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "20011bda518506643356077a2c53375a", "sha256": "d3ff58fdae5c7dcc0146a4a7503923168db08d39fe7cde776d780c2175640c04" }, "downloads": -1, "filename": "exoskeleton-2.1.0.tar.gz", "has_sig": false, "md5_digest": "20011bda518506643356077a2c53375a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 28695, "upload_time": "2021-11-03T22:29:27", "upload_time_iso_8601": "2021-11-03T22:29:27.298877Z", "url": "https://files.pythonhosted.org/packages/0a/c2/8758aa2a7bb33b47e91fb7307a12bcf9bc9c6dd9d9e3e58338cc95b2985e/exoskeleton-2.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "f25f23ce2bd2a9a78f874cf91ba2908d", "sha256": "1c84298fa2ee2a0b2c63d3cfe384dcc4fa62e156bb42ce9288ffa7fe81dd9c44" }, "downloads": -1, "filename": "exoskeleton-2.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f25f23ce2bd2a9a78f874cf91ba2908d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 40905, "upload_time": "2022-04-27T21:02:49", "upload_time_iso_8601": "2022-04-27T21:02:49.628252Z", "url": "https://files.pythonhosted.org/packages/9f/52/98e510b3fc9fdba27ee347419a047ea55b7d52755590abd956772857de5d/exoskeleton-2.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f42fe31587875d8f80293f55df64f0e2", "sha256": "b9ebca371be6ed368a460d0ecb2b692f8bfc73a4434aac0276c57500259f6d21" }, "downloads": -1, "filename": "exoskeleton-2.1.1.tar.gz", "has_sig": false, "md5_digest": "f42fe31587875d8f80293f55df64f0e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8", "size": 28701, "upload_time": "2022-04-27T21:02:51", "upload_time_iso_8601": "2022-04-27T21:02:51.690293Z", "url": "https://files.pythonhosted.org/packages/f4/b7/824212638aba455b5a661d577adf2b3b901b9549bb7b93f3fa5d0d334199/exoskeleton-2.1.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f25f23ce2bd2a9a78f874cf91ba2908d", "sha256": "1c84298fa2ee2a0b2c63d3cfe384dcc4fa62e156bb42ce9288ffa7fe81dd9c44" }, "downloads": -1, "filename": "exoskeleton-2.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f25f23ce2bd2a9a78f874cf91ba2908d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 40905, "upload_time": "2022-04-27T21:02:49", "upload_time_iso_8601": "2022-04-27T21:02:49.628252Z", "url": "https://files.pythonhosted.org/packages/9f/52/98e510b3fc9fdba27ee347419a047ea55b7d52755590abd956772857de5d/exoskeleton-2.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f42fe31587875d8f80293f55df64f0e2", "sha256": "b9ebca371be6ed368a460d0ecb2b692f8bfc73a4434aac0276c57500259f6d21" }, "downloads": -1, "filename": "exoskeleton-2.1.1.tar.gz", "has_sig": false, "md5_digest": "f42fe31587875d8f80293f55df64f0e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8", "size": 28701, "upload_time": "2022-04-27T21:02:51", "upload_time_iso_8601": "2022-04-27T21:02:51.690293Z", "url": "https://files.pythonhosted.org/packages/f4/b7/824212638aba455b5a661d577adf2b3b901b9549bb7b93f3fa5d0d334199/exoskeleton-2.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }