test_timeutils.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from __future__ import absolute_import
  2. from datetime import datetime, timedelta
  3. from celery.utils.timeutils import (
  4. delta_resolution,
  5. humanize_seconds,
  6. maybe_iso8601,
  7. maybe_timedelta,
  8. timedelta_seconds,
  9. timezone,
  10. rate,
  11. remaining,
  12. )
  13. from celery.tests.utils import Case
  14. class test_timeutils(Case):
  15. def test_delta_resolution(self):
  16. D = delta_resolution
  17. dt = datetime(2010, 3, 30, 11, 50, 58, 41065)
  18. deltamap = ((timedelta(days=2), datetime(2010, 3, 30, 0, 0)),
  19. (timedelta(hours=2), datetime(2010, 3, 30, 11, 0)),
  20. (timedelta(minutes=2), datetime(2010, 3, 30, 11, 50)),
  21. (timedelta(seconds=2), dt))
  22. for delta, shoulda in deltamap:
  23. self.assertEqual(D(dt, delta), shoulda)
  24. def test_timedelta_seconds(self):
  25. deltamap = ((timedelta(seconds=1), 1),
  26. (timedelta(seconds=27), 27),
  27. (timedelta(minutes=3), 3 * 60),
  28. (timedelta(hours=4), 4 * 60 * 60),
  29. (timedelta(days=3), 3 * 86400))
  30. for delta, seconds in deltamap:
  31. self.assertEqual(timedelta_seconds(delta), seconds)
  32. def test_timedelta_seconds_returns_0_on_negative_time(self):
  33. delta = timedelta(days=-2)
  34. self.assertEqual(timedelta_seconds(delta), 0)
  35. def test_humanize_seconds(self):
  36. t = ((4 * 60 * 60 * 24, '4.00 days'),
  37. (1 * 60 * 60 * 24, '1.00 day'),
  38. (4 * 60 * 60, '4.00 hours'),
  39. (1 * 60 * 60, '1.00 hour'),
  40. (4 * 60, '4.00 minutes'),
  41. (1 * 60, '1.00 minute'),
  42. (4, '4.00 seconds'),
  43. (1, '1.00 second'),
  44. (4.3567631221, '4.36 seconds'),
  45. (0, 'now'))
  46. for seconds, human in t:
  47. self.assertEqual(humanize_seconds(seconds), human)
  48. self.assertEqual(humanize_seconds(4, prefix='about '),
  49. 'about 4.00 seconds')
  50. def test_maybe_iso8601_datetime(self):
  51. now = datetime.now()
  52. self.assertIs(maybe_iso8601(now), now)
  53. def test_maybe_timedelta(self):
  54. D = maybe_timedelta
  55. for i in (30, 30.6):
  56. self.assertEqual(D(i), timedelta(seconds=i))
  57. self.assertEqual(D(timedelta(days=2)), timedelta(days=2))
  58. def test_remaining_relative(self):
  59. remaining(datetime.utcnow(), timedelta(hours=1), relative=True)
  60. class test_timezone(Case):
  61. def test_get_timezone_with_pytz(self):
  62. self.assertTrue(timezone.get_timezone('UTC'))
  63. class test_rate_limit_string(Case):
  64. def test_conversion(self):
  65. self.assertEqual(rate(999), 999)
  66. self.assertEqual(rate(7.5), 7.5)
  67. self.assertEqual(rate('2.5/s'), 2.5)
  68. self.assertEqual(rate('1456/s'), 1456)
  69. self.assertEqual(rate('100/m'),
  70. 100 / 60.0)
  71. self.assertEqual(rate('10/h'),
  72. 10 / 60.0 / 60.0)
  73. for zero in (0, None, '0', '0/m', '0/h', '0/s', '0.0/s'):
  74. self.assertEqual(rate(zero), 0)