From 04baa7aed7e6b090400f75d561587774fa5aef0c Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Tue, 10 Mar 2009 18:40:26 +0000 Subject: [PATCH] removed declarative from newitem (now using 'plain' metaclasses) added basic test for newitem --HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40979 --- .../scrapy/contrib_exp/newitem/declarative.py | 18 ------------------ .../scrapy/contrib_exp/newitem/models.py | 19 +++++++++++++------ scrapy/trunk/scrapy/tests/test_newitem.py | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 24 deletions(-) delete mode 100644 scrapy/trunk/scrapy/contrib_exp/newitem/declarative.py create mode 100644 scrapy/trunk/scrapy/tests/test_newitem.py 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' +