Exemplo n.º 1
0
    def getFieldValue(self, field, id, **kw):
        """
      Return a callable expression and cacheable boolean flag
    """
        # Some field types have their own get_value implementation,
        # then we must use it always. This check must be done at first.
        template_field = self.getRecursiveTemplateField()
        # Old ListBox instance might have default attribute. so we need to check it.
        if checkOriginalGetValue(template_field, id):
            return _USE_ORIGINAL_GET_VALUE_MARKER, True

        try:
            tales_expr = self.get_tales_expression(id)
        except ValueError:
            return None, False
        if tales_expr:
            tales_expr = copyMethod(tales_expr)
            return TALESValue(tales_expr), isCacheable(tales_expr)

        # FIXME: backwards compat hack to make sure overrides dict exists
        if not hasattr(self, 'overrides'):
            self.overrides = {}

        override = self.overrides.get(id, "")
        if override:
            override = copyMethod(override)
            return OverrideValue(override), isCacheable(override)

        # Get a normal value.
        try:
            value = self.get_recursive_orig_value(id)
        except KeyError:
            # For ListBox and other exceptional fields.
            return self._get_value(id, **kw), False

        field_id = field.id

        value = copyMethod(value)
        cacheable = isCacheable(value)

        if id == 'default' and (field_id.startswith('my_')
                                or field_id.startswith('listbox_')):
            # XXX far from object-oriented programming
            if template_field.meta_type == 'CheckBoxField':
                return DefaultCheckBoxValue(field_id, value), cacheable
            return DefaultValue(field_id, value), cacheable

        # For the 'editable' value, we try to get a default value
        if id == 'editable':
            return EditableValue(value), cacheable

        # Return default value in callable mode
        if callable(value):
            return StaticValue(value), cacheable

        # Return default value in non callable mode
        return_value = StaticValue(value)(field, id, **kw)
        return return_value, isCacheable(return_value)
Exemplo n.º 2
0
  def getFieldValue(self, field, id, **kw):
    """
      Return a callable expression and cacheable boolean flag
    """
    # Some field types have their own get_value implementation,
    # then we must use it always. This check must be done at first.
    template_field = self.getRecursiveTemplateField()
    # Old ListBox instance might have default attribute. so we need to check it.
    if checkOriginalGetValue(template_field, id):
      return _USE_ORIGINAL_GET_VALUE_MARKER, True

    try:
      tales_expr = self.get_tales_expression(id)
    except ValueError:
      return None, False
    if tales_expr:
      tales_expr = copyMethod(tales_expr)
      return TALESValue(tales_expr), isCacheable(tales_expr)

    # FIXME: backwards compat hack to make sure overrides dict exists
    if not hasattr(self, 'overrides'):
        self.overrides = {}

    override = self.overrides.get(id, "")
    if override:
      override = copyMethod(override)
      return OverrideValue(override), isCacheable(override)

    # Get a normal value.
    try:
      value = self.get_recursive_orig_value(id)
    except KeyError:
      # For ListBox and other exceptional fields.
      return self._get_value(id, **kw), False

    field_id = field.id

    value = copyMethod(value)
    cacheable = isCacheable(value)

    if id == 'default' and (field_id.startswith('my_') or
                            field_id.startswith('listbox_')):
      # XXX far from object-oriented programming
      if template_field.meta_type == 'CheckBoxField':
        return DefaultCheckBoxValue(field_id, value), cacheable
      return DefaultValue(field_id, value), cacheable

    # For the 'editable' value, we try to get a default value
    if id == 'editable':
      return EditableValue(value), cacheable

    # Return default value in callable mode
    if callable(value):
      return StaticValue(value), cacheable

    # Return default value in non callable mode
    return_value = StaticValue(value)(field, id, **kw)
    return return_value, isCacheable(return_value)