Skip to content
templates.py 4.37 KiB
Newer Older
Davide Ricci's avatar
Davide Ricci committed
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''REST API to launch observation blocks'''


# Third-party modules
from flask_restx import Namespace, Resource, fields
Davide Ricci's avatar
Davide Ricci committed

from api.sequencer_instance import seq
Davide Ricci's avatar
Davide Ricci committed
from utils.data_access_object import ObservationBlockObject as DAO
Davide Ricci's avatar
Davide Ricci committed

############################
# REST API
############################

api = Namespace('sequencer', description='Sequencer')

list_of_ob = api.model('list', {
    'id': fields.Integer(readonly=True, description='The OB unique identifier'),
    'name': fields.String(required=True, description='The OB name')
})

Davide Ricci's avatar
Davide Ricci committed
@api.route("/")
class BobList(Resource):
    """Show and modify a list of OBs to be sequenced"""
    @api.doc('list_ob')
    @api.marshal_list_with(list_of_ob)
Davide Ricci's avatar
Davide Ricci committed
    def get(self):
        """Show all OB in the sequence"""
Davide Ricci's avatar
Davide Ricci committed
        return dao.todos

    @api.doc('add_ob')
    @api.expect(list_of_ob)
    @api.marshal_with(list_of_ob, code=201)
    def post(self):
        """Add a new OB to the sequence"""
        data = api.payload

vertighel's avatar
vertighel committed

@api.route('/<int:id>')
@api.response(404, 'OB not found')
@api.param('id', 'The OB identifier')
class Bob(Resource):
    '''Let delete a specific OB'''

    @api.doc('delete_ob')
    @api.response(204, 'OB deleted')
    def delete(self, id):
        '''Delete an OB given its identifier'''
        dao.delete(id)
        return '', 204

vertighel's avatar
vertighel committed

@api.route("/run")
class BobRun(Resource):
    """Manage the sequencer"""
Davide Ricci's avatar
Davide Ricci committed

    def __init__(self, *args, **kwargs):
        '''Constructor.'''
        super().__init__(self)
        self.seq = seq
Davide Ricci's avatar
Davide Ricci committed

        """Show the sequencer status"""
Davide Ricci's avatar
Davide Ricci committed
            res = {
                "response": {
                    "name": self.seq.tpl.name,
                    "paused": self.seq.tpl.paused,
                    "quitting": self.seq.tpl.aborted,
                    "output": self.seq.tpl.output,
                    "error": self.seq.tpl.error,
                    "filename": self.seq.tpl.filename,
                },
                "error": self.seq.error,
            }
            
Davide Ricci's avatar
Davide Ricci committed
        
                "response": {
                    "name": None,
                    "paused": None,
                    "quitting": None,
                    "output": None,
                    "error":  None,
                    "filename": None,
                },
                "error": "No tpl object",
Davide Ricci's avatar
Davide Ricci committed
            
        """Pause or resume the template execution. Inverting the logic with
        respect to sequencer class:
        PUT /sequencer/run true: resume,
        PUT /sequencer/run false: pause
        """
Davide Ricci's avatar
Davide Ricci committed

        self.seq.resume() if in_execution else self.seq.pause()
            "response": self.seq.tpl.paused,
            "error": self.seq.error,
                "error": ["No payload. either ob filename or json with template+params"],
Davide Ricci's avatar
Davide Ricci committed
            }
                self.seq.load_file(ob)
                self.seq.execute()
                    "response": self.seq.ob,
                    "error": self.seq.error,
                }
            except TypeError as e:
                #print(e)
                try:
                    ob = payload
                    print(ob)
                        "response": self.seq.ob,
                        "error": self.seq.error,
                    }
                except Exception as f:
                    print(f)
                    res = {
                        "response": None,
                        "error": ["Maybe not a json?"],
                    }

Davide Ricci's avatar
Davide Ricci committed
        if getattr(self.seq, "ob", False) and self.seq.ob:
                "response": self.seq.ob if self.seq.ob else None,
                "error": self.seq.error,