Advertisement
zamotivator

Untitled

May 13th, 2012
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. def verify(*vargs, **vkwargs):
  2. """
  3. Return the decorator which verifies the *args and **kwargs
  4.  
  5. @param a_caller: the entity which acquire the verification.
  6. @type a_caller: any which have __name__ attribute.
  7.  
  8. @rtype: decorator
  9. """
  10. for var in vargs:
  11. if not isinstance(var, Var):
  12. raise TypeError("verify: expected Var or subclass of Var, "
  13. "but received '%s' with type %s." %
  14. (var, type(var).__name__))
  15. for (key, var) in vkwargs.iteritems():
  16. if not isinstance(var, Var):
  17. raise TypeError("verify: expected Var %s or subclass of Var, "
  18. "but received '%s' with type %s." %
  19. (key, var, type(var).__name__))
  20. if ENABLED:
  21. def decorator(f):
  22. """
  23. Decorator which verify the count and types of received arguments.
  24. """
  25. @functools.wraps(f)
  26. def wrapper(*args, **kwargs):
  27. if len(args) != len(vargs):
  28. raise TypeError("%s: count of expected arguments (%s) and "
  29. "count of received arguments (%s) is different"
  30. % (f.__name__, len(vargs), len(args)))
  31. for (expected, received) in zip(vargs, args):
  32. expected.verify(f, received)
  33. kw_expected= set(vkwargs.iterkeys())
  34. kw_received= set(kwargs.iterkeys())
  35. kw_verify= kw_expected.intersection(kw_received)
  36. for name in kw_verify:
  37. vkwargs[name].verify(f, kwargs[name])
  38. print "args=" + str(args)
  39. print "kwargs=" + str(kwargs)
  40. return f(*args, **kwargs)
  41. return wrapper
  42. else:
  43. def decorator(f):
  44. return f
  45. return decorator
  46.  
  47. def verify_method(*vargs, **vkwargs):
  48. vargs= tuple([Proxy()] + list(vargs))
  49. return verify(*vargs, **vkwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement