.. image:: https://img.shields.io/pypi/v/dvg-qdeviceio
:target: https://pypi.org/project/dvg-qdeviceio
.. image:: https://img.shields.io/pypi/pyversions/dvg-qdeviceio
:target: https://pypi.org/project/dvg-qdeviceio
.. image:: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/actions/workflows/python-package.yml/badge.svg
:target: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/actions/workflows/python-package.yml
.. image:: https://coveralls.io/repos/github/Dennis-van-Gils/python-dvg-qdeviceio/badge.svg
:target: https://coveralls.io/github/Dennis-van-Gils/python-dvg-qdeviceio
.. image:: https://readthedocs.org/projects/python-dvg-qdeviceio/badge/?version=latest
:target: https://python-dvg-qdeviceio.readthedocs.io/en/latest/?badge=latest
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
.. image:: https://img.shields.io/badge/License-MIT-purple.svg
:target: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/blob/master/LICENSE.txt
DvG_QDeviceIO
=============
*Hassle-free PyQt/PySide interface for multithreaded data acquisition and communication with an I/O device.*
It will manage many necessary components for proper multithreading -- creation
and handling of the threads, workers, signals and mutexes -- *for you*, reducing
it to just a few simple method calls of a QDeviceIO class instance to get set up
and going.
Supports PyQt5, PyQt6, PySide2 and PySide6.
- Documentation: https://python-dvg-qdeviceio.readthedocs.io
- Github: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio
- PyPI: https://pypi.org/project/dvg-qdeviceio
Installation::
pip install dvg-qdeviceio
Changelog
=========
1.6.0 (2024-06-24)
------------------
* Restore support for Python 3.6. Was removed by mistake. Versions 1.4.0
and 1.5.0 do support it actually, but only in combination with PyQt5 or
PySide2.
1.5.0 (2024-06-22)
------------------
* Support for Numpy 2.0
1.4.0 (2024-06-12)
------------------
Major code quality improvements:
* Using ``qtpy`` library instead of my own Qt5/6 mechanism
* Improved ``_NoDevice`` mechanism
* Removed redundant ``attach_device()``
* Extra check in ``Worker_jobs`` if ``func`` is actually a callable
* Using singletons ``Uninitialized_Worker_DAQ/jobs`` as default attribute
values instead of using ``None``. This solves pylint warnings on '... is not a
known attribute of None'.
* Docstring improvement: ``create_worker_DAQ/jobs()`` show full info now
* Docstring improvement: Linking against PySide6, instead of PyQt5
* Improved code quality of the pytest
Potential code breaks:
* Removed Python 3.6 support
* The methods of ``Worker_DAQ`` and ``Worker_jobs`` have been hidden from the
API and are dundered now. You should not have been calling them anyhow outside
of this module. Their functionality was and is still available as safer
methods available at the root level of ``QDeviceIO()``. Specifically::
Worker_DAQ.pause() --> Worker_DAQ._set_pause_true() , should use pause_DAQ()
Worker_DAQ.unpause() --> Worker_DAQ._set_pause_false() , should use unpause_DAQ()
Worker_DAQ.wake_up() --> Worker_DAQ._wake_up() , should use wake_up_DAQ()
Worker_jobs.send() --> Worker_jobs._send() , should use send()
Worker_jobs.add_to_queue --> Worker_jobs._add_to_queue() , should use add_to_queue()
Worker_jobs.process_queue --> Worker_jobs._process_queue() , should use process_queue()
1.3.0 (2024-04-02)
------------------
* Support Python 3.11
* All f-strings
* Type checking via ``isinstance()``, not ``type == ...``
1.2.0 (2023-02-27)
------------------
* Deprecated `requires.io` and `travis`
* Raise ``ImportError`` instead of general ``Exception``
1.1.2 (2022-10-26)
------------------
* Minor refactor of mechanism to support PyQt5, PyQt6, PySide2 and PySide6
1.1.1 (2022-09-14)
------------------
* Forgot to bump requirement ``dvg-debug-functions~=2.2`` to ensure support for
PyQt5, PyQt6, PySide2 and PySide6
1.1.0 (2022-09-13)
------------------
* Added support for PyQt5, PyQt6, PySide2 and PySide6
1.0.0 (2021-07-02)
------------------
* Stable release, identical to v0.4.0
0.4.0 (2021-05-09)
------------------
* Fixed buggy ``worker_DAQ`` pause and unpause routines in ``CONTINUOUS`` mode
0.3.0 (2020-07-23)
-------------------
* Updated start & stop machinery Workers
* Removed unneccesary lambdas
* Revamped DAQ rate calculation. Init arg ``calc_DAQ_rate_every_N_iter`` got removed.
0.2.2 (2020-07-17)
-------------------
* Traceback will be printed when ``DAQ_function`` raises an internal error.
* Introduced ``Worker_###._has_finished`` to prevent hang when closing workers twice.
0.2.1 (2020-07-15)
-------------------
* Added documentation
0.2.0 (2020-07-07)
-------------------
* ``quit_worker_###()``: Added check to see if thread was already closed, due to a ``lost_connection`` event. This prevents an hanging app during quit.
* Changed name of enum class ``DAQ_trigger`` to ``DAQ_TRIGGER``
0.1.2 (2020-07-04)
-------------------
* Proper use of ``super()``, now passing ``**kwargs`` onto subclass ``QtCore.QObject()``
0.1.1 (2020-07-02)
-------------------
* ``Worker_DAQ`` now stores all init arguments, some as _private
0.1.0 (2020-07-02)
-------------------
* DvG module filenames changed to lowercase
* Nearing full release status
0.0.12 (2020-06-29)
-------------------
* ``INTERNAL_TIMER``: Already instantiate the ``QTimer`` in ``create_worker_DAQ()``, instead of in ``start_worker_DAQ()``
* Changed default ``DAQ_timer_type`` from ``CoarseTimer`` to ``PreciseTimer``
* Added more Sphinx documentation
0.0.11
-------------------
Skipped (I screwed up the versioning)
0.0.10 (2020-06-22)
-------------------
* Major: Changed name ``Worker_send`` to ``Worker_jobs`` and similar
* Added more Sphinx documentation
0.0.9 (2020-06-17)
------------------
* Moved the ``Worker_###()`` classes outside of ``QDeviceIO`` and into module root
* Added documentation using Sphinx and Read the docs
* Changed from MarkDown to ReStructuredText
0.0.8 (2020-06-09)
------------------
* Added ``pause_DAQ``, ``unpause_DAQ()``, ``wake_up_DAQ()``
* Changed many attribute and method names
* Code style: black
0.0.6 (2020-06-07)
------------------
* Added ``start()``, renamed ``quit_all_workers()`` to ``quit()``
* Added ``send()``, ``add_to_send_queue()``, ``process_send_queue()``
0.0.5 (2020-06-06)
------------------
* Implemented smooth start and stop machinery to the workers
0.0.1 (2020-05-25)
------------------
* First release on PyPI
Raw data
{
"_id": null,
"home_page": "https://python-dvg-qdeviceio.readthedocs.io/",
"name": "dvg-qdeviceio",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "PyQt5, PyQt6, PySide2, PySide6, multithread, device I/O, automation, laboratory, science",
"author": "Dennis van Gils",
"author_email": "vangils.dennis@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/e5/51/6c9447c2876fb950e22490e8f953bd339aa73b29e5d983a5f3fdcb95e3f8/dvg_qdeviceio-1.6.0.tar.gz",
"platform": null,
"description": ".. image:: https://img.shields.io/pypi/v/dvg-qdeviceio\r\n :target: https://pypi.org/project/dvg-qdeviceio\r\n.. image:: https://img.shields.io/pypi/pyversions/dvg-qdeviceio\r\n :target: https://pypi.org/project/dvg-qdeviceio\r\n.. image:: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/actions/workflows/python-package.yml/badge.svg\r\n :target: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/actions/workflows/python-package.yml\r\n.. image:: https://coveralls.io/repos/github/Dennis-van-Gils/python-dvg-qdeviceio/badge.svg\r\n :target: https://coveralls.io/github/Dennis-van-Gils/python-dvg-qdeviceio\r\n.. image:: https://readthedocs.org/projects/python-dvg-qdeviceio/badge/?version=latest\r\n :target: https://python-dvg-qdeviceio.readthedocs.io/en/latest/?badge=latest\r\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\r\n :target: https://github.com/psf/black\r\n.. image:: https://img.shields.io/badge/License-MIT-purple.svg\r\n :target: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/blob/master/LICENSE.txt\r\n\r\nDvG_QDeviceIO\r\n=============\r\n*Hassle-free PyQt/PySide interface for multithreaded data acquisition and communication with an I/O device.*\r\n\r\nIt will manage many necessary components for proper multithreading -- creation\r\nand handling of the threads, workers, signals and mutexes -- *for you*, reducing\r\nit to just a few simple method calls of a QDeviceIO class instance to get set up\r\nand going.\r\n\r\nSupports PyQt5, PyQt6, PySide2 and PySide6.\r\n\r\n- Documentation: https://python-dvg-qdeviceio.readthedocs.io\r\n- Github: https://github.com/Dennis-van-Gils/python-dvg-qdeviceio\r\n- PyPI: https://pypi.org/project/dvg-qdeviceio\r\n\r\nInstallation::\r\n\r\n pip install dvg-qdeviceio\r\n\r\nChangelog\r\n=========\r\n\r\n1.6.0 (2024-06-24)\r\n------------------\r\n* Restore support for Python 3.6. Was removed by mistake. Versions 1.4.0\r\n and 1.5.0 do support it actually, but only in combination with PyQt5 or\r\n PySide2.\r\n\r\n1.5.0 (2024-06-22)\r\n------------------\r\n* Support for Numpy 2.0\r\n\r\n1.4.0 (2024-06-12)\r\n------------------\r\nMajor code quality improvements:\r\n\r\n* Using ``qtpy`` library instead of my own Qt5/6 mechanism\r\n* Improved ``_NoDevice`` mechanism\r\n* Removed redundant ``attach_device()``\r\n* Extra check in ``Worker_jobs`` if ``func`` is actually a callable\r\n* Using singletons ``Uninitialized_Worker_DAQ/jobs`` as default attribute\r\n values instead of using ``None``. This solves pylint warnings on '... is not a\r\n known attribute of None'.\r\n* Docstring improvement: ``create_worker_DAQ/jobs()`` show full info now\r\n* Docstring improvement: Linking against PySide6, instead of PyQt5\r\n* Improved code quality of the pytest\r\n\r\nPotential code breaks:\r\n\r\n* Removed Python 3.6 support\r\n* The methods of ``Worker_DAQ`` and ``Worker_jobs`` have been hidden from the\r\n API and are dundered now. You should not have been calling them anyhow outside\r\n of this module. Their functionality was and is still available as safer\r\n methods available at the root level of ``QDeviceIO()``. Specifically::\r\n\r\n Worker_DAQ.pause() --> Worker_DAQ._set_pause_true() , should use pause_DAQ()\r\n Worker_DAQ.unpause() --> Worker_DAQ._set_pause_false() , should use unpause_DAQ()\r\n Worker_DAQ.wake_up() --> Worker_DAQ._wake_up() , should use wake_up_DAQ()\r\n Worker_jobs.send() --> Worker_jobs._send() , should use send()\r\n Worker_jobs.add_to_queue --> Worker_jobs._add_to_queue() , should use add_to_queue()\r\n Worker_jobs.process_queue --> Worker_jobs._process_queue() , should use process_queue()\r\n\r\n1.3.0 (2024-04-02)\r\n------------------\r\n* Support Python 3.11\r\n* All f-strings\r\n* Type checking via ``isinstance()``, not ``type == ...``\r\n\r\n1.2.0 (2023-02-27)\r\n------------------\r\n* Deprecated `requires.io` and `travis`\r\n* Raise ``ImportError`` instead of general ``Exception``\r\n\r\n1.1.2 (2022-10-26)\r\n------------------\r\n* Minor refactor of mechanism to support PyQt5, PyQt6, PySide2 and PySide6\r\n\r\n1.1.1 (2022-09-14)\r\n------------------\r\n* Forgot to bump requirement ``dvg-debug-functions~=2.2`` to ensure support for\r\n PyQt5, PyQt6, PySide2 and PySide6\r\n\r\n1.1.0 (2022-09-13)\r\n------------------\r\n* Added support for PyQt5, PyQt6, PySide2 and PySide6\r\n\r\n1.0.0 (2021-07-02)\r\n------------------\r\n* Stable release, identical to v0.4.0\r\n\r\n0.4.0 (2021-05-09)\r\n------------------\r\n* Fixed buggy ``worker_DAQ`` pause and unpause routines in ``CONTINUOUS`` mode\r\n\r\n0.3.0 (2020-07-23)\r\n-------------------\r\n* Updated start & stop machinery Workers\r\n* Removed unneccesary lambdas\r\n* Revamped DAQ rate calculation. Init arg ``calc_DAQ_rate_every_N_iter`` got removed.\r\n\r\n0.2.2 (2020-07-17)\r\n-------------------\r\n* Traceback will be printed when ``DAQ_function`` raises an internal error.\r\n* Introduced ``Worker_###._has_finished`` to prevent hang when closing workers twice.\r\n\r\n0.2.1 (2020-07-15)\r\n-------------------\r\n* Added documentation\r\n\r\n0.2.0 (2020-07-07)\r\n-------------------\r\n* ``quit_worker_###()``: Added check to see if thread was already closed, due to a ``lost_connection`` event. This prevents an hanging app during quit.\r\n* Changed name of enum class ``DAQ_trigger`` to ``DAQ_TRIGGER``\r\n\r\n0.1.2 (2020-07-04)\r\n-------------------\r\n* Proper use of ``super()``, now passing ``**kwargs`` onto subclass ``QtCore.QObject()``\r\n\r\n0.1.1 (2020-07-02)\r\n-------------------\r\n* ``Worker_DAQ`` now stores all init arguments, some as _private\r\n\r\n0.1.0 (2020-07-02)\r\n-------------------\r\n* DvG module filenames changed to lowercase\r\n* Nearing full release status\r\n\r\n0.0.12 (2020-06-29)\r\n-------------------\r\n* ``INTERNAL_TIMER``: Already instantiate the ``QTimer`` in ``create_worker_DAQ()``, instead of in ``start_worker_DAQ()``\r\n* Changed default ``DAQ_timer_type`` from ``CoarseTimer`` to ``PreciseTimer``\r\n* Added more Sphinx documentation\r\n\r\n0.0.11\r\n-------------------\r\nSkipped (I screwed up the versioning)\r\n\r\n0.0.10 (2020-06-22)\r\n-------------------\r\n* Major: Changed name ``Worker_send`` to ``Worker_jobs`` and similar\r\n* Added more Sphinx documentation\r\n\r\n0.0.9 (2020-06-17)\r\n------------------\r\n* Moved the ``Worker_###()`` classes outside of ``QDeviceIO`` and into module root\r\n* Added documentation using Sphinx and Read the docs\r\n* Changed from MarkDown to ReStructuredText\r\n\r\n0.0.8 (2020-06-09)\r\n------------------\r\n* Added ``pause_DAQ``, ``unpause_DAQ()``, ``wake_up_DAQ()``\r\n* Changed many attribute and method names\r\n* Code style: black\r\n\r\n0.0.6 (2020-06-07)\r\n------------------\r\n* Added ``start()``, renamed ``quit_all_workers()`` to ``quit()``\r\n* Added ``send()``, ``add_to_send_queue()``, ``process_send_queue()``\r\n\r\n0.0.5 (2020-06-06)\r\n------------------\r\n* Implemented smooth start and stop machinery to the workers\r\n\r\n0.0.1 (2020-05-25)\r\n------------------\r\n* First release on PyPI\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Hassle-free PyQt/PySide interface for multithreaded data acquisition and communication with an I/O device.",
"version": "1.6.0",
"project_urls": {
"Homepage": "https://python-dvg-qdeviceio.readthedocs.io/",
"Issue Tracker": "https://github.com/Dennis-van-Gils/python-dvg-qdeviceio/issues"
},
"split_keywords": [
"pyqt5",
" pyqt6",
" pyside2",
" pyside6",
" multithread",
" device i/o",
" automation",
" laboratory",
" science"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "58eaa7d88d0ec79bfe3e25b1a19082ad5a6161430c73a44460a3e01d1fcb5b42",
"md5": "ee1e2990d440ded92450bfb0accf9ee5",
"sha256": "49f1e40bfbc79e28e89783fedcc545d9479de21bb4505689f419668b0e72e398"
},
"downloads": -1,
"filename": "dvg_qdeviceio-1.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ee1e2990d440ded92450bfb0accf9ee5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 18062,
"upload_time": "2024-06-24T12:21:13",
"upload_time_iso_8601": "2024-06-24T12:21:13.743134Z",
"url": "https://files.pythonhosted.org/packages/58/ea/a7d88d0ec79bfe3e25b1a19082ad5a6161430c73a44460a3e01d1fcb5b42/dvg_qdeviceio-1.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e5516c9447c2876fb950e22490e8f953bd339aa73b29e5d983a5f3fdcb95e3f8",
"md5": "070652328cece91ca134f1445200dc2e",
"sha256": "1f96204843b389661d0b2d82116de3afcec0fe14a177ea65d4e3fd3c5766b1b0"
},
"downloads": -1,
"filename": "dvg_qdeviceio-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "070652328cece91ca134f1445200dc2e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 295437,
"upload_time": "2024-06-24T12:21:16",
"upload_time_iso_8601": "2024-06-24T12:21:16.019441Z",
"url": "https://files.pythonhosted.org/packages/e5/51/6c9447c2876fb950e22490e8f953bd339aa73b29e5d983a5f3fdcb95e3f8/dvg_qdeviceio-1.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-24 12:21:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Dennis-van-Gils",
"github_project": "python-dvg-qdeviceio",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "dvg-qdeviceio"
}