{ "info": { "author": "Alexander Borzunov", "author_email": "borzunov.alexander@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Framework :: AsyncIO", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": "alice_scripts\n=============\n\n\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0434\u043b\u044f [\u042f\u043d\u0434\u0435\u043a\u0441.\u0410\u043b\u0438\u0441\u044b](https://dialogs.yandex.ru/)\n\n> \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c \u042f\u043d\u0434\u0435\u043a\u0441\u0430\n\n## \ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n\u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u043f\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0431\u0435\u0437 callback-\u043e\u0432 \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u0430. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u0446\u0438\u043a\u043b\u044b:\n\n> ```\n> from alice_scripts import Skill, request, say, suggest\n> skill = Skill(__name__)\n> ```\n\n```python\n@skill.script\ndef run_script():\n yield say('\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041a\u0430\u043a \u0432\u0430\u0441 \u0437\u043e\u0432\u0443\u0442?')\n name = request.command\n\n yield say('\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u043c \u043b\u0435\u0442?')\n while not request.matches(r'\\d+'):\n yield say('\u042f \u0432\u0430\u0441 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0430. \u0421\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e')\n age = int(request.command)\n\n yield say('\u0412\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u043a\u043e\u0448\u0435\u043a \u0438\u043b\u0438 \u0441\u043e\u0431\u0430\u043a?',\n suggest('\u041e\u0431\u043e\u0436\u0430\u044e \u043a\u043e\u0448\u0435\u0447\u0435\u043a', '\u041b\u044e\u0431\u043b\u044e \u0441\u043e\u0431\u0430\u043a'))\n while not request.has_lemmas('\u043a\u043e\u0448\u043a\u0430', '\u043a\u043e\u0448\u0435\u0447\u043a\u0430',\n '\u0441\u043e\u0431\u0430\u043a\u0430', '\u0441\u043e\u0431\u0430\u0447\u043a\u0430'):\n yield say('\u0423 \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 - \u043a\u043e\u0448\u043a\u0438 \u0438\u043b\u0438 \u0441\u043e\u0431\u0430\u043a\u0438')\n loves_cats = request.has_lemmas('\u043a\u043e\u0448\u043a\u0430', '\u043a\u043e\u0448\u0435\u0447\u043a\u0430')\n\n yield say(f'\u0420\u0430\u0434\u0430 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f, {name}! \u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c '\n f'\u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f {age + 1}, \u044f \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u0430\u0440\u0438\u0442\u044c '\n f'{\"\u043a\u043e\u0442\u0451\u043d\u043a\u0430\" if loves_cats else \"\u0449\u0435\u043d\u043a\u0430\"}!',\n end_session=True)\n```\n\n\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0435 [Flask](http://flask.pocoo.org/)-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:\n\n pip install alice_scripts\n FLASK_APP=hello.py flask run --with-threads\n \n## \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n* [\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](examples)\n* [\u041d\u0430\u0432\u044b\u043a «\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432»](https://github.com/FuryThrue/WhoIsAlice/blob/master/app.py)\n\n## \ud83d\udcd6 \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\n\n### Skill\n\n\u041a\u043b\u0430\u0441\u0441 `Skill` \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 WSGI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 [flask.Flask](http://flask.pocoo.org/docs/1.0/api/#flask.Flask). \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430 `@skill.script` (\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435).\n\n\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f `session_id`.\n\n### yield say(...)\n\n\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f `yield say(...)` \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:\n\n- \u041d\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0444\u0440\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:\n\n ```python\n yield say('\u041a\u0430\u043a \u0434\u0435\u043b\u0430?', '\u041a\u0430\u043a \u0432\u044b?', '\u041a\u0430\u043a \u043f\u043e\u0436\u0438\u0432\u0430\u0435\u0442\u0435?')\n ```\n\n- \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b (\u0441\u043c. \u043d\u0438\u0436\u0435) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 `suggest` \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430:\n\n ```python\n yield say('\u041a\u0430\u043a \u0434\u0435\u043b\u0430?', suggest('\u0425\u043e\u0440\u043e\u0448\u043e', '\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e', '\u041d\u0435 \u043e\u0447\u0435\u043d\u044c'))\n ```\n\n- \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 [\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#response), \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432:\n\n ```python\n yield say('\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u042d\u0442\u043e \u043c\u044b, \u0445\u043e\u0440\u043e\u0432\u043e\u0434\u043e\u0432\u0435\u0434\u044b.',\n tts='\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u042d\u0442\u043e \u043c\u044b, \u0445\u043e\u0440\u043e\u0432+\u043e\u0434\u043e \u0432+\u0435\u0434\u044b.')\n ```\n \n \u041f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u044b «\u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435» \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c `response` \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043d\u0430\u0432\u044b\u043a\u0430.\n\n### \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b\n\n\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b — \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 [\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f](https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u044c `response` \u0438\u0437 [\u043e\u0442\u0432\u0435\u0442\u0430](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#response) \u043d\u0430\u0432\u044b\u043a\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0443\u0434\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438.\n\n- `suggest(...)`\n\n \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430:\n \n ```python\n yield say('\u041a\u0430\u043a \u0434\u0435\u043b\u0430?', suggest('\u0425\u043e\u0440\u043e\u0448\u043e', '\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e'))\n ```\n \n> \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 proof of concept, \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 `yield say(...)`.\n\n### request\n\n\u041e\u0431\u044a\u0435\u043a\u0442 `request` \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 thread-local \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0441\u0435\u0441\u0441\u0438\u0438.\n\n- \u0421 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c `request` \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u0451\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0438\u0437 [\u0437\u0430\u043f\u0440\u043e\u0441\u0430](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request) \u043a \u043d\u0430\u0432\u044b\u043a\u0443:\n\n ```python\n original_utterance = request['request']['original_utterance'] \n ```\n\n- `request.command` — \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f [command](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request), \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0431\u0440\u0430\u043d\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0435 \u0442\u043e\u0447\u043a\u0438.\n\n- `request.matches(pattern, flags=0)` — \u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e `request.command` \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e `pattern` (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f [re.fullmatch](https://docs.python.org/3/library/re.html#re.fullmatch)).\n\n- `request.words` — \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0432\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 (\u0438 \u0447\u0438\u0441\u043b\u0430), \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u043b\u0435 [command](https://tech.yandex.ru/dialogs/alice/doc/protocol-docpage/#request).\n\n- `request.lemmas` — \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0441\u043b\u043e\u0432 \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 `request.words` (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 [pymorphy2](http://pymorphy2.readthedocs.io/en/latest/)).\n\n- `request.has_lemmas(...)` — \u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0431\u044b\u043b\u0438 \u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441\u043b\u043e\u0432\u0430, \u0447\u044c\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0432:\n\n ```python\n if request.has_lemmas('\u043d\u0435\u0442', '\u043d\u0435'):\n answer = 'no'\n elif request.has_lemmas('\u0434\u0430', '\u0430\u0433\u0430'):\n answer = 'yes'\n ```\n\n## \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\n\n\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043c\u043e\u0436\u043d\u043e (\u0438 \u043d\u0443\u0436\u043d\u043e) \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 *\u0434\u043e\u043b\u0436\u043d\u0430* \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 `yield from` \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 `return`. \u0421\u043c. [\u043f\u0440\u0438\u043c\u0435\u0440](examples/guess_number_subgens.py).\n\n## \u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\n\n\u0412 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Python-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c:\n\n- \u0420\u0435\u043f\u043b\u0438\u043a\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c.\n- \u041d\u0430\u0432\u044b\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 serverless-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.\n- \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u044b.\n\n\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 production-\u0435 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e gunicorn. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e [\u043f\u043e\u0442\u043e\u043a\u043e\u0432](http://docs.gunicorn.org/en/stable/settings.html#threads), \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e [\u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432](http://docs.gunicorn.org/en/stable/settings.html#workers) (\u0438\u043d\u0430\u0447\u0435 gunicorn \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c).\n\n## \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u043d\u0430\u0432\u044b\u043a\u0430 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0437\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 — \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1,5 \u0441\u0435\u043a), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0442\u0430\u043a:\n\n1. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 gunicorn (\u0432 \u043a\u0430\u0436\u0434\u043e\u043c — 1 \u0432\u043e\u0440\u043a\u0435\u0440) \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445.\n2. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 nginx \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 `session_id` \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 gunicorn.\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0432 [\u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435](examples/scaling).\n\n## \u0410\u0432\u0442\u043e\u0440\n\nCopyright © \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0411\u043e\u0440\u0437\u0443\u043d\u043e\u0432, 2018\n\nThe MIT License (MIT)", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/borzunov/alice_scripts", "keywords": "yandex-alice", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "alice-scripts", "package_url": "https://pypi.org/project/alice-scripts/", "platform": "", "project_url": "https://pypi.org/project/alice-scripts/", "project_urls": { "Homepage": "http://github.com/borzunov/alice_scripts" }, "release_url": "https://pypi.org/project/alice-scripts/0.2.post1/", "requires_dist": null, "requires_python": "", "summary": "Simple way to create complex scripts for Yandex.Alice", "version": "0.2.post1" }, "last_serial": 4440092, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "f04aa5a05d3e91dddb4e2ebe8db00c6c", "sha256": "3e47d1b21c7cc8b659681b018c8bc7e5bda1b298a3d45b8cefb9d0cfc681b258" }, "downloads": -1, "filename": "alice_scripts-0.1-py2.7.egg", "has_sig": false, "md5_digest": "f04aa5a05d3e91dddb4e2ebe8db00c6c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 10039, "upload_time": "2018-07-31T01:18:28", "url": "https://files.pythonhosted.org/packages/e2/63/1b015d5fc8dd9e02616162e18ed2566d46790a44fb3f3b02647ec4b3d528/alice_scripts-0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "83413750b3e8e28c5d979c00e5422433", "sha256": "af66f485579f0ed41ed8d5556767a39521a45b66e75b0941445404fee846a9ea" }, "downloads": -1, "filename": "alice_scripts-0.1-py3.6.egg", "has_sig": false, "md5_digest": "83413750b3e8e28c5d979c00e5422433", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 10467, "upload_time": "2018-07-31T01:18:29", "url": "https://files.pythonhosted.org/packages/3f/77/3b851d3a340b26363f620d868e2aeecc499d3baf5ba46b30990eb05dc047/alice_scripts-0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "2c04a546e8d6137a8196f5740defd3e0", "sha256": "178039e54d2920a81604cf2787e7fa55d3742758e570806853adfa4b7540689b" }, "downloads": -1, "filename": "alice_scripts-0.1.tar.gz", "has_sig": false, "md5_digest": "2c04a546e8d6137a8196f5740defd3e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6145, "upload_time": "2018-07-31T01:18:30", "url": "https://files.pythonhosted.org/packages/53/56/4dc461b06f6ecf7f28a0e3bda6dc7f34eecadc9b5e6562eadf9e2cbb21b5/alice_scripts-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "50835130c5b057b9b1242c853b6cea28", "sha256": "32fefa304eb76ef34011245f0e0d4adca3a90a48162d609d91020b0c54ce45c2" }, "downloads": -1, "filename": "alice_scripts-0.2-py2.7.egg", "has_sig": false, "md5_digest": "50835130c5b057b9b1242c853b6cea28", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 10207, "upload_time": "2018-07-31T14:08:43", "url": "https://files.pythonhosted.org/packages/79/5d/540d6be3cf6a905448b4556c7bae6b7b3e600a7b97072fc9d7c3639f47a6/alice_scripts-0.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "25f9d4b75ee690b571f60be1c97edef5", "sha256": "9122608a58aa48de635310cdd249f6809e8560c361788a313188bcdbcf9325f4" }, "downloads": -1, "filename": "alice_scripts-0.2-py3.6.egg", "has_sig": false, "md5_digest": "25f9d4b75ee690b571f60be1c97edef5", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 10637, "upload_time": "2018-07-31T14:08:44", "url": "https://files.pythonhosted.org/packages/17/d1/46837bddb4bfe5b2cd60d2d32dbdc47972ea4c66230cd77f06ea3e0b12a6/alice_scripts-0.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "cc87d26ef73bc8dfcc2342cd6253ba69", "sha256": "4275e9fda2b7007dd967dd6c60f9590def7a3eb821c81c82ee294bc2e5bd871f" }, "downloads": -1, "filename": "alice_scripts-0.2.tar.gz", "has_sig": false, "md5_digest": "cc87d26ef73bc8dfcc2342cd6253ba69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6306, "upload_time": "2018-07-31T14:08:45", "url": "https://files.pythonhosted.org/packages/67/6c/4ebfe79ec7e558768935c29ba425c7b5eff2eec1b4279173b38429adf6aa/alice_scripts-0.2.tar.gz" } ], "0.2.post1": [ { "comment_text": "", "digests": { "md5": "98107ed941e7b8ed24b2deb6d4862c8c", "sha256": "a47d60db66239cc206e671de551b735512958400a5a199e50b63eab754ba41ae" }, "downloads": -1, "filename": "alice_scripts-0.2.post1.tar.gz", "has_sig": false, "md5_digest": "98107ed941e7b8ed24b2deb6d4862c8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6845, "upload_time": "2018-11-01T10:09:21", "url": "https://files.pythonhosted.org/packages/20/ca/21a6136a557d339e0632462b4ff1e55e46777a81f9a9b027e1c5d53604a3/alice_scripts-0.2.post1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "98107ed941e7b8ed24b2deb6d4862c8c", "sha256": "a47d60db66239cc206e671de551b735512958400a5a199e50b63eab754ba41ae" }, "downloads": -1, "filename": "alice_scripts-0.2.post1.tar.gz", "has_sig": false, "md5_digest": "98107ed941e7b8ed24b2deb6d4862c8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6845, "upload_time": "2018-11-01T10:09:21", "url": "https://files.pythonhosted.org/packages/20/ca/21a6136a557d339e0632462b4ff1e55e46777a81f9a9b027e1c5d53604a3/alice_scripts-0.2.post1.tar.gz" } ] }