=======
Quamash
=======
Implementation of the `PEP 3156`_ Event-Loop with Qt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:author: Mark Harviston <mark.harviston@gmail.com>, Arve Knudsen <arve.knudsen@gmail.com>

.. image:: https://travis-ci.org/harvimt/quamash.png?branch=master
    :target: https://travis-ci.org/harvimt/quamash

Requirements
============
Quamash requires Python 3.4 and either PyQt 5 or PySide.

Installation
============
pip install quamash

Usage
=====

.. code:: python

    import sys
    import asyncio
    import time

    from PyQt5.QtWidgets import QApplication, QProgressBar
    from quamash import QEventLoop, QThreadExecutor

    app = QApplication(sys.argv)
    progress = QProgressBar()
    loop = QEventLoop(app)

    progress.setRange(0, 99)
    progress.show()

    @asyncio.coroutine
    def master():
        yield from first_50()
        with QThreadExecutor(1) as exec:
            yield from loop.run_in_executor(exec, last_50)
        # TODO announce completion?

    @asyncio.coroutine
    def first_50():
        for i in range(50):
            progress.setValue(i)
            yield from asyncio.sleep(.1)

    def last_50():
        for i in range(50,100):
            loop.call_soon_threadsafe(progress.setValue, i)
            time.sleep(.1)

    with loop:
        loop.run_until_complete(master())

Testing
=======
Quamash is tested with `pytest`_; in order to run the test suite, just execute py.test on the
commandline. The tests themselves are beneath the 'tests' directory.

License
=======
You may use, modify, and redistribute this software under the terms of the `BSD License`_.
See LICENSE.

Name
====
Tulip related projects are being named after other flowers, Quamash is one of the few flowers that
starts with a "Q".

.. _`PEP 3156`: http://legacy.python.org/dev/peps/pep-3156/
.. _`pytest`: http://pytest.org
.. _`BSD License`: http://opensource.org/licenses/BSD-2-Clause
