fork(1) download
  1. import functools
  2.  
  3. _DEPENDENCIES = {}
  4.  
  5. def register_dependency(dependency, object):
  6. _DEPENDENCIES[dependency] = object
  7.  
  8. def lookup_dependency(dependency):
  9. return _DEPENDENCIES[dependency]
  10.  
  11. def depends(*dependencies):
  12. def decorator(f):
  13. @functools.wraps(f)
  14. def wrapper(*args, **kwargs):
  15. for dependency in dependencies:
  16. if dependency not in kwargs:
  17. kwargs[dependency] = lookup_dependency(dependency)
  18. return f(*args, **kwargs)
  19. return wrapper
  20. return decorator
  21.  
  22. ################################################################################
  23.  
  24. register_dependency('printer', print)
  25.  
  26. class Greeter:
  27. @depends('printer')
  28. def __init__(self, printer):
  29. self.printer = printer
  30.  
  31. def greet(self, person):
  32. self.printer('Hello, {0}!'.format(person))
  33.  
  34. register_dependency('greeter', Greeter())
  35.  
  36. @depends('greeter')
  37. def salute(person, greeter):
  38. greeter.greet(person)
  39.  
  40. salute('rightfold')
  41.  
Success #stdin #stdout 0.03s 9440KB
stdin
Standard input is empty
stdout
Hello, rightfold!