{ "info": { "author": "Oguz Bastemur", "author_email": "ogbastem@microsoft.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "## iotc - Azure IoT Central - Python (light) device SDK Documentation\n\n### Prerequisites\n\nPython 2.7+ or Python 3.4+ or Micropython 1.9+\n\n*Runtime dependencies vary per platform*\n\n### Install\n\nPython 2/3\n```\npip install iotc\n```\n\n### Common Concepts\n\n- API calls should return `0` on success and `error code` otherwise.\n- External API naming convention follows `lowerCamelCase` for `Device` class members\n\n### Usage\n\n```\nimport iotc\ndevice = iotc.Device(scopeId, keyORCert, deviceId, credType)\n```\n\n- *scopeId* : Azure IoT DPS Scope Id\n- *keyORcert* : Symmetric key or x509 Certificate\n- *deviceId* : Device Id\n- *credType* : `IOTConnectType.IOTC_CONNECT_SYMM_KEY` or `IOTConnectType.IOTC_CONNECT_X509_CERT`\n\n`keyORcert` for `X509` certificate:\n```\ncredType = IOTConnectType.IOTC_CONNECT_X509_CERT\nkeyORcert = {\n \"keyfile\": \"/src/python/test/device.key.pem\",\n \"certfile\": \"/src/python/test/device.cert.pem\"\n}\n```\n\n`keyORcert` for `SAS` token:\n```\ncredType = IOTConnectType.IOTC_CONNECT_SYMM_KEY\nkeyORcert = \"xxxxxxxxxxxxxxx........\"\n```\n\n#### setLogLevel\nset logging level\n```\ndevice.setLogLevel(logLevel)\n```\n\n*logLevel* : (default value is `IOTC_LOGGING_DISABLED`)\n```\nclass IOTLogLevel:\n IOTC_LOGGING_DISABLED = 1\n IOTC_LOGGING_API_ONLY = 2\n IOTC_LOGGING_ALL = 16\n```\n\n*i.e.* => `device.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)`\n\n#### setExitOnError\nenable/disable application termination on mqtt later exceptions. (default false)\n```\ndevice.setExitOnError(isEnabled)\n```\n\n*i.e.* => `device.setExitOnError(True)`\n\n#### setModelData\nset the device model data (if any)\n```\ndevice.setModelData(modelJSON)\n```\n\n*modelJSON* : Device model definition.\n\n*i.e.* => `device.setModelData({\"iotcModelId\":\"PUT_MODEL_ID_HERE\"})`\n\n#### setTokenExpiration\nset the token expiration timeout. default is 21600 seconds (6 hours)\n```\ndevice.setTokenExpiration(totalSeconds)\n```\n\n*totalSeconds* : timeout in seconds.\n\n*i.e.* => `device.setTokenExpiration(600)`\n\n#### setServiceHost\nset the service endpoint URL\n```\ndevice.setServiceHost(url)\n```\n\n*url* : URL for service endpoint. (default value is `global.azure-devices-provisioning.net`)\n\n*call this before connect*\n\n#### setQosLevel\nSet the MQTT Quality of Service (QoS) level desired for all MQTT publish calls\n```\ndevice.setQosLevel(qosLevel)\n```\n\n*qosLevel* : (default value is `IOTC_QOS_AT_MOST_ONCE`)\n```\nclass IOTQosLevel:\n IOTC_QOS_AT_MOST_ONCE = 0\n IOTC_QOS_AT_LEAST_ONCE = 1\n```\n\nNote: IOTC_QOS_AT_LEAST_ONCE will have slower performance than IOTC_QOS_AT_MOST_ONCE as the MQTT client must store the value for possible replay and also wait for an acknowledgement from the IoT Hub that the MQTT message has been received. Think of IOTC_QOS_AT_MOST_ONCE as \"fire and forget\" vs. IOTC_QOS_AT_LEAST_ONCE as \"guaranteed delivery\". As the developer you should consider the importance of 100% data delivery vs. increased connection time and data traffic over the data connection.\n\n*call this before connect*\n\n#### connect\nconnect device client `# blocking`. Raises `ConnectionStatus` event.\n\n```\ndevice.connect()\n```\n\nor\n\n```\ndevice.connect(hostName)\n```\n\n*i.e.* => `device.connect()`\n\n#### sendTelemetry\nsend telemetry\n\n```\ndevice.sendTelemetry(payload, [[optional system properties]])\n```\n\n*payload* : A text payload.\n\n*i.e.* => `device.sendTelemetry('{ \"temperature\": 15 }')`\n\nYou may also set system properties for the telemetry message. See also [iothub message format](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messages-construct)\n\n*i.e.* => `device.sendTelemetry('{ \"temperature\":22 }', {\"iothub-creation-time-utc\": time.time()})`\n\n#### sendState\nsend device state\n\n```\ndevice.sendState(payload)\n```\n\n*payload* : A text payload.\n\n*i.e.* => `device.sendState('{ \"status\": \"WARNING\"}')`\n\n#### sendProperty\nsend reported property\n\n```\ndevice.sendProperty(payload)\n```\n\n*payload* : A text payload.\n\n*i.e.* => `device.sendProperty('{\"countdown\":{\"value\": %d}}')`\n\n#### doNext\nlet framework do the partial MQTT work.\n\n```\ndevice.doNext()\n```\n\n#### isConnected\nreturns whether the connection was established or not.\n\n```\ndevice.isConnected()\n```\n\n*i.e.* => `device.isConnected()`\n\n#### disconnect\ndisconnect device client\n\n```\ndevice.disconnect()\n```\n\n*i.e.* => `device.disconnect()`\n\n#### getDeviceSettings\npulls latest twin data (device properties). Raises `SettingsUpdated` event.\n\n```\ndevice.getDeviceSettings()\n```\n\n*i.e.* => `device.getDeviceSettings()`\n\n#### getHostName\nreturns the iothub hostname cached during the initial connection.\n\n```\ndevice.getHostName()\n```\n\n*i.e.* => `device.getDeviceHostName()`\n\n#### on\nset event callback to listen events\n\n- `ConnectionStatus` : connection status has changed\n- `MessageSent` : message was sent\n- `Command` : a command received from Azure IoT Central\n- `SettingsUpdated` : device settings were updated\n\ni.e.\n```\ndef onconnect(info):\n if info.getStatusCode() == 0:\n print(\"connected!\")\n\ndevice.on(\"ConnectionStatus\", onconnect)\n```\n\n```\ndef onmessagesent(info):\n print(\"message sent -> \" + info.getPayload())\n\ndevice.on(\"MessageSent\", onmessagesent)\n```\n\n```\ndef oncommand(info):\n print(\"command name:\", info.getTag())\n print(\"command args: \", info.getPayload())\n\ndevice.on(\"Command\", oncommand)\n```\n\n```\ndef onsettingsupdated(info):\n print(\"setting name:\", info.getTag())\n print(\"setting value: \", info.getPayload())\n\ndevice.on(\"SettingsUpdated\", onsettingsupdated)\n```\n\n#### callback info class\n\n`iotc` callbacks have a single argument derived from `IOTCallbackInfo`.\nUsing this interface, you can get the callback details and respond back when it's necessary.\n\npublic members of `IOTCallbackInfo` are;\n\n`getResponseCode()` : get response code or `None`\n\n`getResponseMessage()` : get response message or `None`\n\n`setResponse(responseCode, responseMessage)` : set callback response\n\n*i.e.* => `info.setResponse(200, 'completed')`\n\n`getClient()` : get active `device` client\n\n`getEventName()` : get the name of the event\n\n`getPayload()` : get the payload or `None`\n\n`getTag()` : get the tag or `None`\n\n`getStatusCode()` : get callback status code\n\n#### sample app\n\n```\nimport iotc\nfrom iotc import IOTConnectType, IOTLogLevel\n\ndeviceId = \"DEVICE_ID\"\nscopeId = \"SCOPE_ID\"\ndeviceKey = \"DEVICE_KEY\"\n\n# see iotc.Device documentation above for x509 argument sample\niotc = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)\niotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)\niotc.setQosLevel(IOTQosLevel.IOTC_QOS_AT_MOST_ONCE)\n\ngCanSend = False\ngCounter = 0\n\ndef onconnect(info):\n global gCanSend\n print(\"- [onconnect] => status:\" + str(info.getStatusCode()))\n if info.getStatusCode() == 0:\n if iotc.isConnected():\n gCanSend = True\n\ndef onmessagesent(info):\n print(\"\\t- [onmessagesent] => \" + str(info.getPayload()))\n\ndef oncommand(info):\n print(\"command name:\", info.getTag())\n print(\"command value: \", info.getPayload())\n\ndef onsettingsupdated(info):\n print(\"setting name:\", info.getTag())\n print(\"setting value: \", info.getPayload())\n\niotc.on(\"ConnectionStatus\", onconnect)\niotc.on(\"MessageSent\", onmessagesent)\niotc.on(\"Command\", oncommand)\niotc.on(\"SettingsUpdated\", onsettingsupdated)\n\niotc.connect()\n\nwhile iotc.isConnected():\n iotc.doNext() # do the async work needed to be done for MQTT\n if gCanSend == True:\n if gCounter % 20 == 0:\n gCounter = 0\n print(\"Sending telemetry..\")\n iotc.sendTelemetry(\"{\\\"temp\\\": \" + str(randint(20, 45)) + \"}\")\n\n gCounter += 1\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/Azure/iot-central-firmware", "keywords": "iot,azure,iotcentral", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "iotc", "package_url": "https://pypi.org/project/iotc/", "platform": "", "project_url": "https://pypi.org/project/iotc/", "project_urls": { "Homepage": "https://github.com/Azure/iot-central-firmware" }, "release_url": "https://pypi.org/project/iotc/0.3.4/", "requires_dist": [ "paho-mqtt", "httplib2" ], "requires_python": "", "summary": "Azure IoT Central device client for Python", "version": "0.3.4" }, "last_serial": 5733503, "releases": { "0.1.9": [ { "comment_text": "", "digests": { "md5": "20ab5772b87f62ff22d17711b3112dbf", "sha256": "2f338236e47272a1ca631a790ab6835f894a765fc6d65fda65a2f1bd57644dc7" }, "downloads": -1, "filename": "iotc-0.1.9-py2-none-any.whl", "has_sig": false, "md5_digest": "20ab5772b87f62ff22d17711b3112dbf", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 9570, "upload_time": "2019-03-04T03:13:33", "url": "https://files.pythonhosted.org/packages/46/cd/960881715b660b2937a53e22c3d4c12732e081931e3783be130f8c4fc5d4/iotc-0.1.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "567ded857885b3badf5e7b63b688ef30", "sha256": "ec3273d1b7ce3ce6c4c21d2fa75611d1a6620fa0813ca8c81325f62a5f0ffd94" }, "downloads": -1, "filename": "iotc-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "567ded857885b3badf5e7b63b688ef30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9570, "upload_time": "2019-03-04T03:13:34", "url": "https://files.pythonhosted.org/packages/1f/b4/bfda40ae0a6ed2674445686f3e3d7bbb28fd4d3365024c016077fe31bf5d/iotc-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee46d5d0ff24314c0699bbb969cb7e2c", "sha256": "9138965fd51df2e80780608bd463f5ad6eb58f0f5f96237ac89f34bd38238d5c" }, "downloads": -1, "filename": "iotc-0.1.9.tar.gz", "has_sig": false, "md5_digest": "ee46d5d0ff24314c0699bbb969cb7e2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11502, "upload_time": "2019-03-04T03:13:36", "url": "https://files.pythonhosted.org/packages/50/a6/c39bc0fb665bbb6f25ff98bac2e4c45ae624a9d3c796006005fe84de45fd/iotc-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "13e1487eabc45a082c8fceebec2d2574", "sha256": "d55b4b201feff5b953580e7d00364d81fcb7bd47b69285673fe198b57f208034" }, "downloads": -1, "filename": "iotc-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "13e1487eabc45a082c8fceebec2d2574", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10060, "upload_time": "2019-03-30T07:42:31", "url": "https://files.pythonhosted.org/packages/fc/2b/6832495218cf901293a776df327ae8ada15480e25e38c8197055777bcad6/iotc-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5680936139eb6a9b62c4f1a7455ac599", "sha256": "9d891111a0dd9af3f588095ad56fbe669ce5a9af16c8a72abd1e3bebdb1fd020" }, "downloads": -1, "filename": "iotc-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5680936139eb6a9b62c4f1a7455ac599", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10061, "upload_time": "2019-03-30T07:42:32", "url": "https://files.pythonhosted.org/packages/89/a1/0bd10c173c703ed4bdc276f17825e1f12ed83f2442a362a0838a285f9df2/iotc-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7980606e1acfd05f2c28b71986953d7f", "sha256": "0df477751d34941783bf1d378cfea306520dbcd7fbb48d9591a2df45e0c5b083" }, "downloads": -1, "filename": "iotc-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7980606e1acfd05f2c28b71986953d7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12110, "upload_time": "2019-03-30T07:42:34", "url": "https://files.pythonhosted.org/packages/c5/95/0ec9cce86c6a4e6129a615ba715d26e16eb1b2492576d46a3fbdd5c9eaf2/iotc-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "397475b745487d872837d4c06f5957c2", "sha256": "68f4474105a252c3a31798634e2f92d8d08a21cbf894431db468b65b63de6cdc" }, "downloads": -1, "filename": "iotc-0.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "397475b745487d872837d4c06f5957c2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10160, "upload_time": "2019-04-12T00:01:44", "url": "https://files.pythonhosted.org/packages/ce/b5/f18273606892e618875871e1b34b795f5613fa6d01055fa726866b9cfa57/iotc-0.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "587e87dc51baf8096aabe1d6ec735403", "sha256": "2b4cebad0389044f11d91444ef4fb57f288983429bebeec5f4c12e47f5fc0f22" }, "downloads": -1, "filename": "iotc-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "587e87dc51baf8096aabe1d6ec735403", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10158, "upload_time": "2019-04-12T00:01:45", "url": "https://files.pythonhosted.org/packages/ca/26/47163eff476ff1d93b54de19d8b6bdecb20ddffe3a53993061d555aa5ef8/iotc-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86d81e46fc3ada8f568117b370d7d94c", "sha256": "4a325b0143e566609577b3fdb3d544890f89972e8d8988dc04acb09c62d838b9" }, "downloads": -1, "filename": "iotc-0.2.2.tar.gz", "has_sig": false, "md5_digest": "86d81e46fc3ada8f568117b370d7d94c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12294, "upload_time": "2019-04-12T00:01:47", "url": "https://files.pythonhosted.org/packages/33/ab/f1f8adf552ac98d53355a0396f81b7a98ad7486793a9ec9d0ecc3c074671/iotc-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "ed77819a452573ded959c7d0c6e15d09", "sha256": "9c25be90d222bd96133104578055546751fba30d2f7b4a7cd1fd657f954a3ee6" }, "downloads": -1, "filename": "iotc-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "ed77819a452573ded959c7d0c6e15d09", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10649, "upload_time": "2019-04-12T21:54:51", "url": "https://files.pythonhosted.org/packages/0a/4a/1ddb3af9fd797456598ba728fdb1285b6957f65a7326a5b0f19f1de006cf/iotc-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb47b7f05d09e490dd3152b93a1645bb", "sha256": "23f1d0ca967df9b9cf40ee7fc6e7fbfc3c8e2b665683b75629d9f8b7bd3b8f3c" }, "downloads": -1, "filename": "iotc-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bb47b7f05d09e490dd3152b93a1645bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10649, "upload_time": "2019-04-12T21:54:52", "url": "https://files.pythonhosted.org/packages/9d/f3/48e70b89d6f9fd697ad55644fd942b5c3eac81b68137d6a5757e7619ff39/iotc-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79b92d22a196770219b86b36f8375c15", "sha256": "73e3ff7c15f3167b3170e83244e04aa60bf77571de3e36e9866847cf0cca74b2" }, "downloads": -1, "filename": "iotc-0.2.3.tar.gz", "has_sig": false, "md5_digest": "79b92d22a196770219b86b36f8375c15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13106, "upload_time": "2019-04-12T21:54:53", "url": "https://files.pythonhosted.org/packages/e7/40/2c9ce9de834ebbfaaceda3922d118db538e80367e8fd2c601e988645236f/iotc-0.2.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "1fde45a0a1cd742bb36802560aab28f7", "sha256": "891a3b75965ab0beb0019b83ec714bf2a5c619daeec8ab40eef5174fa617c329" }, "downloads": -1, "filename": "iotc-0.3.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1fde45a0a1cd742bb36802560aab28f7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10851, "upload_time": "2019-04-15T22:53:29", "url": "https://files.pythonhosted.org/packages/6c/53/1ceeb140d594bea933a0d1c57bcbb3698e16a530f7696ebd3f949daf91f2/iotc-0.3.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "011afd561fd69ac7ac9872f3a7f6a1d9", "sha256": "bb7882f58a6d243f7ed2537cf23fdd12b25128d5960a4c489e2fc549f160cd3e" }, "downloads": -1, "filename": "iotc-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "011afd561fd69ac7ac9872f3a7f6a1d9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10852, "upload_time": "2019-04-15T22:53:30", "url": "https://files.pythonhosted.org/packages/f2/2b/d7f4df0e4333ee8784e48a73817e51fd476c0b41e715bf662683ddc3fe88/iotc-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fdba3c8e1bfcfcbe57ee3495ba74ce40", "sha256": "cec4056798f3b8dd21bd46fbae6b9f43f4cd70f65f1b3d52b3c265497b6dc311" }, "downloads": -1, "filename": "iotc-0.3.1.tar.gz", "has_sig": false, "md5_digest": "fdba3c8e1bfcfcbe57ee3495ba74ce40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13425, "upload_time": "2019-04-15T22:53:32", "url": "https://files.pythonhosted.org/packages/ee/d7/9af33381b4f42cc4a4bde5a29e2871e599e0f1fb19441a0078de90262624/iotc-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "f661300c9b68c3953063cb932a1ac103", "sha256": "304a34338dd9f4e40e41455251542ce9cd93883b7ea6d70c96e79384fab4d802" }, "downloads": -1, "filename": "iotc-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "f661300c9b68c3953063cb932a1ac103", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10951, "upload_time": "2019-04-29T20:44:22", "url": "https://files.pythonhosted.org/packages/21/c7/32bae978186e1f0b70b91754ca46865a590ca8d52ed3b7409c4f443f1047/iotc-0.3.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "90b48f331601903b3d95826929c54c7a", "sha256": "3a31918a2ef3fb19e47d961d7e27c068c3c0035f0e70a8bd190bfccca6266462" }, "downloads": -1, "filename": "iotc-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "90b48f331601903b3d95826929c54c7a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10952, "upload_time": "2019-04-29T20:44:27", "url": "https://files.pythonhosted.org/packages/7b/9f/76081ba8ec28f5d3d3514498cad7df285988318be76e4824f80dc54adbf0/iotc-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c982552ddd27b40f702d67f76a3bc29f", "sha256": "57c86245cc1c1d601fc3bc957475a580035ecdc471e8764f66d9b780f5b7add5" }, "downloads": -1, "filename": "iotc-0.3.2.tar.gz", "has_sig": false, "md5_digest": "c982552ddd27b40f702d67f76a3bc29f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13598, "upload_time": "2019-04-29T20:44:31", "url": "https://files.pythonhosted.org/packages/67/88/b79229308d5fb32c1d3febe4baaecbe2ee5e2a0ada6174386d12cc133e4a/iotc-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "c248312e5a73c3d238bb91b9d24ed570", "sha256": "50ffa0a2d6bc5281e83ef25511ec803d651be0fff4718593419a47445256cf37" }, "downloads": -1, "filename": "iotc-0.3.3-py2-none-any.whl", "has_sig": false, "md5_digest": "c248312e5a73c3d238bb91b9d24ed570", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11057, "upload_time": "2019-06-05T21:11:58", "url": "https://files.pythonhosted.org/packages/a8/4e/ffeb43f33cadd08e0336892fe01d115b04db01baacdc2e96a4726b2b9486/iotc-0.3.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b14752313a56e9ff3931782d4fed0b6", "sha256": "391963c246bb6e4c4622763fa645f385c41fd06d6251bdc4d6c7aea4c1683be3" }, "downloads": -1, "filename": "iotc-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "8b14752313a56e9ff3931782d4fed0b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11057, "upload_time": "2019-06-05T21:11:59", "url": "https://files.pythonhosted.org/packages/cd/3f/c7526d6d97c231d73332f0c7ca504d27c8c9f362b684b7543a55c1b569e8/iotc-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a947e7e49f1dcdedd59650480c9fb02", "sha256": "c4e9e66ab1e509f90e6701f1a934e462f9c13cf482821ed0c6d7a26a0e32f575" }, "downloads": -1, "filename": "iotc-0.3.3.tar.gz", "has_sig": false, "md5_digest": "7a947e7e49f1dcdedd59650480c9fb02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13771, "upload_time": "2019-06-05T21:12:00", "url": "https://files.pythonhosted.org/packages/c4/97/bd489384e90ec6e14fc19458a93f5316e95356496a478330d28244df3ec3/iotc-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "d3c8d38a22c4dae8ae33549359442710", "sha256": "152b3143c4747714b4a897a3e4d95c8f96e04e13ca674bad880c0cbdf0fa5500" }, "downloads": -1, "filename": "iotc-0.3.4-py2-none-any.whl", "has_sig": false, "md5_digest": "d3c8d38a22c4dae8ae33549359442710", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11550, "upload_time": "2019-08-26T22:17:29", "url": "https://files.pythonhosted.org/packages/1b/a4/295903e0345f66df0a342e24d724903d3d457e03148b94aa6a5ac8b5d9eb/iotc-0.3.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29096140a0c0f047aab6a4fe89e2ffd0", "sha256": "2e0e26b04543c6eb42871050f08bd4c8a3694a34486eb94cb04e343b66a05f1a" }, "downloads": -1, "filename": "iotc-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "29096140a0c0f047aab6a4fe89e2ffd0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11549, "upload_time": "2019-08-26T22:17:30", "url": "https://files.pythonhosted.org/packages/5c/21/2741c7fd74b62a80e4078f37f4194250b4d6b0e3c7f9fe432c7d3855dbca/iotc-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f757aeb66f5510747f6adad245f227c", "sha256": "bf09a167bed8325ad7e2348666373327bc71d7f9184524f1d822eacecce33bb4" }, "downloads": -1, "filename": "iotc-0.3.4.tar.gz", "has_sig": false, "md5_digest": "7f757aeb66f5510747f6adad245f227c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14535, "upload_time": "2019-08-26T22:17:32", "url": "https://files.pythonhosted.org/packages/e5/73/7274daa8aac5adcb864e14eddb5246c161053ba524259f79ed805734505a/iotc-0.3.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d3c8d38a22c4dae8ae33549359442710", "sha256": "152b3143c4747714b4a897a3e4d95c8f96e04e13ca674bad880c0cbdf0fa5500" }, "downloads": -1, "filename": "iotc-0.3.4-py2-none-any.whl", "has_sig": false, "md5_digest": "d3c8d38a22c4dae8ae33549359442710", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11550, "upload_time": "2019-08-26T22:17:29", "url": "https://files.pythonhosted.org/packages/1b/a4/295903e0345f66df0a342e24d724903d3d457e03148b94aa6a5ac8b5d9eb/iotc-0.3.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29096140a0c0f047aab6a4fe89e2ffd0", "sha256": "2e0e26b04543c6eb42871050f08bd4c8a3694a34486eb94cb04e343b66a05f1a" }, "downloads": -1, "filename": "iotc-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "29096140a0c0f047aab6a4fe89e2ffd0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11549, "upload_time": "2019-08-26T22:17:30", "url": "https://files.pythonhosted.org/packages/5c/21/2741c7fd74b62a80e4078f37f4194250b4d6b0e3c7f9fe432c7d3855dbca/iotc-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f757aeb66f5510747f6adad245f227c", "sha256": "bf09a167bed8325ad7e2348666373327bc71d7f9184524f1d822eacecce33bb4" }, "downloads": -1, "filename": "iotc-0.3.4.tar.gz", "has_sig": false, "md5_digest": "7f757aeb66f5510747f6adad245f227c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14535, "upload_time": "2019-08-26T22:17:32", "url": "https://files.pythonhosted.org/packages/e5/73/7274daa8aac5adcb864e14eddb5246c161053ba524259f79ed805734505a/iotc-0.3.4.tar.gz" } ] }