def _parse_fields(parsed): """Parse form fields from HTML. :param BeautifulSoup parsed: Parsed HTML :return OrderedDict: Collection of field objects """ # Note: Call this `rv` to avoid name conflict with `fields` module rv = OrderedDict() # Prepare field tags tags = parsed.find_all(_tag_ptn) for tag in tags: helpers.lowercase_attr_names(tag) while tags: tag = tags.pop(0) tag_type = tag.name.lower() # Get name attribute, skipping if undefined name = tag.get('name') if name is None: continue name = name.lower() field = None # Create form field if tag_type == 'input': tag_type = tag.get('type', '').lower() if tag_type == 'file': field = fields.FileInput(tag) elif tag_type == 'radio': radios = _group_flat_tags(tag, tags) field = fields.Radio(radios) elif tag_type == 'checkbox': checkboxes = _group_flat_tags(tag, tags) field = fields.Checkbox(checkboxes) else: field = fields.Input(tag) elif tag_type == 'textarea': field = fields.Textarea(tag) elif tag_type == 'select': if tag.get('multiple') is not None: field = fields.MultiSelect(tag) else: field = fields.Select(tag) # Add field if field is not None: rv[name] = field return rv
def clear(self): "Clear cache." self.data = OrderedDict()
def __init__(self, max_age=None, max_count=None): self.data = OrderedDict() self.max_age = max_age self.max_count = max_count