{ "info": { "author": "Diego Torres Milano", "author_email": "dtmilano@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Build Tools" ], "description": ".. figure:: https://raw.githubusercontent.com/dtmilano/lex-bot-tester/master/images/pexels-photo-595804-wide.jpeg\n :alt: banner\n\n banner\n\nlex-bot-tester\n==============\n\n**AWS Lex Bot Tester** is a library that simplifies the creation of\nAmazon Alexa Skills and AWS Lex Bot functional tests.\n\nWhile this framework has been developed in python (*Node version in in\nthe roadmap*) it can be used to test Skills and Bots developed in any\nlanguage.\n\nUsing AWS Lex Models Client this utility inspects the properties of the\navailable Bots and creates specific Results classes to be used by the\ntests.\n\nCertainly, there are ways of testing your bots using AWS CLI as\nexplained in `Test the Bot Using Text Input (AWS\nCLI) `__\nbut **lex-bot-tester** provides a more concise, type safe and object\noriented way of doing it.\n\nInstallation\n============\n\nRun\n\n::\n\n pip install lex-bot-tester\n\nExamples\n========\n\nAlexa Skill test example\n------------------------\n\nThis example uses Alexa Skill Blueprint: BookMyTrip.\n\nUsing **lex-bot-tester** conversational tests like the following one can\nbe created with minimal effort.\n\n.. code:: python\n\n class AlexaSkillManagementClientTests(AlexaSkillTest):\n\n def test_book_my_trip_reserve_a_car(self):\n skill_name = 'BookMyTripSkill'\n intent = 'BookCar'\n conversation = [\n {'slot': None, 'text': 'ask book my trip to reserve a car'},\n {'slot': 'CarType', 'text': 'midsize'},\n {'slot': 'PickUpCity', 'text': 'buenos aires'},\n {'slot': 'PickUpDate', 'text': 'tomorrow'},\n {'slot': 'ReturnDate', 'text': 'five days from now'},\n {'slot': 'DriverAge', 'text': 'twenty five'},\n {'slot': None, 'prompt': 'Confirmation', 'text': 'yes'}\n ]\n self.conversation_text(skill_name, intent, conversation, verbose=True)\n\nyou can see full source code at\n`alexaskillmanagementclienttests.py `__.\n\nRunning the tests\n~~~~~~~~~~~~~~~~~\n\nYou can run the tests from your favorite IDE or from the command line.\n\nIf you are interested in seeing the details of the conversation you can\nadd the ``--verbose`` option to the test runner.\n\n::\n\n $ ./alexaskillmamagementclienttests.py --verbose\n\nand you will see an interaction similar to this one\n\n.. figure:: https://cdn-images-1.medium.com/max/1200/1*QO_6uZSVzY_BRGKIWZid4g.png\n :alt: test run\n\n test run\n\nAWS Lex Bot test example\n------------------------\n\nYou may be familiar with this kind of tests in the *AWS Lex Console*\n(this example uses the well know *OrderFlowers* bot).\n\n.. figure:: https://raw.githubusercontent.com/dtmilano/lex-bot-tester/master/images/test-bot.png\n :alt: test-bot\n\n test-bot\n\n..\n\n More information about these manual tests using the console can be\n found\n `here `__\n\nHowever, once you have the **lex-bot-tester** installed, you can create\ntests like this one:\n\n.. code:: python\n\n #! /usr/bin/env python\n # -*- coding: utf-8 -*-\n \"\"\"\n Lex Bot Tester\n Copyright (C) 2017 Diego Torres Milano\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 import re\n import unittest\n\n from lex_bot_tester.aws.lex.conversation import Conversation, ConversationItem\n from lex_bot_tester.aws.lex.lexbottest import LexBotTest\n from lex_bot_tester.aws.lex.lexmodelsclient import LexModelsClient\n from lex_bot_tester.aws.lex.lexruntimeclient import DialogState\n\n RE_DATE = re.compile('\\d+-\\d+-\\d+')\n\n BOT_NAME = 'OrderFlowers'\n BOT_ALIAS = 'OrderFlowersLatest'\n USER_ID = 'ClientId'\n\n\n class OrderFlowersTests(LexBotTest):\n def test_conversations_text(self):\n lmc = LexModelsClient(BOT_NAME, BOT_ALIAS)\n conversations = []\n for i in lmc.get_intents_for_bot():\n r = lmc.get_result_class_for_intent(i)\n if i == 'OrderFlowers':\n conversations.append(Conversation(\n ConversationItem('I would like to order some roses',\n r(DialogState.ELICIT_SLOT, flower_type='roses')),\n ConversationItem('white', r(DialogState.ELICIT_SLOT, flower_type='roses', flower_color='white')),\n ConversationItem('next Sunday',\n r(DialogState.ELICIT_SLOT, flower_type='roses', flower_color='white',\n pickup_date=RE_DATE)),\n ConversationItem('noon', r(DialogState.CONFIRM_INTENT, flower_type='roses', flower_color='white',\n pickup_date=RE_DATE, pickup_time='12:00')),\n ConversationItem('yes', r(DialogState.FULFILLED, flower_type='roses', flower_color='white',\n pickup_date=RE_DATE, pickup_time='12:00')),\n ))\n elif i == 'Cancel':\n conversations.append(Conversation(\n ConversationItem('Cancel', r(DialogState.READY_FOR_FULFILLMENT))\n ))\n self.conversations_text(BOT_NAME, BOT_ALIAS, USER_ID, conversations)\n\n\n if __name__ == '__main__':\n unittest.main()\n\nThis test, first creates a ``LexModelsClient`` to inspect the\ndefinitions of the bot, its intents and slots to later use a class\nfactory that defines specific classes for each intent which are obtained\nby ``get_result_class_for_intent(i)``.\n\nThis result class reference, which extends ``ResultBase`` class is\nassigned to the variable ``r`` for convenience. Then, for each intent, a\n``Conversation``, consisting of a list of ``ConversationItems`` is\ncreated.\n\n``ConversationItem`` specifies the text or utterance sent and the\nexpected result, using the ``r`` class reference and invoking the\nconstructor with the expected ``DialogState`` and the values of the\n``slots``.\n\n``pickup_date`` is a particular case, as it is selected as\n``next Sunday`` so instead of looking for a particular value we are\nchecking if it matches a regular expression defining dates.\n\nFinally, once the ``conversation`` list is completed, a call to the\nhelper method ``conversations_text`` providing this list as an argument\ncompletes the test.\n\nHowever, if you are more into a data-driven approach, you can also\ndeclare the conversation as a data structure as shown in the following\nexample.\n\n.. code:: python\n\n def test_conversations_text_book_car(self):\n bot_name = 'BookTrip'\n bot_alias = 'BookTripLatest'\n user_id = 'ClientId'\n conversation_definition = {\n 'BookCar': [\n ('book a car', DialogState.ELICIT_SLOT, {}),\n ('L.A.', DialogState.ELICIT_SLOT, {}),\n ('next week', DialogState.ELICIT_SLOT, {'PickUpDate': RE_WEEK}),\n ('a month from now', DialogState.ELICIT_SLOT, {'ReturnDate': RE_DATE}),\n ('25', DialogState.ELICIT_SLOT, {}),\n ('economy', DialogState.CONFIRM_INTENT, {}),\n ('yes', DialogState.READY_FOR_FULFILLMENT, {}),\n ],\n 'Cancel': [\n ('cancel', DialogState.READY_FOR_FULFILLMENT, {})\n ]\n }\n self.conversations_text_helper(bot_alias, bot_name, user_id, conversation_definition, verbose)\n\nBoth approaches are identical in functionality, so you can choose the\none that suits your taste.\n\nResult classes\n--------------\n\nAs mentioned before,\n``LexModelsClient.get_result_class_for_intent(intent)`` returns the\nclass that represents the response result once the Bot is invoked using\nthe corresponding utterance.\n\nThe signature of the constructor matches this pattern\n\n::\n\n class MyIntentResult(ResultBase):\n def __init__(dialog_state, **kwargs):\n ...\n\n\nTo comply with `PEP\n8 `__,\nkeyword args representing slots are named using *snake case* when\nusually slots are named using *camel case*. Then, for example, the slot\n``FlowerType`` will be represented by its corresponding keyword arg\n``flower_type``.\n\nConversations\n~~~~~~~~~~~~~\n\n**Conversation** is a list of **ConversationItems**. These\n**ConversationItems** represent the *send* -> *response* interaction.\n\n::\n\n class ConversationItem(object):\n\n def __init__(self, send, receive):\n ...\n\nPerhaps, taking a look at\n`lexbottestertests.py `__\nclarifies the idea. That test, uses the same structure and the classes\ncreated by inspecting the models for two different Bots: OrderFlowers\nand BookTrip.\n\n.. running-the-tests-1:\n\nRunning the tests\n~~~~~~~~~~~~~~~~~\n\nYou can run the tests from your favorite IDE or from the command line.\n\nIf you are interested in seeing the details of the conversation you can\nadd the ``--verbose`` option to the test runner.\n\n::\n\n $ ./lexbottesttests.py --verbose\n\nand you will see an interaction similar to the one presented before.\n\n.. figure:: https://raw.githubusercontent.com/dtmilano/lex-bot-tester/master/images/term-output.png\n :alt: term-output\n\n term-output\n\nResources\n=========\n\n- `Testing Alexa Skills - The grail\n quest `__\n- `Creating conversational AWS Lex Bot\n tests `__\n- `Improving conversational AWS Lex Bot\n tests `__\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dtmilano/lex-bot-tester/", "keywords": "amazon aws lex bot tester conversation test automation", "license": "GPL-3.0", "maintainer": "", "maintainer_email": "", "name": "lex-bot-tester", "package_url": "https://pypi.org/project/lex-bot-tester/", "platform": "", "project_url": "https://pypi.org/project/lex-bot-tester/", "project_urls": { "Homepage": "https://github.com/dtmilano/lex-bot-tester/" }, "release_url": "https://pypi.org/project/lex-bot-tester/1.0.6/", "requires_dist": [ "boto3", "requests", "setuptools", "six" ], "requires_python": "", "summary": "lex-bot-tester is a library that simplifies the creation of Amazon Alexa Skills and AWS Lex Bot tests.", "version": "1.0.6" }, "last_serial": 3649913, "releases": { "0.9.0": [ { "comment_text": "", "digests": { "md5": "62797e9e2637096370921831955f51a3", "sha256": "0c1ba5fd8afcc0ee95a83046ee25aa5e31f502069bdda2f864644d9efb2b5b08" }, "downloads": -1, "filename": "lex_bot_tester-0.9.0-py2.7.egg", "has_sig": false, "md5_digest": "62797e9e2637096370921831955f51a3", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 18846, "upload_time": "2017-12-03T20:19:08", "url": "https://files.pythonhosted.org/packages/2a/37/0901ff6f4f781b5f94bffb575172f7acdbd31f134962686769eaf0c9acc8/lex_bot_tester-0.9.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9d295b19e7a9d699bb38743ec6f8e2f6", "sha256": "24efc4438aa4dcf874a93e973f8dfbb1f1f211cbed4d67580725554c7b46746a" }, "downloads": -1, "filename": "lex_bot_tester-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d295b19e7a9d699bb38743ec6f8e2f6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9836, "upload_time": "2017-12-03T20:19:07", "url": "https://files.pythonhosted.org/packages/e4/83/28ffc783025b959e87c14715a9449923648bfbdfe9d3f4320ecec6d58325/lex_bot_tester-0.9.0-py2.py3-none-any.whl" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "fecd2b90ba0e38242104f07036b40049", "sha256": "1a6982ad994202da83eb698110a89f8a6e5a73eeba2bc4ee16af84f69c0f5bac" }, "downloads": -1, "filename": "lex_bot_tester-0.9.1-py2.7.egg", "has_sig": false, "md5_digest": "fecd2b90ba0e38242104f07036b40049", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 18810, "upload_time": "2017-12-05T22:13:17", "url": "https://files.pythonhosted.org/packages/b2/7a/7a708bb921667b2c3e7e48ea035d93edf55f24c6678f30ef08b844e79485/lex_bot_tester-0.9.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "817ea1a552ae468ccf46c934f2fb104e", "sha256": "3960372bd3e8aa50d77974faf7c77777bde8791edf137a39ba752d9bfbe11f57" }, "downloads": -1, "filename": "lex_bot_tester-0.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "817ea1a552ae468ccf46c934f2fb104e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9853, "upload_time": "2017-12-05T22:13:16", "url": "https://files.pythonhosted.org/packages/e0/36/108efe49365b98efe077037a0d74fe8a98d2428fcf88a1011a2cb15e18fc/lex_bot_tester-0.9.1-py2.py3-none-any.whl" } ], "0.9.10": [ { "comment_text": "", "digests": { "md5": "0cc4efafc827db8d90db2e1f5425a236", "sha256": "f9fbd015d139f4b5ca42435e6e19721dbe7c174bc7eaeb8c2ff86c320c488754" }, "downloads": -1, "filename": "lex_bot_tester-0.9.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0cc4efafc827db8d90db2e1f5425a236", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30017, "upload_time": "2018-02-09T22:18:53", "url": "https://files.pythonhosted.org/packages/bd/5c/7769433c415739806654263aaa517222417556f091a5acaba16cc3057a37/lex_bot_tester-0.9.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27493c481cbd3307613c103a73522f23", "sha256": "2b0094d0c023ed90e3a9c17eaf0a6e9d223c2b71c1d426077ade357705e5aee3" }, "downloads": -1, "filename": "lex_bot_tester-0.9.10-py3.6.egg", "has_sig": false, "md5_digest": "27493c481cbd3307613c103a73522f23", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 54830, "upload_time": "2018-02-09T22:18:57", "url": "https://files.pythonhosted.org/packages/cd/a3/c6094ffdacce9a1dbe504acc2ac9a94248d24b8b8c1105dc0e7dbbecdb55/lex_bot_tester-0.9.10-py3.6.egg" } ], "0.9.11": [ { "comment_text": "", "digests": { "md5": "14d6d435fedaab465f94c50694b30c17", "sha256": "727cfa85b43de5907c921e697557d0dc74f670f416d5c3c481290151aeeec752" }, "downloads": -1, "filename": "lex_bot_tester-0.9.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14d6d435fedaab465f94c50694b30c17", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34106, "upload_time": "2018-02-20T00:32:44", "url": "https://files.pythonhosted.org/packages/62/55/b78989089791903db31084e4a0cea63eebdd0966d2deea58726219c2f2aa/lex_bot_tester-0.9.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18beda114cc79c713bc419a81a48f6ca", "sha256": "d66f03421546e15b1f4c00b72ecb166c262bb627cb7994fb97e40e3f34d26b5f" }, "downloads": -1, "filename": "lex_bot_tester-0.9.11-py3.6.egg", "has_sig": false, "md5_digest": "18beda114cc79c713bc419a81a48f6ca", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 62994, "upload_time": "2018-02-20T00:32:45", "url": "https://files.pythonhosted.org/packages/14/c5/85fec36a989c9927a87f0f9ecff80970be099c20b8b93b6d2af1bc346dfa/lex_bot_tester-0.9.11-py3.6.egg" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "749eb4a5d9514d066e7238cbec644748", "sha256": "8f2de02395ca86d2ca0c382fd6816268c975694880c418725e8d40ce56070890" }, "downloads": -1, "filename": "lex_bot_tester-0.9.2-py2.7.egg", "has_sig": false, "md5_digest": "749eb4a5d9514d066e7238cbec644748", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 18818, "upload_time": "2017-12-05T22:19:39", "url": "https://files.pythonhosted.org/packages/14/c6/4dc85ebf0a33dbc541f1809a2137b77213b9ea7b1823e6832b579982c4e5/lex_bot_tester-0.9.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "8c7f28a413b1f00cd1b26610a69b4b51", "sha256": "7211d7acaf4dd146e872b0ee12bcd541f70268b052a7fa6b252631e4a52dd6bd" }, "downloads": -1, "filename": "lex_bot_tester-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8c7f28a413b1f00cd1b26610a69b4b51", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9861, "upload_time": "2017-12-05T22:19:37", "url": "https://files.pythonhosted.org/packages/8d/c7/c85ebe19e8b0c097f905e9415d780d2c02af9684d8c7340182fbdeddc283/lex_bot_tester-0.9.2-py2.py3-none-any.whl" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "b3197c98201d3a08ee9e656e0a207e5d", "sha256": "c47c269b17af24da01bda3333843b761c6315bb9062f608a9529a7675c92817b" }, "downloads": -1, "filename": "lex_bot_tester-0.9.3-py2.7.egg", "has_sig": false, "md5_digest": "b3197c98201d3a08ee9e656e0a207e5d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 21667, "upload_time": "2017-12-09T21:55:08", "url": "https://files.pythonhosted.org/packages/95/43/cdea144e82e9088f80e95a34752a0ff10a064740eec9dd029576cf9ee7d6/lex_bot_tester-0.9.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "ecbc649aecabfe75dee70816216ada49", "sha256": "550df906f587abaa7e73565af2b7b6c2ba94c2d29eabcbb3c61a404fa1e9c040" }, "downloads": -1, "filename": "lex_bot_tester-0.9.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ecbc649aecabfe75dee70816216ada49", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14933, "upload_time": "2017-12-09T21:55:07", "url": "https://files.pythonhosted.org/packages/cf/63/e8cfb35714c9b4887047ed6809782eef71427aaffc80bc4900d71b2d747c/lex_bot_tester-0.9.3-py2.py3-none-any.whl" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "db4acd61aee3d75bcc154f3d32bcdbac", "sha256": "dbdd6fab5c8581d8a8f53884ce9f86f9daef3e5a7d17df1b4587beb0894ab759" }, "downloads": -1, "filename": "lex_bot_tester-0.9.4-py2.7.egg", "has_sig": false, "md5_digest": "db4acd61aee3d75bcc154f3d32bcdbac", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 21668, "upload_time": "2017-12-09T22:02:42", "url": "https://files.pythonhosted.org/packages/de/db/d83529b815fb9374c6885391ddaecfea4e98eb62c92f392c116ed2a6e30d/lex_bot_tester-0.9.4-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "0cf7fe69ebfa8738376e3a166bc3e02d", "sha256": "00825341f0361f02bfe48a22c9503c5b5737efb59a768e196500f3c731a252b2" }, "downloads": -1, "filename": "lex_bot_tester-0.9.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0cf7fe69ebfa8738376e3a166bc3e02d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14932, "upload_time": "2017-12-09T22:02:40", "url": "https://files.pythonhosted.org/packages/98/ec/37003d420eb3e42bd72bfe9e9cda0efefe78078f5c9cace299dd87b43fb2/lex_bot_tester-0.9.4-py2.py3-none-any.whl" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "f1ffbb07b5f2eea3fec85d4c7075baff", "sha256": "6775129eb41047e46fdcae3f60b7984d379c58769ee6dfcb0e2d028e708a9b2c" }, "downloads": -1, "filename": "lex_bot_tester-0.9.5-py2.7.egg", "has_sig": false, "md5_digest": "f1ffbb07b5f2eea3fec85d4c7075baff", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 21668, "upload_time": "2017-12-09T22:07:35", "url": "https://files.pythonhosted.org/packages/c1/ff/ddd8db15edc63d3c11f0cbde0387ade85561cdaef232cbc267b028e2052b/lex_bot_tester-0.9.5-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6919eb295efb26559acb30e1d2d862ce", "sha256": "b5b25ac93a2f1c107d6faa1e9114d641ae435f869403d894a27d82f171691fc4" }, "downloads": -1, "filename": "lex_bot_tester-0.9.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6919eb295efb26559acb30e1d2d862ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14934, "upload_time": "2017-12-09T22:07:34", "url": "https://files.pythonhosted.org/packages/21/d2/3d7dacc1dcba0936dc4cb8a0b1b2180f98ecdadc03320388f01643fb3417/lex_bot_tester-0.9.5-py2.py3-none-any.whl" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "53210090fde0c0910d02d183e0e2d797", "sha256": "02a527daa43b1898e2709a4e8379eb0519f07df8dfa8293ae56dd52ae70f901e" }, "downloads": -1, "filename": "lex_bot_tester-0.9.6-py2.7.egg", "has_sig": false, "md5_digest": "53210090fde0c0910d02d183e0e2d797", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 25888, "upload_time": "2017-12-11T04:12:48", "url": "https://files.pythonhosted.org/packages/22/75/81f06287a92f53980b07146426a756b647bd92ecf8898d3b003e4c1fb8de/lex_bot_tester-0.9.6-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "1ea0cbe9aa5692cb545ba0f922c79694", "sha256": "7d20fb5d4b125f16d81ae9b159e46cbc5a6980b7374d48f61d46e04c9a4ac3bd" }, "downloads": -1, "filename": "lex_bot_tester-0.9.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1ea0cbe9aa5692cb545ba0f922c79694", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16849, "upload_time": "2017-12-11T04:12:47", "url": "https://files.pythonhosted.org/packages/56/73/87cdb7329202af6c68e4b42030bd394cde0adfe7cb36ad132a39fe8cd823/lex_bot_tester-0.9.6-py2.py3-none-any.whl" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "dceffd94c840b8dfe9062a55950b1dfb", "sha256": "0f3c5455a6d188ad186f3fe48458fc2873d20bc440484c0f98cbc895d8447cbf" }, "downloads": -1, "filename": "lex_bot_tester-0.9.7-py2.7.egg", "has_sig": false, "md5_digest": "dceffd94c840b8dfe9062a55950b1dfb", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 29449, "upload_time": "2017-12-16T05:04:22", "url": "https://files.pythonhosted.org/packages/6c/d3/91c7e91a738a092e1b315b64b2efdcd7cc6be89e776c17298c30497a23e0/lex_bot_tester-0.9.7-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "b5e388020fdd13af828e64f53397b848", "sha256": "d5f8a54d4d0fc2cd92040d4695d5c3dda642694f33574ae2dbce5da6ad99ed3b" }, "downloads": -1, "filename": "lex_bot_tester-0.9.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b5e388020fdd13af828e64f53397b848", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19142, "upload_time": "2017-12-16T05:04:21", "url": "https://files.pythonhosted.org/packages/e3/ea/0ae1dd883989d00f001e63e145b47b5a73ae4dd9bb60df6db5123318970d/lex_bot_tester-0.9.7-py2.py3-none-any.whl" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "ff049813a8e41d579ce5711eed6e09ca", "sha256": "81023011dc4c247785bb4529e4817c88fa9a7bf07839993cd0fd194bb911c5a4" }, "downloads": -1, "filename": "lex_bot_tester-0.9.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ff049813a8e41d579ce5711eed6e09ca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28072, "upload_time": "2018-01-24T01:54:20", "url": "https://files.pythonhosted.org/packages/66/19/d6d23c64535c4f01e2806824131468b54a97bbfe0de8ce42a2be404da756/lex_bot_tester-0.9.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d5ad931d12ea3aced28df5bba0a3390", "sha256": "f51a8f3c03bb11d04d4db3e34aabdc7ce8a84b9045c15d88206016a207d98db1" }, "downloads": -1, "filename": "lex_bot_tester-0.9.8-py3.6.egg", "has_sig": false, "md5_digest": "6d5ad931d12ea3aced28df5bba0a3390", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 51996, "upload_time": "2018-01-24T01:54:21", "url": "https://files.pythonhosted.org/packages/63/d3/44906ca3f7bde3f05a40b22bda10421cce3b2bbb575b4f875fdf7d0b4f1a/lex_bot_tester-0.9.8-py3.6.egg" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "99a2318bbb0d1e08aa6b671ef1f9c38b", "sha256": "4f7dfdfd6d9326242704173e4074382f70eaa4dfb47a6d50b03c788f77424739" }, "downloads": -1, "filename": "lex_bot_tester-0.9.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "99a2318bbb0d1e08aa6b671ef1f9c38b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29798, "upload_time": "2018-02-06T22:05:44", "url": "https://files.pythonhosted.org/packages/14/80/55b494c7c21ae1f8219904ca1bcf3a44a36f5d5acfcec53cea0ea50a4251/lex_bot_tester-0.9.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b34c6e5e9941f7080c2ffba770be5d0", "sha256": "676fe2155ba846271efadaecaef4f2ddf4d66738201bb2c6423b5b9c944f878d" }, "downloads": -1, "filename": "lex_bot_tester-0.9.9-py3.6.egg", "has_sig": false, "md5_digest": "2b34c6e5e9941f7080c2ffba770be5d0", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 54286, "upload_time": "2018-02-06T22:05:45", "url": "https://files.pythonhosted.org/packages/ea/67/7d80433637e2f1894ef2cfb566e74fb19e306cad05bd1a1e7174e9d709fe/lex_bot_tester-0.9.9-py3.6.egg" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "458ca63aff53fb3ef91b9843978518d4", "sha256": "5e8a09c9e82c9bb59a86cf332921e85454b110d495536cbe0dbe7a0404d76e02" }, "downloads": -1, "filename": "lex_bot_tester-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "458ca63aff53fb3ef91b9843978518d4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32841, "upload_time": "2018-02-20T01:23:56", "url": "https://files.pythonhosted.org/packages/8e/27/fd93bdc3ce821100ebbe55f112f551d672f8118081b981cbbc6479e08982/lex_bot_tester-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce6b60fcadaa0504f32668a4e7b5a66c", "sha256": "f0bdba595911676f235d4e8b92da46ecd412d662890d6a9d6dbdf31712f9e592" }, "downloads": -1, "filename": "lex_bot_tester-1.0.1-py3.6.egg", "has_sig": false, "md5_digest": "ce6b60fcadaa0504f32668a4e7b5a66c", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 59921, "upload_time": "2018-02-20T01:23:59", "url": "https://files.pythonhosted.org/packages/e4/e2/055078ea9622a404d0b76e6db41bab5be23c863e451e769b931f1d7eca59/lex_bot_tester-1.0.1-py3.6.egg" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "16f5240f35d3b04054ad3687f56f0ee0", "sha256": "ed57d1ceb08e65e8224bae7dc2350c9340a0b9e29f56e7bb073f261c834b09f3" }, "downloads": -1, "filename": "lex_bot_tester-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16f5240f35d3b04054ad3687f56f0ee0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 54824, "upload_time": "2018-02-20T01:31:41", "url": "https://files.pythonhosted.org/packages/31/ca/c071904c2eac4723117735659ecb3ca22393344483bc42cc2d56265c6b4b/lex_bot_tester-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a2d184a3df12b624e538fd85be0105c", "sha256": "8337361edd16ef876aeb3ac245bb14e79543020de4c48bdd3598816422df88bf" }, "downloads": -1, "filename": "lex_bot_tester-1.0.2-py3.6.egg", "has_sig": false, "md5_digest": "6a2d184a3df12b624e538fd85be0105c", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 114731, "upload_time": "2018-02-20T01:31:43", "url": "https://files.pythonhosted.org/packages/d3/56/f051bd52dc3e7a4819fcad91ededaa603a15b1ff1e20d9661b75ff59e5ee/lex_bot_tester-1.0.2-py3.6.egg" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "c80a02fbb32d0a78f2502382f4f57503", "sha256": "6904403be0c2543b40747ea90c274ef2c4dd2b808fc639e6c18e2f450a9563ac" }, "downloads": -1, "filename": "lex_bot_tester-1.0.4-py2.7.egg", "has_sig": false, "md5_digest": "c80a02fbb32d0a78f2502382f4f57503", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 46902, "upload_time": "2018-02-21T05:41:58", "url": "https://files.pythonhosted.org/packages/73/10/f229b9f11d881406f38a2bfc1403f31747d9fbe48d43a623d49ddf6c189b/lex_bot_tester-1.0.4-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "1a0f7902201aaf18e149fccbc1fcc767", "sha256": "9df31c5128f5b37bfb3c1b9fdfef697cc5d43dfff65525decd8b76b72bf5cfb5" }, "downloads": -1, "filename": "lex_bot_tester-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1a0f7902201aaf18e149fccbc1fcc767", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33258, "upload_time": "2018-02-21T05:41:56", "url": "https://files.pythonhosted.org/packages/58/f1/37ecddfa4ae51a8b4a2da2b3cf254a059b504e493fdc5ad4d7e7f9a25104/lex_bot_tester-1.0.4-py2.py3-none-any.whl" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "01285c417b5e3f2484b88c294205531d", "sha256": "0f41c61508b662a7cc79ba06416c6d3a6614aa38423e2af9813d20a4e24e2629" }, "downloads": -1, "filename": "lex_bot_tester-1.0.6-py2.7.egg", "has_sig": false, "md5_digest": "01285c417b5e3f2484b88c294205531d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 50399, "upload_time": "2018-03-08T04:32:54", "url": "https://files.pythonhosted.org/packages/1f/27/2177615e00e780c16fc80e7886b46ec0e49d3cb9e2f3d4c29295f5ed9b20/lex_bot_tester-1.0.6-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "be07a34fcdb255afa3c4966c2ad3ccc6", "sha256": "32ff2a11c07ffc1ee1f2a100107b74171ce7de4e7ce9517a745f20835abd194a" }, "downloads": -1, "filename": "lex_bot_tester-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be07a34fcdb255afa3c4966c2ad3ccc6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33683, "upload_time": "2018-03-08T04:32:51", "url": "https://files.pythonhosted.org/packages/9a/1a/a1b0e595b3a344dbeb2a71f63529bd8c89b753021107c4c25d4206438edb/lex_bot_tester-1.0.6-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "01285c417b5e3f2484b88c294205531d", "sha256": "0f41c61508b662a7cc79ba06416c6d3a6614aa38423e2af9813d20a4e24e2629" }, "downloads": -1, "filename": "lex_bot_tester-1.0.6-py2.7.egg", "has_sig": false, "md5_digest": "01285c417b5e3f2484b88c294205531d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 50399, "upload_time": "2018-03-08T04:32:54", "url": "https://files.pythonhosted.org/packages/1f/27/2177615e00e780c16fc80e7886b46ec0e49d3cb9e2f3d4c29295f5ed9b20/lex_bot_tester-1.0.6-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "be07a34fcdb255afa3c4966c2ad3ccc6", "sha256": "32ff2a11c07ffc1ee1f2a100107b74171ce7de4e7ce9517a745f20835abd194a" }, "downloads": -1, "filename": "lex_bot_tester-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be07a34fcdb255afa3c4966c2ad3ccc6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33683, "upload_time": "2018-03-08T04:32:51", "url": "https://files.pythonhosted.org/packages/9a/1a/a1b0e595b3a344dbeb2a71f63529bd8c89b753021107c4c25d4206438edb/lex_bot_tester-1.0.6-py2.py3-none-any.whl" } ] }