removed declarative from newitem (now using 'plain' metaclasses) added basic test for newitem

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40979
This commit is contained in:
Ismael Carnales 2009-03-10 18:40:26 +00:00
parent 774e7f623a
commit 04baa7aed7
3 changed files with 28 additions and 24 deletions

View File

@ -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

View File

@ -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 = {}

View File

@ -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'