Coverage for melissa/launcher/event.py: 100%
47 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-09-22 10:36 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-09-22 10:36 +0000
1#!/usr/bin/python3
3# Copyright (c) 2021-2022, Institut National de Recherche en Informatique et en Automatique (Inria)
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions are met:
8#
9# * Redistributions of source code must retain the above copyright notice, this
10# list of conditions and the following disclaimer.
11#
12# * Redistributions in binary form must reproduce the above copyright notice,
13# this list of conditions and the following disclaimer in the documentation
14# and/or other materials provided with the distribution.
15#
16# * Neither the name of the copyright holder nor the names of its
17# contributors may be used to endorse or promote products derived from
18# this software without specific prior written permission.
19#
20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31from typing import Generic, List, TypeVar, Optional
33from melissa.utility.networking import ConnectionId
34from melissa.utility.process import Process
36from . import action
37from melissa.utility.message import Message
39JobT = TypeVar("JobT")
42class Event:
43 pass
46class ActionFailure(Event):
47 def __init__(self, ac: action.Action, error: Exception):
48 self.action = ac
49 self.error = error
52class ConnectionShutdown(Event):
53 def __init__(self, cid: Optional[ConnectionId]) -> None:
54 self.cid = cid
57class HttpRequest_(Event):
58 pass
61class JobCancellation(Generic[JobT], Event):
62 def __init__(self, jobs: List[JobT]) -> None:
63 self.jobs = jobs
66class JobSubmission(Generic[JobT], Event):
67 def __init__(self, sub: action.Action, job: JobT) -> None:
68 self.submission = sub
69 self.job = job
72class JobUpdate(Generic[JobT], Event):
73 def __init__(self, jobs: List[JobT]) -> None:
74 self.jobs = jobs
77class MessageReception(Event):
78 def __init__(self, cid: ConnectionId, message: Message) -> None:
79 self.cid = cid
80 self.message = message
83class NewConnection(Event):
84 def __init__(self, cid: ConnectionId) -> None:
85 self.cid = cid
88# this event is not supposed to be consumed by the state machine
89class ProcessCompletion_(Event):
90 def __init__(self, ac: action.Action, uid: int, process: "Process[str]"):
91 assert process.poll() is not None
92 self.action = ac
93 self.id = uid
94 self.process = process
97class Signal(Event):
98 def __init__(self, signo: int) -> None:
99 self.signo = signo
102class Timeout(Event):
103 pass
106# this event is used to handle postponed job
107class JobPostponing(Event):
108 pass