{ "info": { "author": "Stefan Lehmann", "author_email": "Stefan.St.Lehmann@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Operating System :: Microsoft :: Windows :: Windows 7", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries" ], "description": "pyads - Python package\n======================\n\n[![Build Status](https://travis-ci.org/stlehmann/pyads.svg?branch=master)](https://travis-ci.org/stlehmann/pyads)\n[![Coverage Status](https://coveralls.io/repos/github/stlehmann/pyads/badge.svg?branch=master)](https://coveralls.io/github/stlehmann/pyads?branch=master)\n[![Documentation Status](https://readthedocs.org/projects/pyads/badge/?version=latest)](http://pyads.readthedocs.io/en/latest/?badge=latest)\n[![PyPI version](https://badge.fury.io/py/pyads.svg)](https://badge.fury.io/py/pyads)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n\nThis is a python wrapper for TwinCATs ADS library. It provides python functions\nfor communicating with TwinCAT devices. *pyads* uses the C API provided by *TcAdsDll.dll* on Windows *adslib.so* on Linux. The documentation for the ADS API is available on [infosys.beckhoff.com](http://infosys.beckhoff.com/english.php?content=../content/1033/tcadsdll2/html/tcadsdll_api_overview.htm&id=20557).\n\n\nDocumentation: http://pyads.readthedocs.io/en/latest/index.html\n\n# Installation\n\nFrom PyPi:\n\n```bash\n$ pip install pyads\n```\n\nFrom Github:\n\n```bash\n$ git clone https://github.com/MrLeeh/pyads.git --recursive\n$ cd pyads\n$ python setup.py install\n```\n\n# Quickstart\n\n## Creating routes\n\nADS uses its own address system named AmsNetId to identify devices. The\nassignment of a devices to an AmsNetId happens via routing. Routing\nis handled differently on Windows and Linux.\n\n### Creating routes on Linux\n\nOpen a port and create a AmsAddr object for the remote machine.\n\n```python\n>>> import pyads\n>>> pyads.open_port()\n32828\n```\nAdd a route to the remote machine (Linux only - Windows routes must be\nadded in the TwinCat Router UI).\n\n```python\n>>> remote_ip = '192.168.0.100'\n>>> adr = pyads.AmsAddr('127.0.0.1.1.1', pyads.PORT_SPS1)\n>>> pyads.add_route(adr, remote_ip)\n```\nGet the AMS address of the local machine. This may need to be added to\nthe routing table of the remote machine.\n**NOTE: On Linux machines at least one route must be added before the call\nto `get_local_address()` will function properly.**\n\n### Adding routes to a PLC on Linux\nBeckhoff PLCs require that a route be added to the routing table of the PLC. Normally this is handled in the TwinCAT router on Windows, but on Linux there is no such option.\nThis only needs to be done once when initially setting up a connection to a remote PLC.\n\nAdding a route to a remote PLC to allow connections to a PC with the Hostname \"MyPC\"\n``` python\n>>> import pyads\n>>> SENDER_AMS = '1.2.3.4.1.1'\n>>> PLC_IP = '192.168.0.100'\n>>> USERNAME = 'user'\n>>> PASSWORD = 'password'\n>>> ROUTE_NAME = 'RouteToMyPC'\n>>> HOSTNAME = 'MyPC'\n>>> PLC_AMS_ID = '11.22.33.44.1.1'\n>>> pyads.add_route_to_plc(SENDER_AMS, HOSTNAME, PLC_IP, USERNAME, PASSWORD, route_name=ROUTE_NAME)\n```\n\n### Creating routes on Windows\n\nOn Windows you don't need to manually add the routes with pyads but instead you\nuse the TwinCAT Router UI (TcSystemManager) which comes with the TwinCAT\ninstallation. Have a look at the TwinCAT documentation\n[infosys.beckhoff.com TcSystemManager][0] for further details.\n\n## Testserver\n\nFor first tests you can use the simple testserver that is provided with\nthe *pyads* package. To start it up simply run the following command from\na separate console window.\n\n```bash\n$ python -m pyads.testserver\n\n```\n\nThis will create a new device on 127.0.0.1 port 48898. In the next step\nthe route to the testserver needs to be added from another python console.\n\n```python\n>>> import pyads\n>>> pyads.add_route(\"127.0.0.1.1.1\", '127.0.0.1')\n```\n\n## Usage\n\n### Connect to a remote device\n\n```python\n>>> import pyads\n>>> plc = pyads.Connection('127.0.0.1.1.1', pyads.PORT_SPS1)\n>>> plc.open()\n>>> plc.close()\n```\n\n### Read and write values by name\n\n```python\n>>> import pyads\n>>> plc = pyads.Connection('127.0.0.1.1.1', pyads.PORT_SPS1)\n>>> plc.open()\n>>> plc.read_by_name('global.bool_value', pyads.PLCTYPE_BOOL)\nTrue\n>>> plc.write_by_name('global.bool_value', False, pyads.PLCTYPE_BOOL)\n>>> plc.read_by_name('global.bool_value', pyads.PLCTYPE_BOOL)\nFalse\n>>> plc.close()\n\n```\n\nIf the name could not be found an Exception containing the error message and ADS Error number is raised.\n\n```python\n>>> plc.read_by_name('global.wrong_name', pyads.PLCTYPE_BOOL)\nADSError: ADSError: symbol not found (1808)\n```\n\nFor reading strings the maximum buffer length is 1024.\n\n```python\n>>> plc.read_by_name('global.sample_string', pyads.PLCTYPE_STRING)\n'Hello World'\n>>> plc.write_by_name('global.sample_string', 'abc', pyads.PLCTYPE_STRING)\n>>> plc.read_by_name(adr, 'global.sample_string', pyads.PLCTYPE_STRING)\n'abc'\n```\n\nYou can also read/write arrays. For this you simply need to multiply the datatype by\nthe number of array elements you want to read/write.\n\n```python\n>>> plc.write_by_name('global.sample_array', [1, 2, 3], pyads.PLCTYPE_INT * 3)\n>>> plc.read_by_name('global.sample_array', pyads.PLCTYPE_INT * 3)\n(1, 2, 3)\n```\n\n### Read and write values by address\n\nRead and write *UDINT* variables by address.\n\n```python\n>>> import pyads\n>>> plc = pyads.Connection('127.0.0.1.1.1', pyads.PORT_SPS1)\n>>> plc.open()\n>>> # write 65536 to memory byte MDW0\n>>> plc.write(pyads.INDEXGROUP_MEMORYBYTE, 0, 65536, pyads.PLCTYPE_UDINT)\n>>> # write memory byte MDW0\n>>> plc.read(pyads.INDEXGROUP_MEMORYBYTE, 0, pyads.PLCTYPE_UDINT)\n65536\n>>> plc.close()\n```\n\nToggle bitsize variables by address.\n\n```python\n>>> # read memory bit MX100.0\n>>> data = plc.read(pyads.INDEXGROUP_MEMORYBIT, 100*8 + 0, pyads.PLCTYPE_BOOL)\n>>> # write inverted value to memory bit MX100.0\n>>> plc.write(pyads.INDEXGROUP_MEMORYBIT, 100*8 + 0, not data)\n```\n\n### Simple handling of notification callbacks\n\nTo make the handling of notifications more Pythonic a notification decorator has\nbeen introduced in version 2.2.4. This decorator takes care of converting the\nctype values transfered via ADS to python datatypes.\n\n```python\n>>> import pyads\n>>> plc = pyads.Connection('127.0.0.1.1.1', 48898)\n>>> plc.open()\n>>>\n>>> @plc.notification(pyads.PLCTYPE_INT)\n>>> def callback(handle, name, timestamp, value):\n>>> print(\n>>> '{1}: received new notitifiction for variable \"{0}\", value: {2}'\n>>> .format(name, timestamp, value)\n>>> )\n>>>\n>>> handles = plc.add_device_notification('GVL.intvar',\n pyads.NotificationAttrib(2), callback)\n>>> # Write to the variable to trigger a notification\n>>> plc.write_by_name('GVL.intvar', 123, pyads.PLCTYPE_INT)\n\n2017-10-01 10:41:23.640000: received new notitifiction for variable \"GVL.intvar\", value: abc\n\n>>> # remove notification\n>>> plc.del_device_notification(handles)\n\n```\n\nThe notification callback works for all basic plc datatypes but not for arrays\nor structures.\n\n\n[0]: https://infosys.beckhoff.de/english.php?content=../content/1033/TcSystemManager/Basics/TcSysMgr_AddRouteDialog.htm&id=", "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/MrLeeh/pyads", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyads", "package_url": "https://pypi.org/project/pyads/", "platform": "", "project_url": "https://pypi.org/project/pyads/", "project_urls": { "Homepage": "https://github.com/MrLeeh/pyads" }, "release_url": "https://pypi.org/project/pyads/3.1.2/", "requires_dist": null, "requires_python": "", "summary": "Python wrapper for TwinCAT ADS library", "version": "3.1.2" }, "last_serial": 5924591, "releases": { "1.0.2": [ { "comment_text": "", "digests": { "md5": "2b2a39cb82d6444ceb74e4196132647f", "sha256": "2af2d8bc88fc3d544c419cddff70610e1bd1a3932a6096baf13d5b69ecb8430d" }, "downloads": -1, "filename": "pyads-1.0.2.zip", "has_sig": false, "md5_digest": "2b2a39cb82d6444ceb74e4196132647f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75917, "upload_time": "2013-10-03T16:44:15", "url": "https://files.pythonhosted.org/packages/2f/62/c8fa5bf2c1fbafede82a50e627ba1257fe9ba5952c98db9fd417194e5d95/pyads-1.0.2.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9b31edafee0a19a0263c3ce2cdef761d", "sha256": "9cb28840acee24da1a13fbe059ec55d40f2cfe749ca7d44e36e5e9ef8edb0c8e" }, "downloads": -1, "filename": "pyads-1.1.0.zip", "has_sig": false, "md5_digest": "9b31edafee0a19a0263c3ce2cdef761d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9296, "upload_time": "2015-06-04T13:16:42", "url": "https://files.pythonhosted.org/packages/15/3d/da8820b27ee27eed1df6388217d78c644e01def07efb60dab6308cab7c97/pyads-1.1.0.zip" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d2253cb8a047d3101970c2a04c08bb5c", "sha256": "a142023415c9d470e57aa4f8b5484b4117d295874fb3d2a95fc19dea8f0e4df0" }, "downloads": -1, "filename": "pyads-1.1.1.zip", "has_sig": false, "md5_digest": "d2253cb8a047d3101970c2a04c08bb5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9643, "upload_time": "2015-06-04T13:24:03", "url": "https://files.pythonhosted.org/packages/81/29/558d9e9db813f28031d373f3b84e94bee7bd8c13b17c6b5f51f66ff1058d/pyads-1.1.1.zip" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "62b138d7702903e6d0e6870125b2070f", "sha256": "91ef9bee89d8ffb84b1afb8010213876554a4c09f4dd467d2fce6dd6522103c1" }, "downloads": -1, "filename": "pyads-1.1.2.zip", "has_sig": false, "md5_digest": "62b138d7702903e6d0e6870125b2070f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25537, "upload_time": "2015-07-17T09:35:03", "url": "https://files.pythonhosted.org/packages/9c/8d/fc0fb0f9466da1334d2a152abc34cf27ea5080cee353657874e863e3ae4e/pyads-1.1.2.zip" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "6a7162614b11dc9484c439ade1271d3b", "sha256": "1a6b953146926f57aa98f86d3d1755ca87ecd7385aef26a78dc72e4ae3da6bf3" }, "downloads": -1, "filename": "pyads-1.2.0.zip", "has_sig": false, "md5_digest": "6a7162614b11dc9484c439ade1271d3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26183, "upload_time": "2015-07-24T07:51:04", "url": "https://files.pythonhosted.org/packages/cd/26/d9fb8893746e04bf43d03aaf5edfcb09553833c5e95edac31e3b286393a2/pyads-1.2.0.zip" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "40c366e46b6a7a7c887cec1109f1bb12", "sha256": "55027c3a350a8b66c71c10945d3b7071576ff84fa7bd0d0b33cf55edbd88992d" }, "downloads": -1, "filename": "pyads-1.3.0.zip", "has_sig": false, "md5_digest": "40c366e46b6a7a7c887cec1109f1bb12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26372, "upload_time": "2015-09-02T14:47:05", "url": "https://files.pythonhosted.org/packages/bc/80/ed1070192112cce98e0c0038af737e2eb111cbd6f8f5a9a948be27cfdb08/pyads-1.3.0.zip" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "a9ad26f53e2fcb51aaa44bfd61bb87bc", "sha256": "6ecf72b2ad6de8365c32d1b393515db4597eb31545b2da5f3df1038e8a61b970" }, "downloads": -1, "filename": "pyads-2.0.0.zip", "has_sig": false, "md5_digest": "a9ad26f53e2fcb51aaa44bfd61bb87bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28873, "upload_time": "2016-08-16T13:44:19", "url": "https://files.pythonhosted.org/packages/aa/62/63ca77d6ba69baa653ebdfa0a78845ea5761f04096de9674f33aa4178643/pyads-2.0.0.zip" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "6135722eaa6ff2a1090d317e8b3a0bb2", "sha256": "f94f457e62f1042d87735defac4090c473f0d6f31f60d273a10ee925d8e32960" }, "downloads": -1, "filename": "pyads-2.1.0.zip", "has_sig": false, "md5_digest": "6135722eaa6ff2a1090d317e8b3a0bb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37315, "upload_time": "2016-09-20T12:00:11", "url": "https://files.pythonhosted.org/packages/cf/11/d735093f10b14e97e393b60316a5910913c39ac9bc7a2c7febfb6c19d61d/pyads-2.1.0.zip" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "8ced31d8470a1f07f027ed8d574d6c36", "sha256": "e2b94e6184b0ca71a76c8e0eaa3cad7a7dcb88ff50774fb48efa4ad209d36c40" }, "downloads": -1, "filename": "pyads-2.1.1.tar.gz", "has_sig": false, "md5_digest": "8ced31d8470a1f07f027ed8d574d6c36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31923, "upload_time": "2017-05-09T11:11:36", "url": "https://files.pythonhosted.org/packages/c3/e7/c2a4931fcde1e88433ad79a07945944ba4800005c427b1c81d12274bd18d/pyads-2.1.1.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "43034509485131193885dd8741ef5af9", "sha256": "a1820c364ad085a351ceacd97aea1e034bae01fc7172cbc48e8d7f766e905a12" }, "downloads": -1, "filename": "pyads-2.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "43034509485131193885dd8741ef5af9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 407575, "upload_time": "2017-07-25T13:07:08", "url": "https://files.pythonhosted.org/packages/f3/34/a886dace98b0194b8db15d5e951d2324d3db828c48238d0d26fef8689964/pyads-2.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2fd29f7890c7c04f0d942d0e268e91a", "sha256": "7a3d3a1d0a565bff829234915a66e7f1107624ff6cca2eb9441443c60709dca1" }, "downloads": -1, "filename": "pyads-2.2.0.tar.gz", "has_sig": false, "md5_digest": "a2fd29f7890c7c04f0d942d0e268e91a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 367354, "upload_time": "2017-07-25T13:01:36", "url": "https://files.pythonhosted.org/packages/7c/2a/a6e2bb1ef829f67bf1ec13f76373c87ef7042436bef295bd0cb81ec09ad1/pyads-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "a61d8e020d54fb33a1be43db5376466f", "sha256": "62fb3857d2ebd9e1b92cd11772b703ca02943d4644437dbf80e926e0b6cbe845" }, "downloads": -1, "filename": "pyads-2.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "a61d8e020d54fb33a1be43db5376466f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 668982, "upload_time": "2017-09-26T14:34:50", "url": "https://files.pythonhosted.org/packages/83/60/cf3f8f17df8f951583cbf204415af493cde23eac07c7f526a335e4a6f152/pyads-2.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e2acf6677c53c3bf01c6fa86507d2e4", "sha256": "7b68564105aee91fe23448da61c8139ee18747013d715ae1d3fba2d32f50cb7b" }, "downloads": -1, "filename": "pyads-2.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5e2acf6677c53c3bf01c6fa86507d2e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 411621, "upload_time": "2017-09-26T14:34:53", "url": "https://files.pythonhosted.org/packages/39/51/74b76986bc3193c29c71a2b61c2bcdd2438fccb8d66fe80e0d330f4cfc13/pyads-2.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d19005866e16b11e297d57cd9d0da4ca", "sha256": "9d27766edcfbf2b6dbda694c6211f70c8d2e73ca249f2b23d0e95ce0d1e230b3" }, "downloads": -1, "filename": "pyads-2.2.1.tar.gz", "has_sig": false, "md5_digest": "d19005866e16b11e297d57cd9d0da4ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 373247, "upload_time": "2017-09-26T14:34:56", "url": "https://files.pythonhosted.org/packages/92/e7/910a5c1666307dce9bc41b4e12edcc65cbd3bb629b9b96f485b4c89a3979/pyads-2.2.1.tar.gz" } ], "2.2.10": [ { "comment_text": "", "digests": { "md5": "50a25fd155c3aa46d19ff40bae2fc6bc", "sha256": "e86fbf885f1b5a9aadc6b12806b85cc12abc899eb40437a1033880cb7c333a12" }, "downloads": -1, "filename": "pyads-2.2.10.tar.gz", "has_sig": false, "md5_digest": "50a25fd155c3aa46d19ff40bae2fc6bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 561131, "upload_time": "2018-04-24T17:08:41", "url": "https://files.pythonhosted.org/packages/f4/b0/af7799817aeba53df40236e790fc4252e2633a8177e3b00246b045bd2a00/pyads-2.2.10.tar.gz" } ], "2.2.11": [ { "comment_text": "", "digests": { "md5": "6fdf0d9bec484e89344a4045444be045", "sha256": "51fdf66ee32fabf08c4adb993f714adc46a690cd1247e34c5c9ffe0dd31a3082" }, "downloads": -1, "filename": "pyads-2.2.11.tar.gz", "has_sig": false, "md5_digest": "6fdf0d9bec484e89344a4045444be045", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 402003, "upload_time": "2018-05-04T08:31:28", "url": "https://files.pythonhosted.org/packages/19/b3/7d7f221f22b764422daec04868500f341a00518bd67a3ce5a3f036ccb956/pyads-2.2.11.tar.gz" } ], "2.2.12": [ { "comment_text": "", "digests": { "md5": "1f8bf00e20cd56a5093e18e4eefb1251", "sha256": "1fc9edaf3d6e2284b53310b04b898a9abe44548481f971e66c50e0550e731d99" }, "downloads": -1, "filename": "pyads-2.2.12.tar.gz", "has_sig": false, "md5_digest": "1f8bf00e20cd56a5093e18e4eefb1251", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 402047, "upload_time": "2018-05-08T11:36:35", "url": "https://files.pythonhosted.org/packages/64/5d/511ed972d759e95b6363c13db67af78d79f247423389915b8e9ed84953a8/pyads-2.2.12.tar.gz" } ], "2.2.13": [ { "comment_text": "", "digests": { "md5": "ff840b3dbfdf74bb9290cfa1e72fbd80", "sha256": "5c0856335a3fe8c06ac7a980e938a8dd91bfe00c45720884dc443b6694461cbc" }, "downloads": -1, "filename": "pyads-2.2.13.tar.gz", "has_sig": false, "md5_digest": "ff840b3dbfdf74bb9290cfa1e72fbd80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 389606, "upload_time": "2018-05-16T12:13:00", "url": "https://files.pythonhosted.org/packages/66/bd/753e2d357333f2576a82f2cf92c4e7ba865b37d391623f4c7127f23b2e86/pyads-2.2.13.tar.gz" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "e9845cb926b9018558d0c2e8de0b806d", "sha256": "8f15490b5a0dfefa9fdcacb273be246bd14c5736a99588ea87e24fbf6538e080" }, "downloads": -1, "filename": "pyads-2.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "e9845cb926b9018558d0c2e8de0b806d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 411688, "upload_time": "2017-09-29T09:14:21", "url": "https://files.pythonhosted.org/packages/8f/66/62ea2858f0c576ae4a48188d04eb817eefb71d03139701e23097803117ab/pyads-2.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66c3c7552029a210043aad99b851d4c3", "sha256": "03bb6cf5b1f5441991a555bdb53a97b64b7d083dc184ed249950fea1f83879dc" }, "downloads": -1, "filename": "pyads-2.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "66c3c7552029a210043aad99b851d4c3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 411688, "upload_time": "2017-09-29T09:14:24", "url": "https://files.pythonhosted.org/packages/e1/9d/8f69b83761cfc851abaecafbd50da01ba4740ed6d9406564d082d88cb208/pyads-2.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7853a9bdff3459af193e34802f8e8523", "sha256": "100123ca1db1a988857c335ef847b2649d0e826209508702240d5da59adf8892" }, "downloads": -1, "filename": "pyads-2.2.2.tar.gz", "has_sig": false, "md5_digest": "7853a9bdff3459af193e34802f8e8523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 373264, "upload_time": "2017-09-29T09:14:28", "url": "https://files.pythonhosted.org/packages/41/a8/687915c0a977884fa8d9d164aaa790b54bf22051eedf86fc02241fc8b4e1/pyads-2.2.2.tar.gz" } ], "2.2.3": [ { "comment_text": "", "digests": { "md5": "d73296f9c1642b586166e693e2150b5a", "sha256": "2acc9017cfe211f681a6c6802dc3f6e3b22c3f96624b0cd104afa0f81ae56d81" }, "downloads": -1, "filename": "pyads-2.2.3.tar.gz", "has_sig": false, "md5_digest": "d73296f9c1642b586166e693e2150b5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 344367, "upload_time": "2017-09-29T15:58:00", "url": "https://files.pythonhosted.org/packages/fa/6a/ad03a7fac68d17c4153b0f966775e3ae10efec25381c452c7ee98507cf92/pyads-2.2.3.tar.gz" } ], "2.2.4": [ { "comment_text": "", "digests": { "md5": "67996ae3be34947e68b5dc08c68f4a96", "sha256": "52974abc27d2a32fe06dc957077a521dedf45d7a824aa173d74435239f996417" }, "downloads": -1, "filename": "pyads-2.2.4.tar.gz", "has_sig": false, "md5_digest": "67996ae3be34947e68b5dc08c68f4a96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 344506, "upload_time": "2017-10-01T10:50:23", "url": "https://files.pythonhosted.org/packages/8b/07/36fb389f27f169d2f4822d8d4a175aa2a493335b84667806405e108e05dc/pyads-2.2.4.tar.gz" } ], "2.2.5": [ { "comment_text": "", "digests": { "md5": "8a6a7b94c10aec6522cd71c3310e5824", "sha256": "677d809b767b0c8613d7922369f5d61d5b2c607145219c5c9b163058e072dd47" }, "downloads": -1, "filename": "pyads-2.2.5.tar.gz", "has_sig": false, "md5_digest": "8a6a7b94c10aec6522cd71c3310e5824", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 344578, "upload_time": "2017-10-01T12:39:32", "url": "https://files.pythonhosted.org/packages/20/9e/4061c921ce009c71315c02a53c4564068b42e619779daaad91c36410f5d1/pyads-2.2.5.tar.gz" } ], "2.2.6": [ { "comment_text": "", "digests": { "md5": "0465523717fade51d830c4033eaaeecd", "sha256": "402bab9af438a951807dbc12493ba63c6c0b53e57b114376b2a9cbbdabb29cef" }, "downloads": -1, "filename": "pyads-2.2.6.tar.gz", "has_sig": false, "md5_digest": "0465523717fade51d830c4033eaaeecd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 354427, "upload_time": "2017-10-13T15:13:05", "url": "https://files.pythonhosted.org/packages/ec/7e/93440de4698724f383876af39875dadf82db3a7f8d06a171de554c65a69c/pyads-2.2.6.tar.gz" } ], "2.2.7": [], "2.2.8": [ { "comment_text": "", "digests": { "md5": "38b9896c28f72f0ceef2c6c62fce5a7d", "sha256": "ec39bf4e7216f972d2dd873019735ad94890fc5e3e4070b004844d6eb630f7c5" }, "downloads": -1, "filename": "pyads-2.2.8.tar.gz", "has_sig": false, "md5_digest": "38b9896c28f72f0ceef2c6c62fce5a7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 401998, "upload_time": "2018-04-19T11:02:16", "url": "https://files.pythonhosted.org/packages/34/8b/a9be7f22408f24e49c8ac38fde82c0b9b084e8fd9ec59fe9141e242f1fe9/pyads-2.2.8.tar.gz" } ], "2.2.9": [ { "comment_text": "", "digests": { "md5": "f80c5d3403eaab05543089d813806dfd", "sha256": "677fdf3f720ca60c64117258e6328a703d0dd0fd62d8f10096aeb8b081eed626" }, "downloads": -1, "filename": "pyads-2.2.9.tar.gz", "has_sig": false, "md5_digest": "f80c5d3403eaab05543089d813806dfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 269668, "upload_time": "2018-04-24T17:05:07", "url": "https://files.pythonhosted.org/packages/55/b9/4d7a96bbe79173f0a5174cfeaebbcde43106db370e668725edaf368a9d45/pyads-2.2.9.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "65776805d70443287b5d11825bba22bd", "sha256": "3ae47b21a9c42180a28860e528c791540be9b0070a63bc120ffdca1f44385ebd" }, "downloads": -1, "filename": "pyads-3.0.1.tar.gz", "has_sig": false, "md5_digest": "65776805d70443287b5d11825bba22bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 405049, "upload_time": "2018-07-13T08:47:30", "url": "https://files.pythonhosted.org/packages/1a/1c/60243ec81f06600fc0cbf9041f069065b10029e6e37d2665b71f015c384c/pyads-3.0.1.tar.gz" } ], "3.0.10": [ { "comment_text": "", "digests": { "md5": "336f384947963d5e131e89ee9cd095f8", "sha256": "2bf538eef4dd2725564abd929ca2a2574a5ba44f6258e4fa8d45f5e454e120dc" }, "downloads": -1, "filename": "pyads-3.0.10.tar.gz", "has_sig": false, "md5_digest": "336f384947963d5e131e89ee9cd095f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 391092, "upload_time": "2019-03-27T11:04:09", "url": "https://files.pythonhosted.org/packages/8a/05/bd32fd2a6b1ce5372fa5fa18480a41f65e5a72a6d447be14ec77c6359b8f/pyads-3.0.10.tar.gz" } ], "3.0.11": [ { "comment_text": "", "digests": { "md5": "0c6c079dcf7d707654cff7bd80a819b9", "sha256": "b116ab62532bd644b7913072d97772c71879e4c92991150803bcaf99e24a245a" }, "downloads": -1, "filename": "pyads-3.0.11.tar.gz", "has_sig": false, "md5_digest": "0c6c079dcf7d707654cff7bd80a819b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 355465, "upload_time": "2019-03-31T11:54:50", "url": "https://files.pythonhosted.org/packages/7f/21/b15f21a1dc9a55b5c10db81c249751ee489ab4e33a9441e1db054201aa78/pyads-3.0.11.tar.gz" } ], "3.0.12": [ { "comment_text": "", "digests": { "md5": "21084e8d02d19dbff52d6f4ff0cb09d0", "sha256": "c6bee51742fa67e798eb41d75e7987e8d00fa358f9eb7f9a27465ee2add66c31" }, "downloads": -1, "filename": "pyads-3.0.12.tar.gz", "has_sig": false, "md5_digest": "21084e8d02d19dbff52d6f4ff0cb09d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 276504, "upload_time": "2019-07-29T12:50:54", "url": "https://files.pythonhosted.org/packages/e9/17/37bf06b34be8edfc69394e3f4fe8da190b0fec0ae9aa205e3855c783e15c/pyads-3.0.12.tar.gz" } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "56eea89a41d658c552c799f3751d9b89", "sha256": "9beb306638b3d667506dea659c03df6a50d0b38529924a99e1e168524a763155" }, "downloads": -1, "filename": "pyads-3.0.2.tar.gz", "has_sig": false, "md5_digest": "56eea89a41d658c552c799f3751d9b89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 405086, "upload_time": "2018-07-18T12:45:11", "url": "https://files.pythonhosted.org/packages/8a/bb/4d356af3c6c38462c783e8847962325126e46b0088d2e383e6daeb6c2cd1/pyads-3.0.2.tar.gz" } ], "3.0.3": [ { "comment_text": "", "digests": { "md5": "d6e8852668247977b3e85cb05d8fcac3", "sha256": "4347e8b247ef3304d0964ca0779e0fa90cfdd55e5d2b851eb492f046a6e3cad2" }, "downloads": -1, "filename": "pyads-3.0.3.tar.gz", "has_sig": false, "md5_digest": "d6e8852668247977b3e85cb05d8fcac3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 657673, "upload_time": "2018-08-16T08:47:14", "url": "https://files.pythonhosted.org/packages/57/a3/06c6a151dd8ef4d1525d117578b2f917caaec75b4fbb392d8ea13a22de29/pyads-3.0.3.tar.gz" } ], "3.0.4": [ { "comment_text": "", "digests": { "md5": "3234c74447ae2ef6210928967e1945e3", "sha256": "5d667dec364bc1e580f6e55fa7b2d04608bc07deb0a5b451fcd54bbb1e29d574" }, "downloads": -1, "filename": "pyads-3.0.4.tar.gz", "has_sig": false, "md5_digest": "3234c74447ae2ef6210928967e1945e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 354238, "upload_time": "2018-08-24T17:48:12", "url": "https://files.pythonhosted.org/packages/2d/79/0503f337b97760320d4e64147a31818ba84bfe2ed164492099cf3023984a/pyads-3.0.4.tar.gz" } ], "3.0.5": [ { "comment_text": "", "digests": { "md5": "3d259840bededd314b8c49884f6519f1", "sha256": "165c0d31599e239d7a60e0a140c9de670503cb26e43f476005a203023e301cc2" }, "downloads": -1, "filename": "pyads-3.0.5.tar.gz", "has_sig": false, "md5_digest": "3d259840bededd314b8c49884f6519f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 657917, "upload_time": "2018-11-08T07:17:32", "url": "https://files.pythonhosted.org/packages/44/89/8a3ddf2225f2aa49bd068d920fa29e885e6bb629dffbbfbb27053a215370/pyads-3.0.5.tar.gz" } ], "3.0.6": [ { "comment_text": "", "digests": { "md5": "d5522a57d6f6c50ba1a6402cb8572a4a", "sha256": "45ccce1b61156e05c457273086e4051465efa46c1eb8e44b7f48dd814daaf66d" }, "downloads": -1, "filename": "pyads-3.0.6.tar.gz", "has_sig": false, "md5_digest": "d5522a57d6f6c50ba1a6402cb8572a4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 657818, "upload_time": "2019-02-19T08:58:09", "url": "https://files.pythonhosted.org/packages/92/92/39d98bca670040b38c88cb64580797e5729abd839b65503b99f48b1c3b0d/pyads-3.0.6.tar.gz" } ], "3.0.7": [ { "comment_text": "", "digests": { "md5": "40aad7d301699fd4261e4f63f09fed1f", "sha256": "a072010c61ed3c1399e4658e7165803b59d1d5a771476ca7c2ce6629740dc70c" }, "downloads": -1, "filename": "pyads-3.0.7.tar.gz", "has_sig": false, "md5_digest": "40aad7d301699fd4261e4f63f09fed1f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 389071, "upload_time": "2019-02-19T15:22:40", "url": "https://files.pythonhosted.org/packages/4d/96/f26c4b26e1e51d546ebb950a0458e53280042b2ff25f1d2be3fd7c77e6f5/pyads-3.0.7.tar.gz" } ], "3.0.8": [ { "comment_text": "", "digests": { "md5": "96e015f079939fb0c6db4faeae807278", "sha256": "3097a87f17d28f9f46a30d78882215ddd21141c29dec43e1671dcde59fd86f2f" }, "downloads": -1, "filename": "pyads-3.0.8.tar.gz", "has_sig": false, "md5_digest": "96e015f079939fb0c6db4faeae807278", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 667958, "upload_time": "2019-03-26T10:11:23", "url": "https://files.pythonhosted.org/packages/10/83/765e176f4d056008e0cbfb9338c743f122104273acd934639e0d88a6e887/pyads-3.0.8.tar.gz" } ], "3.0.9": [ { "comment_text": "", "digests": { "md5": "4dc26d0cc2b356dd8a8fc1fd44093d0d", "sha256": "7262897a31fc33e936c745a11c11d89130628fdfd89757777c5db0ae6f7093cf" }, "downloads": -1, "filename": "pyads-3.0.9.tar.gz", "has_sig": false, "md5_digest": "4dc26d0cc2b356dd8a8fc1fd44093d0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 668220, "upload_time": "2019-03-26T13:18:08", "url": "https://files.pythonhosted.org/packages/02/6a/c7be7a62508dccfdcfa13428eebf6630ec397cf811611e05be4053ea414b/pyads-3.0.9.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "b310720f8ff0ed6dce0aded5faf9adc7", "sha256": "efd24221f509a2c3a4dc863bd2114fa692f4128597c4cde8b5c5c774e1924f1b" }, "downloads": -1, "filename": "pyads-3.1.0.tar.gz", "has_sig": false, "md5_digest": "b310720f8ff0ed6dce0aded5faf9adc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 442211, "upload_time": "2019-07-31T06:28:26", "url": "https://files.pythonhosted.org/packages/c5/74/404e38b605aaac6838a1a38d566d1ae77f583ca8daddda9efb66adc0cf36/pyads-3.1.0.tar.gz" } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "2be904fe0b90eaf943e31ea33121b7c0", "sha256": "cf3b2cad2e8cef45caf2b3ec0de39aad908a055858ccfd02664e78728bec91cb" }, "downloads": -1, "filename": "pyads-3.1.1.tar.gz", "has_sig": false, "md5_digest": "2be904fe0b90eaf943e31ea33121b7c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 442609, "upload_time": "2019-09-25T13:34:55", "url": "https://files.pythonhosted.org/packages/69/22/c3568d7dde651d3aebe243d4abaee299be70ac245ffb90e904ebe2d67d5a/pyads-3.1.1.tar.gz" } ], "3.1.2": [ { "comment_text": "", "digests": { "md5": "f274b7b18fdf866b9027e84e2925cd2b", "sha256": "cc476d1d99f630a4772153d4db73061fce3d6aade3b3c4e8e54a3148a3a13ff9" }, "downloads": -1, "filename": "pyads-3.1.2.tar.gz", "has_sig": false, "md5_digest": "f274b7b18fdf866b9027e84e2925cd2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 364829, "upload_time": "2019-10-03T18:01:52", "url": "https://files.pythonhosted.org/packages/62/d9/146592688284f0e2edbfc3b6b80ee03e2a2290634f3fb1f4bf55c7642637/pyads-3.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f274b7b18fdf866b9027e84e2925cd2b", "sha256": "cc476d1d99f630a4772153d4db73061fce3d6aade3b3c4e8e54a3148a3a13ff9" }, "downloads": -1, "filename": "pyads-3.1.2.tar.gz", "has_sig": false, "md5_digest": "f274b7b18fdf866b9027e84e2925cd2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 364829, "upload_time": "2019-10-03T18:01:52", "url": "https://files.pythonhosted.org/packages/62/d9/146592688284f0e2edbfc3b6b80ee03e2a2290634f3fb1f4bf55c7642637/pyads-3.1.2.tar.gz" } ] }