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

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:33:32 +03:00 committed by GitHub
parent bff2ed0a86
commit ee8e457c5f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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