Blackened tests and docs
This commit is contained in:
parent
5966ce29be
commit
d9cb00568a
7 changed files with 160 additions and 178 deletions
|
|
@ -17,32 +17,34 @@ import sys
|
|||
|
||||
# Load module from relative imports
|
||||
|
||||
module_path = os.path.abspath('../..')
|
||||
module_path = os.path.abspath("../..")
|
||||
sys.path.insert(0, module_path)
|
||||
|
||||
# Handle mock imports for non-platform-agnostic modules
|
||||
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
|
||||
class Mock(MagicMock):
|
||||
@classmethod
|
||||
def __getattr__(cls, name):
|
||||
return MagicMock()
|
||||
|
||||
mock_imports = ['picamera', 'picamera.array', 'picamera.mmalobj']
|
||||
|
||||
mock_imports = ["picamera", "picamera.array", "picamera.mmalobj"]
|
||||
|
||||
sys.modules.update((mod_name, Mock()) for mod_name in mock_imports)
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'OpenFlexure Microscope Software'
|
||||
copyright = '2018, Bath Open Instrumentation Group'
|
||||
author = 'Bath Open Instrumentation Group'
|
||||
project = "OpenFlexure Microscope Software"
|
||||
copyright = "2018, Bath Open Instrumentation Group"
|
||||
author = "Bath Open Instrumentation Group"
|
||||
|
||||
# The short X.Y version
|
||||
version = ''
|
||||
version = ""
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = ''
|
||||
release = ""
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
|
@ -55,32 +57,32 @@ release = ''
|
|||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.napoleon',
|
||||
'sphinx.ext.intersphinx',
|
||||
'sphinx.ext.todo',
|
||||
'sphinx.ext.viewcode',
|
||||
'sphinx.ext.githubpages',
|
||||
'sphinx.ext.ifconfig',
|
||||
'sphinxcontrib.httpdomain',
|
||||
'sphinxcontrib.autohttp.flask',
|
||||
'sphinxcontrib.autohttp.flaskqref'
|
||||
"sphinx.ext.autodoc",
|
||||
"sphinx.ext.napoleon",
|
||||
"sphinx.ext.intersphinx",
|
||||
"sphinx.ext.todo",
|
||||
"sphinx.ext.viewcode",
|
||||
"sphinx.ext.githubpages",
|
||||
"sphinx.ext.ifconfig",
|
||||
"sphinxcontrib.httpdomain",
|
||||
"sphinxcontrib.autohttp.flask",
|
||||
"sphinxcontrib.autohttp.flaskqref",
|
||||
]
|
||||
|
||||
# Override ordering
|
||||
autodoc_member_order = 'bysource'
|
||||
autodoc_member_order = "bysource"
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
templates_path = ["_templates"]
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
source_suffix = ".rst"
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
master_doc = "index"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
|
@ -114,7 +116,7 @@ html_theme = "sphinx_rtd_theme"
|
|||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
html_static_path = ["_static"]
|
||||
|
||||
# Custom sidebar templates, must be a dictionary that maps document names
|
||||
# to template names.
|
||||
|
|
@ -130,7 +132,7 @@ html_static_path = ['_static']
|
|||
# -- Options for HTMLHelp output ---------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'OpenFlexureMicroscopeSoftwaredoc'
|
||||
htmlhelp_basename = "OpenFlexureMicroscopeSoftwaredoc"
|
||||
|
||||
|
||||
# -- Options for LaTeX output ------------------------------------------------
|
||||
|
|
@ -139,15 +141,12 @@ latex_elements = {
|
|||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
|
|
@ -157,8 +156,13 @@ latex_elements = {
|
|||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'OpenFlexureMicroscopeSoftware.tex', 'OpenFlexure Microscope Software Documentation',
|
||||
'Bath Open Instrumentation Group', 'manual'),
|
||||
(
|
||||
master_doc,
|
||||
"OpenFlexureMicroscopeSoftware.tex",
|
||||
"OpenFlexure Microscope Software Documentation",
|
||||
"Bath Open Instrumentation Group",
|
||||
"manual",
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -167,8 +171,13 @@ latex_documents = [
|
|||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'openflexuremicroscopesoftware', 'OpenFlexure Microscope Software Documentation',
|
||||
[author], 1)
|
||||
(
|
||||
master_doc,
|
||||
"openflexuremicroscopesoftware",
|
||||
"OpenFlexure Microscope Software Documentation",
|
||||
[author],
|
||||
1,
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -178,9 +187,15 @@ man_pages = [
|
|||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'OpenFlexureMicroscopeSoftware', 'OpenFlexure Microscope Software Documentation',
|
||||
author, 'OpenFlexureMicroscopeSoftware', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
(
|
||||
master_doc,
|
||||
"OpenFlexureMicroscopeSoftware",
|
||||
"OpenFlexure Microscope Software Documentation",
|
||||
author,
|
||||
"OpenFlexureMicroscopeSoftware",
|
||||
"One line description of project.",
|
||||
"Miscellaneous",
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -199,7 +214,7 @@ epub_title = project
|
|||
# epub_uid = ''
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files = ['search.html']
|
||||
epub_exclude_files = ["search.html"]
|
||||
|
||||
|
||||
# -- Extension configuration -------------------------------------------------
|
||||
|
|
@ -208,11 +223,11 @@ 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)
|
||||
}
|
||||
"openflexure_stage": ("https://openflexure-stage.readthedocs.io/en/latest/", None),
|
||||
"picamera": ("https://picamera.readthedocs.io/en/release-1.13/", None),
|
||||
}
|
||||
|
||||
# -- Options for todo extension ----------------------------------------------
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = True
|
||||
todo_include_todos = True
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ FORM_PATH = os.path.join(HERE, "forms.json")
|
|||
|
||||
### MICROSCOPE PLUGIN ###
|
||||
|
||||
|
||||
class MyPluginClass(MicroscopePlugin):
|
||||
"""
|
||||
A set of default plugins
|
||||
|
|
@ -20,13 +21,13 @@ class MyPluginClass(MicroscopePlugin):
|
|||
|
||||
global FORM_PATH
|
||||
|
||||
with open(FORM_PATH, 'r') as sc:
|
||||
with open(FORM_PATH, "r") as sc:
|
||||
api_form = json.load(sc)
|
||||
|
||||
api_views = {
|
||||
'/identify': IdentifyAPI,
|
||||
'/hello': HelloWorldAPI,
|
||||
'/timelapse': TimelapseAPI,
|
||||
"/identify": IdentifyAPI,
|
||||
"/hello": HelloWorldAPI,
|
||||
"/timelapse": TimelapseAPI,
|
||||
}
|
||||
|
||||
def identify(self):
|
||||
|
|
@ -34,8 +35,9 @@ class MyPluginClass(MicroscopePlugin):
|
|||
Demonstrate access to Microscope.camera, and Microscope.stage
|
||||
"""
|
||||
|
||||
response = "My parent camera is {}, and my parent stage is {}.".format(self.microscope.camera,
|
||||
self.microscope.stage)
|
||||
response = "My parent camera is {}, and my parent stage is {}.".format(
|
||||
self.microscope.camera, self.microscope.stage
|
||||
)
|
||||
return response
|
||||
|
||||
def hello_world(self):
|
||||
|
|
@ -58,33 +60,33 @@ class MyPluginClass(MicroscopePlugin):
|
|||
|
||||
# Create a data stream to capture to
|
||||
capture_data = self.microscope.camera.new_image(
|
||||
write_to_file=True,
|
||||
temporary=False)
|
||||
write_to_file=True, temporary=False
|
||||
)
|
||||
|
||||
# Capture a still image from the Pi camera, into the data stream
|
||||
self.microscope.camera.capture(
|
||||
capture_data,
|
||||
use_video_port=True)
|
||||
|
||||
self.microscope.camera.capture(capture_data, use_video_port=True)
|
||||
|
||||
# Append the capture data to our list
|
||||
capture_array.append(capture_data)
|
||||
|
||||
# Wait for 1 minute
|
||||
time.sleep(60)
|
||||
time.sleep(60)
|
||||
|
||||
|
||||
### API VIEWS ###
|
||||
|
||||
|
||||
class IdentifyAPI(MicroscopeViewPlugin):
|
||||
"""
|
||||
A simple example API plugin, attached through the main microscope plugin.
|
||||
"""
|
||||
|
||||
def get(self):
|
||||
"""
|
||||
Method to call when an HTTP GET request is made.
|
||||
"""
|
||||
# Call a method from our plugin, using the MicroscopeViewPlugin.plugin shortcut
|
||||
data = self.plugin.identify()
|
||||
data = self.plugin.identify()
|
||||
return Response(escape(data))
|
||||
|
||||
|
||||
|
|
@ -99,13 +101,11 @@ class HelloWorldAPI(MicroscopeViewPlugin):
|
|||
"""
|
||||
|
||||
# If the microscope does not already contain our plugin_string attribute
|
||||
if not hasattr(self.microscope, 'plugin_string'):
|
||||
if not hasattr(self.microscope, "plugin_string"):
|
||||
# Make a string, using the MicroscopeViewPlugin.plugin shortcut
|
||||
self.microscope.plugin_string = self.plugin.hello_world()
|
||||
|
||||
json_response = jsonify({
|
||||
'plugin_string': self.microscope.plugin_string
|
||||
})
|
||||
json_response = jsonify({"plugin_string": self.microscope.plugin_string})
|
||||
|
||||
return Response(json_response)
|
||||
|
||||
|
|
@ -118,18 +118,17 @@ class HelloWorldAPI(MicroscopeViewPlugin):
|
|||
payload = JsonResponse(request)
|
||||
|
||||
# Extract a value from the JSON key 'plugin_string', and convert to a string. If no value is given, default to empty.
|
||||
new_plugin_string = payload.param('plugin_string', default='', convert=str)
|
||||
new_plugin_string = payload.param("plugin_string", default="", convert=str)
|
||||
|
||||
if new_plugin_string: # If not None or empty
|
||||
# Set microscope attribute to the specified string
|
||||
self.microscope.plugin_string = new_plugin_string
|
||||
self.microscope.plugin_string = new_plugin_string
|
||||
|
||||
json_response = jsonify({
|
||||
'plugin_string': self.microscope.plugin_string
|
||||
})
|
||||
json_response = jsonify({"plugin_string": self.microscope.plugin_string})
|
||||
|
||||
return Response(json_response)
|
||||
|
||||
|
||||
class TimelapseAPI(MicroscopeViewPlugin):
|
||||
def post(self):
|
||||
|
||||
|
|
@ -137,10 +136,12 @@ class TimelapseAPI(MicroscopeViewPlugin):
|
|||
payload = JsonResponse(request)
|
||||
|
||||
# Extract the "n_images" parameter if it was passed. Otherwise, default to 10.
|
||||
n_images = payload.param('n_images', default=10, convert=int)
|
||||
n_images = payload.param("n_images", default=10, convert=int)
|
||||
|
||||
# Attach the long-running method as a microscope task
|
||||
self.timelapse_task = self.microscope.task.start(self.plugin.timelapse, n_images)
|
||||
self.timelapse_task = self.microscope.task.start(
|
||||
self.plugin.timelapse, n_images
|
||||
)
|
||||
|
||||
# Return the state of the task (will show ID, start time, and status before the task has finished)
|
||||
return jsonify(self.timelapse_task.state), 202
|
||||
return jsonify(self.timelapse_task.state), 202
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue