Skip to content
focuser.py 3.06 KiB
Newer Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''REST API for Focuser related operations'''

# Third-party modules
from flask_restx import Namespace, Resource, fields
from flask import request

# Custom modules
# import devices

# api = Namespace('switch', description='Switch related operations')

# @api.route("/focuser")
class Focuser(Resource):
    '''Secondary mirror position.'''

    def __init__(self, *args, **kwargs):
        '''Constructor.'''
        super().__init__(self, *args, **kwargs)
        self.dev = kwargs["dev"]

    # @api.response(200, 'Success', fields.Float())
    def get(self):
        '''Retrieve the secondary mirror position.'''
        res = {
            "response": devices.foc.position,
            "error": devices.foc.error,
        }
        return res


# @api.route("/focuser/movement")
class FocuserMovement(Resource):
    '''Manage the secondary mirror position.'''

    def __init__(self, *args, **kwargs):
        '''Constructor.'''
        super().__init__(self, *args, **kwargs)
        self.dev = kwargs["dev"]

    # @api.response(200, 'Success', fields.Boolean())
    def get(self):
        '''Check if the secondary mirror is moving.'''
        res = {
            "response": devices.foc.is_moving,
            "error": devices.foc.error,
        }
        return res

    # @api.response(200, 'Success', fields.Float())
    def put(self):
        '''Update the secondary mirror position.'''
        target = api.payload
        devices.foc.position = target
        res = {
            "response": devices.foc.position,
            "error": devices.foc.error,
        }
        return res

    # def delete(self):
    #     '''Stop the movement.'''
    #     return
Davide Ricci's avatar
Davide Ricci committed

# @api.route("/connection")
class Connection(Resource):
    '''Manage the connection to ASCOM.'''

    def __init__(self, *args, **kwargs):
        '''Constructor.'''
        super().__init__(self, *args, **kwargs)
        self.dev = kwargs["dev"]

    def get(self):
        '''Check if the focuser is connected.'''

        res = {
            "response": self.dev.connection,
            "error": self.dev.error,
        }
        return res

    # @api.response(200, 'Success', fields.Boolean())
    def put(self):
        '''Connect or disconnect the focuser.'''

        connection = request.json # api.payload
        self.dev.connection = connection
        res = {
            "response": self.dev.connection,
            "error": self.dev.error,
        }
        return res
    
# @api.route("/status")
class Status(Resource):
    '''General focuser status.'''

    def __init__(self, *args, **kwargs):
        '''Constructor.'''
        super().__init__(self, *args, **kwargs)
        self.dev = kwargs["dev"]

    def get(self):
        '''Retrieve the status of each compoent.'''

        connection = Connection(dev=self.dev).get()
        if connection["response"]:
            res = {
                "focuser": Focuser().get(),
                "focuser-movement": FocuserMovement().get(),
            }
        else:
            res = {
                "connection": connection,
            }