Blackened tests and docs

This commit is contained in:
Joel Collins 2019-09-15 14:21:24 +01:00
parent 5966ce29be
commit d9cb00568a
7 changed files with 160 additions and 178 deletions

View file

@ -30,63 +30,61 @@ class APIconnection:
return r.json()
def set_overlay(self, message="", size=50):
json = {
"text": message,
"size": size
}
return self.post('/camera/overlay', json=json)
json = {"text": message, "size": size}
return self.post("/camera/overlay", json=json)
def get_overlay(self):
return self.get('/camera/overlay')
return self.get("/camera/overlay")
def get_config(self):
return self.get('/config')
return self.get("/config")
def set_config(self, config_dict):
return self.post('/config', json=config_dict)
return self.post("/config", json=config_dict)
def get_state(self):
return self.get('/state')
return self.get("/state")
def start_preview(self):
return self.post('/camera/preview/start')
return self.post("/camera/preview/start")
def stop_preview(self):
return self.post('/camera/preview/stop')
return self.post("/camera/preview/stop")
def move_by(self, x=0, y=0, z=0):
json = {
"x": x,
"y": y,
"z": z
}
return self.post('/stage/position', json=json)
json = {"x": x, "y": y, "z": z}
return self.post("/stage/position", json=json)
def new_capture(self, use_video_port=True, keep_on_disk=False, resize=None):
json = {
"keep_on_disk": keep_on_disk,
"use_video_port": use_video_port
}
json = {"keep_on_disk": keep_on_disk, "use_video_port": use_video_port}
if resize:
json['size'] = {'width': resize[0], 'height': resize[1]}
json["size"] = {"width": resize[0], "height": resize[1]}
return self.post('/camera/capture', json=json)
return self.post("/camera/capture", json=json)
def get_capture(self, capture_id):
uri_route = '/camera/capture/{}/download'.format(capture_id)
uri_route = "/camera/capture/{}/download".format(capture_id)
r = self.get(uri_route, json=False)
img = Image.open(BytesIO(r.content))
array = np.asarray(img, dtype=np.int32)
return array
def del_capture(self, capture_id):
uri_route = '/camera/capture/{}'.format(capture_id)
uri_route = "/camera/capture/{}".format(capture_id)
return self.delete(uri_route)
def capture(self, use_video_port=True, keep_on_disk=False, delete_after_use=True, resize=None):
p = self.new_capture(use_video_port=use_video_port, keep_on_disk=keep_on_disk, resize=resize)
capture_id = p['metadata']['id']
def capture(
self,
use_video_port=True,
keep_on_disk=False,
delete_after_use=True,
resize=None,
):
p = self.new_capture(
use_video_port=use_video_port, keep_on_disk=keep_on_disk, resize=resize
)
capture_id = p["metadata"]["id"]
img_array = self.get_capture(capture_id)
if delete_after_use:
@ -95,10 +93,8 @@ class APIconnection:
return img_array
def set_zoom(self, zoom_value=1.0):
json = {
"zoom_value": zoom_value,
}
return self.post('/camera/zoom', json=json)
json = {"zoom_value": zoom_value}
return self.post("/camera/zoom", json=json)
def get_zoom(self):
return self.get('/camera/zoom')
return self.get("/camera/zoom")

View file

@ -6,27 +6,23 @@ import unittest
import logging
import sys
logging.basicConfig(stream=sys.stderr, level=logging.INFO)
class TestCapture(unittest.TestCase):
def test_capture_config(self):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
config = connection.get_config()
expected_keys = [
'image_resolution',
'stream_resolution',
'numpy_resolution',
]
expected_keys = ["image_resolution", "stream_resolution", "numpy_resolution"]
for key in expected_keys:
self.assertTrue(key in config)
def test_capture_videoport(self):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
resolution = connection.get_config()['stream_resolution']
resolution = connection.get_config()["stream_resolution"]
for resize in [None, (640, 480)]:
@ -34,16 +30,17 @@ class TestCapture(unittest.TestCase):
resolution = resize
capture_array = connection.capture(
use_video_port=True,
keep_on_disk=False,
use_video_port=True,
keep_on_disk=False,
delete_after_use=True,
resize=resize)
resize=resize,
)
self.assertTrue(capture_array.shape == (resolution[1], resolution[0], 3))
def test_capture_full(self):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
resolution = connection.get_config()['image_resolution']
resolution = connection.get_config()["image_resolution"]
for resize in [None, (640, 480)]:
@ -51,23 +48,21 @@ class TestCapture(unittest.TestCase):
resolution = resize
capture_array = connection.capture(
use_video_port=False,
keep_on_disk=False,
use_video_port=False,
keep_on_disk=False,
delete_after_use=True,
resize=resize)
resize=resize,
)
self.assertTrue(capture_array.shape == (resolution[1], resolution[0], 3))
class TestStage(unittest.TestCase):
def test_stage_config(self):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
config = connection.get_config()
expected_keys = [
'backlash',
]
expected_keys = ["backlash"]
for key in expected_keys:
self.assertTrue(key in config)
@ -76,14 +71,12 @@ class TestStage(unittest.TestCase):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
state = connection.get_state()
self.assertTrue('stage' in state)
expected_keys = [
'position',
]
self.assertTrue("stage" in state)
expected_keys = ["position"]
for key in expected_keys:
self.assertTrue(key in state['stage'])
self.assertTrue(key in state["stage"])
def test_stage_movement(self):
connection = APIconnection(host="localhost", port=5000, api_ver="v1")
@ -91,16 +84,16 @@ class TestStage(unittest.TestCase):
move_distance = 500
for axis in range(3):
for direction in [1, -1]:
pos_i_dict = connection.get_state()['stage']['position']
pos_i = [pos_i_dict['x'], pos_i_dict['y'], pos_i_dict['z']]
pos_i_dict = connection.get_state()["stage"]["position"]
pos_i = [pos_i_dict["x"], pos_i_dict["y"], pos_i_dict["z"]]
move = [0, 0, 0]
move[axis] = move_distance*direction
move[axis] = move_distance * direction
connection.move_by(*move)
pos_f_dict = connection.get_state()['stage']['position']
pos_f = [pos_f_dict['x'], pos_f_dict['y'], pos_f_dict['z']]
pos_f_dict = connection.get_state()["stage"]["position"]
pos_f = [pos_f_dict["x"], pos_f_dict["y"], pos_f_dict["z"]]
diff = np.subtract(pos_f, pos_i)
logging.debug("{} > {}".format(pos_i, pos_f))
@ -108,7 +101,7 @@ class TestStage(unittest.TestCase):
self.assertTrue(np.array_equal(diff, move))
if __name__ == '__main__':
if __name__ == "__main__":
suites = [
unittest.TestLoader().loadTestsFromTestCase(TestCapture),

View file

@ -12,11 +12,11 @@ import unittest
import logging
import sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
class TestCaptureMethods(unittest.TestCase):
def test_still_capture(self):
"""Tests capturing still images to a BytesIO stream."""
global camera
@ -30,11 +30,7 @@ class TestCaptureMethods(unittest.TestCase):
# Capture to a context (auto-deletes files when done)
with camera.new_image(write_to_file=False) as output:
camera.capture(
output,
use_video_port=use_video_port,
resize=resize
)
camera.capture(output, use_video_port=use_video_port, resize=resize)
# Ensure file deletion fails and returns False
self.assertFalse(output.delete_file())
@ -43,14 +39,8 @@ class TestCaptureMethods(unittest.TestCase):
# BEFORE DELETE: Ensure StreamObject 'stream' has
# a valid BytesIO object and byte string
self.assertTrue(isinstance(
output.data,
io.IOBase
))
self.assertTrue(isinstance(
output.binary,
(bytes, bytearray)
))
self.assertTrue(isinstance(output.data, io.IOBase))
self.assertTrue(isinstance(output.binary, (bytes, bytearray)))
# Save capture to file
output.save_file()
@ -65,10 +55,7 @@ class TestCaptureMethods(unittest.TestCase):
# AFTER DELETE: Ensure StreamObject 'stream' has
# a valid BytesIO object and byte string
self.assertTrue(isinstance(output.data, io.IOBase))
self.assertTrue(isinstance(
output.binary,
(bytes, bytearray)
))
self.assertTrue(isinstance(output.binary, (bytes, bytearray)))
# Create a PIL image from stream
image = Image.open(output.data)
@ -102,7 +89,8 @@ class TestCaptureMethods(unittest.TestCase):
output = camera.capture(
camera.new_image(write_to_file=True),
use_video_port=use_video_port,
resize=resize)
resize=resize,
)
# Check file got saved
self.assertTrue(os.path.isfile(output.file))
@ -122,7 +110,6 @@ class TestCaptureMethods(unittest.TestCase):
class TestUnencodedMethods(unittest.TestCase):
def test_yuv_array(self):
"""Tests capturing unencoded YUV data to a Numpy array."""
global camera
@ -136,9 +123,7 @@ class TestUnencodedMethods(unittest.TestCase):
camera.wait_for_camera()
# Capture RGB array
yuv = camera.yuv(
use_video_port=use_video_port,
resize=resize)
yuv = camera.yuv(use_video_port=use_video_port, resize=resize)
# Ensure capture output is a valid numpy array
self.assertTrue(isinstance(yuv, np.ndarray))
@ -168,9 +153,7 @@ class TestUnencodedMethods(unittest.TestCase):
camera.wait_for_camera()
# Capture RGB array
rgb = camera.array(
use_video_port=use_video_port,
resize=resize)
rgb = camera.array(use_video_port=use_video_port, resize=resize)
# Ensure capture output is a valid numpy array
self.assertTrue(isinstance(rgb, np.ndarray))
@ -189,7 +172,6 @@ class TestUnencodedMethods(unittest.TestCase):
class TestRecordMethods(unittest.TestCase):
def test_video_record(self):
"""Tests recording videos to BytesIO stream, and to file on disk."""
global camera
@ -201,9 +183,7 @@ class TestRecordMethods(unittest.TestCase):
# Wait for camera
camera.wait_for_camera()
with camera.new_video(
write_to_file=write_to_file
) as output:
with camera.new_video(write_to_file=write_to_file) as output:
# Start recording
camera.start_recording(output)
@ -278,7 +258,7 @@ class TestThreadStarting(unittest.TestCase):
self.assertIsInstance(camera.stream, io.IOBase)
if __name__ == '__main__':
if __name__ == "__main__":
with PiCameraStreamer() as camera:
suites = [

View file

@ -8,17 +8,17 @@ import atexit
import unittest
import logging, sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
class TestPluginMethods(unittest.TestCase):
def test_plugin_load(self):
plugin_arr = microscope.plugin.plugins
plugin_names = [plugin[0] for plugin in plugin_arr]
self.assertTrue('testing' in plugin_names)
self.assertTrue("testing" in plugin_names)
def test_camera_access(self):
identify = microscope.plugin.testing.identify()
@ -29,18 +29,16 @@ class TestPluginMethods(unittest.TestCase):
self.assertTrue(identify[1] is microscope.stage)
if __name__ == '__main__':
if __name__ == "__main__":
with Microscope() as microscope:
with Microscope() as microscope:
microscope.attach(PiCameraStreamer(), OpenFlexureStage())
microscope.attach(PiCameraStreamer(), OpenFlexureStage())
microscope.plugin.attach("openflexure_microscope.plugins.testing:Plugin")
microscope.plugin.attach("openflexure_microscope.plugins.testing:Plugin")
suites = [
unittest.TestLoader().loadTestsFromTestCase(TestPluginMethods),
]
suites = [unittest.TestLoader().loadTestsFromTestCase(TestPluginMethods)]
alltests = unittest.TestSuite(suites)
alltests = unittest.TestSuite(suites)
result = unittest.TextTestRunner(verbosity=2).run(alltests)
result = unittest.TextTestRunner(verbosity=2).run(alltests)

View file

@ -12,7 +12,6 @@ logging.basicConfig(stream=sys.stderr, level=logging.INFO)
class TestMicroscope(unittest.TestCase):
def test_movement(self):
move_distance = 500
for axis in range(3):
@ -20,9 +19,11 @@ class TestMicroscope(unittest.TestCase):
pos_i = stage.position
logging.debug(pos_i)
logging.info("Moving axis {} by {}".format(axis, move_distance*direction))
logging.info(
"Moving axis {} by {}".format(axis, move_distance * direction)
)
move = [0, 0, 0]
move[axis] = move_distance*direction
move[axis] = move_distance * direction
stage.move_rel(move)
@ -33,12 +34,10 @@ class TestMicroscope(unittest.TestCase):
self.assertTrue(np.array_equal(diff, move))
if __name__ == '__main__':
if __name__ == "__main__":
with OpenFlexureStage("/dev/ttyUSB0") as stage:
suites = [
unittest.TestLoader().loadTestsFromTestCase(TestMicroscope),
]
suites = [unittest.TestLoader().loadTestsFromTestCase(TestMicroscope)]
alltests = unittest.TestSuite(suites)