Coverage for debputy/maintscript_snippet.py: 0%

39 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-01-22 14:29 +0100

1import dataclasses 

2from typing import Sequence, Optional, List, Literal 

3 

4STD_CONTROL_SCRIPTS = frozenset({ 

5 'preinst', 

6 'prerm', 

7 'postinst', 

8 'postrm', 

9}) 

10UDEB_CONTROL_SCRIPTS = frozenset({ 

11 'postinst', 

12 'menutest', 

13 'isinstallable', 

14}) 

15ALL_CONTROL_SCRIPTS = STD_CONTROL_SCRIPTS | UDEB_CONTROL_SCRIPTS | {'config'} 

16 

17 

18@dataclasses.dataclass(slots=True, frozen=True) 

19class MaintscriptSnippet: 

20 definition_source: str 

21 snippet: str 

22 snippet_order: Optional[Literal['service']] = None 

23 

24 

25class DpkgMaintscriptHelperCommand: 

26 

27 __slots__ = ('cmdline', 'definition_source') 

28 

29 def __init__(self, cmdline: Sequence[str], definition_source: str): 

30 self.cmdline = cmdline 

31 self.definition_source = definition_source 

32 

33 @classmethod 

34 def _finish_cmd(cls, 

35 definition_source: str, 

36 cmdline: List[str], 

37 prior_version: Optional[str], 

38 owning_package: Optional[str], 

39 ): 

40 if prior_version is not None: 

41 cmdline.append(prior_version) 

42 if owning_package is not None: 

43 assert prior_version is not None 

44 cmdline.append(owning_package) 

45 return cls( 

46 tuple(cmdline), 

47 definition_source, 

48 ) 

49 

50 @classmethod 

51 def rm_conffile(cls, 

52 definition_source: str, 

53 conffile: str, 

54 prior_version: Optional[str] = None, 

55 owning_package: Optional[str] = None, 

56 ): 

57 cmdline = ['rm_conffile', conffile] 

58 return cls._finish_cmd(definition_source, cmdline, prior_version, owning_package) 

59 

60 @classmethod 

61 def mv_conffile(cls, 

62 definition_source: str, 

63 old_conffile: str, 

64 new_confile: str, 

65 prior_version: Optional[str] = None, 

66 owning_package: Optional[str] = None, 

67 ): 

68 

69 cmdline = ['mv_conffile', old_conffile, new_confile] 

70 return cls._finish_cmd(definition_source, cmdline, prior_version, owning_package) 

71 

72 @classmethod 

73 def symlink_to_dir(cls, 

74 definition_source: str, 

75 pathname: str, 

76 old_target: str, 

77 prior_version: Optional[str] = None, 

78 owning_package: Optional[str] = None, 

79 ): 

80 cmdline = ['symlink_to_dir', pathname, old_target] 

81 return cls._finish_cmd(definition_source, cmdline, prior_version, owning_package) 

82 

83 @classmethod 

84 def dir_to_symlink(cls, 

85 definition_source: str, 

86 pathname: str, 

87 new_target: str, 

88 prior_version: Optional[str] = None, 

89 owning_package: Optional[str] = None, 

90 ): 

91 cmdline = ['dir_to_symlink', pathname, new_target] 

92 return cls._finish_cmd(definition_source, cmdline, prior_version, owning_package)