summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2013-01-30 20:56:55 +0100
committerMarkus Holtermann <info@markusholtermann.eu>2013-01-30 20:56:55 +0100
commit2443c414af8901e89b1b55e126ab4867c2cf91e4 (patch)
tree54e734c0b42358c5c066cfe872d7c73d99ad77e3
parent41af0a769e8896b6df5baccfff31d5ccea3f7da8 (diff)
downloadbvg-grabber-2443c414af8901e89b1b55e126ab4867c2cf91e4.tar.gz
bvg-grabber-2443c414af8901e89b1b55e126ab4867c2cf91e4.tar.bz2
bvg-grabber-2443c414af8901e89b1b55e126ab4867c2cf91e4.zip
Move hourformat and fullformat to separate module. Add and adjust tests
-rw-r--r--bvggrabber/api/__init__.py8
-rw-r--r--bvggrabber/utils/format.py35
-rw-r--r--tests/test_api.py27
-rw-r--r--tests/test_format.py31
4 files changed, 74 insertions, 27 deletions
diff --git a/bvggrabber/api/__init__.py b/bvggrabber/api/__init__.py
index 8568d00..ba68450 100644
--- a/bvggrabber/api/__init__.py
+++ b/bvggrabber/api/__init__.py
@@ -4,13 +4,11 @@ import json
import re
from functools import total_ordering
-from math import ceil, floor
+from math import floor
from dateutil.parser import parse
-
-fullformat = lambda dt: dt.strftime('%Y-%m-%d %H:%M:%S')
-hourformat = lambda dt: dt.strftime('%H:%M')
+from bvggrabber.utils.format import hourformat, fullformat
def compute_remaining(start, end):
@@ -90,7 +88,7 @@ class Departure(object):
would require some kind of geo location in order to define a *total
order*.
"""
- return (remaining < other.remaining)
+ return (self.remaining < other.remaining)
def __str__(self):
return "Start: %s, End: %s, when: %s, now: %s, line: %s" % (
diff --git a/bvggrabber/utils/format.py b/bvggrabber/utils/format.py
index 98bbaee..603124b 100644
--- a/bvggrabber/utils/format.py
+++ b/bvggrabber/utils/format.py
@@ -1,7 +1,40 @@
#-*- coding: utf-8 -*-
-def int2bin(i, length):
+def fullformat(dt):
+ """Formats a datetime object as YYYY-MM-DD HH:MM:SS
+
+ :param datetime dt: The datetime.datetime object to format
+ :return: A formattet string
+ :rtype: str
+
+ """
+ return dt.strftime('%Y-%m-%d %H:%M:%S')
+
+
+def hourformat(dt):
+ """Formats a datetime object as HH:MM
+
+ :param datetime dt: The datetime.datetime object to format
+ :return: A formattet string
+ :rtype: str
+
+ """
+ return dt.strftime('%H:%M')
+
+
+def int2bin(i, length=8):
+ """Returns the bit representation of the given integer with a minimum
+ length of ``length``. E.g. ``int2bin(109, 7) == '1101101'`` and
+ ``int2bin(109, 8) == '01101101'.
+
+ :param int i: The integer to format
+ :param int length: The minimum length of the output string. The string is
+ zero-padded on the left.
+ :return: The bit representation of the given int
+ :rtype: string
+
+ """
if not isinstance(length, int):
raise ValueError("expected int for length")
return ('{:0>' + str(length) + 'b}').format(i)
diff --git a/tests/test_api.py b/tests/test_api.py
index 778b9b8..cf111d7 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -3,23 +3,8 @@ import datetime
import json
import unittest
-from bvggrabber.api import QueryApi, Departure, fullformat, \
- compute_remaining
-
-from bvggrabber.utils.format import int2bin
-
-
-class TestUtils(unittest.TestCase):
-
- def test_int2bin(self):
- nums = [(0b1101110, 7, '1101110'),
- (0b0010001, 7, '0010001'),
- (0b111111, 6, '111111'),
- (0b00000001, 8, '00000001'),
- (0b00111, 5, '00111'),
- (0b1100011, 7, '1100011')]
- for b, l, s in nums:
- self.assertEqual(int2bin(b, l), s)
+from bvggrabber.api import QueryApi, Departure, compute_remaining
+from bvggrabber.utils.format import fullformat
class TestFunctions(unittest.TestCase):
@@ -256,9 +241,9 @@ class TestDepartureTotalOrder(unittest.TestCase):
def test_sorting_single(self):
l = [self.dt_now1, self.dt_later, self.dt_earlier]
self.assertEqual([self.dt_earlier, self.dt_now1, self.dt_later],
- sorted(l))
+ sorted(l))
self.assertEqual([self.dt_later, self.dt_now1, self.dt_earlier],
- sorted(l, reverse=True))
+ sorted(l, reverse=True))
def test_sorting_multiple(self):
l = [self.dt_now1, self.dt_earlier, self.dt_later,
@@ -267,8 +252,8 @@ class TestDepartureTotalOrder(unittest.TestCase):
self.assertEqual([self.dt_earlier, self.dt_earlier, self.dt_earlier,
self.dt_now1, self.dt_now2, self.dt_now2,
self.dt_later, self.dt_later, self.dt_later],
- sorted(l))
+ sorted(l))
self.assertEqual([self.dt_later, self.dt_later, self.dt_later,
self.dt_now1, self.dt_now2, self.dt_now2,
self.dt_earlier, self.dt_earlier, self.dt_earlier],
- sorted(l, reverse=True))
+ sorted(l, reverse=True))
diff --git a/tests/test_format.py b/tests/test_format.py
new file mode 100644
index 0000000..9c3e35e
--- /dev/null
+++ b/tests/test_format.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+import datetime
+import unittest
+
+from bvggrabber.api import fullformat, hourformat
+from bvggrabber.utils.format import int2bin
+
+
+class TestFormats(unittest.TestCase):
+
+ def test_int2bin(self):
+ nums = [(0b1101110, 7, '1101110'),
+ (0b0010001, 7, '0010001'),
+ (0b111111, 6, '111111'),
+ (0b00000001, 8, '00000001'),
+ (0b00111, 5, '00111'),
+ (0b00111, 8, '00000111'),
+ (0b1100011, 7, '1100011')]
+ for b, l, s in nums:
+ self.assertEqual(int2bin(b, l), s)
+
+ def test_datetime_formats(self):
+ f = [(datetime.datetime(2013, 1, 2, 3, 4, 0),
+ "2013-01-02 03:04:00", "03:04"),
+ (datetime.datetime(2013, 1, 2),
+ "2013-01-02 00:00:00", "00:00"),
+ (datetime.datetime(2013, 1, 2, 3, 4, 30),
+ "2013-01-02 03:04:30", "03:04")]
+ for dt, sf, sh in f:
+ self.assertEqual(fullformat(dt), sf)
+ self.assertEqual(hourformat(dt), sh)