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
« 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
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'}
18@dataclasses.dataclass(slots=True, frozen=True)
19class MaintscriptSnippet:
20 definition_source: str
21 snippet: str
22 snippet_order: Optional[Literal['service']] = None
25class DpkgMaintscriptHelperCommand:
27 __slots__ = ('cmdline', 'definition_source')
29 def __init__(self, cmdline: Sequence[str], definition_source: str):
30 self.cmdline = cmdline
31 self.definition_source = definition_source
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 )
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)
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 ):
69 cmdline = ['mv_conffile', old_conffile, new_confile]
70 return cls._finish_cmd(definition_source, cmdline, prior_version, owning_package)
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)
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)