{ "info": { "author": "Vahid Mardani", "author_email": "vahid.mardani@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", "Operating System :: Unix", "Programming Language :: Cython", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Hardware" ], "description": "\n\naiolirc\n=======\n\n\n.. image:: http://img.shields.io/pypi/v/aiolirc.svg\n :target: https://pypi.python.org/pypi/aiolirc\n\n.. image:: https://img.shields.io/badge/license-GPLv3-brightgreen.svg\n :target: https://github.com/pylover/aiolirc/blob/master/LICENSE\n\n\nJump To\n-------\n\n * `Documentation `_\n * `Python package index `_\n * `Source on github `_\n * `Downloads `_\n\n\nAbout\n-----\n\nAsynchronous messaging using python's new facility(async-await syntax), introduced in version 3.5 is so fun!\n\nSo, I decided to provide an asynchronous context manager and iterator wrapper for \n`Linux Infra-Red Remote Control(LIRC) `_.\n\nHappily, the Cython is working well with asyncio. So the `lirc_client` C extension has been made by cython's extenstion\ntype. \n\nIn addition, an `IRCDispatcher` type and a `listen_for` decorator have been provided.\n\nInstall\n-------\n\n::\n\n $ apt-get install liblircclient-dev python3.5-dev build-essential\n $ pip install cython\n $ pip install aiolirc\n\n\nQuick Start\n-----------\n\nThe simplest way to use this library is the famous `very_quickstart` function as follows::\n\n from aiolirc import very_quickstart, listen_for\n\n @listen_for('play')\n async def do_play(loop):\n ...\n # Do play stuff\n\n very_quickstart('my-prog') # my-prog is configured in your lircrc file.\n\n\nAnother coroutine function named `quickstart` is also available.This lets you have control over the event loop \nlife-cycle::\n\n import asyncio\n from aiolirc import quickstart\n\n main_loop = asyncio.get_event_loop()\n try:\n main_loop.run_until_complete(quickstart(loop=main_loop))\n except KeyboardInterrupt:\n print('CTRL+C detected. terminating...')\n return 1\n finally:\n if not main_loop.is_closed():\n main_loop.close()\n\n\nThe `IRCDispatcher`\n-------------------\n \nConstructor\n^^^^^^^^^^^\n\n::\n\n def __init__(self, source: LIRCClient, loop: asyncio.BaseEventLoop=None):\n\n\nExample of usage\n^^^^^^^^^^^^^^^^\n::\n\n\n import asyncio\n \n from aiolirc.lirc_client import LIRCClient\n from aiolirc.dispatcher import IRCDispatcher, listen_for\n\n @listen_for('amp power', repeat=5)\n async def amp_power(loop):\n ...\n # Do your stuff\n\n @listen_for('amp source')\n async def amp_source(loop):\n ...\n # Do your stuff\n \n\n async with LIRCClient('my-prog') as client:\n dispatcher = IRCDispatcher(client)\n await dispatcher.listen()\n\n\nThe `LIRCClient`\n----------------\n\nConstructor\n^^^^^^^^^^^\n::\n\n def __cinit__(self, lircrc_prog, *, lircrc_file='~/.config/lircrc', loop=None, check_interval=.05, verbose=False, \n blocking=False):\n\nTo advance control over the messages received from lirc, asychronously iter over an instance of the `LIRCClient` after\ncalling `LIRCClient.lirc_init()`. And make sure the `LIRCClient.lirc_deinit()` has been called after finishing your work\nwith `LIRCClient`::\n\n from aiolirc.lirc_client import LIRCClient\n\n client = LIRCClient('my-prog')\n try:\n client.lirc_init()\n async for cmd in client:\n print(cmd)\n finally:\n client.lirc_deinit()\n \n\n\nYou may use the `LIRCClient` as an asynchronous context manager as described as follows, to automatically call the \n`LIRCClient.lirc_init()` and `LIRCClient.lirc_deinit()` functions, and also acquiring a lock to prevent multiple \ninstances of the `LIRCClient` from reading messages from lirc_client wrapper::\n\n from aiolirc.lirc_client import LIRCClient\n \n async with LIRCClient('my-prog') as client:\n async for cmd in client:\n print(cmd)\n \n\nSystemd\n-------\n\nCreate a main.py::\n\n import sys\n import asyncio\n \n from aiolirc import IRCDispatcher, LIRCClient\n\n async def launch(self) -> int:\n\n async with LIRCClient('my-prog', lircrc_file='path/to/lircrc', check_interval=.06) as client:\n dispatcher = IRCDispatcher(client)\n result = (await asyncio.gather(dispatcher.listen(), return_exceptions=True))[0]\n\n if isinstance(result, Exception):\n raise result\n \n return 0\n \n def main(self):\n \n main_loop = asyncio.get_event_loop()\n try:\n return main_loop.run_until_complete(launch())\n except KeyboardInterrupt:\n print('CTRL+C detected.')\n return 1\n finally:\n if not main_loop.is_closed():\n main_loop.close()\n \n if __name__ == '__main__':\n sys.exit(main())\n\n\n`/etc/systemd/system/aiolirc.service` file::\n\n [Unit]\n Description=aiolirc\n \n [Service]\n ExecStart=python3.5 /path/to/main.py\n User=user\n Group=group\n \n [Install]\n WantedBy=multi-user.target\n \nsystemctl::\n\n $ systemctl enable aiolirc\n $ systemctl start aiolirc\n $ systemctl restart aiolirc\n \n $ ps -Af | grep 'main.py'\n \n $ systemctl stop aiolirc\n\nChange Log\n----------\n\n**0.1.0**\n\n - README.rst\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://aiolirc.dobisel.com", "keywords": "lirc asyncio extension", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "aiolirc", "package_url": "https://pypi.org/project/aiolirc/", "platform": "", "project_url": "https://pypi.org/project/aiolirc/", "project_urls": { "Homepage": "http://aiolirc.dobisel.com" }, "release_url": "https://pypi.org/project/aiolirc/0.1.2/", "requires_dist": null, "requires_python": "", "summary": "lirc python extension for asyncio", "version": "0.1.2" }, "last_serial": 2362897, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b0a566c07f6b868e91110d6df2e12e53", "sha256": "03d7cf648c9b4ab78ce8d7990792425b70c4b5d1a0a5c301cb415a6c7f3838b9" }, "downloads": -1, "filename": "aiolirc-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b0a566c07f6b868e91110d6df2e12e53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58757, "upload_time": "2016-09-25T17:34:46", "url": "https://files.pythonhosted.org/packages/3e/bb/955716e308d7eeeedf2e353f8f20fa7cd59693fb97731acb4c08e6229fc1/aiolirc-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "39ea8b11796e290314d03e447f8b3286", "sha256": "93180998b8739a32b3e2994748c0c70ab23ada13b11797619fed31251c90d4c1" }, "downloads": -1, "filename": "aiolirc-0.1.1.tar.gz", "has_sig": false, "md5_digest": "39ea8b11796e290314d03e447f8b3286", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58673, "upload_time": "2016-09-25T17:49:50", "url": "https://files.pythonhosted.org/packages/de/53/4e89db4f26b6de00bf6f0f18d442e4a44e6696a219d41aeefd0b4379c877/aiolirc-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "554ff8defd7b34d934d280184f2fae11", "sha256": "137542f8dc3d56742746deeeeb5091eca711bd681af9aae12f178c2b8b989757" }, "downloads": -1, "filename": "aiolirc-0.1.2.tar.gz", "has_sig": false, "md5_digest": "554ff8defd7b34d934d280184f2fae11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61526, "upload_time": "2016-09-25T19:51:28", "url": "https://files.pythonhosted.org/packages/44/82/5886ffc986eed77e957cd37cd7fbda095f8aca113c674000f00921127726/aiolirc-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "554ff8defd7b34d934d280184f2fae11", "sha256": "137542f8dc3d56742746deeeeb5091eca711bd681af9aae12f178c2b8b989757" }, "downloads": -1, "filename": "aiolirc-0.1.2.tar.gz", "has_sig": false, "md5_digest": "554ff8defd7b34d934d280184f2fae11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61526, "upload_time": "2016-09-25T19:51:28", "url": "https://files.pythonhosted.org/packages/44/82/5886ffc986eed77e957cd37cd7fbda095f8aca113c674000f00921127726/aiolirc-0.1.2.tar.gz" } ] }