def set_field_value(self, field_name, value): """ Set value of field named `field_name`. Use this method to apply changes to object which is affected by request. Values are set on `view._json_params` dict. If `field_name` is not affected by request, it is added to `self.fields` which makes field processors which are connected to `field_name` to be triggered, if they are run after this method call(connected to events after handler that performs method call). :param field_name: Name of field value of which should be set. Optional if `self.field` is set; in this case `self.field.name` is used. If `self.field` is None and `field_name` is not provided, KeyError is raised. :param value: Value to be set. """ self.view._json_params[field_name] = value if field_name in self.fields: self.fields[field_name].new_value = value return fields = FieldData.from_dict({field_name: value}, self.model) self.fields.update(fields)
def trigger_events(view_obj): """ Trigger before and after CRUD events. :param view_obj: Instance of nefertari.view.BaseView subclass created by nefertari.view.ViewMapper. """ request = view_obj.request view_method = getattr(view_obj, request.action) event_action = (getattr(view_method, '_event_action', None) or request.action) do_trigger = not (getattr(view_method, '_silent', False) or getattr(view_obj, '_silent', False)) if do_trigger: event_kwargs = { 'view': view_obj, 'model': view_obj.Model, 'fields': FieldData.from_dict(view_obj._json_params, view_obj.Model) } ctx = view_obj.context if hasattr(ctx, 'pk_field') or isinstance(ctx, DataProxy): event_kwargs['instance'] = ctx before_event = BEFORE_EVENTS[event_action] request.registry.notify(before_event(**event_kwargs)) yield if do_trigger: event_kwargs['response'] = view_obj._response after_event = AFTER_EVENTS[event_action] request.registry.notify(after_event(**event_kwargs))
def _get_event_kwargs(view_obj): """ Helper function to get event kwargs. :param view_obj: Instance of View that processes the request. :returns dict: Containing event kwargs or None if events shouldn't be fired. """ request = view_obj.request view_method = getattr(view_obj, request.action) do_trigger = not ( getattr(view_method, '_silent', False) or getattr(view_obj, '_silent', False)) if do_trigger: event_kwargs = { 'view': view_obj, 'model': view_obj.Model, 'fields': FieldData.from_dict( view_obj._json_params, view_obj.Model) } ctx = view_obj.context if hasattr(ctx, 'pk_field') or isinstance(ctx, DataProxy): event_kwargs['instance'] = ctx return event_kwargs
def trigger_events(view_obj): """ Trigger before and after CRUD events. :param view_obj: Instance of nefertari.view.BaseView subclass created by nefertari.view.ViewMapper. """ request = view_obj.request view_method = getattr(view_obj, request.action) event_action = getattr(view_method, "_event_action", None) or request.action do_trigger = not (getattr(view_method, "_silent", False) or getattr(view_obj, "_silent", False)) if do_trigger: event_kwargs = { "view": view_obj, "model": view_obj.Model, "initial_state": view_obj.initial_state, "fields": FieldData.from_dict(view_obj._json_params, view_obj.Model), } ctx = view_obj.context # Using __class__ instead of type() for mockability if isinstance(ctx.__class__, ESMetaclass): event_kwargs["instance"] = ctx before_event = BEFORE_EVENTS[event_action] request.registry.notify(before_event(**event_kwargs)) yield if do_trigger: if isinstance(type(view_obj.context), ESMetaclass): event_kwargs["instance"] = view_obj.context event_kwargs["response"] = view_obj._response after_event = AFTER_EVENTS[event_action] request.registry.notify(after_event(**event_kwargs))
def trigger_events(view_obj): """ Trigger before and after CRUD events. :param view_obj: Instance of nefertari.view.BaseView subclass created by nefertari.view.ViewMapper. """ request = view_obj.request view_method = getattr(view_obj, request.action) event_action = ( getattr(view_method, '_event_action', None) or request.action) do_trigger = not ( getattr(view_method, '_silent', False) or getattr(view_obj, '_silent', False)) if do_trigger: event_kwargs = { 'view': view_obj, 'model': view_obj.Model, 'initial_state': view_obj.initial_state, 'fields': FieldData.from_dict( view_obj._json_params, view_obj.Model) } # Using __class__ instead of type() for mockability if getattr(view_obj.context.__class__, 'is_ESMetaclass', False): event_kwargs['instance'] = view_obj.context before_event = BEFORE_EVENTS[event_action] request.registry.notify(before_event(**event_kwargs)) yield if do_trigger: event_kwargs['response'] = view_obj._response after_event = AFTER_EVENTS[event_action] request.registry.notify(after_event(**event_kwargs))
def _get_event_kwargs(view_obj): """ Helper function to get event kwargs. :param view_obj: Instance of View that processes the request. :returns dict: Containing event kwargs or None if events shouldn't be fired. """ request = view_obj.request view_method = getattr(view_obj, request.action) do_trigger = not (getattr(view_method, '_silent', False) or getattr(view_obj, '_silent', False)) if do_trigger: event_kwargs = { 'view': view_obj, 'model': view_obj.Model, 'fields': FieldData.from_dict(view_obj._json_params, view_obj.Model) } ctx = view_obj.context if hasattr(ctx, 'pk_field') or isinstance(ctx, DataProxy): event_kwargs['instance'] = ctx return event_kwargs
def trigger_events(view_obj): """ Trigger before and after CRUD events. :param view_obj: Instance of nefertari.view.BaseView subclass created by nefertari.view.ViewMapper. """ request = view_obj.request view_method = getattr(view_obj, request.action) event_action = ( getattr(view_method, '_event_action', None) or request.action) do_trigger = not ( getattr(view_method, '_silent', False) or getattr(view_obj, '_silent', False)) if do_trigger: event_kwargs = { 'view': view_obj, 'model': view_obj.Model, 'fields': FieldData.from_dict( view_obj._json_params, view_obj.Model) } if hasattr(view_obj.context, 'pk_field'): event_kwargs['instance'] = view_obj.context before_event = BEFORE_EVENTS[event_action] request.registry.notify(before_event(**event_kwargs)) yield if do_trigger: after_event = AFTER_EVENTS[event_action] request.registry.notify(after_event(**event_kwargs))