From 61e1015c1e71ae5b86e830465076168206f81d01 Mon Sep 17 00:00:00 2001 From: Suren Khorenyan Date: Sat, 20 Jul 2019 22:47:23 +0300 Subject: [PATCH] Minor refactor callback_data --- aiogram/utils/callback_data.py | 47 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/aiogram/utils/callback_data.py b/aiogram/utils/callback_data.py index 916d08c4..b0162a7e 100644 --- a/aiogram/utils/callback_data.py +++ b/aiogram/utils/callback_data.py @@ -28,13 +28,13 @@ class CallbackData: def __init__(self, prefix, *parts, sep=':'): if not isinstance(prefix, str): - raise TypeError(f"Prefix must be instance of str not {type(prefix).__name__}") - elif not prefix: - raise ValueError('Prefix can\'t be empty') - elif sep in prefix: - raise ValueError(f"Separator '{sep}' can't be used in prefix") - elif not parts: - raise TypeError('Parts is not passed!') + raise TypeError(f'Prefix must be instance of str not {type(prefix).__name__}') + if not prefix: + raise ValueError("Prefix can't be empty") + if sep in prefix: + raise ValueError(f"Separator {sep!r} can't be used in prefix") + if not parts: + raise TypeError('Parts were not passed!') self.prefix = prefix self.sep = sep @@ -59,20 +59,20 @@ class CallbackData: if args: value = args.pop(0) 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): value = str(value) if not value: - raise ValueError(f"Value for part {part} can't be empty!'") - elif self.sep in value: - raise ValueError(f"Symbol defined as separator can't be used in values of parts") + raise ValueError(f"Value for part {part!r} can't be empty!'") + if self.sep in value: + raise ValueError(f"Symbol {self.sep!r} is defined as the separator and can't be used in parts' values") data.append(value) if args or kwargs: - raise TypeError('Too many arguments is passed!') + raise TypeError('Too many arguments were passed!') callback_data = self.sep.join(data) if len(callback_data) > 64: @@ -106,30 +106,31 @@ class CallbackData: """ for key in config.keys(): 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) class CallbackDataFilter(Filter): + def __init__(self, factory: CallbackData, config: typing.Dict[str, str]): self.config = config self.factory = factory @classmethod 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): try: data = self.factory.parse(query.data) except ValueError: return False - else: - for key, value in self.config.items(): - if isinstance(value, (list, tuple, set)): - if data.get(key) not in value: - return False - else: - if value != data.get(key): - return False - return {'callback_data': data} + + for key, value in self.config.items(): + if isinstance(value, (list, tuple, set, frozenset)): + if data.get(key) not in value: + return False + else: + if data.get(key) != value: + return False + return {'callback_data': data}