aboutsummaryrefslogtreecommitdiffstats
path: root/slack/config.py
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2023-01-14 06:27:50 +0100
committerTrygve Aaberge <trygveaa@gmail.com>2024-02-18 11:32:53 +0100
commiteed3b0a919e3790c4383548e3d30c83070465e7d (patch)
tree9fa8e3dda5a25fd903a53523e9dbbaa3809a4f50 /slack/config.py
parent01583ccd6e4aa1755ac2ab4151a20537cfc0c8dc (diff)
downloadwee-slack-eed3b0a919e3790c4383548e3d30c83070465e7d.tar.gz
Split weechat and slack config
Diffstat (limited to 'slack/config.py')
-rw-r--r--slack/config.py153
1 files changed, 8 insertions, 145 deletions
diff --git a/slack/config.py b/slack/config.py
index 6150ff7..b2e2c07 100644
--- a/slack/config.py
+++ b/slack/config.py
@@ -1,7 +1,6 @@
from __future__ import annotations
-from dataclasses import dataclass
-from typing import Generic, TypeVar, Union, cast
+from typing import Union
import weechat
@@ -9,149 +8,13 @@ from slack.api import SlackWorkspace
from slack.log import print_error
from slack.shared import shared
from slack.util import get_callback_name
-
-
-class WeeChatColor(str):
- pass
-
-
-@dataclass
-class WeeChatConfig:
- name: str
-
- def __post_init__(self):
- self.pointer = weechat.config_new(self.name, "", "")
-
-
-@dataclass
-class WeeChatSection:
- weechat_config: WeeChatConfig
- name: str
- user_can_add_options: bool = False
- user_can_delete_options: bool = False
- callback_read: str = ""
- callback_write: str = ""
-
- def __post_init__(self):
- self.pointer = weechat.config_new_section(
- self.weechat_config.pointer,
- self.name,
- self.user_can_add_options,
- self.user_can_delete_options,
- self.callback_read,
- "",
- self.callback_write,
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- )
-
-
-WeeChatOptionType = TypeVar("WeeChatOptionType", bound=Union[int, str])
-
-
-@dataclass
-class WeeChatOption(Generic[WeeChatOptionType]):
- section: WeeChatSection
- name: str
- description: str
- default_value: WeeChatOptionType
- min_value: Union[int, None] = None
- max_value: Union[int, None] = None
- string_values: Union[str, None] = None
- parent_option: Union[WeeChatOption[WeeChatOptionType], None] = None
-
- def __post_init__(self):
- self._pointer = self._create_weechat_option()
-
- @property
- def value(self) -> WeeChatOptionType:
- if weechat.config_option_is_null(self._pointer):
- if self.parent_option:
- return self.parent_option.value
- return self.default_value
-
- if isinstance(self.default_value, bool):
- return cast(WeeChatOptionType, weechat.config_boolean(self._pointer) == 1)
- if isinstance(self.default_value, int):
- return cast(WeeChatOptionType, weechat.config_integer(self._pointer))
- if isinstance(self.default_value, WeeChatColor):
- color = weechat.config_color(self._pointer)
- return cast(WeeChatOptionType, WeeChatColor(color))
- return cast(WeeChatOptionType, weechat.config_string(self._pointer))
-
- @value.setter
- def value(self, value: WeeChatOptionType):
- rc = self.value_set_as_str(str(value))
- if rc == weechat.WEECHAT_CONFIG_OPTION_SET_ERROR:
- raise Exception(f"Failed to value for option: {self.name}")
-
- def value_set_as_str(self, value: str) -> int:
- return weechat.config_option_set(self._pointer, value, 1)
-
- def value_set_null(self) -> int:
- if not self.parent_option:
- raise Exception(
- f"Can't set null value for option without parent: {self.name}"
- )
- return weechat.config_option_set_null(self._pointer, 1)
-
- @property
- def weechat_type(self) -> str:
- if self.string_values:
- return "integer"
- if isinstance(self.default_value, bool):
- return "boolean"
- if isinstance(self.default_value, int):
- return "integer"
- if isinstance(self.default_value, WeeChatColor):
- return "color"
- return "string"
-
- def _create_weechat_option(self) -> str:
- if self.parent_option:
- parent_option_name = (
- f"{self.parent_option.section.weechat_config.name}"
- f".{self.parent_option.section.name}"
- f".{self.parent_option.name}"
- )
- name = f"{self.name} << {parent_option_name}"
- default_value = None
- null_value_allowed = True
- else:
- name = self.name
- default_value = str(self.default_value)
- null_value_allowed = False
-
- value = None
-
- if shared.weechat_version < 0x3050000:
- default_value = str(self.default_value)
- value = default_value
-
- return weechat.config_new_option(
- self.section.weechat_config.pointer,
- self.section.pointer,
- name,
- self.weechat_type,
- self.description,
- self.string_values or "",
- self.min_value or -(2**31),
- self.max_value or 2**31 - 1,
- default_value,
- value,
- null_value_allowed,
- "",
- "",
- "",
- "",
- "",
- "",
- )
+from slack.weechat_config import (
+ WeeChatColor,
+ WeeChatConfig,
+ WeeChatOption,
+ WeeChatOptionType,
+ WeeChatSection,
+)
class SlackConfigSectionColor: