diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/declarative.py b/scrapy/trunk/scrapy/contrib_exp/newitem/declarative.py deleted file mode 100644 index 73618825c..000000000 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/declarative.py +++ /dev/null @@ -1,18 +0,0 @@ -class DeclarativeMeta(type): - """Metaclass for declarative objects""" - - def __new__(meta, class_name, bases, attrs): - cls = type.__new__(meta, class_name, bases, attrs) - cls.__classinit__.im_func(cls, attrs) - return cls - - -class Declarative(object): - """Base class for declarative objects""" - - __metaclass__ = DeclarativeMeta - - def __classinit__(cls, attrs): - """Override this method to initialize your class""" - pass - diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py index d1b6c71ad..e8d76c05a 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py @@ -1,19 +1,26 @@ from scrapy.item import ScrapedItem -from scrapy.contrib_exp.newitem.declarative import Declarative from scrapy.contrib_exp.newitem.fields import Field -class Item(Declarative, ScrapedItem): - """ This is the base class for all scraped items. """ +class ItemMeta(type): - fields = {} - - def __classinit__(cls, attrs): + def __new__(meta, class_name, bases, attrs): + cls = type.__new__(meta, class_name, bases, attrs) cls.fields = cls.fields.copy() for n, v in attrs.items(): if isinstance(v, Field): cls.fields[n] = v + return cls + + +class Item(ScrapedItem): + """ This is the base class for all scraped items. """ + + __metaclass__ = ItemMeta + + fields = {} + def __init__(self): self._values = {} diff --git a/scrapy/trunk/scrapy/tests/test_newitem.py b/scrapy/trunk/scrapy/tests/test_newitem.py new file mode 100644 index 000000000..f31797fd4 --- /dev/null +++ b/scrapy/trunk/scrapy/tests/test_newitem.py @@ -0,0 +1,15 @@ +import unittest + +from scrapy.contrib_exp.newitem import * + + +class NewItemTest(unittest.TestCase): + + def test_simple(self): + class TestItem(Item): + name = StringField() + + i = TestItem() + i.name = 'name' + assert i.name == 'name' +