Add exact timestamp to Reddit submission data dictionary

This will enable easy implementation of the exact timestamp display as
requested in #3
This commit is contained in:
John Helmert
2019-08-01 14:18:42 -05:00
parent 8df2df93f6
commit f25a29100e
2 changed files with 37 additions and 0 deletions

View File

@@ -142,6 +142,27 @@ def test_content_humanize_timestamp():
assert Content.humanize_timestamp(timestamp, True) == '2 years ago'
def test_content_exact_timestamp():
# Less than a year ago.
timestamp = time.time() - 60 * 60
# Calling datetime.strftime("%m-%d %H:%M") should always give a string of
# length 11
assert len(Content.exact_timestamp(timestamp)) == 11
timestamp = time.time() - 60 * 60 * 24 * 31 * 12 * 2
# Similarly, calling datetime.strftime("%Y-%m-%d") should always give a
# string of length 10
assert len(Content.exact_timestamp(timestamp)) == 10
# Does it break on a leap day?
from datetime import datetime
leapday = (datetime(2016, 2, 29) - datetime(1970, 1, 1)).total_seconds()
Content.exact_timestamp(leapday)
def test_content_wrap_text():
text = 'four score\nand seven\n\n'

View File

@@ -233,6 +233,7 @@ class Content(object):
data['html'] = sub.selftext_html or ''
data['created'] = cls.humanize_timestamp(sub.created_utc)
data['created_long'] = cls.humanize_timestamp(sub.created_utc, True)
data['created_exact'] = cls.exact_timestamp(sub.created_utc)
data['comments'] = sub.num_comments
data['score'] = '{0}'.format('-' if sub.hide_score else sub.score)
data['author'] = name
@@ -253,9 +254,12 @@ class Content(object):
cls.humanize_timestamp(sub.edited))
data['edited_long'] = '(edit {})'.format(
cls.humanize_timestamp(sub.edited, True))
data['edited_exact'] = '(edit {})'.format(
cls.exact_timestamp(sub.edited))
else:
data['edited'] = ''
data['edited_long'] = ''
data['edited_exact'] = ''
if sub.url.split('/r/')[-1] == sub.permalink.split('/r/')[-1]:
data['url'] = 'self.{0}'.format(data['subreddit'])
@@ -398,6 +402,18 @@ class Content(object):
else:
return '%dyr' % years
@staticmethod
def exact_timestamp(utc_timestamp):
dt = datetime.fromtimestamp(utc_timestamp)
# https://stackoverflow.com/a/765990
yearsago = ((datetime.now() - dt).days / 365.2425)
if yearsago > 0:
return dt.strftime("%Y-%m-%d")
else:
return dt.strftime("%m-%d %H:%M")
@staticmethod
def wrap_text(text, width):
"""