Coverage for src/models/jobs.py: 100.00%

54 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-10-18 15:02 +0000

1#!/usr/bin/env python3 

2 

3# Standard libraries 

4from typing import Dict, Optional 

5 

6# Components 

7from .images import Entrypoint, Image 

8from .options import Options 

9from .scripts import Scripts 

10from .services import Services 

11from .settings import AllowFailure, Retry, Trigger, When 

12from .stages import Stage 

13from .tags import Tags 

14from .variables import Variables 

15 

16# JobName type 

17JobName = str 

18 

19# JobData class, pylint: disable=too-few-public-methods,too-many-instance-attributes 

20class JobData: 

21 

22 # Members 

23 name: JobName 

24 stage: Optional[Stage] 

25 image: Optional[Image] 

26 entrypoint: Entrypoint 

27 variables: Variables 

28 before_script: Optional[Scripts] 

29 script: Optional[Scripts] 

30 after_script: Optional[Scripts] 

31 retry: Optional[Retry] 

32 when: Optional[When] 

33 allow_failure: Optional[AllowFailure] 

34 services: Optional[Services] 

35 tags: Optional[Tags] 

36 trigger: Optional[Trigger] 

37 options: Options 

38 

39 # Constructor 

40 def __init__(self, name: JobName) -> None: 

41 self.name = name 

42 self.stage = None 

43 self.image = None 

44 self.entrypoint = None 

45 self.variables = {} 

46 self.before_script = None 

47 self.script = None 

48 self.after_script = None 

49 self.retry = None 

50 self.when = None 

51 self.allow_failure = None 

52 self.services = None 

53 self.tags = None 

54 self.trigger = None 

55 self.options = Options() 

56 

57# Job class, pylint: disable=too-few-public-methods,too-many-instance-attributes 

58class Job: 

59 

60 # Members 

61 name: JobName 

62 stage: Stage 

63 image: Image 

64 entrypoint: Entrypoint 

65 variables: Variables 

66 before_script: Scripts 

67 script: Scripts 

68 after_script: Scripts 

69 retry: Retry 

70 when: When 

71 allow_failure: AllowFailure 

72 services: Services 

73 tags: Optional[Tags] 

74 trigger: Optional[Trigger] 

75 options: Options 

76 

77 # Constructor 

78 def __init__(self, data: JobData) -> None: 

79 self.name = data.name 

80 assert data.stage is not None 

81 self.stage = data.stage 

82 assert data.image is not None 

83 self.image = data.image 

84 self.entrypoint = data.entrypoint 

85 self.variables = data.variables 

86 assert data.before_script is not None 

87 self.before_script = data.before_script 

88 assert data.script is not None 

89 self.script = data.script 

90 assert data.after_script is not None 

91 self.after_script = data.after_script 

92 assert data.retry is not None 

93 self.retry = data.retry 

94 assert data.when is not None 

95 self.when = data.when 

96 assert data.allow_failure is not None 

97 self.allow_failure = data.allow_failure 

98 assert data.services is not None 

99 self.services = data.services 

100 self.tags = data.tags 

101 self.trigger = data.trigger 

102 self.options = data.options 

103 

104# Jobs type 

105Jobs = Dict[str, Job]