rewrite: Tasklist module.

This commit is contained in:
2022-12-23 06:10:21 +02:00
parent 4014e0a3a6
commit 2b93354248
30 changed files with 2324 additions and 1020 deletions

View File

@@ -1,7 +1,7 @@
from babel.translator import LocalBabel
babel = LocalBabel('settings_base')
from .data import ModelData
from .data import ModelData, ListData
from .base import BaseSetting
from .ui import SettingWidget, InteractiveSetting
from .groups import SettingDotDict, SettingGroup, ModelSettings, ModelSetting

View File

@@ -111,7 +111,7 @@ class ListData:
table = cls._table_interface # type: Table
query = table.select_where(**{cls._id_column: parent_id}).select(cls._data_column)
if cls._order_column:
query.order_by(cls._order_column, order=cls._order_type)
query.order_by(cls._order_column, direction=cls._order_type)
rows = await query
data = [row[cls._data_column] for row in rows]
@@ -128,7 +128,7 @@ class ListData:
"""
table = cls._table_interface
conn = await table.connector.get_connection()
with conn.transaction():
async with conn.transaction():
# Handle None input as an empty list
if data is None:
data = []

View File

@@ -73,8 +73,8 @@ class SettingGroup:
"""
rows = []
for setting in self.settings.values():
name = f"{setting.display_name}"
set = await setting.get(parent_id)
name = set.display_name
value = set.formatted
rows.append((name, value, set.hover_desc))
table_rows = tabulate(

View File

@@ -1002,7 +1002,7 @@ class ListSetting:
Format the list by adding `,` between each formatted item
"""
if not data:
return None
return 'Not Set'
else:
formatted_items = []
for item in data:

View File

@@ -11,6 +11,7 @@ from discord.ui.text_input import TextInput
from utils.lib import tabulate, recover_context
from utils.ui import FastModal
from meta.config import conf
from babel.translator import ctx_translator
from .base import BaseSetting, ParentID, SettingData, SettingValue
@@ -166,10 +167,10 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]):
__slots__ = ('_widget',)
# Configuration interface descriptions
display_name: str # User readable name of the setting
desc: str # User readable brief description of the setting
long_desc: str # User readable long description of the setting
accepts: str # User readable description of the acceptable values
_display_name: str # User readable name of the setting
_desc: str # User readable brief description of the setting
_long_desc: str # User readable long description of the setting
_accepts: str # User readable description of the acceptable values
Widget = SettingWidget
@@ -184,6 +185,26 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]):
self._widget: Optional[SettingWidget] = None
@property
def long_desc(self):
t = ctx_translator.get().t
return t(self._long_desc)
@property
def display_name(self):
t = ctx_translator.get().t
return t(self._display_name)
@property
def desc(self):
t = ctx_translator.get().t
return t(self._desc)
@property
def accepts(self):
t = ctx_translator.get().t
return t(self._accepts)
async def write(self, **kwargs) -> None:
await super().write(**kwargs)
for listener in self._listeners_.values():
@@ -249,9 +270,13 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]):
Returns a {name, value} pair for use in an Embed field.
"""
name = self.display_name
value = f"{self.long_dec}\n{self.desc_table}"
value = f"{self.long_desc}\n{self.desc_table}"
return {'name': name, 'value': value}
@property
def set_str(self):
return None
@property
def embed(self):
"""
@@ -265,10 +290,14 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]):
@property
def desc_table(self):
return tabulate(
("Current Value", self.formatted or "Not Set"),
("Default Value", self._format_data(self.parent_id, self.default) or "None"),
)
lines = []
lines.append(('Currently', self.formatted or "Not Set"))
if (default := self.default) is not None:
lines.append(('By Default', self._format_data(self.parent_id, default) or "No Default"))
if (set_str := self.set_str) is not None:
lines.append(('Set Using', set_str))
return '\n'.join(tabulate(*lines))
@property
def input_field(self) -> TextInput: