Add a Thing for API testing

This may not be in the codebase forever, but it's a very useful
sanity check to have during development.

The current implementation is clearly not a performance or
security risk.
This commit is contained in:
Richard Bowman 2024-01-04 01:11:44 +00:00
parent 62957e53e8
commit 09bec65b15
2 changed files with 33 additions and 0 deletions

View file

@ -11,6 +11,7 @@ from .things.system_control import SystemControlThing
from .things.settings_manager import SettingsManager
from .things.auto_recentre_stage import RecentringThing
from .things.smart_scan import SmartScanThing, BackgroundDetectThing
from .things.test import APITestThing
from .serve_static_files import add_static_files
from .logging import configure_logging, retrieve_log
@ -26,6 +27,7 @@ thing_server.add_thing(SystemControlThing(), "/system_control/")
thing_server.add_thing(SettingsManager(), "/settings/")
thing_server.add_thing(SmartScanThing(), "/smart_scan/")
thing_server.add_thing(BackgroundDetectThing(), "/background_detect/")
thing_server.add_thing(APITestThing(), "/api_test/")
try:
add_static_files(thing_server.app)
except RuntimeError:

View file

@ -0,0 +1,31 @@
"""
OpenFlexure Microscope API test Thing
This Thing is intended only for use testing out the API and client(s).
"""
from labthings_fastapi.thing import Thing
from labthings_fastapi.decorators import thing_action, thing_property
from labthings_fastapi.dependencies.invocation import CancelHook, InvocationLogger
class APITestThing(Thing):
_counter: int = 0
@thing_property
def counter(self) -> int:
return self._counter
@thing_action
def count_slowly(
self,
cancel: CancelHook,
logger: InvocationLogger,
n=100,
dt=0.1,
) -> None:
for i in range(n):
self._counter = i
print(f"counted to {i}")
logger.info(f"Counted to {i}")
cancel.sleep(dt)
self._counter = n