diff --git a/docs/source/conf.py b/docs/source/conf.py index cf5293a7..fe3f927f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,7 +31,7 @@ class Mock(MagicMock): return MagicMock() -mock_imports = ["picamera", "picamera.array", "picamera.mmalobj"] +mock_imports = ["picamerax", "picamerax.array", "picamerax.mmalobj"] sys.modules.update((mod_name, Mock()) for mod_name in mock_imports) @@ -224,7 +224,7 @@ epub_exclude_files = ["search.html"] # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { "openflexure_stage": ("https://openflexure-stage.readthedocs.io/en/latest/", None), - "picamera": ("https://picamera.readthedocs.io/en/release-1.13/", None), + "picamerax": ("https://picamerax.readthedocs.io/en/latest//", None), "marshmallow": ("https://marshmallow.readthedocs.io/en/stable/", None), "webargs": ("https://webargs.readthedocs.io/en/latest/", None), } diff --git a/docs/source/extensions/introduction.rst b/docs/source/extensions/introduction.rst index b1da263a..265cf94d 100644 --- a/docs/source/extensions/introduction.rst +++ b/docs/source/extensions/introduction.rst @@ -4,7 +4,7 @@ Introduction Extensions allow functionality to be added to the OpenFlexure Microscope web API without having to modify the base code. They have full access to the :py:class:`openflexure_microscope.Microscope` object, including direct access to any attached :py:class:`openflexure_microscope.camera.base.BaseCamera` and :py:class:`openflexure_stage.stage.OpenFlexureStage` objects. -This also allows access to the :py:class:`picamera.PiCamera` object. +This also allows access to the :py:class:`picamerax.PiCamera` object. Extensions can either be loaded from a single Python file, or as a Python package installed to the environment being used. diff --git a/openflexure_microscope/api/app.py b/openflexure_microscope/api/app.py index 6d69e3fb..f9bbb9eb 100644 --- a/openflexure_microscope/api/app.py +++ b/openflexure_microscope/api/app.py @@ -204,4 +204,4 @@ if __name__ == "__main__": from labthings import Server logging.info("Starting OpenFlexure Microscope Server...") server = Server(app) - server.run(host="::", port=5000, debug=False, zeroconf=True) + server.run(host="0.0.0.0", port=5000, debug=False, zeroconf=True) diff --git a/openflexure_microscope/api/default_extensions/picamera_autocalibrate/recalibrate_utils.py b/openflexure_microscope/api/default_extensions/picamera_autocalibrate/recalibrate_utils.py index 822264e3..91c5f3bb 100644 --- a/openflexure_microscope/api/default_extensions/picamera_autocalibrate/recalibrate_utils.py +++ b/openflexure_microscope/api/default_extensions/picamera_autocalibrate/recalibrate_utils.py @@ -2,8 +2,8 @@ import numpy as np import time import logging -from picamera import PiCamera -from picamera.array import PiRGBArray, PiBayerArray +from picamerax import PiCamera +from picamerax.array import PiRGBArray, PiBayerArray def rgb_image(camera, resize=None, **kwargs): diff --git a/openflexure_microscope/api/static/package-lock.json b/openflexure_microscope/api/static/package-lock.json index 8e7a763f..2a0efe96 100644 --- a/openflexure_microscope/api/static/package-lock.json +++ b/openflexure_microscope/api/static/package-lock.json @@ -1,6 +1,6 @@ { "name": "openflexure-microscope-jsclient", - "version": "2.3.0", + "version": "2.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/openflexure_microscope/api/v2/views/captures.py b/openflexure_microscope/api/v2/views/captures.py index cd9b1e92..2ac67339 100644 --- a/openflexure_microscope/api/v2/views/captures.py +++ b/openflexure_microscope/api/v2/views/captures.py @@ -6,7 +6,7 @@ from openflexure_microscope.api.utilities import get_bool, JsonResponse from labthings import Schema, fields, find_component from labthings.views import View, PropertyView from labthings.utilities import description_from_view -from labthings.views.marshalling import marshal_with +from labthings.marshalling import marshal_with from marshmallow import pre_dump diff --git a/openflexure_microscope/camera/pi.py b/openflexure_microscope/camera/pi.py index fdf8576d..c7c7a568 100644 --- a/openflexure_microscope/camera/pi.py +++ b/openflexure_microscope/camera/pi.py @@ -35,8 +35,8 @@ import os import logging # Pi camera -import picamera -import picamera.array +import picamerax +import picamerax.array # Type hinting from typing import Tuple @@ -87,8 +87,8 @@ class PiCameraStreamer(BaseCamera): BaseCamera.__init__(self) # Attach to Pi camera self.camera = ( - picamera.PiCamera() - ) #: :py:class:`picamera.PiCamera`: Picamera object + picamerax.PiCamera() + ) #: :py:class:`picamerax.PiCamera`: Picamera object # Store state of PiCameraStreamer self.preview_active = False @@ -247,7 +247,7 @@ class PiCameraStreamer(BaseCamera): """ Args: - settings_dict (dict): Dictionary of properties to apply to the :py:class:`picamera.PiCamera`: object + settings_dict (dict): Dictionary of properties to apply to the :py:class:`picamerax.PiCamera`: object pause_for_effect (bool): Pause tactically to reduce risk of timing issues """ # Set exposure mode @@ -339,11 +339,11 @@ class PiCameraStreamer(BaseCamera): if fullscreen: self.camera.preview.fullscreen = fullscreen self.preview_active = True - except picamera.exc.PiCameraMMALError as e: + except picamerax.exc.PiCameraMMALError as e: logging.error( "Suppressed a MMALError in start_preview. Exception: {}".format(e) ) - except picamera.exc.PiCameraValueError as e: + except picamerax.exc.PiCameraValueError as e: logging.error( "Suppressed a ValueError exception in start_preview. Exception: {}".format( e @@ -427,7 +427,7 @@ class PiCameraStreamer(BaseCamera): # Stop the camera video recording on port 1 try: self.camera.stop_recording(splitter_port=splitter_port) - except picamera.exc.PiCameraNotRecording: + except picamerax.exc.PiCameraNotRecording: logging.info("Not recording on splitter_port {}".format(splitter_port)) else: logging.info( @@ -467,7 +467,7 @@ class PiCameraStreamer(BaseCamera): # Reduce the resolution for video streaming try: self.camera._check_recording_stopped() - except picamera.exc.PiCameraRuntimeError: + except picamerax.exc.PiCameraRuntimeError: logging.info( "Error while changing resolution: Recording already running." ) @@ -487,7 +487,7 @@ class PiCameraStreamer(BaseCamera): # metric) splitter_port=splitter_port, ) - except picamera.exc.PiCameraAlreadyRecording: + except picamerax.exc.PiCameraAlreadyRecording: logging.info( "Error while starting preview: Recording already running." ) @@ -573,7 +573,7 @@ class PiCameraStreamer(BaseCamera): self.stop_stream_recording(resolution=resolution) logging.debug("Creating PiYUVArray") - with picamera.array.PiYUVArray(self.camera, size=size) as output: + with picamerax.array.PiYUVArray(self.camera, size=size) as output: logging.info("Capturing to {}".format(output)) @@ -613,7 +613,7 @@ class PiCameraStreamer(BaseCamera): self.stop_stream_recording(resolution=resolution) logging.debug("Creating PiRGBArray") - with picamera.array.PiRGBArray(self.camera, size=size) as output: + with picamerax.array.PiRGBArray(self.camera, size=size) as output: logging.info("Capturing to {}".format(output)) diff --git a/openflexure_microscope/camera/set_picamera_gain.py b/openflexure_microscope/camera/set_picamera_gain.py index ab66cdcb..197fd79f 100644 --- a/openflexure_microscope/camera/set_picamera_gain.py +++ b/openflexure_microscope/camera/set_picamera_gain.py @@ -1,8 +1,8 @@ from __future__ import print_function -import picamera -from picamera import mmal, mmalobj, exc -from picamera.mmalobj import to_rational +import picamerax +from picamerax import mmal, mmalobj, exc +from picamerax.mmalobj import to_rational import time import logging @@ -13,7 +13,7 @@ MMAL_PARAMETER_DIGITAL_GAIN = mmal.MMAL_PARAMETER_GROUP_CAMERA + 0x5A def set_gain(camera, gain, value): """Set the analog gain of a PiCamera. - camera: the picamera.PiCamera() instance you are configuring + camera: the picamerax.PiCamera() instance you are configuring gain: either MMAL_PARAMETER_ANALOG_GAIN or MMAL_PARAMETER_DIGITAL_GAIN value: a numeric value that can be converted to a rational number. """ @@ -42,7 +42,7 @@ def set_digital_gain(camera, value): if __name__ == "__main__": - with picamera.PiCamera() as cam: + with picamerax.PiCamera() as cam: cam.start_preview(fullscreen=False, window=(0, 50, 640, 480)) time.sleep(2) diff --git a/poetry.lock b/poetry.lock index d1759b1e..2d480366 100644 --- a/poetry.lock +++ b/poetry.lock @@ -12,16 +12,34 @@ description = "A pluggable API specification generator. Currently supports the O name = "apispec" optional = false python-versions = ">=3.5" -version = "3.3.1" +version = "3.3.2" [package.extras] -dev = ["PyYAML (>=3.10)", "prance (>=0.11)", "marshmallow (>=2.19.2)", "pytest", "mock", "flake8 (3.8.2)", "flake8-bugbear (20.1.4)", "pre-commit (>=2.4,<3.0)", "tox"] -docs = ["marshmallow (>=2.19.2)", "pyyaml (5.3.1)", "sphinx (3.0.4)", "sphinx-issues (1.2.0)", "sphinx-rtd-theme (0.4.3)"] -lint = ["flake8 (3.8.2)", "flake8-bugbear (20.1.4)", "pre-commit (>=2.4,<3.0)"] +dev = ["PyYAML (>=3.10)", "prance (>=0.11)", "marshmallow (>=2.19.2)", "pytest", "mock", "flake8 (3.8.3)", "flake8-bugbear (20.1.4)", "pre-commit (>=2.4,<3.0)", "tox"] +docs = ["marshmallow (>=2.19.2)", "pyyaml (5.3.1)", "sphinx (3.2.1)", "sphinx-issues (1.2.0)", "sphinx-rtd-theme (0.5.0)"] +lint = ["flake8 (3.8.3)", "flake8-bugbear (20.1.4)", "pre-commit (>=2.4,<3.0)"] tests = ["PyYAML (>=3.10)", "prance (>=0.11)", "marshmallow (>=2.19.2)", "pytest", "mock"] validation = ["prance (>=0.11)"] yaml = ["PyYAML (>=3.10)"] +[[package]] +category = "main" +description = "Web framework plugins for apispec." +name = "apispec-webframeworks" +optional = false +python-versions = ">=3.6" +version = "0.5.2" + +[package.dependencies] +[package.dependencies.apispec] +extras = ["yaml"] +version = ">=2.0.0" + +[package.extras] +dev = ["pytest", "mock", "Flask (1.1.1)", "tornado", "bottle (0.12.17)", "flake8 (3.7.9)", "flake8-bugbear (19.8.0)", "pre-commit (>=1.18,<2.0)", "tox"] +lint = ["flake8 (3.7.9)", "flake8-bugbear (19.8.0)", "pre-commit (>=1.18,<2.0)"] +tests = ["pytest", "mock", "Flask (1.1.1)", "tornado", "bottle (0.12.17)"] + [[package]] category = "dev" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." @@ -53,13 +71,13 @@ description = "Classes Without Boilerplate" name = "attrs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" +version = "20.2.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] category = "dev" @@ -137,6 +155,18 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "0.4.3" +[[package]] +category = "main" +description = "Yet another Python color library." +name = "colorzero" +optional = false +python-versions = "*" +version = "1.1" + +[package.extras] +doc = ["sphinx"] +test = ["pytest", "coverage", "mock"] + [[package]] category = "dev" description = "Docutils -- Python Documentation Utilities" @@ -181,24 +211,12 @@ description = "A Flask extension adding a decorator for CORS support" name = "flask-cors" optional = false python-versions = "*" -version = "3.0.8" +version = "3.0.9" [package.dependencies] Flask = ">=0.9" Six = "*" -[[package]] -category = "main" -description = "Barebones websocket extension for Flask, using Pythonthreading for low-traffic concurrency" -name = "flask-threaded-sockets" -optional = false -python-versions = ">=3.6,<4.0" -version = "0.2.0" - -[package.dependencies] -flask = ">=1.1.2,<2.0.0" -werkzeug = ">=1.0.1,<2.0.0" - [[package]] category = "main" description = "Clean single-source support for Python 3 and 2" @@ -236,14 +254,13 @@ category = "dev" description = "A Python utility / library to sort Python imports." name = "isort" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "4.3.21" +python-versions = ">=3.6,<4.0" +version = "5.5.1" [package.extras] -pipfile = ["pipreqs", "requirementslib"] -pyproject = ["toml"] -requirements = ["pipreqs", "pip-api"] -xdg_home = ["appdirs (>=1.4.0)"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] [[package]] category = "main" @@ -269,21 +286,25 @@ i18n = ["Babel (>=0.8)"] [[package]] category = "main" -description = "Python implementation of LabThings, based on the Flask microframework" +description = "" name = "labthings" optional = false -python-versions = ">=3.6,<4.0" +python-versions = "^3.6" version = "0.8.0" [package.dependencies] -Flask = ">=1.1.1,<2.0.0" -apispec = ">=3.2.0,<4.0.0" -flask-cors = ">=3.0.8,<4.0.0" -flask-threaded-sockets = ">=0.2.0,<0.3.0" -marshmallow = ">=3.4.0,<4.0.0" -webargs = ">=6.0.0,<7.0.0" +Flask = "^1.1.1" +apispec = "^3.2.0" +apispec_webframeworks = "^0.5.2" +flask-cors = "^3.0.8" +marshmallow = "^3.4.0" +webargs = "^6.0.0" zeroconf = ">=0.24.5,<0.29.0" +[package.source] +reference = "c79e6f28d5ffbd61dcfe7fc94130db604cdb4e2d" +type = "git" +url = "https://github.com/labthings/python-labthings.git" [[package]] category = "dev" description = "A fast and thorough lazy object proxy." @@ -368,22 +389,20 @@ six = "*" [[package]] category = "main" -description = "A pure Python interface for the Raspberry Pi camera module." -name = "picamera" +description = "A pure Python interface for the Raspberry Pi camera module, with extra features and fixes." +name = "picamerax" optional = false python-versions = "*" -version = "1.13.2b0" +version = "20.9.1" + +[package.dependencies] +colorzero = "*" [package.extras] array = ["numpy"] doc = ["sphinx"] test = ["coverage", "pytest", "mock", "pillow", "numpy"] -[package.source] -reference = "" -type = "url" -url = "https://github.com/rwb27/picamera/releases/download/v1.13.2b0/picamera-1.13.2b0-py3-none-any.whl" - [[package]] category = "main" description = "Python Imaging Library (Fork)" @@ -417,12 +436,12 @@ description = "python code static checker" name = "pylint" optional = false python-versions = ">=3.5.*" -version = "2.5.3" +version = "2.6.0" [package.dependencies] astroid = ">=2.4.0,<=2.5" colorama = "*" -isort = ">=4.2.5,<5" +isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" toml = ">=0.7.1" @@ -554,7 +573,7 @@ description = "Python documentation generator" name = "sphinx" optional = false python-versions = ">=3.5" -version = "3.1.2" +version = "3.2.1" [package.dependencies] Jinja2 = ">=2.3" @@ -737,7 +756,7 @@ description = "Pure Python Multicast DNS Service Discovery Library (Bonjour/Avah name = "zeroconf" optional = false python-versions = "*" -version = "0.28.0" +version = "0.28.4" [package.dependencies] ifaddr = ">=0.1.7" @@ -746,7 +765,7 @@ ifaddr = ">=0.1.7" rpi = ["RPi.GPIO"] [metadata] -content-hash = "a96446d383ec578ba7208ee8ae3b919b08352ba0e664b792f971a9535abc85d1" +content-hash = "d3ce92f78e9972811931a8531fc3dde0052b84ade5337aed91f86e74dc68eea0" lock-version = "1.0" python-versions = "^3.6" @@ -756,8 +775,12 @@ alabaster = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] apispec = [ - {file = "apispec-3.3.1-py2.py3-none-any.whl", hash = "sha256:b65063e11968a8c26dbbe9b4100ee24026a41cc358dd204df279bdedd7d8dea2"}, - {file = "apispec-3.3.1.tar.gz", hash = "sha256:f5244ccca33f7a81309f6b3c9d458e33e869050c2d861b9f8cee24b3ad739d2b"}, + {file = "apispec-3.3.2-py2.py3-none-any.whl", hash = "sha256:a1df9ec6b2cd0edf45039ef025abd7f0660808fa2edf737d3ba1cf5ef1a4625b"}, + {file = "apispec-3.3.2.tar.gz", hash = "sha256:d23ebd5b71e541e031b02a19db10b5e6d5ef8452c552833e3e1afc836b40b1ad"}, +] +apispec-webframeworks = [ + {file = "apispec-webframeworks-0.5.2.tar.gz", hash = "sha256:0db35b267914b3f8c562aca0261957dbcb4176f255eacc22520277010818dcf3"}, + {file = "apispec_webframeworks-0.5.2-py2.py3-none-any.whl", hash = "sha256:482c563abbcc2a261439476cb3f1a7c7284cc997c322c574d48c111643e9c04e"}, ] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, @@ -768,8 +791,8 @@ astroid = [ {file = "astroid-2.4.2.tar.gz", hash = "sha256:2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"}, + {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"}, ] babel = [ {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"}, @@ -799,6 +822,10 @@ colorama = [ {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, ] +colorzero = [ + {file = "colorzero-1.1-py2.py3-none-any.whl", hash = "sha256:e3c36d15b293de2b2f77ff54a5bd243fffac941ed0a5332d0697a6612a26a0a3"}, + {file = "colorzero-1.1.tar.gz", hash = "sha256:acba47119b5d8555680d3cda9afe6ccc5481385ccc3c00084dd973f7aa184599"}, +] docutils = [ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, @@ -811,12 +838,8 @@ flask = [ {file = "Flask-1.1.2.tar.gz", hash = "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"}, ] flask-cors = [ - {file = "Flask-Cors-3.0.8.tar.gz", hash = "sha256:72170423eb4612f0847318afff8c247b38bd516b7737adfc10d1c2cdbb382d16"}, - {file = "Flask_Cors-3.0.8-py2.py3-none-any.whl", hash = "sha256:f4d97201660e6bbcff2d89d082b5b6d31abee04b1b3003ee073a6fd25ad1d69a"}, -] -flask-threaded-sockets = [ - {file = "flask_threaded_sockets-0.2.0-py3-none-any.whl", hash = "sha256:e3fc55ccf7f22e801b967f15efd4d30ae8627c1fdc3c27e0195ba1bd369e32e1"}, - {file = "flask_threaded_sockets-0.2.0.tar.gz", hash = "sha256:e9d2ee66ae1c9c2ac86373510c2a4295e0230109130b7bc6d2499f5cd4140361"}, + {file = "Flask-Cors-3.0.9.tar.gz", hash = "sha256:6bcfc100288c5d1bcb1dbb854babd59beee622ffd321e444b05f24d6d58466b8"}, + {file = "Flask_Cors-3.0.9-py2.py3-none-any.whl", hash = "sha256:cee4480aaee421ed029eaa788f4049e3e26d15b5affb6a880dade6bafad38324"}, ] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, @@ -834,8 +857,8 @@ imagesize = [ {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, ] isort = [ - {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, - {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, + {file = "isort-5.5.1-py3-none-any.whl", hash = "sha256:a200d47b7ee8b7f7d0a9646650160c4a51b6a91a9413fd31b1da2c4de789f5d3"}, + {file = "isort-5.5.1.tar.gz", hash = "sha256:92533892058de0306e51c88f22ece002a209dc8e80288aa3cec6d443060d584f"}, ] itsdangerous = [ {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"}, @@ -845,10 +868,7 @@ jinja2 = [ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, ] -labthings = [ - {file = "labthings-0.8.0-py3-none-any.whl", hash = "sha256:133eb1480dc6ea851faa9a16bcf34d075d513935eac82f8da492e6dc5e336b6c"}, - {file = "labthings-0.8.0.tar.gz", hash = "sha256:3c440c1bb9547858f2dbe6a85746174c6050016a0a86d773d986ca83fbf89874"}, -] +labthings = [] lazy-object-proxy = [ {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, @@ -991,7 +1011,10 @@ packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, ] -picamera = [] +picamerax = [ + {file = "picamerax-20.9.1-py3-none-any.whl", hash = "sha256:8dc45542644ed9c67e3b331e90bcffa04098e8b056a42d0fedb25769b0b1f17e"}, + {file = "picamerax-20.9.1.tar.gz", hash = "sha256:fccb201ad9e2ab67946111d6bf875289c141ef900fd5875de6d435d219c59440"}, +] pillow = [ {file = "Pillow-5.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:18e912a6ccddf28defa196bd2021fe33600cbe5da1aa2f2e2c6df15f720b73d1"}, {file = "Pillow-5.4.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:267f8e4c0a1d7e36e97c6a604f5b03ef58e2b81c1becb4fccecddcb37e063cc7"}, @@ -1063,8 +1086,8 @@ pygments = [ {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, ] pylint = [ - {file = "pylint-2.5.3-py3-none-any.whl", hash = "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c"}, - {file = "pylint-2.5.3.tar.gz", hash = "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc"}, + {file = "pylint-2.6.0-py3-none-any.whl", hash = "sha256:bfe68f020f8a0fece830a22dd4d5dddb4ecc6137db04face4c3420a46a52239f"}, + {file = "pylint-2.6.0.tar.gz", hash = "sha256:bb4a908c9dadbc3aac18860550e870f58e1a02c9f2c204fdf5693d73be061210"}, ] pynpm = [ {file = "pynpm-0.1.2-py2.py3-none-any.whl", hash = "sha256:3f03fbf667549f8b8b7e0419eef88d1b21833ce288f96de66fbb761b9f4c4061"}, @@ -1134,8 +1157,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, ] sphinx = [ - {file = "Sphinx-3.1.2-py3-none-any.whl", hash = "sha256:97dbf2e31fc5684bb805104b8ad34434ed70e6c588f6896991b2fdfd2bef8c00"}, - {file = "Sphinx-3.1.2.tar.gz", hash = "sha256:b9daeb9b39aa1ffefc2809b43604109825300300b987a24f45976c001ba1a8fd"}, + {file = "Sphinx-3.2.1-py3-none-any.whl", hash = "sha256:ce6fd7ff5b215af39e2fcd44d4a321f6694b4530b6f2b2109b64d120773faea0"}, + {file = "Sphinx-3.2.1.tar.gz", hash = "sha256:321d6d9b16fa381a5306e5a0b76cd48ffbc588e6340059a729c6fdd66087e0e8"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, @@ -1208,6 +1231,6 @@ wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, ] zeroconf = [ - {file = "zeroconf-0.28.0-py3-none-any.whl", hash = "sha256:8c448ad37ed074ce8811c9eb2765c01714a93f977a1c04fc39fbf6f516b0566f"}, - {file = "zeroconf-0.28.0.tar.gz", hash = "sha256:881da2ed3d7c8e0ab59fb1cc8b02b53134351941c4d8d3f3553a96700f257a03"}, + {file = "zeroconf-0.28.4-py3-none-any.whl", hash = "sha256:28b5590e32b6504a219d100a2007e7ba4d40804fd6802b238164ea3a664b29cb"}, + {file = "zeroconf-0.28.4.tar.gz", hash = "sha256:ec489012835544481c9c669e6cd91ff7ebe5407cf5797a4cbc739be5d6bbce0c"}, ] diff --git a/pyproject.toml b/pyproject.toml index 725bd7bf..f16094b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,6 @@ numpy = "1.18.2" Pillow = "^5.4" scipy = "1.4.1" # Exact version so we can guarantee a wheel "RPi.GPIO" = { version = "^0.7.0", optional = true } -picamera = {url = "https://github.com/rwb27/picamera/releases/download/v1.13.2b0/picamera-1.13.2b0-py3-none-any.whl" } python-dateutil = "^2.8" psutil = "^5.6.7" # Autostorage extension opencv-python-headless = [ @@ -46,7 +45,8 @@ pynpm = "^0.1.2" sangaboard = "^0.2" expiringdict = "^1.2.1" camera-stage-mapping = "0.1.4" -labthings = "0.8.0" +picamerax = ">=20.9.1" +labthings = {git = "https://github.com/labthings/python-labthings.git"} [tool.poetry.extras] rpi = ["RPi.GPIO"]