API adapter info handler module for odin-control.
This module implements the API adapter info handler. It allows clients to obtain information about
loaded API adapters through HTTP GET requests, returning the adapter information as JSON.
Tim Nicholls, STFC Detector Systems Software Group.
ApiAdapterInfoHandler
Bases: CorsRequestHandler
API adapter info handler to return information about loaded adapters.
This request hander implements the GET verb to allow a call to the appropriate URI to return
a JSON-encoded dictionary of information about the adapters loaded by the server.
Source code in src/odin_control/http/handlers/api_adapter_info.py
| class ApiAdapterInfoHandler(CorsRequestHandler):
"""API adapter info handler to return information about loaded adapters.
This request hander implements the GET verb to allow a call to the appropriate URI to return
a JSON-encoded dictionary of information about the adapters loaded by the server.
"""
def get(self, version=None):
"""Handle API adapter info GET requests.
This handler returns a JSON-encoded dictionary of information about adapters loaded into the
server.
:param version: API version (or None if versioning not enabled)
"""
# Validate the API version explicity - can't use the validate_api_request decorator here
if version != self.route.api_version:
self.set_status(400)
self.write("API version {} is not supported".format(version))
return
# Validate the accept type requested is appropriate
accept_types = self.request.headers.get('Accept', 'application/json').split(',')
if '*/*' not in accept_types and 'application/json' not in accept_types:
self.set_status(406)
self.write('Request content types not supported')
return
# Build a dictionary of loaded adapter information
adapter_info = {
adapter_name: {
'version': getattr(adapter, 'version', 'unknown'),
"module": f"{adapter.__class__.__module__}.{adapter.__class__.__name__}",
} for adapter_name, adapter in self.route.adapters.items()
}
# Return the loaded adapter information
self.write({'adapters': adapter_info})
|
get(version=None)
Handle API adapter info GET requests.
This handler returns a JSON-encoded dictionary of information about adapters loaded into the
server.
Parameters:
| Name |
Type |
Description |
Default |
version
|
|
API version (or None if versioning not enabled)
|
None
|
Source code in src/odin_control/http/handlers/api_adapter_info.py
| def get(self, version=None):
"""Handle API adapter info GET requests.
This handler returns a JSON-encoded dictionary of information about adapters loaded into the
server.
:param version: API version (or None if versioning not enabled)
"""
# Validate the API version explicity - can't use the validate_api_request decorator here
if version != self.route.api_version:
self.set_status(400)
self.write("API version {} is not supported".format(version))
return
# Validate the accept type requested is appropriate
accept_types = self.request.headers.get('Accept', 'application/json').split(',')
if '*/*' not in accept_types and 'application/json' not in accept_types:
self.set_status(406)
self.write('Request content types not supported')
return
# Build a dictionary of loaded adapter information
adapter_info = {
adapter_name: {
'version': getattr(adapter, 'version', 'unknown'),
"module": f"{adapter.__class__.__module__}.{adapter.__class__.__name__}",
} for adapter_name, adapter in self.route.adapters.items()
}
# Return the loaded adapter information
self.write({'adapters': adapter_info})
|