Skip to content
2 changes: 1 addition & 1 deletion calipso/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ def import_from_json(self, zip_fname):
fshape = data[key][shape]
tag = 'shape' + str(new)
time = datetime.strptime(data['time'], DATEFORMAT)
hdf = data['hdfFile']
hdf = data['hdffile']
color = fshape['color']
coordinates = fshape['coordinates']
attributes = fshape['attributes']
Expand Down
44 changes: 32 additions & 12 deletions calipso/importdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from constants import CSV, TXT, DATEFORMAT, ICO
from sqlalchemy import or_, Time, cast
from db import db, DatabasePolygon
from tools.tools import center, get_shape_ranges, find_between, get_sec
from tools.tools import center, get_shape_ranges, find_between, get_sec, coord_tuple_list, coord_string
from tools.treelistbox import TreeListBox
from tools.tooltip import create_tool_tip
from log.log import logger
Expand Down Expand Up @@ -60,14 +60,15 @@ def __init__(self, root, master):
self.filter_file = IntVar() # int_var for filtering by file
self.advance_dialog = False
self.extract_dialog = False
self.column_titles = ['name', 'plot', 'time range', 'latitude range',
self.column_titles = ['name', 'plot', 'time range', 'coordinates (time and alt.)','latitude range',
'altitude range', 'attributes', 'notes', 'last edited',
'file']

self.plot_type = StringVar()
self.beg_time = None
self.end_time = None
self.beg_lat = None
self.coordinates = None
self.beg_lat = None
self.end_lat = None
self.beg_alt = None
self.end_alt = None
Expand Down Expand Up @@ -185,10 +186,15 @@ def get_current_file_shapes(self):
hdf=fn
):
time_range = '%s - %s' % (obj.begin_time.strftime(DATEFORMAT), obj.end_time.strftime('%H:%M:%S'))
altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)

coord_list = obj.coordinates
final_coord_list = coord_tuple_list(coord_list)
final_coord_list = coord_string(final_coord_list)

altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)
lat_range = '%.3f - %.3f' % (obj.begin_lat, obj.end_lat)
lst.append(
(obj.tag, obj.plot, time_range, lat_range, altitude_range, obj.attributes[1:-1],
(obj.tag, obj.plot, time_range, final_coord_list, lat_range, altitude_range, obj.attributes[1:-1],
obj.notes, obj.time_.strftime(DATEFORMAT), obj.hdf))
if not lst:
logger.warning('Query returned None, no shapes found')
Expand Down Expand Up @@ -228,10 +234,14 @@ def refine_search(self, event):
DatabasePolygon.attributes.contains(self.__search_string.strip()),
DatabasePolygon.notes.contains(self.__search_string.strip()))):
time_range = '%s - %s' % (obj.begin_time.strftime(DATEFORMAT), obj.end_time.strftime('%H:%M:%S'))
altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)
coord_list = obj.coordinates
final_coord_list = coord_tuple_list(coord_list)
final_coord_list = coord_string(final_coord_list)
altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)
lat_range = '%.3f - %.3f' % (obj.begin_lat, obj.end_lat)
lst.append( # append any objects that were returned by the query
(obj.tag, obj.plot, time_range, lat_range, altitude_range, obj.attributes[1:-1],
(obj.tag, obj.plot, time_range, final_coord_list,
lat_range, altitude_range, obj.attributes[1:-1],
obj.notes, obj.time_.strftime(DATEFORMAT), obj.hdf))
# push new query onto the stack and set display to list
if self.filter_file.get():
Expand Down Expand Up @@ -320,10 +330,15 @@ def __display_all(self):
self.__stack.append(self.tree.info)
for obj in self.session.query(DatabasePolygon).all():
time_range = '%s - %s' % (obj.begin_time.strftime(DATEFORMAT), obj.end_time.strftime('%H:%M:%S'))
altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)

coord_list = obj.coordinates
final_coord_list = coord_tuple_list(coord_list)
final_coord_list = coord_string(final_coord_list)

altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)
lat_range = '%.3f - %.3f' % (obj.begin_lat, obj.end_lat)
lst.append( # user see's this list
(obj.tag, obj.plot, time_range, lat_range, altitude_range, obj.attributes[1:-1],
lst.append(# user sees this list
(obj.tag, obj.plot, time_range, final_coord_list, lat_range, altitude_range, obj.attributes[1:-1],
obj.notes, obj.time_.strftime(DATEFORMAT), obj.hdf))

self.tree.info = lst
Expand Down Expand Up @@ -402,7 +417,12 @@ def receive_advanced_search(self, observer):

for obj in query_result:
time_range = '%s - %s' % (obj.begin_time.strftime(DATEFORMAT), obj.end_time.strftime('%H:%M:%S'))
altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)

coord_list = obj.coordinates
final_coord_list = coord_tuple_list(coord_list)
final_coord_list = coord_string(final_coord_list)

altitude_range = '%.3f - %.3f' % (obj.begin_alt, obj.end_alt)
lat_range = '%.3f - %.3f' % (obj.begin_lat, obj.end_lat)
# If we're parsing a date, we can't just filter as we must transform
# coordinates into time_range first, so we need to manually check and
Expand All @@ -417,7 +437,7 @@ def receive_advanced_search(self, observer):
continue

lazy_list.append(
(obj.tag, obj.plot, time_range, lat_range, altitude_range, obj.attributes[1:-1],
(obj.tag, obj.plot, time_range, final_coord_list, lat_range, altitude_range, obj.attributes[1:-1],
obj.notes, obj.time_.strftime(DATEFORMAT), obj.hdf))

self.tree.info = lazy_list
Expand Down
44 changes: 44 additions & 0 deletions calipso/tools/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from datetime import datetime
import os
import matplotlib as mpl
import numpy as np
from log.log import logger

def find_between( s, first, last ):
Expand Down Expand Up @@ -55,6 +56,49 @@ def format_coord(axes, x, y, z):
zs = z
return 'x=%s y=%s lat=%s' % (xs, ys, zs)

def coord_tuple_list(uni_str):
"""
Takes as input Unicode string that ought to be list of tuples
and returns an actual list of tuples (used in coordinate formatting)

:param str inp: Unicode string to be converted
"""
coords = uni_str.strip("[")
coords = coords.strip("]")
coords = coords.split(",")
temp_list = [b.replace("(",'') for b in coords]
temp_list2 = [b.replace(")",'') for b in temp_list]

convert_list = list()
for c in temp_list2:
temp = c.replace("[","")
temp = temp.replace("]","")
temp2 = np.float64(temp)
convert_list.append(temp2)
temp_iter = iter(convert_list)
tup_coords = zip(temp_iter, temp_iter)

time_list = [mpl.dates.num2date(x[0]).strftime('%H:%M:%S') for x in tup_coords]
for i, (a, b) in enumerate(tup_coords):
tup_coords[i] = (time_list[i], b)
final_coord_list = ['(%s, %.3f)' % (a, b) for a, b in tup_coords]
return final_coord_list

def coord_string(coord_list):
"""
Takes as input a list of coordinates, converts to string,
removes extraneous remaining list notation, and finally
encapsulates the string with extra "" for output to CSV
so that programs such as Excel will ignore the list's commas.

:param str inp: List of coordinate tuples
"""
final_coord_list = str(coord_list)
final_coord_list = final_coord_list.replace('\'', '')
final_coord_list = final_coord_list.replace('[', '')
final_coord_list = final_coord_list.replace(']', '')
final_coord_list = "\"" + final_coord_list + "\""
return final_coord_list

def byteify(inp):
"""
Expand Down