mirror of
https://github.com/scrapy/scrapy.git
synced 2025-02-25 12:03:58 +00:00
Raise when trying to set an item field value using setattr api, and added tests.
This commit is contained in:
parent
baa523055f
commit
3bbad36998
@ -65,9 +65,15 @@ class DictItem(DictMixin, BaseItem):
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name in self.fields:
|
||||
raise AttributeError("Use [%r] to access item field value" % name)
|
||||
raise AttributeError("Use item[%r] to get field value" % name)
|
||||
raise AttributeError(name)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if not name.startswith('_'):
|
||||
raise AttributeError("Use item[%r] = %r to set field value" % \
|
||||
(name, value))
|
||||
super(DictItem, self).__setattr__(name, value)
|
||||
|
||||
def keys(self):
|
||||
return self._values.keys()
|
||||
|
||||
|
@ -71,6 +71,20 @@ class ItemTest(unittest.TestCase):
|
||||
i._private = 'test'
|
||||
self.assertEqual(i._private, 'test')
|
||||
|
||||
def test_raise_getattr(self):
|
||||
class TestItem(Item):
|
||||
name = Field()
|
||||
|
||||
i = TestItem()
|
||||
self.assertRaises(AttributeError, getattr, i, 'name')
|
||||
|
||||
def test_raise_setattr(self):
|
||||
class TestItem(Item):
|
||||
name = Field()
|
||||
|
||||
i = TestItem()
|
||||
self.assertRaises(AttributeError, setattr, i, 'name', 'john')
|
||||
|
||||
def test_custom_methods(self):
|
||||
class TestItem(Item):
|
||||
name = Field()
|
||||
|
Loading…
x
Reference in New Issue
Block a user