Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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))