示例#1
0
    def test_trigger_events_silent_view_method(self, mock_from):
        class A(object):
            pass

        mock_after = Mock()
        mock_before = Mock()
        ctx = A()
        view = Mock(
            Model=A,
            request=Mock(action='index'),
            _json_params={'bar': 1},
            context=ctx,
            _silent=False)
        view.index._silent = True
        view.index._event_action = None

        with patch.dict(events.BEFORE_EVENTS, {'index': mock_before}):
            with patch.dict(events.AFTER_EVENTS, {'index': mock_after}):
                with events.trigger_events(view):
                    pass

        assert not mock_after.called
        assert not mock_before.called
        assert not view.request.registry.notify.called
        assert not mock_from.called
示例#2
0
文件: view.py 项目: oleduc/nefertari
        def view_mapper_wrapper(context, request):
            matchdict = request.matchdict.copy()
            matchdict.pop('action', None)
            matchdict.pop('traverse', None)

            # instance of BaseView (or child of)
            view_obj = view(context, request)
            action = getattr(view_obj, action_name)
            request.action = action_name

            # Tunneled collection PATCH/PUT doesn't support query params
            tunneled = getattr(request, '_tunneled_get', False)
            if tunneled and action_name in ('update_many',):
                view_obj._query_params = dictset()

            # we should not run "after_calls" here, so lets save them in
            # request as filters they will be ran in the renderer factory
            request.filters = view_obj._after_calls

            try:
                # run before_calls (validators) before running the action
                for call in view_obj._before_calls.get(action_name, []):
                    call(request=request)

            except wrappers.ValidationError as e:
                log.error('validation error: %s', e)
                raise JHTTPBadRequest(e.args)

            except wrappers.ResourceNotFound as e:
                log.error('resource not found: %s', e)
                raise JHTTPNotFound()

            with trigger_events(view_obj):
                view_obj._response = action(**matchdict)
                return view_obj._response
示例#3
0
    def test_trigger_events(self, mock_from):
        mock_after = Mock()
        mock_before = Mock()
        mock_from.return_value = {'foo': 1}
        ctx = Mock()
        view = Mock(
            request=Mock(action='index'),
            _json_params={'bar': 1},
            context=ctx,
            _silent=False)
        view.index._silent = False
        view.index._event_action = None

        with patch.dict(events.BEFORE_EVENTS, {'index': mock_before}):
            with patch.dict(events.AFTER_EVENTS, {'index': mock_after}):
                with events.trigger_events(view):
                    pass

        mock_after.assert_called_once_with(
            fields={'foo': 1}, model=view.Model, instance=ctx,
            view=view)
        mock_before.assert_called_once_with(
            fields={'foo': 1}, model=view.Model, instance=ctx,
            view=view)
        view.request.registry.notify.assert_has_calls([
            call(mock_before()),
            call(mock_after()),
        ])
        mock_from.assert_called_once_with({'bar': 1}, view.Model)
示例#4
0
    def test_trigger_events_different_action(self, mock_from):
        class A(object):
            pass

        mock_from.return_value = {'foo': 1}
        mock_after = Mock()
        mock_before = Mock()
        ctx = A()
        mock_initial_state = Mock()
        view = Mock(
            Model=A,
            request=Mock(action='index'),
            _json_params={'bar': 1},
            context=ctx,
            _silent=False,
            initial_state=mock_initial_state)
        view.index._silent = None
        view.index._event_action = 'delete'

        with patch.dict(events.BEFORE_EVENTS, {'delete': mock_before}):
            with patch.dict(events.AFTER_EVENTS, {'delete': mock_after}):
                with events.trigger_events(view):
                    pass

        mock_after.assert_called_once_with(
            fields={'foo': 1}, model=view.Model, view=view,
            response=view._response, initial_state=mock_initial_state)
        mock_before.assert_called_once_with(
            fields={'foo': 1}, model=view.Model, view=view, initial_state=mock_initial_state)
        view.request.registry.notify.assert_has_calls([
            call(mock_before()),
            call(mock_after()),
        ])
        mock_from.assert_called_once_with({'bar': 1}, view.Model)
示例#5
0
        def view_mapper_wrapper(context, request):
            matchdict = request.matchdict.copy()
            matchdict.pop('action', None)
            matchdict.pop('traverse', None)

            # instance of BaseView (or child of)
            view_obj = view(context, request)
            action = getattr(view_obj, action_name)
            request.action = action_name

            # Tunneled collection PATCH/PUT doesn't support query params
            tunneled = getattr(request, '_tunneled_get', False)
            if tunneled and action_name in ('update_many', ):
                view_obj._query_params = dictset()

            # we should not run "after_calls" here, so lets save them in
            # request as filters they will be ran in the renderer factory
            request.filters = view_obj._after_calls

            try:
                # run before_calls (validators) before running the action
                for call in view_obj._before_calls.get(action_name, []):
                    call(request=request)

            except wrappers.ValidationError as e:
                log.error('validation error: %s', e)
                raise JHTTPBadRequest(e.args)

            except wrappers.ResourceNotFound as e:
                log.error('resource not found: %s', e)
                raise JHTTPNotFound()

            with trigger_events(view_obj):
                view_obj._response = action(**matchdict)
                return view_obj._response
示例#6
0
    def test_trigger_events(self, mock_from):
        mock_after = Mock()
        mock_before = Mock()
        mock_from.return_value = {'foo': 1}
        ctx = Mock()
        view = Mock(request=Mock(action='index'),
                    _json_params={'bar': 1},
                    context=ctx,
                    _silent=False)
        view.index._silent = False
        view.index._event_action = None

        with patch.dict(events.BEFORE_EVENTS, {'index': mock_before}):
            with patch.dict(events.AFTER_EVENTS, {'index': mock_after}):
                with events.trigger_events(view):
                    pass

        mock_after.assert_called_once_with(fields={'foo': 1},
                                           model=view.Model,
                                           instance=ctx,
                                           view=view,
                                           response=view._response)
        mock_before.assert_called_once_with(fields={'foo': 1},
                                            model=view.Model,
                                            instance=ctx,
                                            view=view)
        view.request.registry.notify.assert_has_calls([
            call(mock_before()),
            call(mock_after()),
        ])
        mock_from.assert_called_once_with({'bar': 1}, view.Model)
示例#7
0
    def test_trigger_events_silent_view(self, mock_from):
        class A(object):
            pass

        mock_after = Mock()
        mock_before = Mock()
        ctx = A()
        view = Mock(Model=A,
                    request=Mock(action='index'),
                    _json_params={'bar': 1},
                    context=ctx,
                    _silent=True)
        view.index._silent = False
        view.index._event_action = None

        with patch.dict(events.BEFORE_EVENTS, {'index': mock_before}):
            with patch.dict(events.AFTER_EVENTS, {'index': mock_after}):
                with events.trigger_events(view):
                    pass

        assert not mock_after.called
        assert not mock_before.called
        assert not view.request.registry.notify.called
        assert not mock_from.called