Skip to content

Commit

Permalink
Merge 319b040 into 6b76260
Browse files Browse the repository at this point in the history
  • Loading branch information
hyperair committed Jul 25, 2017
2 parents 6b76260 + 319b040 commit d29f42f
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 5 deletions.
8 changes: 3 additions & 5 deletions hiro/utils.py
@@ -1,9 +1,9 @@
"""
random utility functions
"""
import calendar
import datetime
import functools
import time
from .errors import InvalidTypeError


Expand All @@ -13,7 +13,7 @@ def timedelta_to_seconds(delta):
"""
seconds = delta.microseconds
seconds += (delta.seconds + delta.days * 24 * 3600) * 10 ** 6
return seconds / 10 ** 6
return float(seconds) / 10 ** 6



Expand All @@ -25,7 +25,7 @@ def time_in_seconds(value):
if isinstance(value, (float, int)):
return value
elif isinstance(value, (datetime.date, datetime.datetime)):
return time.mktime(value.timetuple())
return calendar.timegm(value.timetuple())
else:
raise InvalidTypeError(value)

Expand All @@ -43,5 +43,3 @@ def wrapper(self, *args, **kwargs):
result = method(self, *args, **kwargs)
return self if result is None else result
return wrapper


56 changes: 56 additions & 0 deletions tests/test_utils.py
@@ -0,0 +1,56 @@
import datetime
import unittest

import hiro
from hiro.errors import InvalidTypeError
from hiro.utils import timedelta_to_seconds, time_in_seconds, chained


class TestTimeDeltaToSeconds(unittest.TestCase):
def test_fractional(self):
delta = datetime.timedelta(seconds=1, microseconds=1000)
self.assertAlmostEqual(timedelta_to_seconds(delta), 1.001)

def test_days(self):
delta = datetime.timedelta(days=10)
self.assertEqual(timedelta_to_seconds(delta),
delta.days * 24 * 60 * 60)


class TestTimeInSeconds(unittest.TestCase):
def test_passthrough(self):
self.assertEqual(time_in_seconds(1), 1)
self.assertEqual(time_in_seconds(1.0), 1.0)

def test_date(self):
d = datetime.date(1970, 1, 1)
self.assertEqual(time_in_seconds(d), 0)

def test_datetime(self):
d = datetime.datetime(1970, 1, 1, 0, 0, 0)
self.assertEqual(time_in_seconds(d), 0)

def test_invalid_type(self):
with self.assertRaises(InvalidTypeError):
time_in_seconds("this is a string")


class TestChained(unittest.TestCase):
class Foo(object):
@chained
def return_value(self, value=None):
return value

def setUp(self):
self.obj = self.Foo()

def test_no_return(self):
self.assertTrue(self.obj.return_value() is self.obj)

def test_with_return(self):
o = object()
self.assertTrue(self.obj.return_value(o) is o)

def test_kwargs(self):
o = object()
self.assertTrue(self.obj.return_value(value=o) is o)

0 comments on commit d29f42f

Please sign in to comment.