switched to python3
This commit is contained in:
parent
b98d919d3c
commit
88340abec2
4 changed files with 45 additions and 33 deletions
32
lib/spark.py
32
lib/spark.py
|
|
@ -70,9 +70,11 @@ def interpolate_data(input_data, max_width):
|
||||||
Resample `input_data` to number of `max_width` counts
|
Resample `input_data` to number of `max_width` counts
|
||||||
"""
|
"""
|
||||||
|
|
||||||
x = list(range(len(input_data)))
|
input_data = list(input_data)
|
||||||
|
input_data_len = len(input_data)
|
||||||
|
x = list(range(input_data_len))
|
||||||
y = input_data
|
y = input_data
|
||||||
xvals = np.linspace(0, len(input_data)-1, max_width)
|
xvals = np.linspace(0, input_data_len-1, max_width)
|
||||||
yinterp = interp1d(x, y, kind='cubic')
|
yinterp = interp1d(x, y, kind='cubic')
|
||||||
return yinterp(xvals)
|
return yinterp(xvals)
|
||||||
|
|
||||||
|
|
@ -82,7 +84,7 @@ def jq_query(query, data_parsed):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pyjq_data = pyjq.all(query, data_parsed)
|
pyjq_data = pyjq.all(query, data_parsed)
|
||||||
data = map(float, pyjq_data)
|
data = list(map(float, pyjq_data))
|
||||||
return data
|
return data
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
@ -136,11 +138,11 @@ def draw_spark(data, height, width, color_data):
|
||||||
orig_max_line = max_line
|
orig_max_line = max_line
|
||||||
|
|
||||||
# aligning it
|
# aligning it
|
||||||
if len(max_line)/2 < j and len(max_line)/2 + j < width:
|
if len(max_line)//2 < j and len(max_line)//2 + j < width:
|
||||||
spaces = " "*(j - len(max_line)/2)
|
spaces = " "*(j - len(max_line)//2)
|
||||||
max_line = spaces + max_line # + spaces
|
max_line = spaces + max_line # + spaces
|
||||||
max_line = max_line + " "*(width - len(max_line))
|
max_line = max_line + " "*(width - len(max_line))
|
||||||
elif len(max_line)/2 + j >= width:
|
elif len(max_line)//2 + j >= width:
|
||||||
max_line = " "*(width - len(max_line)) + max_line
|
max_line = " "*(width - len(max_line)) + max_line
|
||||||
|
|
||||||
max_line = max_line.replace(orig_max_line, colorize(orig_max_line, "38;5;33"))
|
max_line = max_line.replace(orig_max_line, colorize(orig_max_line, "38;5;33"))
|
||||||
|
|
@ -160,13 +162,13 @@ def draw_diagram(data, height, width):
|
||||||
option.size = diagram.Point([width, height])
|
option.size = diagram.Point([width, height])
|
||||||
option.mode = 'g'
|
option.mode = 'g'
|
||||||
|
|
||||||
stream = StringIO.StringIO()
|
stream = io.BytesIO()
|
||||||
gram = diagram.DGWrapper(
|
gram = diagram.DGWrapper(
|
||||||
data=[list(data), range(len(data))],
|
data=[list(data), range(len(data))],
|
||||||
dg_option=option,
|
dg_option=option,
|
||||||
ostream=stream)
|
ostream=stream)
|
||||||
gram.show()
|
gram.show()
|
||||||
return stream.getvalue()
|
return stream.getvalue().decode("utf-8")
|
||||||
# }}}
|
# }}}
|
||||||
# draw_date {{{
|
# draw_date {{{
|
||||||
|
|
||||||
|
|
@ -185,7 +187,7 @@ def draw_date(config, geo_data):
|
||||||
datetime_ = datetime_day_start + datetime.timedelta(hours=24*day)
|
datetime_ = datetime_day_start + datetime.timedelta(hours=24*day)
|
||||||
date = format_datetime(datetime_, "EEE dd MMM", locale=locale, tzinfo=tzinfo)
|
date = format_datetime(datetime_, "EEE dd MMM", locale=locale, tzinfo=tzinfo)
|
||||||
|
|
||||||
spaces = ((24-len(date))/2)*" "
|
spaces = ((24-len(date))//2)*" "
|
||||||
date = spaces + date + spaces
|
date = spaces + date + spaces
|
||||||
date = " "*(24-len(date)) + date
|
date = " "*(24-len(date)) + date
|
||||||
answer += date
|
answer += date
|
||||||
|
|
@ -326,7 +328,7 @@ def draw_wind(data, color_data):
|
||||||
|
|
||||||
degree = int(degree)
|
degree = int(degree)
|
||||||
if degree:
|
if degree:
|
||||||
wind_direction = constants.WIND_DIRECTION[((degree+22)%360)/45]
|
wind_direction = constants.WIND_DIRECTION[((degree+22)%360)//45]
|
||||||
else:
|
else:
|
||||||
wind_direction = ""
|
wind_direction = ""
|
||||||
|
|
||||||
|
|
@ -470,15 +472,15 @@ def textual_information(data_parsed, geo_data, config):
|
||||||
tmp_output = []
|
tmp_output = []
|
||||||
tmp_output.append(' Now: %%{{NOW(%s)}}' % timezone)
|
tmp_output.append(' Now: %%{{NOW(%s)}}' % timezone)
|
||||||
tmp_output.append('Dawn: %s'
|
tmp_output.append('Dawn: %s'
|
||||||
% str(sun['dawn'].strftime("%H:%M:%S")))
|
% str(current_sun['dawn'].strftime("%H:%M:%S")))
|
||||||
tmp_output.append('Sunrise: %s'
|
tmp_output.append('Sunrise: %s'
|
||||||
% str(sun['sunrise'].strftime("%H:%M:%S")))
|
% str(current_sun['sunrise'].strftime("%H:%M:%S")))
|
||||||
tmp_output.append(' Zenith: %s'
|
tmp_output.append(' Zenith: %s'
|
||||||
% str(sun['noon'].strftime("%H:%M:%S ")))
|
% str(current_sun['noon'].strftime("%H:%M:%S ")))
|
||||||
tmp_output.append('Sunset: %s'
|
tmp_output.append('Sunset: %s'
|
||||||
% str(sun['sunset'].strftime("%H:%M:%S")))
|
% str(current_sun['sunset'].strftime("%H:%M:%S")))
|
||||||
tmp_output.append('Dusk: %s'
|
tmp_output.append('Dusk: %s'
|
||||||
% str(sun['dusk'].strftime("%H:%M:%S")))
|
% str(current_sun['dusk'].strftime("%H:%M:%S")))
|
||||||
tmp_output = [
|
tmp_output = [
|
||||||
re.sub("^([A-Za-z]*:)", lambda m: colorize(m.group(1), "2"), x)
|
re.sub("^([A-Za-z]*:)", lambda m: colorize(m.group(1), "2"), x)
|
||||||
for x in tmp_output]
|
for x in tmp_output]
|
||||||
|
|
|
||||||
31
lib/wttr.py
31
lib/wttr.py
|
|
@ -8,6 +8,7 @@ from gevent.monkey import patch_all
|
||||||
from gevent.subprocess import Popen, PIPE, STDOUT
|
from gevent.subprocess import Popen, PIPE, STDOUT
|
||||||
patch_all()
|
patch_all()
|
||||||
|
|
||||||
|
import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
|
@ -36,12 +37,12 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
if local_url is None:
|
if local_url is None:
|
||||||
url = ""
|
url = ""
|
||||||
else:
|
else:
|
||||||
url = local_url.encode('utf-8')
|
url = local_url
|
||||||
|
|
||||||
if local_location is None:
|
if local_location is None:
|
||||||
location = ""
|
location = ""
|
||||||
else:
|
else:
|
||||||
location = local_location.encode('utf-8')
|
location = local_location
|
||||||
|
|
||||||
pic_url = url.replace('?', '_')
|
pic_url = url.replace('?', '_')
|
||||||
|
|
||||||
|
|
@ -120,9 +121,12 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
|
|
||||||
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
||||||
stdout, stderr = p.communicate()
|
stdout, stderr = p.communicate()
|
||||||
|
stdout = stdout.decode("utf-8")
|
||||||
|
stderr = stderr.decode("utf-8")
|
||||||
|
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
print("ERROR: location not found: %s" % location)
|
print("ERROR: location not found: %s" % location)
|
||||||
if 'Unable to find any matching weather location to the query submitted' in stderr:
|
if u'Unable to find any matching weather location to the query submitted' in stderr:
|
||||||
if location != NOT_FOUND_LOCATION:
|
if location != NOT_FOUND_LOCATION:
|
||||||
NOT_FOUND_MESSAGE_HEADER = u"ERROR: %s: %s\n---\n\n" % (get_message('UNKNOWN_LOCATION', lang), location)
|
NOT_FOUND_MESSAGE_HEADER = u"ERROR: %s: %s\n---\n\n" % (get_message('UNKNOWN_LOCATION', lang), location)
|
||||||
location = NOT_FOUND_LOCATION
|
location = NOT_FOUND_LOCATION
|
||||||
|
|
@ -135,8 +139,8 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
os.makedirs(dirname)
|
os.makedirs(dirname)
|
||||||
|
|
||||||
if location_not_found:
|
if location_not_found:
|
||||||
stdout += get_message('NOT_FOUND_MESSAGE', lang).encode('utf-8')
|
stdout += get_message('NOT_FOUND_MESSAGE', lang)
|
||||||
stdout = NOT_FOUND_MESSAGE_HEADER.encode('utf-8') + stdout
|
stdout = NOT_FOUND_MESSAGE_HEADER + stdout
|
||||||
|
|
||||||
if 'days' in query:
|
if 'days' in query:
|
||||||
if query['days'] == '0':
|
if query['days'] == '0':
|
||||||
|
|
@ -146,7 +150,7 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
if query['days'] == '2':
|
if query['days'] == '2':
|
||||||
stdout = "\n".join(stdout.splitlines()[:27]) + "\n"
|
stdout = "\n".join(stdout.splitlines()[:27]) + "\n"
|
||||||
|
|
||||||
first = stdout.splitlines()[0].decode('utf-8')
|
first = stdout.splitlines()[0]
|
||||||
rest = stdout.splitlines()[1:]
|
rest = stdout.splitlines()[1:]
|
||||||
if query.get('no-caption', False):
|
if query.get('no-caption', False):
|
||||||
|
|
||||||
|
|
@ -158,7 +162,7 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
|
|
||||||
if separator:
|
if separator:
|
||||||
first = first.split(separator,1)[1]
|
first = first.split(separator,1)[1]
|
||||||
stdout = "\n".join([first.strip().encode('utf-8')] + rest) + "\n"
|
stdout = "\n".join([first.strip()] + rest) + "\n"
|
||||||
|
|
||||||
if query.get('no-terminal', False):
|
if query.get('no-terminal', False):
|
||||||
stdout = remove_ansi(stdout)
|
stdout = remove_ansi(stdout)
|
||||||
|
|
@ -172,9 +176,9 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
and not query.get('no-caption')
|
and not query.get('no-caption')
|
||||||
and not query.get('days') == '0'):
|
and not query.get('days') == '0'):
|
||||||
line = "%s: %s [%s]\n" % (
|
line = "%s: %s [%s]\n" % (
|
||||||
get_message('LOCATION', lang).encode('utf-8'),
|
get_message('LOCATION', lang),
|
||||||
full_address.encode('utf-8'),
|
full_address,
|
||||||
location.encode('utf-8'))
|
location)
|
||||||
stdout += line
|
stdout += line
|
||||||
|
|
||||||
if query.get('padding', False):
|
if query.get('padding', False):
|
||||||
|
|
@ -191,13 +195,15 @@ def get_wetter(location, ip, html=False, lang=None, query=None, location_name=No
|
||||||
|
|
||||||
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE )
|
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE )
|
||||||
stdout, stderr = p.communicate(stdout)
|
stdout, stderr = p.communicate(stdout)
|
||||||
|
stdout = stdout.decode("utf-8")
|
||||||
|
stderr = stderr.decode("utf-8")
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
error(stdout + stderr)
|
error(stdout + stderr)
|
||||||
|
|
||||||
if query.get('inverted_colors'):
|
if query.get('inverted_colors'):
|
||||||
stdout = stdout.replace('<body class="">', '<body class="" style="background:white;color:#777777">')
|
stdout = stdout.replace('<body class="">', '<body class="" style="background:white;color:#777777">')
|
||||||
|
|
||||||
title = "<title>%s</title>" % first.encode('utf-8')
|
title = "<title>%s</title>" % first
|
||||||
opengraph = get_opengraph()
|
opengraph = get_opengraph()
|
||||||
stdout = re.sub("<head>", "<head>" + title + opengraph, stdout)
|
stdout = re.sub("<head>", "<head>" + title + opengraph, stdout)
|
||||||
open(filename+'.html', 'w').write(stdout)
|
open(filename+'.html', 'w').write(stdout)
|
||||||
|
|
@ -232,6 +238,7 @@ def get_moon(location, html=False, lang=None, query=None):
|
||||||
if lang:
|
if lang:
|
||||||
env['LANG'] = lang
|
env['LANG'] = lang
|
||||||
p = Popen(cmd, stdout=PIPE, stderr=PIPE, env=env)
|
p = Popen(cmd, stdout=PIPE, stderr=PIPE, env=env)
|
||||||
|
stdout = stdout.decode("utf-8")
|
||||||
stdout = p.communicate()[0]
|
stdout = p.communicate()[0]
|
||||||
|
|
||||||
if query.get('no-terminal', False):
|
if query.get('no-terminal', False):
|
||||||
|
|
@ -240,6 +247,8 @@ def get_moon(location, html=False, lang=None, query=None):
|
||||||
if html:
|
if html:
|
||||||
p = Popen(["bash", ANSI2HTML, "--palette=solarized", "--bg=dark"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
|
p = Popen(["bash", ANSI2HTML, "--palette=solarized", "--bg=dark"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
|
||||||
stdout, stderr = p.communicate(stdout)
|
stdout, stderr = p.communicate(stdout)
|
||||||
|
stdout = stdout.decode("utf-8")
|
||||||
|
stderr = stderr.decode("utf-8")
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
error(stdout + stderr)
|
error(stdout + stderr)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ def render_wind(data, query):
|
||||||
degree = ""
|
degree = ""
|
||||||
|
|
||||||
if degree:
|
if degree:
|
||||||
wind_direction = WIND_DIRECTION[((degree+22)%360)/45]
|
wind_direction = WIND_DIRECTION[((degree+22)%360)//45]
|
||||||
else:
|
else:
|
||||||
wind_direction = ""
|
wind_direction = ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ def show_text_file(name, lang):
|
||||||
text = text\
|
text = text\
|
||||||
.replace('NUMBER_OF_LANGUAGES', str(len(SUPPORTED_LANGS)))\
|
.replace('NUMBER_OF_LANGUAGES', str(len(SUPPORTED_LANGS)))\
|
||||||
.replace('SUPPORTED_LANGUAGES', ' '.join(SUPPORTED_LANGS))
|
.replace('SUPPORTED_LANGUAGES', ' '.join(SUPPORTED_LANGS))
|
||||||
return text.decode('utf-8')
|
return text
|
||||||
|
|
||||||
def client_ip_address(request):
|
def client_ip_address(request):
|
||||||
"""
|
"""
|
||||||
|
|
@ -238,8 +238,8 @@ def wttr(location, request):
|
||||||
query = parse_query.metric_or_imperial(query, lang, us_ip=us_ip)
|
query = parse_query.metric_or_imperial(query, lang, us_ip=us_ip)
|
||||||
|
|
||||||
# logging query
|
# logging query
|
||||||
orig_location_utf8 = (orig_location or "").encode('utf-8')
|
orig_location_utf8 = (orig_location or "")
|
||||||
location_utf8 = location.encode('utf-8')
|
location_utf8 = location
|
||||||
use_imperial = query.get('use_imperial', False)
|
use_imperial = query.get('use_imperial', False)
|
||||||
log(" ".join(map(str,
|
log(" ".join(map(str,
|
||||||
[ip_addr, user_agent, orig_location_utf8, location_utf8, use_imperial, lang])))
|
[ip_addr, user_agent, orig_location_utf8, location_utf8, use_imperial, lang])))
|
||||||
|
|
@ -297,16 +297,17 @@ def wttr(location, request):
|
||||||
output = add_buttons(output)
|
output = add_buttons(output)
|
||||||
else:
|
else:
|
||||||
#output += '\n' + get_message('NEW_FEATURE', lang).encode('utf-8')
|
#output += '\n' + get_message('NEW_FEATURE', lang).encode('utf-8')
|
||||||
output += '\n' + get_message('FOLLOW_ME', lang).encode('utf-8') + '\n'
|
output += '\n' + get_message('FOLLOW_ME', lang) + '\n'
|
||||||
|
|
||||||
return _wrap_response(output, html_output)
|
return _wrap_response(output, html_output)
|
||||||
|
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
# if 'Malformed response' in str(exception) \
|
# if 'Malformed response' in str(exception) \
|
||||||
# or 'API key has reached calls per day allowed limit' in str(exception):
|
# or 'API key has reached calls per day allowed limit' in str(exception):
|
||||||
|
logging.error("Exception has occured", exc_info=1)
|
||||||
if html_output:
|
if html_output:
|
||||||
return _wrap_response(MALFORMED_RESPONSE_HTML_PAGE, html_output)
|
return _wrap_response(MALFORMED_RESPONSE_HTML_PAGE, html_output)
|
||||||
return _wrap_response(get_message('CAPACITY_LIMIT_REACHED', lang).encode('utf-8'), html_output)
|
return _wrap_response(get_message('CAPACITY_LIMIT_REACHED', lang), html_output)
|
||||||
# logging.error("Exception has occured", exc_info=1)
|
# logging.error("Exception has occured", exc_info=1)
|
||||||
# return "ERROR"
|
# return "ERROR"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue