def get_uframe_toc(): uframe_url = current_app.config['UFRAME_URL'] + current_app.config[ 'UFRAME_TOC'] r = requests.get(uframe_url) if r.status_code == 200: d = r.json() for row in d: try: # FIX FOR THE WRONG WAY ROUND temp1 = row['platform_code'] temp2 = row['mooring_code'] row['mooring_code'] = temp1 row['platform_code'] = temp2 # instrument_display_name = PlatformDeployment._get_display_name( row['reference_designator']) split_name = instrument_display_name.split(' - ') row['instrument_display_name'] = split_name[-1] row['mooring_display_name'] = split_name[0] row['platform_display_name'] = split_name[1] except: row['instrument_display_name'] = "" row['platform_display_name'] = "" row['mooring_display_name'] = "" return d else: return []
def get_uframe_toc(): uframe_url = current_app.config['UFRAME_URL'] + current_app.config['UFRAME_TOC'] r = requests.get(uframe_url) if r.status_code == 200: d = r.json() for row in d: try: # FIX FOR THE WRONG WAY ROUND temp1 = row['platform_code'] temp2 = row['mooring_code'] row['mooring_code'] = temp1 row['platform_code'] = temp2 # instrument_display_name = PlatformDeployment._get_display_name(row['reference_designator']) split_name = instrument_display_name.split(' - ') row['instrument_display_name'] = split_name[-1] row['mooring_display_name'] = split_name[0] row['platform_display_name'] = split_name[1] except: row['instrument_display_name'] = "" row['platform_display_name'] = "" row['mooring_display_name'] = "" return d else: return []
def get_svg_plot(instrument, stream): # from ooiservices.app.uframe.controller import split_stream_name # Ok first make a list out of stream and instrument instrument = instrument.split(',') #instrument.append(instrument[0]) stream = stream.split(',') #stream.append(stream[0]) plot_format = request.args.get('format', 'svg') # time series vs profile plot_layout = request.args.get('plotLayout', 'timeseries') xvar = request.args.get('xvar', 'time') yvar = request.args.get('yvar', None) # There can be multiple variables so get into a list xvar = xvar.split(',') yvar = yvar.split(',') if len(instrument) == len(stream): pass # everything the same else: instrument = [instrument[0]] stream = [stream[0]] yvar = [yvar[0]] xvar = [xvar[0]] # create bool from request # use_line = to_bool(request.args.get('line', True)) use_scatter = to_bool(request.args.get('scatter', True)) use_event = to_bool(request.args.get('event', True)) qaqc = int(request.args.get('qaqc', 0)) # Get Events! events = {} if use_event: try: response = _get_events_by_ref_des(instrument[0]) events = json.loads(response.data) except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error=str(err.message)), 400 profileid = request.args.get('profileId', None) # need a yvar for sure if yvar is None: return jsonify(error='Error: yvar is required'), 400 height = float(request.args.get('height', 100)) # px width = float(request.args.get('width', 100)) # px # do conversion of the data from pixels to inches for plot height_in = height / 96. width_in = width / 96. # get the data from uFrame try: if plot_layout == "depthprofile": data = get_process_profile_data(stream[0], instrument[0], yvar[0], xvar[0]) else: if len(instrument) == 1: data = get_data(stream[0], instrument[0], yvar, xvar) elif len(instrument) > 1: # Multiple datasets data = [] for idx, instr in enumerate(instrument): stream_data = get_data(stream[idx], instr, [yvar[idx]], [xvar[idx]]) data.append(stream_data) except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error=str(err.message)), 400 if not data: return jsonify(error='No data returned for %s' % plot_layout), 400 # return if error if 'error' in data or 'Error' in data: return jsonify(error=data['error']), 400 # generate plot some_tuple = ('a', 'b') if str(type(data)) == str( type(some_tuple)) and plot_layout == "depthprofile": return jsonify(error='tuple data returned for %s' % plot_layout), 400 if isinstance(data, dict): # get title title = PlatformDeployment._get_display_name(instrument[0]) if len(title) > 50: title = ''.join( title.split('-')[0:-1]) + '\n' + title.split('-')[-1] data['title'] = title data['height'] = height_in data['width'] = width_in else: for idx, streamx in enumerate(stream): title = PlatformDeployment._get_display_name(instrument[idx]) if len(title) > 50: title = ''.join( title.split('-')[0:-1]) + '\n' + title.split('-')[-1] data[idx]['title'] = title data[idx]['height'] = height_in data[idx]['width'] = width_in plot_options = { 'plot_format': plot_format, 'plot_layout': plot_layout, 'use_scatter': use_scatter, 'events': events, 'profileid': profileid, 'width_in': width_in, 'use_qaqc': qaqc, 'st_date': request.args['startdate'], 'ed_date': request.args['enddate'] } try: buf = generate_plot(data, plot_options) content_header_map = {'svg': 'image/svg+xml', 'png': 'image/png'} return buf.read(), 200, { 'Content-Type': content_header_map[plot_format] } except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error='Error generating {0} plot: {1}'.format( plot_options['plot_layout'], str(err.message))), 400
def get_svg_plot(instrument, stream): # from ooiservices.app.uframe.controller import split_stream_name # Ok first make a list out of stream and instrument instrument = instrument.split(',') #instrument.append(instrument[0]) stream = stream.split(',') #stream.append(stream[0]) plot_format = request.args.get('format', 'svg') # time series vs profile plot_layout = request.args.get('plotLayout', 'timeseries') xvar = request.args.get('xvar', 'time') yvar = request.args.get('yvar', None) # There can be multiple variables so get into a list xvar = xvar.split(',') yvar = yvar.split(',') if len(instrument) == len(stream): pass # everything the same else: instrument = [instrument[0]] stream = [stream[0]] yvar = [yvar[0]] xvar = [xvar[0]] # create bool from request # use_line = to_bool(request.args.get('line', True)) use_scatter = to_bool(request.args.get('scatter', True)) use_event = to_bool(request.args.get('event', True)) qaqc = int(request.args.get('qaqc', 0)) # Get Events! events = {} if use_event: try: response = _get_events_by_ref_des(instrument[0]) events = json.loads(response.data) except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error=str(err.message)), 400 profileid = request.args.get('profileId', None) # need a yvar for sure if yvar is None: return jsonify(error='Error: yvar is required'), 400 height = float(request.args.get('height', 100)) # px width = float(request.args.get('width', 100)) # px # do conversion of the data from pixels to inches for plot height_in = height / 96. width_in = width / 96. # get the data from uFrame try: if plot_layout == "depthprofile": data = get_process_profile_data(stream[0], instrument[0], yvar[0], xvar[0]) else: if len(instrument) == 1: data = get_data(stream[0], instrument[0], yvar, xvar) elif len(instrument) > 1: # Multiple datasets data = [] for idx, instr in enumerate(instrument): stream_data = get_data(stream[idx], instr, [yvar[idx]], [xvar[idx]]) data.append(stream_data) except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error=str(err.message)), 400 if not data: return jsonify(error='No data returned for %s' % plot_layout), 400 # return if error if 'error' in data or 'Error' in data: return jsonify(error=data['error']), 400 # generate plot some_tuple = ('a', 'b') if str(type(data)) == str(type(some_tuple)) and plot_layout == "depthprofile": return jsonify(error='tuple data returned for %s' % plot_layout), 400 if isinstance(data, dict): # get title title = PlatformDeployment._get_display_name(instrument[0]) if len(title) > 50: title = ''.join(title.split('-')[0:-1]) + '\n' + title.split('-')[-1] data['title'] = title data['height'] = height_in data['width'] = width_in else: for idx, streamx in enumerate(stream): title = PlatformDeployment._get_display_name(instrument[idx]) if len(title) > 50: title = ''.join(title.split('-')[0:-1]) + '\n' + title.split('-')[-1] data[idx]['title'] = title data[idx]['height'] = height_in data[idx]['width'] = width_in plot_options = {'plot_format': plot_format, 'plot_layout': plot_layout, 'use_scatter': use_scatter, 'events': events, 'profileid': profileid, 'width_in': width_in, 'use_qaqc': qaqc, 'st_date': request.args['startdate'], 'ed_date': request.args['enddate']} try: buf = generate_plot(data, plot_options) content_header_map = { 'svg' : 'image/svg+xml', 'png' : 'image/png' } return buf.read(), 200, {'Content-Type': content_header_map[plot_format]} except Exception as err: current_app.logger.exception(str(err.message)) return jsonify(error='Error generating {0} plot: {1}'.format(plot_options['plot_layout'], str(err.message))), 400