forked from scrapy/scrapy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5312146
commit f43c99f
Showing
2 changed files
with
142 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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')) |
This file was deleted.
Oops, something went wrong.