コード例 #1
0
    def get_all(self) -> List[Task]:
        """Obtain the list of tasks."""

        response = requests.get(self.base_url + '/tasks')
        if response.status_code == HTTPStatus.OK:
            return Task.Schema().load(response.json(), many=True)
        else:
            raise StatusError(response.json()['error'])
コード例 #2
0
def add(service, device, name, runtime, deadline, period, file):
    """Add a new task."""

    try:
        task = Task.Schema().load({
            'name': name,
            'runtime': runtime,
            'deadline': deadline,
            'period': period,
        })
        task.devices = list(d for d in device)
        new_id = service.create(task, file)
        click.echo(f'Added new task with ID {new_id}')
    except Exception as e:
        click.echo('Unable to add new task:\n' + str(e))
コード例 #3
0
def update(service, file, key, values):
    """
    Update a task's values.

    The task is identified by a given KEY, which can be either the task's ID or
    its name.
    """

    try:
        Task.Schema().load(values)
        service.update(key, values, file)
        click.echo('The task\'s values were updated correctly.')
    except ValidationError as e:
        click.echo('Unable to update the task\'s values:\n' + str(e.messages))
    except Exception as e:
        click.echo('Unable to update the task\'s values:\n' + str(e))
コード例 #4
0
    def create(self, task: Task, file: io.BufferedReader) -> str:
        """Create a new task."""

        response = requests.post(self.base_url + '/tasks',
                                 files={
                                     'file':
                                     (os.path.basename(file.name), file),
                                     'specs':
                                     (None,
                                      Task.Schema(exclude=['_id']).dumps(task),
                                      'application/json')
                                 })
        if response.status_code == HTTPStatus.OK:
            return response.json()['_id']
        else:
            raise StatusError(response.json()['error'])
コード例 #5
0
    def get_one(self, task_key: str) -> Task:
        """
        Obtain detailed information about a task.

        The given task key can be either its ID or name.
        """

        if bson.ObjectId.is_valid(task_key):
            uri = '/tasks/' + task_key
        else:
            uri = '/tasks?name=' + task_key
        response = requests.get(self.base_url + uri)
        if response.status_code == HTTPStatus.OK:
            return Task.Schema().load(response.json())
        else:
            raise StatusError(response.json()['error'])
コード例 #6
0
class MockService():

    test_tasks = Task.Schema().load([{
        '_id': ObjectId(),
        'name': 'Test1',
        'runtime': 1000,
        'deadline': 1000,
        'period': 1000
    }, {
        '_id': ObjectId(),
        'name': 'Test2',
        'runtime': 1000,
        'deadline': 1000,
        'period': 1000
    }],
                                    many=True)

    def __init__(self, server_url: str, server_port: str):
        pass

    def get_all(self) -> List[Task]:
        return self.test_tasks

    def get_one(self, task_key: str) -> Task:
        for task in self.test_tasks:
            if str(task._id) == task_key:
                return task
        raise StatusError('Task not found.')

    def create(self, task: Task, file: io.BufferedReader) -> str:
        for test_task in self.test_tasks:
            if test_task.name == task.name:
                raise StatusError('Name already present.')
        return ObjectId()

    def update(self, task_key: str, new_values: dict,
               new_file: io.BufferedReader) -> Task:
        for task in self.test_tasks:
            if str(task._id) == task_key:
                return Task.Schema().load(new_values)
        raise StatusError('Task not found.')

    def delete(self, task_key: str) -> Task:
        for task in self.test_tasks:
            if str(task._id) == task_key:
                return task
        raise StatusError('Task not found.')
コード例 #7
0
    def delete(self, task_key: str) -> Task:
        """
        Delete a task.

        The given task key can be either its ID or name.
        """

        if not bson.ObjectId.is_valid(task_key):
            response = requests.get(self.base_url + '/tasks?name=' + task_key)
            if response.status_code != HTTPStatus.OK:
                raise StatusError(response.json()['error'])
            task_key = response.json()['_id']

        response = requests.delete(self.base_url + '/tasks/' + task_key)
        if response.status_code == HTTPStatus.OK:
            return Task.Schema().load(response.json())
        else:
            raise StatusError(response.json()['error'])
コード例 #8
0
    def update(self, task_key: str, new_values: dict,
               new_file: io.BufferedReader) -> Task:
        """
        Change the values of a task.

        The given task key can be either its ID or name.
        """

        if not bson.ObjectId.is_valid(task_key):
            response = requests.get(self.base_url + '/tasks?name=' + task_key)
            if response.status_code != HTTPStatus.OK:
                raise StatusError(response.json()['error'])
            task_key = response.json()['_id']

        files = {'specs': (None, json.dumps(new_values), 'application/json')}
        if new_file:
            files['file'] = (os.path.basename(new_file.name), new_file)

        response = requests.put(self.base_url + '/tasks/' + task_key,
                                files=files)
        if response.status_code == HTTPStatus.OK:
            return Task.Schema().load(response.json())
        else:
            raise StatusError(response.json()['error'])
コード例 #9
0
class MockService():

    test_nodes = Node.Schema().load([
        {
            '_id': ObjectId(),
            'name': 'Test1',
            'ip': '1.1.1.1',
            'ssh_user': '******',
            'tasks': [
                {
                    '_id': ObjectId(),
                    'name': 'Test',
                    'runtime': 1000,
                    'deadline': 1000,
                    'period': 1000
                }
            ],
            'devices': [
                '/dev/test1',
                '/dev/test2'
            ]
        },
        {
            '_id': ObjectId(),
            'name': 'Test2',
            'ip': '2.2.2.2',
            'ssh_user': '******',
        }
    ], many=True)
    test_tasks = Task.Schema().load([
        {
            '_id': ObjectId(),
            'name': 'Test1',
            'runtime': 1000,
            'deadline': 1000,
            'period': 1000
        },
        {
            '_id': ObjectId(),
            'name': 'Test2',
            'runtime': 1000,
            'deadline': 1000,
            'period': 1000
        }
    ], many=True)

    def __init__(self, server_url: str, server_port: str):
        pass

    def deploy_task(self, node_key: str, task_key: str):
        for node in self.test_nodes:
            if str(node._id) == node_key:
                for task in self.test_tasks:
                    if str(task._id) == task_key:
                        return
                raise StatusError('Task not found.')
        raise StatusError('Node not found.')

    def remove_task(self, node_key: str, task_key: str):
        for node in self.test_nodes:
            if str(node._id) == node_key:
                for task in self.test_tasks:
                    if str(task._id) == task_key:
                        return
                raise StatusError('Task not found.')
        raise StatusError('Node not found.')
コード例 #10
0
 def update(self, task_key: str, new_values: dict,
            new_file: io.BufferedReader) -> Task:
     for task in self.test_tasks:
         if str(task._id) == task_key:
             return Task.Schema().load(new_values)
     raise StatusError('Task not found.')