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

1#!/usr/bin/python3 

2 

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. 

30 

31from typing import Generic, List, TypeVar, Optional 

32 

33from melissa.utility.networking import ConnectionId 

34from melissa.utility.process import Process 

35 

36from . import action 

37from melissa.utility.message import Message 

38 

39JobT = TypeVar("JobT") 

40 

41 

42class Event: 

43 pass 

44 

45 

46class ActionFailure(Event): 

47 def __init__(self, ac: action.Action, error: Exception): 

48 self.action = ac 

49 self.error = error 

50 

51 

52class ConnectionShutdown(Event): 

53 def __init__(self, cid: Optional[ConnectionId]) -> None: 

54 self.cid = cid 

55 

56 

57class HttpRequest_(Event): 

58 pass 

59 

60 

61class JobCancellation(Generic[JobT], Event): 

62 def __init__(self, jobs: List[JobT]) -> None: 

63 self.jobs = jobs 

64 

65 

66class JobSubmission(Generic[JobT], Event): 

67 def __init__(self, sub: action.Action, job: JobT) -> None: 

68 self.submission = sub 

69 self.job = job 

70 

71 

72class JobUpdate(Generic[JobT], Event): 

73 def __init__(self, jobs: List[JobT]) -> None: 

74 self.jobs = jobs 

75 

76 

77class MessageReception(Event): 

78 def __init__(self, cid: ConnectionId, message: Message) -> None: 

79 self.cid = cid 

80 self.message = message 

81 

82 

83class NewConnection(Event): 

84 def __init__(self, cid: ConnectionId) -> None: 

85 self.cid = cid 

86 

87 

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 

95 

96 

97class Signal(Event): 

98 def __init__(self, signo: int) -> None: 

99 self.signo = signo 

100 

101 

102class Timeout(Event): 

103 pass 

104 

105 

106# this event is used to handle postponed job 

107class JobPostponing(Event): 

108 pass