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
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
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)
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)
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
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)
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