{ "info": { "author": "Markus Ressel", "author_email": "mail@markusressel.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": ".. |pypi_version| image:: https://badge.fury.io/py/xs1-api-client.svg\n :target: https://badge.fury.io/py/xs1-api-client\n\nxs1-api-client |pypi_version|\n=============================\n\nA python 3.4+ library for accessing actuator and sensor data on the the\nEZcontrol\u00ae XS1 Gateway using its HTTP API.\n\nBuild Status\n============\n\n.. |build_master| image:: https://travis-ci.org/markusressel/xs1-api-client.svg?branch=master\n :target: https://travis-ci.org/markusressel/xs1-api-client/branches\n\n.. |build_beta| image:: https://travis-ci.org/markusressel/xs1-api-client.svg?branch=beta\n :target: https://travis-ci.org/markusressel/xs1-api-client/branches\n\n.. |build_dev| image:: https://travis-ci.org/markusressel/xs1-api-client.svg?branch=dev\n :target: https://travis-ci.org/markusressel/xs1-api-client/branches\n\n\n.. |codebeat_master| image:: https://codebeat.co/badges/f11a5607-2193-4e86-b924-fc4b1698ec8f\n :target: https://codebeat.co/projects/github-com-markusressel-xs1-api-client-master\n\n.. |codebeat_beta| image:: https://codebeat.co/badges/913b9f89-1ab4-4865-b472-ca2fbeb53388\n :target: https://codebeat.co/projects/github-com-markusressel-xs1-api-client-beta\n\n.. |codebeat_dev| image:: https://codebeat.co/badges/dc91633f-bf08-4314-8da4-31cae22a8706\n :target: https://codebeat.co/projects/github-com-markusressel-xs1-api-client-dev\n\n+--------------------+------------------+-----------------+\n| Master | Beta | Dev |\n+====================+==================+=================+\n| |build_master| | |build_beta| | |build_dev| |\n+--------------------+------------------+-----------------+\n| |codebeat_master| | |codebeat_beta| | |codebeat_dev| |\n+--------------------+------------------+-----------------+\n\n\nHow to use\n==========\n\nInstallation\n------------\n\n``pip install xs1-api-client``\n\nUsage\n-----\n\nFor a basic example have a look at the [example.py] file. If you need\nmore info have a look at the [documentation] which should help.\n\nBasic Example\n-------------\n\nCreate the API Object\n~~~~~~~~~~~~~~~~~~~~~\n\nThe basic way of creating an API object is by providing connection info\ndirectly when creating it:\n\n.. code-block:: python\n\n from xs1_api_client import api as xs1api\n from xs1_api_client import api_constants\n\n # Create an api object with private configuration\n api = xs1api.XS1(host='192.168.2.20', user=\"Username\", password=\"Password\")\n\nThis will automatically try to connect to the gateway with the given credentials and retrieve basic\ngateway information which you can output like this:\n\n.. code-block:: python\n\n print(\"Gateway Hostname: \" + api.get_gateway_name())\n print(\"Gateway MAC: \" + api.get_gateway_mac())\n print(\"Gateway Hardware Version: \" + api.get_gateway_hardware_version())\n print(\"Gateway Bootloader Version: \" + api.get_gateway_bootloader_version())\n print(\"Gateway Firmware Version: \" + api.get_gateway_firmware_version())\n print(\"Gateway uptime: \" + str(api.get_gateway_uptime()) + \" seconds\")\n\nYou can also specify a custom port and enable SSL:\n\n.. code-block:: python\n\n api = xs1api.XS1(host='192.168.2.20', port=1234, ssl=True, user=\"Username\", password=\"Password\")\n\nNow that you have a connection to your gateway we can retrieve its\nconfiguration and set or retrieve values of configured actuators and sensors or even modify their configuration.\n\nDevices\n~~~~~~~\n\nAll devices that you have configured in your XS1 are implemented using\nthe ``XS1Device`` base class which can be found at ``/device/__init__.py``.\nThis class provides basic functionality for every device like getting\nthe **id**, **name**, **type** and other values.\n\nRetrieve Actuators\n~~~~~~~~~~~~~~~~~~\n\nTo retrieve a list of all 64 actuators use the following call:\n\n.. code-block:: python\n\n actuators = api.get_all_actuators()\n\nThis will return a list of ``XS1Actuator`` objects which is another base\nclass for all actuators. You can use something like this to print all\nyour actuators:\n\n.. code-block:: python\n\n for actuator in actuators:\n print(\"Actuator \" + str(actuator.id()) + \": \" + actuator.name() + \" (\" + str(actuator.type()) + \")\")\n\nThere is also an integrated ``__str__`` method to print out most of the useful properties just like this:\n\n.. code-block:: python\n\n for actuator in actuators:\n print(actuator)\n\nYou can also filter the elements by ``enabled`` and ``disabled`` state using:\n\n.. code-block:: python\n\n enabled_actuators = api.get_all_actuators(True)\n\nRetrieve a single actuator simply by using:\n\n.. code-block:: python\n\n actuator_1 = api.get_actuator(1)\n\nRetrieve an Actuator Value\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo retrieve the current value of an actuator just call:\n\n.. code-block:: python\n\n current_value = actuator.value()\n\nSet a new Actuator value\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo set a new value to this actuator use:\n\n.. code-block:: python\n\n actuator.set_value(100)\n\nThis will send the required request to the XS1 and set the ``new_value``\nproperty to your value. Most of the time this value is set\ninstantaneously is in sync with the ``value`` property. However if this\nvalue is different from the standard ``value`` the XS1 gateway is still\ntrying to update the value on the remote device. For some devices this\ncan take up to a couple of minutes (f.ex. FHT 80B heating).\n\nUpdating Actuator Information\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCurrently there is **no callback** when the value is finally updated so\n**you have to update the device information manually** if you want to\nget an update on its current state:\n\n.. code-block:: python\n\n actuator.update()\n\nAfter that the usual methods like ``actuator.value()`` will respond with\nthe updated state.\n\nExecuting Actuator Functions\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you have defined function presets for a device you can get a list of\nall functions using:\n\n.. code-block:: python\n\n functions = actuator.get_functions()\n\nand print them like this:\n\n.. code-block:: python\n\n for function in functions:\n print(function)\n\nto execute one of the functions type:\n\n.. code-block:: python\n\n function.execute()\n\nThis will (like set\\_value) update the device state immediately with the\ngateways response. Remember though that there can be a delay for sending\nthis value to the actual remote device like mentioned above.\n\nRetrieve a List of Sensors\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo retrieve a list of all 64 sensors use the following call:\n\n.. code-block:: python\n\n sensors = api.get_all_sensors()\n\nJust like with actuators you can filter the elements by ``enabled`` and ``disabled`` state using:\n\n.. code-block:: python\n\n enabled_sensors = api.get_all_sensors(True)\n\n| This will return a list of ``XS1Sensor`` objects which is the base\n class for all sensors.\n| You can print basic information about them like this:\n\n.. code-block:: python\n\n for sensor in sensors:\n print(\"Sensor \" + str(sensor.id()) + \": \" + sensor.name() + \" (\" + str(sensor.value()) + \")\")\n\nJust like mentioned above you can also use:\n\n.. code-block:: python\n\n for sensor in sensors:\n print(sensor)\n\nor:\n\n.. code-block:: python\n\n sensor_1 = api.get_sensor(1)\n\nto retrieve a specific sensor.\n\nUpdating Sensor Information\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nJust like with actuators there is no automatic updates for sensors\neither. To get a state update from the XS1 gateway for your sensor\nobject call:\n\n.. code-block:: python\n\n sensor.update()\n\nAfter that the complete state of this sensor is updated.\n\nDisabled Devices\n~~~~~~~~~~~~~~~~\n\nThe XS1 allows up to 64 actuator and 64 sensor configurations. These 128\ndevice configurations are accessible via the HTTP API at any time - even\nwhen there is nothing configured for a specific device id/number.\n\nTo check if a device has been configured (and enabled) in the XS1 web interface call:\n\n.. code-block:: python\n\n device.enabled()\n\nfor both actuators and sensors alike.\n\nGet a device configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSince version 2.0 it is possible to get and set device configurations on the XS1 using this library.\n\nPlease have a look at the ``example_config.py`` file to get an idea of how to retrieve a device configuration.\n\nModify a device configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n**Before you proceed**\n\nEvery configuration change will write to the internal flash memory of the XS1.\nPlease keep in mind that that the use flash memory can and will probably degrade when written too often.\n\nCopy a device configuration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere is a very detailed example in this project called ``example_config_copy_actuator.py`` that will show you\nhow to copy a device configuration and also explains most of the important configuration parameters you will have\nto use to set a custom configuration. Keep in mind though that the configuration parameters can vary between device\ntypes and systems.\n\n\nContributing\n============\n\nGithub is for social coding: if you want to write code, I encourage contributions through pull requests from forks \nof this repository. Create Github tickets for bugs and new features and comment on the ones that you are interested in.\n\nLicense\n=======\n\n::\n\n xs1-api-client by Markus Ressel\n Copyright (C) 2017 Markus Ressel\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/markusressel/xs1-api-client", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "xs1-api-client", "package_url": "https://pypi.org/project/xs1-api-client/", "platform": "", "project_url": "https://pypi.org/project/xs1-api-client/", "project_urls": { "Homepage": "https://github.com/markusressel/xs1-api-client" }, "release_url": "https://pypi.org/project/xs1-api-client/2.3.5/", "requires_dist": [ "requests", "urllib3" ], "requires_python": "", "summary": "A library to get and set values of the EZcontrol XS1 Gateway", "version": "2.3.5" }, "last_serial": 4574213, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "1efac8ff748f8e041d6610c381dc3616", "sha256": "f49e8f7ca72e0575e5d6c4a32dec00ab3d5d2646bd6cca45b852cbfa4377a730" }, "downloads": -1, "filename": "xs1_api_client-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "1efac8ff748f8e041d6610c381dc3616", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11944, "upload_time": "2018-09-19T00:27:00", "url": "https://files.pythonhosted.org/packages/9d/79/b642e0fbec4428de291eacff0dce23b6357c7a2bf04d8de16e5b1326e39d/xs1_api_client-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "472eb67cec1f4e2cbf5ce20e9249d08c", "sha256": "426803f4395d499876e0f543dbf9cafbc8dff2153d14457ef3b74fbdbec6e94d" }, "downloads": -1, "filename": "xs1_api_client-1.0.0.tar.gz", "has_sig": false, "md5_digest": "472eb67cec1f4e2cbf5ce20e9249d08c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8204, "upload_time": "2017-02-24T22:28:30", "url": "https://files.pythonhosted.org/packages/8b/c1/0bb7b7ab8d4f82147bac168ec366c9dc6801d6ae2d9afcea4a3ed813c93b/xs1_api_client-1.0.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "38127920123b444f9e5f443a35a04f37", "sha256": "ac973d8d99f1e54a3f8c02ebe529cf21d06a787cfabd222716df7ff3ae36a3a8" }, "downloads": -1, "filename": "xs1_api_client-1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "38127920123b444f9e5f443a35a04f37", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11915, "upload_time": "2018-09-19T00:26:58", "url": "https://files.pythonhosted.org/packages/00/8a/49b45717d00c9449d7b74c3e78243baf06010b3ee5d1e28bcbb984792b63/xs1_api_client-1.0-py2-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "095369bc71b79f89faf73048e5b0166d", "sha256": "c9205c71fc1ecd00d37312d3f8e0b914707fd80c20b06ff0ac1846f31bafbd6e" }, "downloads": -1, "filename": "xs1_api_client-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "095369bc71b79f89faf73048e5b0166d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12004, "upload_time": "2018-09-19T00:27:01", "url": "https://files.pythonhosted.org/packages/83/32/cee66206654bdceb5feafa86894d0f28f084f96bb2b5138dfe7f57db7d50/xs1_api_client-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f19a3859d10c66d2d8ca921195e61164", "sha256": "35bd1908a61fe6b0169ccc4d05f0130a90a5a11ed9a688c5fbbea9580665b0d4" }, "downloads": -1, "filename": "xs1_api_client-1.0.1.tar.gz", "has_sig": false, "md5_digest": "f19a3859d10c66d2d8ca921195e61164", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8232, "upload_time": "2017-02-25T01:03:25", "url": "https://files.pythonhosted.org/packages/91/87/326a25aa3ad48ac3d4bed0c0c8ef6dbf55336acae874a30f1e9d00e13c9e/xs1_api_client-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "a65c066bb28e00bcc32324e6da4a4132", "sha256": "d919fffd68bd430ca25879fcbcf2dd22c36ba82a1d9cafbc7420d349dea79987" }, "downloads": -1, "filename": "xs1_api_client-2.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "a65c066bb28e00bcc32324e6da4a4132", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14645, "upload_time": "2017-09-29T12:46:01", "url": "https://files.pythonhosted.org/packages/4e/06/3d475f8ddddd65720a95390e46710bcbde1bd8db8dd1e44344d67bd57f4e/xs1_api_client-2.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b45cf05e2214fb30a85e13dcc6362b0e", "sha256": "b5aaac2fdb6781ada1afbf836d4d57146acc821a2404d5e85f2580113e68f49b" }, "downloads": -1, "filename": "xs1_api_client-2.0.0.tar.gz", "has_sig": false, "md5_digest": "b45cf05e2214fb30a85e13dcc6362b0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13037, "upload_time": "2017-09-29T12:46:03", "url": "https://files.pythonhosted.org/packages/a1/a3/b4a7ac2425f7e534a4ba759205ad809731c1a854dc4ee105006529bc1c96/xs1_api_client-2.0.0.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "5263615ad99169dc1921be64c15cc670", "sha256": "1e3aa6a171f5c766bb8cf38d65b4153ae4e3f181801657c04cfcfc90ef03beab" }, "downloads": -1, "filename": "xs1_api_client-2.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5263615ad99169dc1921be64c15cc670", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14896, "upload_time": "2017-11-24T00:17:27", "url": "https://files.pythonhosted.org/packages/24/c3/a9a370de7c9c7986b38086dd30e9358308cd43a1d3c68b9951929ca4e13f/xs1_api_client-2.1.3-py3-none-any.whl" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "f4cedbd8a4cd92ff88d553722f870827", "sha256": "8c09318e8d6971b0dff1e4b3499e6b2f8e5ae49387c03f68cf0992bd40abb358" }, "downloads": -1, "filename": "xs1_api_client-2.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f4cedbd8a4cd92ff88d553722f870827", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19373, "upload_time": "2017-11-27T20:44:43", "url": "https://files.pythonhosted.org/packages/72/e6/7e102384269f8a2405822a598a5669c6e5c8484aee3dbf32f8e9f072a4ba/xs1_api_client-2.2.0-py3-none-any.whl" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "d8de3abc1491e59986e9c4e920ec1b99", "sha256": "bc38ecf1706f2efa732bf43fb5e4fafe708e4a3eb5e6487a4aac8f7ead8160c3" }, "downloads": -1, "filename": "xs1_api_client-2.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d8de3abc1491e59986e9c4e920ec1b99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19604, "upload_time": "2018-04-02T17:50:30", "url": "https://files.pythonhosted.org/packages/88/82/f401ca7587661ab7e6c6b34d1c124f2be2e1984bfcf8df6b948085073214/xs1_api_client-2.3.0-py3-none-any.whl" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "51bbef0197b7afc92a73efff07c23d4b", "sha256": "83d32b5f1061823585925c713521707fc5d6e1bf0e08bbd664f3fb2c02641351" }, "downloads": -1, "filename": "xs1_api_client-2.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "51bbef0197b7afc92a73efff07c23d4b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21927, "upload_time": "2018-07-13T17:38:18", "url": "https://files.pythonhosted.org/packages/cc/9d/e13e9aea61260e594864a75b4811751bf526de4c4d60b0e2835f696352d1/xs1_api_client-2.3.1-py3-none-any.whl" } ], "2.3.2": [ { "comment_text": "", "digests": { "md5": "03f9fa8acdba83ec945f8ed9862c8d86", "sha256": "efca8c6c4e3e4cd8d80e718cbb066966e317a77487858a1adca9f1509f62bf64" }, "downloads": -1, "filename": "xs1_api_client-2.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "03f9fa8acdba83ec945f8ed9862c8d86", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21927, "upload_time": "2018-07-13T17:41:25", "url": "https://files.pythonhosted.org/packages/a1/fa/86b6b094bbc2afa77a3a6f8c79f1b1181749eb629175c66be2de62aafb19/xs1_api_client-2.3.2-py3-none-any.whl" } ], "2.3.2.dev0": [ { "comment_text": "", "digests": { "md5": "50cb1f4e431bdb40126c1f4d71779404", "sha256": "4aa069c1764c5f0fc5bd8384ac9309d3a00e567fd5eb025aeab1ca7ecf009340" }, "downloads": -1, "filename": "xs1_api_client-2.3.2.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "50cb1f4e431bdb40126c1f4d71779404", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21994, "upload_time": "2018-07-13T17:46:45", "url": "https://files.pythonhosted.org/packages/a4/5f/4e44a35db870470d1b2ce6f518ba5217b05644b06fdf796f53a298e981f1/xs1_api_client-2.3.2.dev0-py3-none-any.whl" } ], "2.3.3": [ { "comment_text": "", "digests": { "md5": "67c8923a1f394677a97fd50ff07d3b17", "sha256": "0cc6812c5a391b837b279c6e762fe8d4015ff8137d90dd24340876f28f3ab34b" }, "downloads": -1, "filename": "xs1_api_client-2.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "67c8923a1f394677a97fd50ff07d3b17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21955, "upload_time": "2018-07-13T17:47:54", "url": "https://files.pythonhosted.org/packages/f3/5b/22275d745bf97485a55cc7f79698c480468c1f7ad8763b5d6e7290bc98aa/xs1_api_client-2.3.3-py3-none-any.whl" } ], "2.3.4": [ { "comment_text": "", "digests": { "md5": "c39f68e85f6141c6cbd8dafa43591bfb", "sha256": "dde95aa4523f0e8af99078d69674eb5e97023a1e0523da3a9e5053fb4464700b" }, "downloads": -1, "filename": "xs1_api_client-2.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c39f68e85f6141c6cbd8dafa43591bfb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21825, "upload_time": "2018-09-19T00:27:03", "url": "https://files.pythonhosted.org/packages/a3/fd/48fb1f66878e05afa17c037beddf0a91f07c022838d73a738994ab245c9b/xs1_api_client-2.3.4-py3-none-any.whl" } ], "2.3.5": [ { "comment_text": "", "digests": { "md5": "d0da489c28a235541ef9cf4af48df8f2", "sha256": "f85cdf07b196b718c36f71e9b53e2c373afc91658a1aae6958cca365d3eb5eae" }, "downloads": -1, "filename": "xs1_api_client-2.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "d0da489c28a235541ef9cf4af48df8f2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34101, "upload_time": "2018-12-08T03:58:38", "url": "https://files.pythonhosted.org/packages/1e/70/f1b0302d02a94913c47d9f757ec3029714edbff063e9ebf9616ced8c1909/xs1_api_client-2.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20b0d0a8a1aad37211af7f731c774601", "sha256": "fe16670d421d58f047ad0a25b68c06f49105b6187af1c9a18f0d9d4da170f10d" }, "downloads": -1, "filename": "xs1_api_client-2.3.5.tar.gz", "has_sig": false, "md5_digest": "20b0d0a8a1aad37211af7f731c774601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20632, "upload_time": "2018-12-08T03:58:40", "url": "https://files.pythonhosted.org/packages/e5/8b/62e64b163107070950dc0b0a06c42adcf87da311e7ed7fec0a53dfb443b4/xs1_api_client-2.3.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d0da489c28a235541ef9cf4af48df8f2", "sha256": "f85cdf07b196b718c36f71e9b53e2c373afc91658a1aae6958cca365d3eb5eae" }, "downloads": -1, "filename": "xs1_api_client-2.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "d0da489c28a235541ef9cf4af48df8f2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34101, "upload_time": "2018-12-08T03:58:38", "url": "https://files.pythonhosted.org/packages/1e/70/f1b0302d02a94913c47d9f757ec3029714edbff063e9ebf9616ced8c1909/xs1_api_client-2.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20b0d0a8a1aad37211af7f731c774601", "sha256": "fe16670d421d58f047ad0a25b68c06f49105b6187af1c9a18f0d9d4da170f10d" }, "downloads": -1, "filename": "xs1_api_client-2.3.5.tar.gz", "has_sig": false, "md5_digest": "20b0d0a8a1aad37211af7f731c774601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20632, "upload_time": "2018-12-08T03:58:40", "url": "https://files.pythonhosted.org/packages/e5/8b/62e64b163107070950dc0b0a06c42adcf87da311e7ed7fec0a53dfb443b4/xs1_api_client-2.3.5.tar.gz" } ] }