mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Create OrderedHelper
This commit is contained in:
parent
567289f368
commit
68a9df9222
2 changed files with 58 additions and 0 deletions
|
|
@ -13,6 +13,9 @@ Example:
|
||||||
>>> print(MyHelper.all())
|
>>> print(MyHelper.all())
|
||||||
<<< ['barItem', 'bazItem', 'fooItem', 'lorem']
|
<<< ['barItem', 'bazItem', 'fooItem', 'lorem']
|
||||||
"""
|
"""
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
PROPS_KEYS_ATTR_NAME = '_props_keys'
|
||||||
|
|
||||||
|
|
||||||
class Helper:
|
class Helper:
|
||||||
|
|
@ -191,3 +194,36 @@ class ItemsList(list):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
__iadd__ = __add__ = __rand__ = __and__ = __ror__ = __or__ = add
|
__iadd__ = __add__ = __rand__ = __and__ = __ror__ = __or__ = add
|
||||||
|
|
||||||
|
|
||||||
|
class OrderedHelperMeta(type):
|
||||||
|
|
||||||
|
def __new__(mcs, name, bases, namespace, **kwargs):
|
||||||
|
cls = super().__new__(mcs, name, bases, namespace)
|
||||||
|
|
||||||
|
props_keys = []
|
||||||
|
|
||||||
|
for prop_name in (name for name, prop in namespace.items() if isinstance(prop, (Item, ListItem))):
|
||||||
|
props_keys.append(prop_name)
|
||||||
|
|
||||||
|
setattr(cls, PROPS_KEYS_ATTR_NAME, props_keys)
|
||||||
|
|
||||||
|
return cls
|
||||||
|
|
||||||
|
|
||||||
|
class OrderedHelper(metaclass=OrderedHelperMeta):
|
||||||
|
mode = ''
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def all(cls) -> List[str]:
|
||||||
|
"""
|
||||||
|
Get all Items values
|
||||||
|
"""
|
||||||
|
result = []
|
||||||
|
for name in getattr(cls, PROPS_KEYS_ATTR_NAME, []):
|
||||||
|
value = getattr(cls, name)
|
||||||
|
if isinstance(value, ItemsList):
|
||||||
|
result.append(value[0])
|
||||||
|
else:
|
||||||
|
result.append(value)
|
||||||
|
return result
|
||||||
|
|
|
||||||
22
tests/test_utils/test_helper.py
Normal file
22
tests/test_utils/test_helper.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
from aiogram.utils.helper import OrderedHelper, Item, ListItem
|
||||||
|
|
||||||
|
|
||||||
|
class TestOrderedHelper:
|
||||||
|
|
||||||
|
def test_items_are_ordered(self):
|
||||||
|
class Helper(OrderedHelper):
|
||||||
|
A = Item()
|
||||||
|
D = Item()
|
||||||
|
C = Item()
|
||||||
|
B = Item()
|
||||||
|
|
||||||
|
assert Helper.all() == ['A', 'D', 'C', 'B']
|
||||||
|
|
||||||
|
def test_list_items_are_ordered(self):
|
||||||
|
class Helper(OrderedHelper):
|
||||||
|
A = ListItem()
|
||||||
|
D = ListItem()
|
||||||
|
C = ListItem()
|
||||||
|
B = ListItem()
|
||||||
|
|
||||||
|
assert Helper.all() == ['A', 'D', 'C', 'B']
|
||||||
Loading…
Add table
Add a link
Reference in a new issue