This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

Implementation of the PEP 3156 Event-Loop with Qt

author:Mark Harviston <mark.harviston@gmail.com>, Arve Knudsen <arve.knudsen@gmail.com>

Requirements

Quamash requires Python 3.4 or Python 3.3 with the backported asyncio library and either PyQt4, PyQt5 or PySide.

Installation

pip install quamash

Upgrade from Version 0.4 to 0.5

The loop context manager will no longer set the event loop only close it.

Instead of:

with loop:
    loop.run_forever()

do:

asyncio.set_event_loop(loop)
# ...
with loop:
    loop.run_forever()

It is recommended that you call asyncio.set_event_loop as early as possible (immediately after instantiating the loop), to avoid running asynchronous code before asyncio.set_event_loop is called.

If you’re using multiple different loops in the same application, you know what you’re doing (or at least you hope you do), then you can ignore this advice.

Usage

import sys
import asyncio
import time

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

app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)  # NEW must set the event loop

progress = QProgressBar()
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: ## context manager calls .close() when loop completes, and releases all resources
    loop.run_until_complete(master())

Changelog

Version 0.5.5

  • Fix #62 a serious memory leak by switching from QTimer to QObject.timerEvent.

Version 0.5.4

  • Remove unnecessary QObjects
  • Officially add Python 3.5 support (CI configuration and setup.py change)
  • Fix #55
  • Better compatibility with behavior of default event loop (#59)
  • Remove _easycallback and replace with _makeSignaller

Version 0.5.3

Version 0.5.2

  • Fixes to tests, and CI configuration
  • Fixes #35 and #31 (both minor bugs)
  • Uploade wheels to PyPI

Version 0.5.1

  • Fixes rst syntax error in this README

Version 0.5

  • Deprecation of event loop as means to asyncio.set_event_loop, now must be called explicitly.
  • Possible fix to notifiers being called out-of-order (see #25, #27, and e64119e)
  • Better loop cleanup
  • CI Tests pass on windows now
  • Testing improvements
  • Python 3.3 Support. (probably always supported, but it’s offially supported/tested now)

Version 0.4.1

  • Improvements to PEP-3156 Conformance
  • Minor Test Improvements

Version 0.4

  • Major improvements to tests
    • integration with Travis CI
    • more tests
    • all tests pass
    • cross platform/configuration tests
  • Bug #13 discovered and fixed
  • Force which Qt Implementation to use with QUQMASH_QTIMPL environment variable.
  • Implement QEventLoop.remove_reader and QEventLoop.remove_writer
  • PyQt4 Support
  • PyQt5 Support
  • Support multiprocessing executors (ProcessPoolExecutor))
  • Improvements to code quality

Version 0.3

First version worth using.

Testing

Quamash is tested with pytest; in order to run the test suite, just install pytest and execute py.test on the commandline. The tests themselves are beneath the ‘tests’ directory.

Testing can also be done with tox. The current tox setup in tox.ini requires PyQT4/5 and PySide to be installed globally. (pip can’t install PyQt into a virtualenv which is what tox will try to do). For this reason it may be good to run tox tests while specificying which environments to run. e.g. tox -e py34-pyqt5 to test python 3.4 with PyQt5. It is unlikely this tox configuration will work well on Windows especially since PyQt5 and PyQt4 cannot coexist in the same python installation on Windows. Also the PyQt4 w/ Qt5 oddity appears to be mostly a windows only thing too.

Style testing is also handled by tox. Run tox -e flake8.

Code Coverage

Getting a full coverage support is quite time consuming. In theory this could by done with pytest-xdist, but I haven’t had time to make that work. Install pytest-cov with pip install pytest-cov then run py.test --cov quamash then append a dot and an identifier the generated .coverage file. For example, mv .coverage .coverage.nix.p33.pyside then repeat on all the platforms you want to run on. (at least linux and windows). Put all the .coverage.* files in one directory that also has quamash source code in it. cd to that directory and run coverage combine finally run coverage html for html based reports or coverage report for a simple report. These last commands may fail with errors about not being able to find source code. Use the .coveragerc file to specify equivelant paths. The default configuration has linux source code in /quamash and windows source at C:\quamash.

Continuous Integration & Supported Platforms

This project uses Travis CI to perform tests on linux (Ubuntu 12.04 LTS “Precise Pangolin”) and Appveyor (Windows Server 2012 R2, similar to Windows 8) to perform continuous integration.

On linux, Python 3.3 and 3.4 with PySide, PyQt4, and PyQt5 are tested. On windows, Python 3.4 with PySide, PyQt4 and PyQt5 are tested, but Python 3.3 is only tested with PySide since binary installers for PyQt are not provided for Python 3.3 (at least not the newest versions of PyQt), and compiling from source probably isn’t worth it.

Python 3.5 is now tested on linux with PyQt4 and PyQt5.

Testing Matrix

  PyQt4 PyQt5 PySide (Qt4) PySide 2 (Qt5)
Linux - Python 3.3 yes yes yes planned
Linux - Python 3.4 yes yes yes planned
Linux - Python 3.5 yes yes n/a planned
Windows - Python 3.3 no no yes no
Windows - Python 3.4 yes yes yes planned
Windows - Python 3.5 planned planned planned planned

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”.

Release History

Release History

0.5.5

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
Quamash-0.5.5-py3-none-any.whl (19.3 kB) Copy SHA256 Checksum SHA256 py3 Wheel Apr 5, 2016
Quamash-0.5.5.zip (23.6 kB) Copy SHA256 Checksum SHA256 Source Apr 5, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting