#1281 Fix magic operation .as_ for values interpreted as False

Modified the ".as_" method in the magic filter class to correctly handle values that are interpreted as `False` such as `0`. Previously, the method incorrectly dismissed these valid values. The issue was identified and fixed to ensure correct handling of all valid data inputs.
This commit is contained in:
Alex Root Junior 2023-08-26 22:29:23 +03:00
parent b7be9c2b81
commit abd262824d
No known key found for this signature in database
GPG key ID: 074C1D455EBEA4AC
3 changed files with 17 additions and 2 deletions

1
CHANGES/1281.bugfix.rst Normal file
View file

@ -0,0 +1 @@
Fixed magic :code:`.as_(...)` operation for values that can be interpreted as `False` (e.g. `0`).

View file

@ -1,4 +1,4 @@
from typing import Any
from typing import Any, Iterable
from magic_filter import MagicFilter as _MagicFilter
from magic_filter import MagicT as _MagicT
@ -12,7 +12,7 @@ class AsFilterResultOperation(BaseOperation):
self.name = name
def resolve(self, value: Any, initial_value: Any) -> Any:
if not value:
if value is None or (isinstance(value, Iterable) and not value):
return None
return {self.name: value}

View file

@ -19,3 +19,17 @@ class TestMagicFilter:
result = magic.resolve(MyObject(text="123"))
assert isinstance(result, dict)
assert isinstance(result["match"], Match)
def test_operation_as_not_none(self):
# Issue: https://github.com/aiogram/aiogram/issues/1281
magic = F.cast(int).as_("value")
result = magic.resolve("0")
assert result == {"value": 0}
def test_operation_as_not_none_iterable(self):
# Issue: https://github.com/aiogram/aiogram/issues/1281
magic = F.as_("value")
result = magic.resolve([])
assert result is None