def test_get_members_error_message(): with pytest.raises(TypeError) as e: get_members(None, None, None) assert str( e.value ) == "get_members either needs a member_class parameter or an is_member check function (or both)"
def test_all_filter_shortcuts(): class MyFancyFilter(Filter): class Meta: extra__fancy = True class MyFancyQuery(Query): class Meta: member_class = MyFancyFilter all_shortcut_names = keys( get_members( cls=MyFancyFilter, member_class=Shortcut, is_member=is_shortcut, ) ) config = {f'filters__filter_of_type_{t}__call_target__attribute': t for t in all_shortcut_names} type_specifics = Namespace( filters__filter_of_type_choice__choices=[], filters__filter_of_type_multi_choice__choices=[], filters__filter_of_type_choice_queryset__choices=TFoo.objects.none(), filters__filter_of_type_multi_choice_queryset__choices=TFoo.objects.none(), filters__filter_of_type_many_to_many__model_field=TBaz.foo.field, filters__filter_of_type_foreign_key__model_field=TBar.foo.field, ) query = MyFancyQuery(**config, **type_specifics).bind(request=req('get')) for name, filter in items(query.filters): assert filter.extra.get('fancy'), name
def test_all_action_shortcuts(): class MyFancyAction(Action): class Meta: extra__fancy = True class ThingWithActions(Traversable): @dispatch def __init__(self, actions): super(ThingWithActions, self).__init__() collect_members(self, name='actions', items=actions, cls=MyFancyAction) def on_bind(self): bind_members(self, name='actions') all_shortcut_names = keys(get_members( cls=MyFancyAction, member_class=Shortcut, is_member=is_shortcut, )) thing = ThingWithActions( actions__action_of_type_icon__icon='flower', **{ f'actions__action_of_type_{t}__call_target__attribute': t for t in all_shortcut_names }, ).bind() for name, column in items(thing.actions): assert column.extra.get('fancy'), name
class ShortcutSelectorForm(Form): class Meta: attrs__method = 'get' shortcut = Field.multi_choice(choices=[ t for t in keys( get_members( cls=Column, member_class=Shortcut, is_member=is_shortcut)) if t not in [ 'icon', 'foreign_key', 'many_to_many', 'choice_queryset', 'multi_choice_queryset', ] ])
def all_field_sorts(request): some_choices = ['Foo', 'Bar', 'Baz'] return Page(parts=dict( header=Header('All sorts of fields'), form=Form( fields={ f'{t}__call_target__attribute': t for t in keys(get_members( cls=Field, member_class=Shortcut, is_member=is_shortcut )) if t not in [ # These only work if we have an instance 'foreign_key', 'many_to_many'] }, fields__radio__choices=some_choices, fields__choice__choices=some_choices, fields__choice_queryset__choices=TFoo.objects.all(), fields__multi_choice__choices=some_choices, fields__multi_choice_queryset__choices=TBar.objects.all(), fields__info__value="This is some information", fields__text__initial='Text', fields__textarea__initial='text area\nsecond row', fields__integer__initial=3, fields__float__initial=3.14, fields__password__initial='abc123', fields__boolean__initial=True, fields__datetime__initial=datetime.now(), fields__date__initial=date.today(), fields__time__initial=datetime.now().time(), fields__decimal__initial=3.14, fields__url__initial='http://iommi.rocks', fields__email__initial='*****@*****.**', fields__phone_number__initial='+1 555 555', actions__submit__include=False, ) ))