{ "info": { "author": "Pawel Kowalik", "author_email": "pawel-kow@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9" ], "description": "[![Build Status](https://travis-ci.com/Domain-Connect/domainconnect_python.svg?branch=master)](https://travis-ci.com/Domain-Connect/domainconnect_python)\n\n# domain-connect\nPython client library for Domain Connect protocol.\nFor details of the protocol, please visit: https://domainconnect.org\n\nLibrary offers Service Provider functionality in both Sync and Async mode.\n\n## Specification reference\nhttps://github.com/Domain-Connect/spec/blob/master/Domain%20Connect%20Spec%20Draft.adoc\n- Version: 2.1\n- Revision: 52\n\n\n## Usage\n\n### Sync flow\n\nJust get the link. Discovery and template query part is solved automatically.\n```python\nfrom domainconnect import *\n\ndc = DomainConnect()\n\ntry:\n # change 'connect.domains' to any domain you have access to\n res = dc.get_domain_connect_template_sync_url(domain=\"foo.connect.domains\",\n provider_id=\"exampleservice.domainconnect.org\",\n service_id=\"template1\",\n params={\"IP\": \"132.148.25.185\",\n \"RANDOMTEXT\": \"shm:1531371203:Hello world sync\"},\n redirect_uri=\"http://example.com\", state=\"{name=value}\")\n print(res)\nexcept DomainConnectException as e:\n print('Exception: {}'.format(e))\n raise\n```\n\nOutput:\n```text\nhttps://domainconnect.1and1.com/sync/v2/domainTemplates/providers/exampleservice.domainconnect.org/services/template1/apply?domain=connect.domains&host=foo&IP=132.148.25.185&RANDOMTEXT=shm%3A1531371203%3AHello+world+sync&redirect_uri=http%3A%2F%2Fexample.com&state=%7Bname%3Dvalue%7D\n```\n\n### Async flow\n```python\nfrom domainconnect import *\n# to assure input works like raw_input in python 2\nfrom builtins import input\n\n# this will be normally a secret local store on the server\ncredentials = {\n \"1and1\": DomainConnectAsyncCredentials(client_id='exampleservice.domainconnect.org',\n client_secret='cd$;CVZRj#B8C@o3o8E4v-*k2H7S%)',\n api_url='https://api.domainconnect.1and1.com'),\n \"GoDaddy\": DomainConnectAsyncCredentials(client_id='exampleservice.domainconnect.org',\n client_secret='DomainConnectGeheimnisSecretString',\n api_url='https://domainconnect.api.godaddy.com'),\n}\n\ndc = DomainConnect()\n\ntry:\n # change 'connect.domains' to any domain you have access to\n context = dc.get_domain_connect_template_async_context(\n domain='async.connect.domains',\n provider_id='exampleservice.domainconnect.org',\n service_id=['template1', 'template2'], \n params={\"IP\": \"132.148.25.185\", \"RANDOMTEXT\": \"shm:1531371203:Hello world async\"},\n redirect_uri='https://exampleservice.domainconnect.org/async_oauth_response')\n\n # Route the browser to URL by a link\n print('Please open URL: {}'.format(context.asyncConsentUrl))\n\n # Normally code will arrive as query param on redirect_url\n code = input(\"Please enter code: \")\n context.code = code\n\n # token will be written into context. Context can be saved and re-used for async calls\n dc.get_async_token(context, credentials[context.config.providerName])\n print('Token obtained')\n\n #apply the template any later with the context\n dc.apply_domain_connect_template_async(\n context, \n service_id='template1', \n params={\"IP\": \"132.148.25.185\", \"RANDOMTEXT\": \"shm:1531371203:Hello world async\"}, \n force=True)\n print('Template applied')\nexcept DomainConnectException as e:\n print('Exception: {}'.format(e))\n raise\n\n```\n\nOutput:\n```text\nPlease open URL: https://domainconnect.1and1.com/async/v2/domainTemplates/providers/exampleservice.domainconnect.org?client_id=exampleservice.domainconnect.org&scope=template1+template2&domain=connect.domains&host=async&IP=132.148.25.185&RANDOMTEXT=shm%3A1531371203%3AHello+world+async&redirect_uri=https%3A%2F%2Fexampleservice.domainconnect.org%2Fasync_oauth_response\nPlease enter code: >? 8d9a72b5-d2d9-48e3-b615-34fed04d3398\nToken obtained\nTemplate applied\n```\n\n### Sync flow with signed request\n\nJust get the link. Discovery and template query part is solved automatically.\n```python\nfrom domainconnect import *\n\ndc = DomainConnect()\n\ntry:\n # change 'connect.domains' to any domain you have access to\n priv_key = '-----BEGIN RSA PRIVATE KEY-----\\nMIIEowIBAAKCAQEA18SgvpmeasN4BHkkv0SBjAzIc4grYLjiAXRtNiBUiGUDMeTzQrKTsWvy9NuxU1dIHCZy9o1CrKNg5EzLIZLNyMfI6qiXnM+HMd4byp97zs/3D39Q8iR5poubQcRaGozWx8yQpG0OcVdmEVcTfyR/XSEWC5u16EBNvRnNAOAvZYUdWqVyQvXsjnxQot8KcK0QP8iHpoL/1dbdRy2opRPQ2FdZpovUgknybq/6FkeDtW7uCQ6Mvu4QxcUa3+WP9nYHKtgWip/eFxpeb+qLvcLHf1h0JXtxLVdyy6OLk3f2JRYUX2ZZVDvG3biTpeJz6iRzjGg6MfGxXZHjI8weDjXrJwIDAQABAoIBAGiPedJDwXg9d1i7mCo0OY8z1qPeFh9OGP/Zet8i9bQPN2gjahslTNtK07cDC8C2aFRz8Xw3Ylsk5VxdNobzjFPDNUM6JhawnvR0jQU5GhdTwoc5DHH7aRRjTP6m938sRx0VrfZwfvJAB09Z4jHX7vyjfvprH9EH8GQ2L5lACtfnsSASVJB77H1vtgxTnum74CSqIck1MCjPD/TVUtYfMJwkUQWcbk79N4nvnEoagqsDrvw4okU2OYMWucQjyxfWTU4NGlsDScRbdDAb8sLr3DpMfXM8vpZJ3Ed6gfw14hEJym8XoHwDHmjGmgYH9iG6MODxuO5TLRmRR6b+jcUV/2kCgYEA4WGsDUO/NIXIqtDm5lTi5qeFl0sGKIgRLGuCrvjLF0Fq5Yx28wuow3OhZ3rbjlmhf9nUt24nUUY67plv2pi+vx3kVdbcNfk+Wkc0wfx8+U91qaTplMRhNjrnq/Kp9E7xtnzZRInpUG1Ha5ozTYobVvklUvjodFlF2c16Zz2X2AMCgYEA9RSeZm7oMyJbe985SScXruwt5ZXlUBoBLDZAeMloPpaqknFmSVSNgtniywztF8HppJQyiMvmUOUL2tKnuShXwsvTkCTBC/vNGXutiPS8O2yqeQ8dHoHuKcoMFwgajrbPrVkuFtUkjbQJ/TKoZtrxUdCryDZ/AHmRtiHh9E4NUQ0CgYAE7ngvSh4y7gJ4Cl4jCBR26492wgN+e4u0px2S6oq3FY1bPHmV09l7fVo4w21ubfOksoV/BgACPUEo216hL9psoCDQ6ASlgbCllQ1IeVfatKxka+FYift+jkdnccXaPKf5UD4Iy+O5CMsZRaR9u9nhS05PxHaBpTpsC5z0CVr7NQKBgQCsBTzpSQ9SVNtBpvzei8Hj1YKhkwTRpG8OSUYXgcbZp4cyIsZY0jBBmA3H19rSwhjsm9icjAGs5hfcD+AJ5nczEz37/tBBSQw8xsKXTrCQRUWikyktMKWqT1cNE3MQmOBMHDxtak2t6KDaR6RMDYE0m/L3JMkf3DSaUk323JIcQQKBgD6lHhw79Cenpezzf0566uWE1QF6Sv3kWk6Gkzo2jUGmjo2tG1v2Nj82DvcTuqvfUKSr2wTKINxnKGyYXGto0BykdxeFbR04cNcBB46zUjasro2ZCvIoAHCpohNBI2dL6dI+RI3jC/KY3jPNI0toaOTWkeAvJ7w09G2ttlv8qLNV\\n-----END RSA PRIVATE KEY-----'\n res = dc.get_domain_connect_template_sync_url(domain=\"signed.connect.domains\",\n provider_id=\"exampleservice.domainconnect.org\",\n service_id=\"template2\",\n params={\"IP\": \"132.148.25.185\",\n \"RANDOMTEXT\": \"shm:1531371203:Hejo\"},\n sign=True,\n private_key=priv_key,\n keyid='_dck1')\n print(res)\nexcept DomainConnectException as e:\n print('Exception: {}'.format(e))\n raise\n```\n\n## Custom http/https proxy or dns resolver\n\n```python\nfrom domainconnect import *\n\ndc = DomainConnect(\n networkcontext=NetworkContext(\n proxy_host='proxy.host', \n proxy_port='proxy.port', \n nameservers='resolver.host')\n )\n```\n\n## TODOs\n- support for provider_name (for shared templates)\n- async revert\n\n## CHANGELOG\n| version | date | changes |\n| ------- | -----------| ------ |\n| 0.0.9 | 2021-04-13 | NEW FEATURE: support for openwrt (missing webbrowser module) |\n| 0.0.8 | 2020-11-09 | NEW FEATURE: Detailed information on access token request fail |\n| 0.0.7 | 2019-10-29 | Bugfix: error when setting up .app domain |\n| 0.0.6 | 2019-07-05 | UPDATE: moved from pycrypto to cryptography (due to know security issues) |\n| 0.0.5 | 2019-03-12 | NEW FEATURE: url signing capability added |\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/Domain-Connect/domainconnect_python", "keywords": "", "license": "https://github.com/Domain-Connect/domainconnect_python/blob/master/LICENSE", "maintainer": "", "maintainer_email": "", "name": "domain-connect", "package_url": "https://pypi.org/project/domain-connect/", "platform": "", "project_url": "https://pypi.org/project/domain-connect/", "project_urls": { "Homepage": "https://github.com/Domain-Connect/domainconnect_python" }, "release_url": "https://pypi.org/project/domain-connect/0.0.9/", "requires_dist": [ "dnspython (>=1.16.0)", "publicsuffix (>=1.1.0)", "publicsuffixlist (>=0.7.7)", "six (>=1.12.0)", "future (>=0.18.1)", "cryptography (>=3.3.2)", "unittest2 (>=1.1.0) ; extra == 'test'" ], "requires_python": "", "summary": "Python client library for Domain Connect protocol. See: https://domainconnect.org", "version": "0.0.9", "yanked": false, "yanked_reason": null }, "last_serial": 10058792, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "0f7a61b551eaa99bb59f2727a47620d3", "sha256": "3f58325ea5a18205264b5a71f398c8fea9e73d5d65592ad9bf6dca887f111cf2" }, "downloads": -1, "filename": "domain_connect-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0f7a61b551eaa99bb59f2727a47620d3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7703, "upload_time": "2018-07-19T14:18:48", "upload_time_iso_8601": "2018-07-19T14:18:48.687698Z", "url": "https://files.pythonhosted.org/packages/c4/36/5eea4cdd828feefc7dbc76f522c82b82bdeb48b0a5682c4ef574e2e380df/domain_connect-0.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0880dc99416934b5a8369c03b9f538b2", "sha256": "f0a781c306bda0e3d38ee22940424f7b1ce91d3f47ff137c842a5dc6f27923ff" }, "downloads": -1, "filename": "domain_connect-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0880dc99416934b5a8369c03b9f538b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7662, "upload_time": "2018-07-19T14:08:57", "upload_time_iso_8601": "2018-07-19T14:08:57.864297Z", "url": "https://files.pythonhosted.org/packages/e4/4f/41f49633634d5210bf84fcdd98e61802ecc4372cf967195bcd9022479bbf/domain_connect-0.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7598ea665730e35f0cb65cd098a711ea", "sha256": "4044c8dbce347e27caab6297f4dbf035a10995a61477fc3435a998f06a395327" }, "downloads": -1, "filename": "domain_connect-0.0.1.tar.gz", "has_sig": false, "md5_digest": "7598ea665730e35f0cb65cd098a711ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6219, "upload_time": "2018-07-19T14:08:59", "upload_time_iso_8601": "2018-07-19T14:08:59.647675Z", "url": "https://files.pythonhosted.org/packages/38/2b/2389d648cf3f9e7b63a289cf66646b3ee34c7e249f5b2e8f42596260d5f0/domain_connect-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "3c1db1361fc568c07aa8a9f2a32c548c", "sha256": "8181e7a22a9c670b0a93cd03da506548a785ce582c8750a21e3717a99b196554" }, "downloads": -1, "filename": "domain_connect-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c1db1361fc568c07aa8a9f2a32c548c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11987, "upload_time": "2018-07-19T15:22:42", "upload_time_iso_8601": "2018-07-19T15:22:42.591840Z", "url": "https://files.pythonhosted.org/packages/89/2e/dad4212eb955514698208bc3371875120b99dbed1717c5b85e721a6fba65/domain_connect-0.0.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c4964fca51bf7069ecc0d8def1279966", "sha256": "38cb76c9531f163a60c2b3a0a5b4a85c52ed6e631cfa2eab376477d4a18542ed" }, "downloads": -1, "filename": "domain_connect-0.0.3.win-amd64.zip", "has_sig": false, "md5_digest": "c4964fca51bf7069ecc0d8def1279966", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27854, "upload_time": "2018-07-19T15:22:43", "upload_time_iso_8601": "2018-07-19T15:22:43.944026Z", "url": "https://files.pythonhosted.org/packages/62/37/0e515eff449da6edfcaa280dbb3b3ac8c2f8af23664789dc340d8e3f33f4/domain_connect-0.0.3.win-amd64.zip", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "d99d064c6381c78e5bad6783538b34ef", "sha256": "a829a9ce887862f2b95ba18e49ff91e1ef5b23d7ea91918e155e77b2d2c0b364" }, "downloads": -1, "filename": "domain_connect-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d99d064c6381c78e5bad6783538b34ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12081, "upload_time": "2018-09-06T06:26:08", "upload_time_iso_8601": "2018-09-06T06:26:08.711568Z", "url": "https://files.pythonhosted.org/packages/0d/8d/d39ca0d6c0e9c436273f71e837ee381de9a7b6b3ec1c5bdc83d54a762e4e/domain_connect-0.0.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9b8ea9cba199205b27217fe57bde2407", "sha256": "2ced584df566dd371f8cfb427aa65f3624571360bb94f12fcb31b1f5e4ad93a4" }, "downloads": -1, "filename": "domain_connect-0.0.4.win-amd64.zip", "has_sig": false, "md5_digest": "9b8ea9cba199205b27217fe57bde2407", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28069, "upload_time": "2018-09-06T06:26:11", "upload_time_iso_8601": "2018-09-06T06:26:11.008081Z", "url": "https://files.pythonhosted.org/packages/d1/ca/20a09317f1b6932e310f23d7d9840f988f31c063f9571f44185e22e910c6/domain_connect-0.0.4.win-amd64.zip", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "67108351ad882209f09e17af711403b6", "sha256": "92465f637aa02043c40997df47a69128d4f59b4623375a6e0611ad78d6e42878" }, "downloads": -1, "filename": "domain_connect-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "67108351ad882209f09e17af711403b6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14942, "upload_time": "2019-03-13T08:13:38", "upload_time_iso_8601": "2019-03-13T08:13:38.133105Z", "url": "https://files.pythonhosted.org/packages/39/68/5a6f8407b45426efd807014a8cfbdec8ccb5efd87718b3c8d2ad06ebe34d/domain_connect-0.0.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "355ba4bf8a27fd1762f75f4c53fefd2f", "sha256": "5e5a40c8cf0b4a702468f4b91465830f0a2ed3c03e9920ef682b8f9c8bf83159" }, "downloads": -1, "filename": "domain_connect-0.0.5.tar.gz", "has_sig": false, "md5_digest": "355ba4bf8a27fd1762f75f4c53fefd2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14944, "upload_time": "2019-03-13T08:13:41", "upload_time_iso_8601": "2019-03-13T08:13:41.909894Z", "url": "https://files.pythonhosted.org/packages/16/66/8c1f0f97ecc0054d9ff0a584cb65850eb7ea6e21e14c4591b69a33902fd1/domain_connect-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "c9a501677940d06096eca73f2c47b114", "sha256": "3e0559fad94cf4b02160a5900dd3f7dc15575094357990b53735633bd0fbbd52" }, "downloads": -1, "filename": "domain_connect-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c9a501677940d06096eca73f2c47b114", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15062, "upload_time": "2019-07-05T09:50:38", "upload_time_iso_8601": "2019-07-05T09:50:38.357671Z", "url": "https://files.pythonhosted.org/packages/ad/c1/2833efd6aa18eaa237798ae60218982fbf3fe98a20403ceadc3f83c3469b/domain_connect-0.0.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "25a7b5622a467b1b2302ddef58f3ae4a", "sha256": "a212254e44af7f950e04bf36d69993a70b6d7812108658161678d25d8174c06c" }, "downloads": -1, "filename": "domain_connect-0.0.6.tar.gz", "has_sig": false, "md5_digest": "25a7b5622a467b1b2302ddef58f3ae4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15079, "upload_time": "2019-07-05T09:50:43", "upload_time_iso_8601": "2019-07-05T09:50:43.200171Z", "url": "https://files.pythonhosted.org/packages/dd/6a/4a119809ec41f524e8acc2cb6cdf24de72253b8d0665547b933d99ad5d1d/domain_connect-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "ae050fcb93e2b92257822a69de06a930", "sha256": "df5ec94f598ba681929df43359eed7afa4f78b91a2e2c9e377fb6c1eb17d2441" }, "downloads": -1, "filename": "domain_connect-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ae050fcb93e2b92257822a69de06a930", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12250, "upload_time": "2019-10-29T12:47:42", "upload_time_iso_8601": "2019-10-29T12:47:42.458923Z", "url": "https://files.pythonhosted.org/packages/61/5d/2d85ec830ff8b814cbd9ba073f60f81789e457acfda3020e78f916facc53/domain_connect-0.0.7-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b48c7f56f7cbe4099d41662194b21782", "sha256": "9f21579d7914368f8053c63ac9432ea7ee767d1f57db810ab38ef2ed03468f5c" }, "downloads": -1, "filename": "domain_connect-0.0.7.tar.gz", "has_sig": false, "md5_digest": "b48c7f56f7cbe4099d41662194b21782", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10585, "upload_time": "2019-10-29T12:47:44", "upload_time_iso_8601": "2019-10-29T12:47:44.079375Z", "url": "https://files.pythonhosted.org/packages/d3/cd/b5356dadea43a93cb4c3c671fd89ff339da30c46b2e4b7b78f992387e930/domain_connect-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "d551378d598cb3cdbec147c6afbcd6c6", "sha256": "0dbfd143a61c3d952e573d79240de089913da6664d0a17a71397c792f62c1fdb" }, "downloads": -1, "filename": "domain_connect-0.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d551378d598cb3cdbec147c6afbcd6c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12469, "upload_time": "2020-11-09T13:08:53", "upload_time_iso_8601": "2020-11-09T13:08:53.182777Z", "url": "https://files.pythonhosted.org/packages/79/9f/b32ddf59016cd0aa482fc98f09e7dea409191a07545c7a86bd1a26a748e6/domain_connect-0.0.8-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "66d61603abaee11ca6701904f9d3bde7", "sha256": "e5f661fc007dcf3053871ad3fac03cddbd46ce71c182c77b91249828765a2a60" }, "downloads": -1, "filename": "domain_connect-0.0.8.tar.gz", "has_sig": false, "md5_digest": "66d61603abaee11ca6701904f9d3bde7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13918, "upload_time": "2020-11-09T13:08:55", "upload_time_iso_8601": "2020-11-09T13:08:55.864852Z", "url": "https://files.pythonhosted.org/packages/86/c1/4977f0886d33c11505fd8f151d5b68099543d883a4e65fecdd866d406cb3/domain_connect-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "8fcd95ab43ed1405e882a2e033ae2e97", "sha256": "21ddf9434fceaff9ffed8ff04813c50ea83d9d5240b941626aed3b1edd34aba0" }, "downloads": -1, "filename": "domain_connect-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8fcd95ab43ed1405e882a2e033ae2e97", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12583, "upload_time": "2021-04-14T05:05:08", "upload_time_iso_8601": "2021-04-14T05:05:08.448876Z", "url": "https://files.pythonhosted.org/packages/08/07/26dc61d03b786915678ce12c9b688133c4b5770245379b49ae845b47b6a1/domain_connect-0.0.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "688c25f940976d28c939b1b35092596e", "sha256": "804a5545b6d63ba52637e5b99963890f3c9252929030d9d72fd331039a3a102c" }, "downloads": -1, "filename": "domain_connect-0.0.9.tar.gz", "has_sig": false, "md5_digest": "688c25f940976d28c939b1b35092596e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11696, "upload_time": "2021-04-14T05:05:09", "upload_time_iso_8601": "2021-04-14T05:05:09.769384Z", "url": "https://files.pythonhosted.org/packages/0a/66/e226d82bbc9677da1dedb27427300f70576432e00f8d67554ca228fc406e/domain_connect-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8fcd95ab43ed1405e882a2e033ae2e97", "sha256": "21ddf9434fceaff9ffed8ff04813c50ea83d9d5240b941626aed3b1edd34aba0" }, "downloads": -1, "filename": "domain_connect-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8fcd95ab43ed1405e882a2e033ae2e97", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12583, "upload_time": "2021-04-14T05:05:08", "upload_time_iso_8601": "2021-04-14T05:05:08.448876Z", "url": "https://files.pythonhosted.org/packages/08/07/26dc61d03b786915678ce12c9b688133c4b5770245379b49ae845b47b6a1/domain_connect-0.0.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "688c25f940976d28c939b1b35092596e", "sha256": "804a5545b6d63ba52637e5b99963890f3c9252929030d9d72fd331039a3a102c" }, "downloads": -1, "filename": "domain_connect-0.0.9.tar.gz", "has_sig": false, "md5_digest": "688c25f940976d28c939b1b35092596e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11696, "upload_time": "2021-04-14T05:05:09", "upload_time_iso_8601": "2021-04-14T05:05:09.769384Z", "url": "https://files.pythonhosted.org/packages/0a/66/e226d82bbc9677da1dedb27427300f70576432e00f8d67554ca228fc406e/domain_connect-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }