1
0
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:
Pablo Hoffman 2010-06-22 14:00:31 -03:00
parent baa523055f
commit 3bbad36998
2 changed files with 21 additions and 1 deletions

View File

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

View File

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