SEP | 5 |
Title | ItemBuilder API |
Author | Ismael Carnales, Pablo Hoffman |
Created | 2009-07-24 |
Status | Obsoleted by :doc:`sep-008` |
Item class for examples:
#!python class NewsItem(Item): url = fields.TextField() headline = fields.TextField() content = fields.TextField() published = fields.DateField()
#!python class NewsItemBuilder(ItemBuilder): item_class = NewsItem headline = reducers.Reducer(extract, remove_tags(), unquote(), strip)
This approach will override the Reducer class for BuilderFields
depending
on their Item Field class:
MultivaluedField
=PassValue
TextField
=JoinStrings
- other =
TakeFirst
#!python class NewsItemBuilder(ItemBuilder): item_class = NewsItem headline = reducers.TakeFirst(extract, remove_tags(), unquote(), strip) published = reducers.Reducer(extract, remove_tags(), unquote(), strip)
As with the previous example this would select join_strings as the reducer for content
#!python class NewsItemBuilder(ItemBuilder): item_class = NewsItem headline = BuilderField(extract, remove_tags(), unquote(), strip) content = BuilderField(extract, remove_tags(), unquote(), strip) class Reducer: headline = TakeFirst
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(extract, remove_tags(), unquote(), strip, to_date('%d.%m.%Y'))
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.published, to_date('%d.%m.%Y'))
#!python class DefaultedNewsItemBuilder(ItemBuilder): item_class = NewsItem default_builder = reducers.Reducer(extract, remove_tags(), unquote(), strip)
This will use default_builder as the builder for every field in the item class. As a reducer is not set reducers will be set based on Item Field classess.
#!python class DefaultedNewsItemBuilder(ItemBuilder): item_class = NewsItem default_builder = reducers.Reducer(extract, remove_tags(), unquote(), strip) url = BuilderField()
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(extract, remove_tags(), unquote(), strip, to_date('%d.%m.%Y'))
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.default_builder, to_date('%d.%m.%Y'))