Skip to content

Commit 5af84b9

Browse files
committed
fix config strings -> enums in ntfy config
1 parent d4012e6 commit 5af84b9

File tree

2 files changed

+32
-29
lines changed

2 files changed

+32
-29
lines changed

config.py

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -99,44 +99,28 @@ def config_from_file(
9999
)
100100
if not isinstance(cfg.notifier.debounce_threshold_s, (int, float)):
101101
raise ConfigValidationError("notifier.debounce_threshold_s must be a number")
102-
cfg.notifier.default_priority = ntfy_cfg_dict.get(
102+
default_priority_str = ntfy_cfg_dict.get(
103103
"default_priority", cfg.notifier.default_priority
104104
)
105-
if not isinstance(cfg.notifier.default_priority, str):
106-
raise ConfigValidationError("notifier.default_priority must be a string")
107-
if cfg.notifier.default_priority not in NtfyPriority.all_values():
108-
raise ConfigValidationError(
109-
"invalid notifier.default_priority "
110-
f"'{cfg.notifier.default_priority}' "
111-
"(see https://docs.ntfy.sh/publish/#message-priority)"
112-
)
105+
if default_priority_str:
106+
cfg.notifier.default_priority = NtfyPriority.from_str(default_priority_str)
113107
cfg.notifier.priorities = ntfy_cfg_dict.get("priorities", cfg.notifier.priorities)
114108
for k, v in cfg.notifier.priorities.items():
115109
if not isinstance(k, str) or not isinstance(v, str):
116110
raise ConfigValidationError(
117111
"notifier.priorities must be a dict of str -> str"
118112
)
119-
if v not in NtfyPriority.all_values():
120-
raise ConfigValidationError(
121-
"invalid notifier.priorities value "
122-
f"'{v}' for key '{k}' "
123-
"(see https://docs.ntfy.sh/publish/#message-priority)"
124-
)
113+
cfg.notifier.priorities[k] = NtfyPriority.from_str(v)
125114
cfg.notifier.req_timeout_s = ntfy_cfg_dict.get(
126115
"req_timeout_s", cfg.notifier.req_timeout_s
127116
)
128117
if not isinstance(cfg.notifier.req_timeout_s, (int, float)):
129118
raise ConfigValidationError("notifier.req_timeout_s must be a number")
130-
cfg.notifier.image_method = ntfy_cfg_dict.get(
119+
image_method_str = ntfy_cfg_dict.get(
131120
"image_method", cfg.notifier.image_method
132121
)
133-
if cfg.notifier.image_method is not None:
134-
if not isinstance(cfg.notifier.image_method, str):
135-
raise ConfigValidationError("notifier.image_method must be a string")
136-
if cfg.notifier.image_method not in ImageAttachMethod.all_values():
137-
raise ConfigValidationError(
138-
f"notifier.image_method must be one of: {ImageAttachMethod.all_values()}"
139-
)
122+
if image_method_str:
123+
cfg.notifier.image_method = ImageAttachMethod.from_str(image_method_str)
140124
cfg.notifier.images_cc_dir = ntfy_cfg_dict.get(
141125
"images_cc_dir", cfg.notifier.images_cc_dir
142126
)

ntfy.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ class ImageAttachMethod(Enum):
2020
CLICK = "click"
2121

2222
@staticmethod
23-
def all_values() -> set:
24-
return {e.value for e in ImageAttachMethod}
23+
def from_str(method: str) -> "ImageAttachMethod":
24+
return {
25+
ImageAttachMethod.ATTACH.value.lower(): ImageAttachMethod.ATTACH,
26+
ImageAttachMethod.CLICK.value.lower(): ImageAttachMethod.CLICK,
27+
}[method.lower()]
2528

2629

2730
class NtfyPriority(Enum):
@@ -41,9 +44,25 @@ class NtfyPriority(Enum):
4144
def all_values() -> set:
4245
return {e.value for e in NtfyPriority}
4346

47+
@staticmethod
48+
def from_str(pri: str) -> "NtfyPriority":
49+
return {
50+
NtfyPriority.N_1.value.lower(): NtfyPriority.N_1,
51+
NtfyPriority.MIN.value.lower(): NtfyPriority.MIN,
52+
NtfyPriority.N_2.value.lower(): NtfyPriority.N_2,
53+
NtfyPriority.LOW.value.lower(): NtfyPriority.LOW,
54+
NtfyPriority.N_3.value.lower(): NtfyPriority.N_3,
55+
NtfyPriority.DEFAULT.value.lower(): NtfyPriority.DEFAULT,
56+
NtfyPriority.N_4.value.lower(): NtfyPriority.N_4,
57+
NtfyPriority.HIGH.value.lower(): NtfyPriority.HIGH,
58+
NtfyPriority.N_5.value.lower(): NtfyPriority.N_5,
59+
NtfyPriority.MAX.value.lower(): NtfyPriority.MAX,
60+
NtfyPriority.URGENT.value.lower(): NtfyPriority.URGENT,
61+
}[pri.lower()]
62+
4463

45-
NOTIF_PRIORITY_UNMUTED: Final = NtfyPriority.DEFAULT
46-
NOTIF_PRIORITY_MUTED: Final = NtfyPriority.MIN
64+
NOTIF_PRIORITY_UNMUTED: Final = NtfyPriority.DEFAULT.value
65+
NOTIF_PRIORITY_MUTED: Final = NtfyPriority.MIN.value
4766

4867

4968
@dataclasses.dataclass(frozen=True)
@@ -73,7 +92,7 @@ class NtfyConfig:
7392
token: Optional[str] = None
7493
debounce_threshold_s: float = 60.0
7594
default_priority: NtfyPriority = NtfyPriority.DEFAULT
76-
priorities: Dict[str, str] = dataclasses.field(default_factory=lambda: {})
95+
priorities: Dict[str, NtfyPriority] = dataclasses.field(default_factory=lambda: {})
7796
req_timeout_s: float = 10.0
7897
image_method: Optional[ImageAttachMethod] = None
7998
images_cc_dir: Optional[str] = None
@@ -193,7 +212,7 @@ def _prep_ntfy_headers(self, n: Notification) -> Dict[str, str]:
193212
headers["Priority"] = self._config.priorities.get(
194213
n.classification,
195214
self._config.default_priority,
196-
)
215+
).value
197216
elif isinstance(n, FeedbackNotification):
198217
if n.type == FeedbackType.MUTED:
199218
headers["Priority"] = NOTIF_PRIORITY_MUTED

0 commit comments

Comments
 (0)