SEP-005: Detailed ItemBuilder API use
Contents
| SEP: | 5 |
| Title: | ItemBuilder API |
| Author: | Ismael Carnales, Pablo Hoffman |
| Created: | 2009-07-24 |
| Status | Obsoleted by SEP-008 |
Item class for examples:
class NewsItem(Item): url = fields.TextField() headline = fields.TextField() content = fields.TextField() published = fields.DateField()
Setting expanders
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?
Setting reducers
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
Setting expanders/reducers new way
class NewsItemBuilder(ItemBuilder): item_class = NewsItem headline = BuilderField(extract, remove_tags(), unquote(), strip) content = BuilderField(extract, remove_tags(), unquote(), strip) class Reducer: headline = TakeFirst
Extending ItemBuilder
class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(extract, remove_tags(), unquote(), strip, to_date('%d.%m.%Y'))
Extending ItemBuilder using statich methods
class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.published, to_date('%d.%m.%Y'))
Using default_builder
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.
Reset default_builder for a field
class DefaultedNewsItemBuilder(ItemBuilder): item_class = NewsItem default_builder = reducers.Reducer(extract, remove_tags(), unquote(), strip) url = BuilderField()
Extending default ItemBuilder
class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(extract, remove_tags(), unquote(), strip, to_date('%d.%m.%Y'))
Extending default ItemBuilder using static methods
class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.default_builder, to_date('%d.%m.%Y'))
