mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-08 17:13:56 +00:00
Minor refactor callback_data
This commit is contained in:
parent
8823c8f22a
commit
61e1015c1e
1 changed files with 24 additions and 23 deletions
|
|
@ -28,13 +28,13 @@ class CallbackData:
|
||||||
|
|
||||||
def __init__(self, prefix, *parts, sep=':'):
|
def __init__(self, prefix, *parts, sep=':'):
|
||||||
if not isinstance(prefix, str):
|
if not isinstance(prefix, str):
|
||||||
raise TypeError(f"Prefix must be instance of str not {type(prefix).__name__}")
|
raise TypeError(f'Prefix must be instance of str not {type(prefix).__name__}')
|
||||||
elif not prefix:
|
if not prefix:
|
||||||
raise ValueError('Prefix can\'t be empty')
|
raise ValueError("Prefix can't be empty")
|
||||||
elif sep in prefix:
|
if sep in prefix:
|
||||||
raise ValueError(f"Separator '{sep}' can't be used in prefix")
|
raise ValueError(f"Separator {sep!r} can't be used in prefix")
|
||||||
elif not parts:
|
if not parts:
|
||||||
raise TypeError('Parts is not passed!')
|
raise TypeError('Parts were not passed!')
|
||||||
|
|
||||||
self.prefix = prefix
|
self.prefix = prefix
|
||||||
self.sep = sep
|
self.sep = sep
|
||||||
|
|
@ -59,20 +59,20 @@ class CallbackData:
|
||||||
if args:
|
if args:
|
||||||
value = args.pop(0)
|
value = args.pop(0)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Value for '{part}' is not passed!")
|
raise ValueError(f'Value for {part!r} was not passed!')
|
||||||
|
|
||||||
if value is not None and not isinstance(value, str):
|
if value is not None and not isinstance(value, str):
|
||||||
value = str(value)
|
value = str(value)
|
||||||
|
|
||||||
if not value:
|
if not value:
|
||||||
raise ValueError(f"Value for part {part} can't be empty!'")
|
raise ValueError(f"Value for part {part!r} can't be empty!'")
|
||||||
elif self.sep in value:
|
if self.sep in value:
|
||||||
raise ValueError(f"Symbol defined as separator can't be used in values of parts")
|
raise ValueError(f"Symbol {self.sep!r} is defined as the separator and can't be used in parts' values")
|
||||||
|
|
||||||
data.append(value)
|
data.append(value)
|
||||||
|
|
||||||
if args or kwargs:
|
if args or kwargs:
|
||||||
raise TypeError('Too many arguments is passed!')
|
raise TypeError('Too many arguments were passed!')
|
||||||
|
|
||||||
callback_data = self.sep.join(data)
|
callback_data = self.sep.join(data)
|
||||||
if len(callback_data) > 64:
|
if len(callback_data) > 64:
|
||||||
|
|
@ -106,30 +106,31 @@ class CallbackData:
|
||||||
"""
|
"""
|
||||||
for key in config.keys():
|
for key in config.keys():
|
||||||
if key not in self._part_names:
|
if key not in self._part_names:
|
||||||
raise ValueError(f"Invalid field name '{key}'")
|
raise ValueError(f'Invalid field name {key!r}')
|
||||||
return CallbackDataFilter(self, config)
|
return CallbackDataFilter(self, config)
|
||||||
|
|
||||||
|
|
||||||
class CallbackDataFilter(Filter):
|
class CallbackDataFilter(Filter):
|
||||||
|
|
||||||
def __init__(self, factory: CallbackData, config: typing.Dict[str, str]):
|
def __init__(self, factory: CallbackData, config: typing.Dict[str, str]):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.factory = factory
|
self.factory = factory
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate(cls, full_config: typing.Dict[str, typing.Any]):
|
def validate(cls, full_config: typing.Dict[str, typing.Any]):
|
||||||
raise ValueError('That filter can\'t be used in filters factory!')
|
raise ValueError("That filter can't be used in filters factory!")
|
||||||
|
|
||||||
async def check(self, query: types.CallbackQuery):
|
async def check(self, query: types.CallbackQuery):
|
||||||
try:
|
try:
|
||||||
data = self.factory.parse(query.data)
|
data = self.factory.parse(query.data)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return False
|
return False
|
||||||
else:
|
|
||||||
for key, value in self.config.items():
|
for key, value in self.config.items():
|
||||||
if isinstance(value, (list, tuple, set)):
|
if isinstance(value, (list, tuple, set, frozenset)):
|
||||||
if data.get(key) not in value:
|
if data.get(key) not in value:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
if value != data.get(key):
|
if data.get(key) != value:
|
||||||
return False
|
return False
|
||||||
return {'callback_data': data}
|
return {'callback_data': data}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue