mirror of https://github.com/scrapy/scrapy.git
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:
parent
774e7f623a
commit
04baa7aed7
|
|
@ -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
|
||||
|
||||
|
|
@ -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 = {}
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
Loading…
Reference in New Issue