test_context.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # -*- coding: utf-8 -*-'
  2. from celery.app.task import Context
  3. # Retrieve the values of all context attributes as a
  4. # dictionary in an implementation-agnostic manner.
  5. def get_context_as_dict(ctx, getter=getattr):
  6. defaults = {}
  7. for attr_name in dir(ctx):
  8. if attr_name.startswith('_'):
  9. continue # Ignore pseudo-private attributes
  10. attr = getter(ctx, attr_name)
  11. if callable(attr):
  12. continue # Ignore methods and other non-trivial types
  13. defaults[attr_name] = attr
  14. return defaults
  15. default_context = get_context_as_dict(Context())
  16. class test_Context:
  17. def test_default_context(self):
  18. # A bit of a tautological test, since it uses the same
  19. # initializer as the default_context constructor.
  20. defaults = dict(default_context, children=[])
  21. assert get_context_as_dict(Context()) == defaults
  22. def test_updated_context(self):
  23. expected = dict(default_context)
  24. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  25. ctx = Context()
  26. expected.update(changes)
  27. ctx.update(changes)
  28. assert get_context_as_dict(ctx) == expected
  29. assert get_context_as_dict(Context()) == default_context
  30. def test_modified_context(self):
  31. expected = dict(default_context)
  32. ctx = Context()
  33. expected['id'] = 'unique id'
  34. expected['args'] = ['some', 1]
  35. ctx.id = 'unique id'
  36. ctx.args = ['some', 1]
  37. assert get_context_as_dict(ctx) == expected
  38. assert get_context_as_dict(Context()) == default_context
  39. def test_cleared_context(self):
  40. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  41. ctx = Context()
  42. ctx.update(changes)
  43. ctx.clear()
  44. defaults = dict(default_context, children=[])
  45. assert get_context_as_dict(ctx) == defaults
  46. assert get_context_as_dict(Context()) == defaults
  47. def test_context_get(self):
  48. expected = dict(default_context)
  49. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  50. ctx = Context()
  51. expected.update(changes)
  52. ctx.update(changes)
  53. ctx_dict = get_context_as_dict(ctx, getter=Context.get)
  54. assert ctx_dict == expected
  55. assert get_context_as_dict(Context()) == default_context