sep/sep-005.rst
======= ==============================
SEP 5
Title ItemBuilder API
Author Ismael Carnales, Pablo Hoffman
Created 2009-07-24
Status Obsoleted by :doc:sep-008
======= ==============================
ItemBuilder API useItem class for examples:
.. code-block:: python
#!python class NewsItem(Item): url = fields.TextField() headline = fields.TextField() content = fields.TextField() published = fields.DateField()
.. code-block:: python
#!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 = PassValueTextField = JoinStringsTakeFirst.. code-block:: python
#!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
.. code-block:: python
#!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
ItemBuilder.. code-block:: python
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer( extract, remove_tags(), unquote(), strip, to_date("%d.%m.%Y") )
ItemBuilder using statich methods.. code-block:: python
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.published, to_date("%d.%m.%Y"))
.. code-block:: python
#!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 classes.
.. code-block:: python
#!python class DefaultedNewsItemBuilder(ItemBuilder): item_class = NewsItem
default_builder = reducers.Reducer(extract, remove_tags(), unquote(), strip)
url = BuilderField()
ItemBuilder.. code-block:: python
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer( extract, remove_tags(), unquote(), strip, to_date("%d.%m.%Y") )
ItemBuilder using static methods.. code-block:: python
#!python class SiteNewsItemBuilder(NewsItemBuilder): published = reducers.Reducer(NewsItemBuilder.default_builder, to_date("%d.%m.%Y"))