Skip to content

Commit

Permalink
converted sep 5
Browse files Browse the repository at this point in the history
  • Loading branch information
AphonicChaos committed Mar 7, 2014
1 parent 5312146 commit f43c99f
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 119 deletions.
142 changes: 142 additions & 0 deletions sep/sep-005.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
======= ==============================
SEP 5
Title ItemBuilder API
Author Ismael Carnales, Pablo Hoffman
Created 2009-07-24
Status Obsoleted by :doc:`sep-008`
======= ==============================

=========================================
SEP-005: Detailed ``ItemBuilder`` API use
=========================================

Item class for examples:

::

#!python
class NewsItem(Item):
url = fields.TextField()
headline = fields.TextField()
content = fields.TextField()
published = fields.DateField()


gSetting expanders
==================

::

#!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``

gSetting reducers
=================

::

#!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

gSetting expanders/reducers new way
===================================

::

#!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


gExtending ``ItemBuilder``
==========================

::

#!python
class SiteNewsItemBuilder(NewsItemBuilder):
published = reducers.Reducer(extract, remove_tags(), unquote(),
strip, to_date('%d.%m.%Y'))


gExtending ``ItemBuilder`` using statich methods
================================================

::

#!python
class SiteNewsItemBuilder(NewsItemBuilder):
published = reducers.Reducer(NewsItemBuilder.published, to_date('%d.%m.%Y'))


gUsing default_builder
======================

::

#!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.

gReset default_builder for a field
==================================

::

#!python
class DefaultedNewsItemBuilder(ItemBuilder):
item_class = NewsItem

default_builder = reducers.Reducer(extract, remove_tags(), unquote(), strip)
url = BuilderField()


gExtending default ``ItemBuilder``
==================================

::

#!python
class SiteNewsItemBuilder(NewsItemBuilder):
published = reducers.Reducer(extract, remove_tags(), unquote(), strip, to_date('%d.%m.%Y'))


gExtending default ``ItemBuilder`` using static methods
=======================================================

::

#!python
class SiteNewsItemBuilder(NewsItemBuilder):
published = reducers.Reducer(NewsItemBuilder.default_builder, to_date('%d.%m.%Y'))
119 changes: 0 additions & 119 deletions sep/sep-005.trac

This file was deleted.

0 comments on commit f43c99f

Please sign in to comment.