diff --git a/pyproject.toml b/pyproject.toml index d28cca35..bfa7b2c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -102,22 +102,21 @@ select = [ # "PL", # Pylint (a subset of, catches far less than pylint does) # "B", # Flake8 bugbear "A", # Flake8 builtins checker -# "C", # Flake8 comprehensions + "C", # Flake8 comprehensions # "FIX", #TODO/FIXME's in code. These should be added during develoment for ongoing tasks. # If they are not fixed before merge they should be converted to GitLab issues # "LOG", # Flake8 logging issues (pedantic logger formatting issues can be added with "G") # "T20", # Warns for print statments, production code should log # "PT", # pytest linting -# "RET", # Consistent clear return statments + "RET", # Consistent clear return statements "RSE", # Raise parentheses # "SIM", # Simplifications detected -# "ARG", # unused arguments -# "C90", # McCabe complexity! + "ARG", # unused arguments + "C90", # McCabe complexity! "NPY", # Numpy linting "N", # PEP8 naming -# "DOC", # Enforce argument, return, and raise to be mentioned in docstrings there is - # also "D" but this even warns about docstring punctuation. Perhaps a step too - # far? +# "D", # Docstring checks these may need to be added gradually + "ERA001", # Commented out code! ] ignore = [ diff --git a/ruff-increased-checking.toml b/ruff-increased-checking.toml index 118cfbff..5973655d 100644 --- a/ruff-increased-checking.toml +++ b/ruff-increased-checking.toml @@ -24,16 +24,15 @@ select = [ "LOG", # Flake8 logging issues (pedantic logger formatting issues can be added with "G") "T20", # Warns for print statments, production code should log "PT", # pytest linting - "RET", # Consistent clear return statments + "RET", # Consistent clear return statements "RSE", # Raise parentheses "SIM", # Simplifications detected "ARG", # unused arguments "C90", # McCabe complexity! "NPY", # Numpy linting "N", # PEP8 naming - "DOC", # Enforce argument, return, and raise to be mentioned in docstrings there is - # also "D" but this even warns about docstring punctuation. Perhaps a step too - # far? + "D", # Docstring checks these may need to be added gradually + "ERA001", # Commented out code! ] # Line length is set to 88 for ruff. This is what the formatter aims for diff --git a/src/openflexure_microscope_server/things/auto_recentre_stage.py b/src/openflexure_microscope_server/things/auto_recentre_stage.py index 910a44cf..bbdd5635 100644 --- a/src/openflexure_microscope_server/things/auto_recentre_stage.py +++ b/src/openflexure_microscope_server/things/auto_recentre_stage.py @@ -118,20 +118,12 @@ class RecentringThing(Thing): logging.info( f"Breaking because the highest point is at {np.argmax(sorted_all_heights)} in the list" ) - # plt.plot(sorted_lateral, sorted_all_heights,'.') - # plt.plot(sorted_lateral, quad_fit_func(sorted_lateral)) - # plt.show() + break - else: - if turning_loc < np.min(sorted_lateral): - moves = -1 - elif turning_loc > np.max(sorted_lateral): - moves = 1 - else: - # plt.plot(sorted_lateral, sorted_all_heights,'.') - # plt.plot(sorted_lateral, quad_fit_func(sorted_lateral)) - # plt.show() - pass + if turning_loc < np.min(sorted_lateral): + moves = -1 + elif turning_loc > np.max(sorted_lateral): + moves = 1 # Centre value is replaced by the maximum value recorded in that axis centre[direction] = focused_pos[direction][np.argmax(all_heights)][ diff --git a/src/openflexure_microscope_server/things/autofocus.py b/src/openflexure_microscope_server/things/autofocus.py index 1a14f074..dd4a388a 100644 --- a/src/openflexure_microscope_server/things/autofocus.py +++ b/src/openflexure_microscope_server/things/autofocus.py @@ -105,11 +105,12 @@ class JPEGSharpnessMonitor: stop: int = int(np.argmax(jpeg_times > stage_times[1])) except ValueError as e: if np.sum(jpeg_times > stage_times[0]) == 0: - raise ValueError( - "No images were captured during the move of the stage. Perhaps the camera is not streaming images?" - ) from e - else: - raise e + errmsg = ( + "No images were captured during the move of the stage. " + "Perhaps the camera is not streaming images?" + ) + raise ValueError(errmsg) from e + raise e if stop < 1: stop = len(jpeg_times) logging.debug("changing stop to %s", (stop)) diff --git a/src/openflexure_microscope_server/things/background_detect.py b/src/openflexure_microscope_server/things/background_detect.py index 744ed402..897234c3 100644 --- a/src/openflexure_microscope_server/things/background_detect.py +++ b/src/openflexure_microscope_server/things/background_detect.py @@ -23,8 +23,7 @@ class BackgroundDetectThing(Thing): bd = self.thing_settings.get("background_distributions", None) if bd: return ChannelDistributions(**bd) - else: - return None + return None @background_distributions.setter def background_distributions(self, value: Optional[ChannelDistributions]) -> None: diff --git a/src/openflexure_microscope_server/things/camera/opencv.py b/src/openflexure_microscope_server/things/camera/opencv.py index 3b313485..abb50252 100644 --- a/src/openflexure_microscope_server/things/camera/opencv.py +++ b/src/openflexure_microscope_server/things/camera/opencv.py @@ -83,6 +83,7 @@ class OpenCVCamera(BaseCamera): It's likely to be highly inefficient - raw and/or uncompressed captures using binary image formats will be added in due course. """ + logging.warning(f"OpenCV camera doen't respect {resolution} setting") ret, frame = self.cap.read() if not ret: raise RuntimeError( @@ -100,6 +101,7 @@ class OpenCVCamera(BaseCamera): This function will produce a JPEG image. """ + logging.warning(f"OpenCV camera doen't respect {resolution} setting") frame = self.capture_array() jpeg = cv2.imencode(".jpg", frame)[1].tobytes() exif_dict = { diff --git a/src/openflexure_microscope_server/things/camera/simulation.py b/src/openflexure_microscope_server/things/camera/simulation.py index ecef1b39..ad0ad1c2 100644 --- a/src/openflexure_microscope_server/things/camera/simulation.py +++ b/src/openflexure_microscope_server/things/camera/simulation.py @@ -189,6 +189,7 @@ class SimulatedCamera(BaseCamera): It's likely to be highly inefficient - raw and/or uncompressed captures using binary image formats will be added in due course. """ + logging.warning(f"Simulation camera doen't respect {resolution} setting") return self.generate_frame() @thing_action @@ -201,6 +202,7 @@ class SimulatedCamera(BaseCamera): This function will produce a JPEG image. """ + logging.warning(f"Simulation camera doen't respect {resolution} setting") frame = self.capture_array() jpeg = cv2.imencode(".jpg", frame)[1].tobytes() exif_dict = { diff --git a/src/openflexure_microscope_server/things/camera_stage_mapping.py b/src/openflexure_microscope_server/things/camera_stage_mapping.py index e26bf27b..4e4f1d53 100644 --- a/src/openflexure_microscope_server/things/camera_stage_mapping.py +++ b/src/openflexure_microscope_server/things/camera_stage_mapping.py @@ -87,7 +87,7 @@ def make_hardware_interface( axes = stage.axis_names def pos2dict(pos: Sequence[float]) -> Mapping[str, float]: - return {k: p for k, p in zip(axes, pos)} + return dict(zip(axes, pos)) def dict2pos(posd: Mapping[str, float]) -> Sequence[float]: return tuple(posd[k] for k in axes if k in posd) diff --git a/src/openflexure_microscope_server/things/stage/__init__.py b/src/openflexure_microscope_server/things/stage/__init__.py index cc7c1bc3..81e30ce6 100644 --- a/src/openflexure_microscope_server/things/stage/__init__.py +++ b/src/openflexure_microscope_server/things/stage/__init__.py @@ -80,7 +80,7 @@ class BaseStage(Thing): position = PropertyDescriptor( Mapping[str, int], - {k: 0 for k in _axis_names}, + dict.fromkeys(_axis_names, 0), description="Current position of the stage", readonly=True, observable=True, diff --git a/src/openflexure_microscope_server/things/stage/dummy.py b/src/openflexure_microscope_server/things/stage/dummy.py index 2608da7d..044a6625 100644 --- a/src/openflexure_microscope_server/things/stage/dummy.py +++ b/src/openflexure_microscope_server/things/stage/dummy.py @@ -91,5 +91,5 @@ class DummyStage(BaseStage): It is intended for use after manually or automatically recentring the stage. """ - self.position = {k: 0 for k in self.axis_names} + self.position = dict.fromkeys(self.axis_names, 0) self.instantaneous_position = self.position diff --git a/tests/utilities/scan_test_helpers.py b/tests/utilities/scan_test_helpers.py index 7ee583ed..62bb7f73 100644 --- a/tests/utilities/scan_test_helpers.py +++ b/tests/utilities/scan_test_helpers.py @@ -189,8 +189,7 @@ def get_expected_result_for_example_smart_spiral( """ pkl_fname = os.path.join(THIS_DIR, f"example_smart_spiral_{sample_name}.pkl") with open(pkl_fname, "rb") as pkl_file_obj: - planner = pickle.load(pkl_file_obj) - return planner + return pickle.load(pkl_file_obj) def load_sample_points(sample_name: str):