from itertools import zip_longest
from urllib.parse import quote as urlquote, unquote as urlunquote
import time
from markdown import markdown as markdown_
import json as json_
import math
def datetimeformat (t, format='%Y-%m-%d %H:%M:%S'):
return time.strftime(format, time.localtime(t))
def append (t, at, rstrip=True):
if rstrip:
return t.rstrip() + at
else:
return t+at
def append_edit_link (t, url=None):
#
if url:
return t.rstrip() + '✍'.format(urlquote(url))
else:
return t.rstrip() + '✍'
def grouper(iterable, n, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(fillvalue=fillvalue, *args)
def humanize_bytes(bytesize, precision=2):
"""
Humanize byte size figures
"""
abbrevs = (
(1 << 50, 'PB'),
(1 << 40, 'TB'),
(1 << 30, 'GB'),
(1 << 20, 'MB'),
(1 << 10, 'kB'),
(1, 'bytes')
)
if bytesize == 1:
return '1 byte'
for factor, suffix in abbrevs:
if bytesize >= factor:
break
if factor == 1:
precision = 0
return '%.*f %s' % (precision, bytesize / float(factor), suffix)
def timecode(rawsecs, fract=True, alwaysfract=True, fractdelim='.', alwayshours=True):
# returns a string in HH:MM:SS[.xxx] notation
# if fract is True, uses .xxx if either necessary (non-zero)
# OR alwaysfract is True
hours = math.floor(rawsecs / 3600)
rawsecs -= hours * 3600
mins = math.floor(rawsecs / 60)
rawsecs -= mins * 60
if fract:
secs = math.floor(rawsecs)
rawsecs -= secs
if (rawsecs > 0 or alwaysfract):
fract = "%.03f" % rawsecs
if hours or alwayshours:
return "%02d:%02d:%02d%s%s" % (hours, mins, secs, fractdelim, \
fract[2:])
else:
return "%02d:%02d%s%s" % (mins, secs, fractdelim, fract[2:])
else:
if hours or alwayshours:
return "%02d:%02d:%02d" % (hours, mins, secs)
else:
return "%02d:%02d" % (mins, secs)
else:
secs = round(rawsecs)
if hours or alwayshours:
return "%02d:%02d:%02d" % (hours, mins, secs)
else:
return "%02d:%02d" % (mins, secs)
def markdown (src):
return markdown_(src)
def json (src):
return json_.dumps(src, indent=2)
all = {
'datetimeformat': datetimeformat,
'grouper': grouper,
'timecode': timecode,
'humanize_bytes': humanize_bytes,
'urlquote': urlquote,
'markdown': markdown,
'append': append,
'json': json,
'append_edit_link': append_edit_link
}