Beispiel #1
0
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)"
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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',
        ]
    ])
Beispiel #5
0
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,
        )
    ))