Skip to content
This repository has been archived by the owner on Jan 25, 2019. It is now read-only.

Commit

Permalink
Update the datetime handling/the tests for them to handle different t…
Browse files Browse the repository at this point in the history
…ypes.
  • Loading branch information
mythmon committed Oct 12, 2011
1 parent 487f292 commit 054e3eb
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
26 changes: 26 additions & 0 deletions wok/tests/test_util.py
Expand Up @@ -138,3 +138,29 @@ def test_all(self):

util.date_and_times(inp)
self.assertEquals(inp, out)

def test_types(self):
"""
YAML doesn't always give us the types we want. Handle that correctly.
"""
# Yaml will only make something a datetime if it also includes a time.
inp = {'datetime': date(2011, 12, 25)}
out = {
'datetime': datetime(2011, 12, 25),
'date': date(2011, 12, 25),
'time': None,
}

util.date_and_times(inp)
self.assertEquals(inp, out)

# Yaml likes to give times as the number of seconds.
inp = {'date': self.date, 'time': 43200}
out = {
'datetime': datetime(2011, 10, 12, 12, 0, 0),
'date': self.date,
'time': time(12, 0, 0),
}

util.date_and_times(inp)
self.assertEquals(inp, out)
19 changes: 16 additions & 3 deletions wok/util.py
@@ -1,6 +1,6 @@
import re
from unicodedata import normalize
from datetime import date, time, datetime
from datetime import date, time, datetime, timedelta

# From http://flask.pocoo.org/snippets/5/
_punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+')
Expand Down Expand Up @@ -29,14 +29,27 @@ def date_and_times(meta):

if 'date' in meta:
date_part = meta['date']

if 'time' in meta:
time_part = meta['time']

if 'datetime' in meta:
if date_part is None:
date_part = meta['datetime'].date()
if time_part is None:
if isinstance(meta['datetime'], datetime):
date_part = meta['datetime'].date()
elif isinstance(meta['datetime'], date):
date_part = meta['datetime']

if time_part is None and isinstance(meta['datetime'], datetime):
time_part = meta['datetime'].time()

if isinstance(time_part, int):
seconds = time_part % 60
minutes = (time_part / 60) % 60
hours = (time_part / 3600)

time_part = time(hours, minutes, seconds)

meta['date'] = date_part
meta['time'] = time_part

Expand Down

0 comments on commit 054e3eb

Please sign in to comment.