Merge pull request #134 from claytron/issue_17_deferred_docstring

update deferred decorator to retain original info
This commit is contained in:
Tres Seaver
2013-08-19 11:42:14 -07:00
2 changed files with 14 additions and 4 deletions

View File

@@ -2,6 +2,7 @@
import datetime
import decimal
import functools
import time
import itertools
import pprint
@@ -2124,6 +2125,7 @@ class deferred(object):
""" A decorator which can be used to define deferred schema values
(missing values, widgets, validators, etc.)"""
def __init__(self, wrapped):
functools.update_wrapper(self, wrapped)
self.wrapped = wrapped
def __call__(self, node, kw):

View File

@@ -2369,7 +2369,7 @@ class TestSchemaNode(unittest.TestCase):
def test_required_deferred(self):
from colander import deferred
node = self._makeOne(None, missing=deferred('123'))
node = self._makeOne(None, missing=deferred(lambda: '123'))
self.assertEqual(node.required, True)
def test_deserialize_no_validator(self):
@@ -2457,7 +2457,7 @@ class TestSchemaNode(unittest.TestCase):
from colander import Invalid
typ = DummyType()
node = self._makeOne(typ)
node.missing = deferred('123')
node.missing = deferred(lambda: '123')
self.assertRaises(Invalid, node.deserialize, null)
def test_serialize(self):
@@ -2492,7 +2492,7 @@ class TestSchemaNode(unittest.TestCase):
from colander import null
typ = DummyType()
node = self._makeOne(typ)
node.default = deferred('abc')
node.default = deferred(lambda: 'abc')
self.assertEqual(node.serialize(), null)
def test_add(self):
@@ -3029,7 +3029,7 @@ class TestDeferred(unittest.TestCase):
return deferred(wrapped)
def test_ctor(self):
wrapped = '123'
wrapped = lambda: 'foo'
inst = self._makeOne(wrapped)
self.assertEqual(inst.wrapped, wrapped)
@@ -3044,6 +3044,14 @@ class TestDeferred(unittest.TestCase):
result= inst(n, k)
self.assertEqual(result, 'abc')
def test_retain_func_details(self):
def wrapper_func(node, kw):
"""Can you hear me now?"""
pass # pragma: no cover
inst = self._makeOne(wrapper_func)
self.assertEqual(inst.__doc__, 'Can you hear me now?')
self.assertEqual(inst.__name__, 'wrapper_func')
class TestSchema(unittest.TestCase):
def test_alias(self):
from colander import Schema