Пример #1
0
class Form(object):
    """The Form class.

    Represents a set of fields that can be rendered in one shot.

    Arguments:
    default_renderer -- the renderer to be set to a field if not
    present (default None).
    default_validator -- the validator to be set to a field if not
    present (default None).
    default_prettifyer -- the label prettifyer to be set to a field if
    not present (default None).

    """
    def __init__(self, default_renderer=None, default_validator=None,
                 default_prettifyer=None):
        self.default_renderer = default_renderer
        self.default_validator = default_validator
        self.default_prettifyer = default_prettifyer
        self.fields = OrderedDict()

    def __contains__(self, field):
        return field.id in self.fields

    def __iter__(self):
        return self.fields.itervalues()

    def __len__(self):
        return len(self.fields)

    def append(self, field):
        """Append given field to the form.

        If the form has a default renderer, a default validator or a
        default prettifyer, the field will have them set if any of them
        are missing on the field itself, respectively.

        """
        if self.default_renderer and field.renderer is None:
            field.renderer = self.default_renderer
        if self.default_validator and field.validator is None:
            field.validator = self.default_validator
        if self.default_prettifyer and field.prettifyer is None:
            field.prettifyer = self.default_prettifyer
        self.fields[field.id] = field

    def remove(self, field):
        """Remove field from the form."""
        del self.fields[field.id]

    def _get_data(self):
        return dict((field.id, field.value) for field in self)

    def _set_data(self, data):
        for field in self:
            field.value = data[field.id]

    data = property(_get_data, _set_data, None, "Return a dict of all fields "
                    "ids and values. A similar dict can be given to set field "
                    "values all in once.")

    def validate(self):
        """Validate all field values."""
        for field in self:
            field.validate()

    def render(self):
        """Return all fields rendered and concatenated."""
        output = u""
        for field in self:
            output += field.render()
        return output
Пример #2
0
 def __init__(self, default_renderer=None, default_validator=None,
              default_prettifyer=None):
     self.default_renderer = default_renderer
     self.default_validator = default_validator
     self.default_prettifyer = default_prettifyer
     self.fields = OrderedDict()