Exemplo n.º 1
0
def dict_from_stream(mooring, platform, instrument, stream_type, stream,
                     reference_designator, beginTime, endTime, variables,
                     variable_type, units, variables_shape, parameter_id):
    HOST = str(current_app.config['HOST'])
    PORT = str(current_app.config['PORT'])
    SERVICE_LOCATION = 'http://' + HOST + ":" + PORT

    ref = mooring + "-" + platform + "-" + instrument
    stream_name = '_'.join([stream_type, stream])
    ref = '-'.join([mooring, platform, instrument])

    data_dict = {}
    data_dict['start'] = beginTime
    data_dict['end'] = endTime
    data_dict['reference_designator'] = reference_designator
    data_dict['stream_name'] = stream_name
    data_dict['variables'] = []
    data_dict['variable_types'] = {}
    data_dict['units'] = {}
    data_dict['variables_shape'] = {}
    data_dict['display_name'] = get_display_name_by_rd(ref)
    data_dict['download'] = {
        "csv": "/".join(['api/uframe/get_csv', stream_name, ref]),
        "json": "/".join(['api/uframe/get_json', stream_name, ref]),
        "netcdf": "/".join(['api/uframe/get_netcdf', stream_name, ref]),
        "profile": "/".join(['api/uframe/get_profiles', stream_name, ref])
    }
    data_dict['variables'] = variables
    data_dict['variable_type'] = variable_type
    data_dict['units'] = units
    data_dict['variables_shape'] = variables_shape
    data_dict['parameter_id'] = parameter_id

    return data_dict
Exemplo n.º 2
0
def dict_from_stream(mooring, platform, instrument, stream_type, stream, reference_designator, beginTime, endTime, variables, variable_type, units, variables_shape, parameter_id):
    HOST = str(current_app.config['HOST'])
    PORT = str(current_app.config['PORT'])
    SERVICE_LOCATION = 'http://'+HOST+":"+PORT

    ref = mooring + "-" + platform + "-" + instrument
    stream_name = '_'.join([stream_type, stream])
    ref = '-'.join([mooring, platform, instrument])

    data_dict = {}
    data_dict['start'] = beginTime
    data_dict['end'] = endTime
    data_dict['reference_designator'] = reference_designator
    data_dict['stream_name'] = stream_name
    data_dict['variables'] = []
    data_dict['variable_types'] = {}
    data_dict['units'] = {}
    data_dict['variables_shape'] = {}
    data_dict['display_name'] = get_display_name_by_rd(ref)
    data_dict['download'] = {
                             "csv":"/".join(['api/uframe/get_csv', stream_name, ref]),
                             "json":"/".join(['api/uframe/get_json', stream_name, ref]),
                             "netcdf":"/".join(['api/uframe/get_netcdf', stream_name, ref]),
                             "profile":"/".join(['api/uframe/get_profiles', stream_name, ref])
                            }
    data_dict['variables'] = variables
    data_dict['variable_type'] = variable_type
    data_dict['units'] = units
    data_dict['variables_shape'] = variables_shape
    data_dict['parameter_id'] = parameter_id


    return data_dict
Exemplo n.º 3
0
def get_asset(id):
    '''
    Object response for the GET(id) request.  This response is NOT cached.
    '''
    lat = ""
    lon = ""
    ref_des = ""
    uframe_obj = uFrameAssetCollection()
    data = uframe_obj.to_json(id)
    deployment_number = None

    data['events'] = _associate_events(id)
    data['asset_class'] = data.pop('@class')
    data['id'] = data['assetId']

    try:
        if data['metaData'] is not None:
            for meta_data in data['metaData']:
                if meta_data['key'] == 'Laditude ':
                    meta_data['key'] = 'Latitude'
                if meta_data['key'] == 'Latitude':
                    lat = meta_data['value']
                    coord = _convert_lat_lon(lat, "")
                    meta_data['value'] = coord[0]
                if meta_data['key'] == 'Longitude':
                    lon = meta_data['value']
                    coord = _convert_lat_lon("", lon)
                    meta_data['value'] = coord[1]
                if meta_data['key'] == 'Ref Des SN':
                    meta_data['key'] = 'Ref Des'
                if meta_data['key'] == 'Ref Des':
                    ref_des = meta_data['value']
                if meta_data['key'] == 'Deployment Number':
                    deployment_number = meta_data['value']
            data['ref_des'] = ref_des
            if deployment_number is not None:
                data['deployment_number'] = deployment_number
            if lat > 0 and lon > 0:
                data['coordinates'] = _convert_lat_lon(lat, lon)
                lat = ""
                lon = ""
            else:
                for events in data['events']:
                    if events['locationLonLat'] is not None:
                        lat = events['locationLonLat'][1]
                        lon = events['locationLonLat'][0]
                data['coordinates'] = _convert_lat_lon(lat, lon)
                lat = 0.0
                lon = 0.0
            if len(ref_des) > 0:
                '''
                Determine the asset name from the DB if there is none.
                '''

                try:
                    if data['assetInfo']['name'] == None:
                        data['assetInfo']['name'] = get_display_name_by_rd(
                            ref_des)
                except:
                    pass
    except (KeyError, TypeError, AttributeError) as e:
        raise

    return jsonify(**data)
Exemplo n.º 4
0
def get_assets():
    '''
    Listing GET request of all assets.  This method is cached for 1 hour.
    '''

    #Manually set up the cache
    cached = cache.get('asset_list')
    if cached:
        data = cached
    else:
        uframe_obj = uFrameAssetCollection()
        data = uframe_obj.to_json()
        for row in data:
            lat = ""
            lon = ""
            ref_des = ""
            deployment_number = ""
            row['id'] = row.pop('assetId')
            row['asset_class'] = row.pop('@class')
            row['events'] = _associate_events(row['id'])
            try:
                if row['metaData'] is not None:
                    for meta_data in row['metaData']:
                        if meta_data['key'] == 'Laditude ':
                            meta_data['key'] = 'Latitude'
                        if meta_data['key'] == 'Latitude':
                            lat = meta_data['value']
                            coord = _convert_lat_lon(lat, "")
                            meta_data['value'] = coord[0]
                        if meta_data['key'] == 'Longitude':
                            lon = meta_data['value']
                            coord = _convert_lat_lon("", lon)
                            meta_data['value'] = coord[1]
                        if meta_data['key'] == 'Ref Des SN':
                            meta_data['key'] = 'Ref Des'
                        if meta_data['key'] == 'Ref Des':
                            ref_des = meta_data['value']
                        if meta_data['key'] == 'Deployment Number':
                            deployment_number = meta_data['value']
                    row['ref_des'] = ref_des

                    if deployment_number is not None:
                        row['deployment_number'] = deployment_number
                    if lat > 0 and lon > 0:
                        row['coordinates'] = _convert_lat_lon(lat, lon)
                    else:
                        for events in row['events']:
                            if events['locationLonLat'] is not None:
                                lat = events['locationLonLat'][1]
                                lon = events['locationLonLat'][0]
                        row['coordinates'] = _convert_lat_lon(lat, lon)
                        lat = 0.0
                        lon = 0.0
                    if len(ref_des) > 0:
                        # determine the asset name from the DB if there is none.

                        try:
                            if (row['assetInfo']['name']
                                    == None) or (row['assetInfo']['name']
                                                 == ""):
                                row['assetInfo'][
                                    'name'] = get_display_name_by_rd(ref_des)
                        except:
                            pass

            except:
                pass

        if "error" not in data:
            cache.set('asset_list', data, timeout=CACHE_TIMEOUT)

    data = sorted(data, key=itemgetter('id'))

    if request.args.get('min') == 'True':
        for obj in data:
            try:
                del obj['metaData']
                del obj['events']
                del obj['manufactureInfo']
                del obj['notes']
                del obj['physicalInfo']
                del obj['attachments']
                del obj['purchaseAndDeliveryInfo']
                del obj['lastModifiedTimestamp']
            except KeyError:
                raise

    if request.args.get('search') and request.args.get('search') != "":
        return_list = []
        search_term = request.args.get('search')
        for item in data:
            if search_term.lower() in str(item['assetInfo']['name']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['id']):
                return_list.append(item)
            if search_term.lower() in str(item['ref_des']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['assetInfo']['type']).lower():

                return_list.append(item)
            if search_term.lower() in str(item['events']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['metaData']).lower():
                return_list.append(item)
        data = return_list

    if request.args.get('startAt'):
        start_at = int(request.args.get('startAt'))
        count = int(request.args.get('count'))
        total = int(len(data))
        data_slice = data[start_at:(start_at + count)]
        result = jsonify({
            "count": count,
            "total": total,
            "startAt": start_at,
            "assets": data_slice
        })
        return result
    else:
        result = jsonify({'assets': data})
        return result
Exemplo n.º 5
0
def get_assets(use_min=False,normal_data=False):
    '''
    Listing GET request of all assets.  This method is cached for 1 hour.
    add in helped params to bypass the json response and minification
    '''
    try:
        #Manually set up the cache
        cached = cache.get('asset_list')
        will_reset_cache = False
        if request.args.get('reset') == 'true':
            will_reset_cache = True

        will_reset = request.args.get('reset')
        if cached and not(will_reset_cache):
            data = cached
        else:
            uframe_obj = UFrameAssetsCollection()
            payload = uframe_obj.to_json()
            if payload.status_code != 200:
                try:
                    return  jsonify({ "assets" : payload.json()}), payload.status_code
                except AttributeError:
                    try:
                        return jsonify({ "assets" : 'Undefined response'}), payload.status_code
                    except Exception as e:
                        return make_response("unhandled exception: %s.  Line # %s" % (e,sys.exc_info()[2].tb_lineno ), 500)

            data = payload.json()

            for row in data:
                lat = ""
                lon = ""
                ref_des = ""
                has_deployment_event = False
                deployment_number = ""
                try:
                    row['id'] = row.pop('assetId')
                    row['asset_class'] = row.pop('@class')
                    row['events'] = associate_events(row['id'])
                    if row['metaData'] is not None:
                        for meta_data in row['metaData']:
                            if meta_data['key'] == 'Laditude ':
                                meta_data['key'] = 'Latitude'
                            if meta_data['key'] == 'Latitude':
                                lat = meta_data['value']
                                coord = convert_lat_lon(lat,"")
                                meta_data['value'] = coord[0]
                            if meta_data['key'] == 'Longitude':
                                lon = meta_data['value']
                                coord = convert_lat_lon("",lon)
                                meta_data['value'] = coord[1]
                            if meta_data['key'] == 'Ref Des SN':
                                meta_data['key'] = 'Ref Des'
                            if meta_data['key'] == 'Ref Des':
                                ref_des = meta_data['value']
                            if meta_data['key'] == 'Deployment Number':
                                deployment_number = meta_data['value']
                        row['ref_des'] = ref_des

                        if len(row['ref_des']) == 27:
                            row['asset_class'] = '.InstrumentAssetRecord'
                        if len(row['ref_des']) < 27:
                            row['asset_class'] = '.AssetRecord'

                        if deployment_number is not None:
                            row['deployment_number'] = deployment_number
                        for events in row['events']:
                            if events['locationLonLat'] is not None and lat == 0.0 and lon == 0.0:
                                lat = events['locationLonLat'][1]
                                lon = events['locationLonLat'][0]
                            if events['class'] == '.DeploymentEvent':
                                has_deployment_event = True
                        row['hasDeploymentEvent'] = has_deployment_event
                        row['coordinates'] = convert_lat_lon(lat,lon)
                        lat = 0.0
                        lon = 0.0

                    #TODO: Band-aid to work with the old version of uframe on the VM since rutgers is down.
                    if (not(row['assetInfo']) ):
                        row['assetInfo'] = { 'name': '', 'type': '', 'owner': '', 'description': ''}

                    # determine the asset name from the DB if there is none.
                    if (not(row['assetInfo'].has_key('name')) and len(ref_des) > 0):
                        row['assetInfo']['name'] = get_display_name_by_rd(ref_des) or ""
                        row['assetInfo']['longName'] = get_long_display_name_by_rd(ref_des)
                    elif (row['assetInfo'].has_key('name') and len(ref_des) > 0):
                        row['assetInfo']['name'] = row['assetInfo']['name'] or get_display_name_by_rd(ref_des) or ""
                        row['assetInfo']['longName'] = get_long_display_name_by_rd(ref_des)
                    else:
                        row['assetInfo']['name'] = ""


                except AttributeError, TypeError:
                    raise

            if "error" not in data:
                cache.set('asset_list', data, timeout=CACHE_TIMEOUT)

        try:
            if request.args.get('sort') and request.args.get('sort') != "":
                sort_by = request.args.get('sort')
                if not(sort_by):
                    sort_by = 'ref_des'
                data = sorted(data, key=itemgetter(sort_by))

        except Exception as e:
            print e
            pass

        if request.args.get('min') == 'True' or use_min == True:
            del_count = 0
            showDeployments = False
            deploymentEvents = []
            if request.args.get('deployments') == 'True':
                showDeployments = True
            for obj in data:
                try:
                    if obj.has_key('metaData'):
                        del obj['metaData']
                    if obj.has_key('events'):
                        if showDeployments:
                            for event in obj['events']:
                                if event['class'] == '.DeploymentEvent':
                                    deploymentEvents.append(event)
                            del obj['events']
                            obj['events'] = deploymentEvents
                            deploymentEvents = []
                        else:
                            del obj['events']
                    if obj.has_key('manufactureInfo'):
                        del obj['manufactureInfo']
                    if obj.has_key('notes'):
                        del obj['notes']
                    if obj.has_key('physicalInfo'):
                        del obj['physicalInfo']
                    if obj.has_key('attachments'):
                        del obj['attachments']
                    if obj.has_key('purchaseAndDeliveryInfo'):
                        del obj['purchaseAndDeliveryInfo']
                    if obj.has_key('lasModifiedTimestamp'):
                        del obj['lastModifiedTimestamp']
                except Exception:
                    raise
                    del_count+=1

            print "could not delete one or more elements: ",del_count

        if request.args.get('search') and request.args.get('search') != "":
            return_list = []
            ven_set = []
            search_term = str(request.args.get('search')).split()
            search_set = set(search_term)
            for subset in search_set:
                if len(return_list) > 0:
                    if len(ven_set) > 0:
                        ven_set = deepcopy(ven_subset)
                    else:
                        ven_set = deepcopy(return_list)
                    ven_subset = []
                    for item in return_list:
                        if subset.lower() in str(item['assetInfo']['name']).lower():
                            ven_subset.append(item)
                        elif subset.lower() in str(item['ref_des']).lower():
                            ven_subset.append(item)
                        elif subset.lower() in str(item['assetInfo']['type']).lower():
                            ven_subset.append(item)
                        elif subset.lower() in str(item['events']).lower():
                            ven_subset.append(item)
                        elif subset.lower() in str(item['metaData']).lower():
                            ven_subset.append(item)
                    data = ven_subset
                else:
                    for item in data:
                        if subset.lower() in str(item['assetInfo']['name']).lower():
                            return_list.append(item)
                        elif subset.lower() in str(item['ref_des']).lower():
                            return_list.append(item)
                        elif subset.lower() in str(item['assetInfo']['type']).lower():
                            return_list.append(item)
                        elif subset.lower() in str(item['events']).lower():
                            return_list.append(item)
                        elif subset.lower() in str(item['metaData']).lower():
                            return_list.append(item)
                    data = return_list

        if request.args.get('startAt'):
            start_at = int(request.args.get('startAt'))
            count = int(request.args.get('count'))
            total = int(len(data))
            data_slice = data[start_at:(start_at + count)]
            result = jsonify({"count": count,
                                "total": total,
                                "startAt": start_at,
                                "assets": data_slice})
            return result
        else:
            if normal_data:
                result = data
            else:
                result = jsonify({ 'assets' : data })
            return result
Exemplo n.º 6
0
def get_asset(id):
    '''
    Object response for the GET(id) request.  This response is NOT cached.
    '''
    lat = ""
    lon = ""
    ref_des = ""
    try:
        uframe_obj = UFrameAssetsCollection()
        payload = uframe_obj.to_json(id)
        data = payload.json()
        if payload.status_code != 200:
            try:
                return jsonify({ "assets" : payload.json()}), payload.status_code
            except AttributeError:
                try:
                    return jsonify({ "assets" : payload.data()}), payload.status_code
                except Exception as e:
                    return make_response("unhandled exception: %s.  Line # %s" % (e,sys.exc_info()[2].tb_lineno ), 500)

        print payload.status_code

        deployment_number = None
        data['events'] = associate_events(id)
        data['asset_class'] = data.pop('@class')
        data['id'] = data['assetId']

        if data['metaData'] is not None:
            for meta_data in data['metaData']:
                if meta_data['key'] == 'Laditude ':
                    meta_data['key'] = 'Latitude'
                if meta_data['key'] == 'Latitude':
                    lat = meta_data['value']
                    coord = convert_lat_lon(lat,"")
                    meta_data['value'] = coord[0]
                if meta_data['key'] == 'Longitude':
                    lon = meta_data['value']
                    coord = convert_lat_lon("",lon)
                    meta_data['value'] = coord[1]
                if meta_data['key'] == 'Ref Des SN':
                    meta_data['key'] = 'Ref Des'
                if meta_data['key'] == 'Ref Des':
                    ref_des = meta_data['value']
                if meta_data['key'] == 'Deployment Number':
                    deployment_number = meta_data['value']
            data['ref_des'] = ref_des
            if deployment_number is not None:
                data['deployment_number'] = deployment_number
            if lat > 0 and lon > 0:
                data['coordinates'] = convert_lat_lon(lat, lon)
                lat = ""
                lon = ""
            else:
                for events in data['events']:
                    if events['locationLonLat'] is not None:
                        lat = events['locationLonLat'][1]
                        lon = events['locationLonLat'][0]
                data['coordinates'] = convert_lat_lon(lat,lon)
                lat = 0.0
                lon = 0.0

                # determine the asset name from the DB if there is none.
                if (not(row['assetInfo'].has_key('name')) and len(ref_des) > 0):
                    row['assetInfo']['name'] = get_display_name_by_rd(ref_des)
                    row['assetInfo']['longName'] = get_long_display_name_by_rd(ref_des)
                elif (row['assetInfo'].has_key('name') and len(ref_des) > 0):
                    row['assetInfo']['name'] = row['assetInfo']['name'] or get_display_name_by_rd(ref_des)
                    row['assetInfo']['longName'] = get_long_display_name_by_rd(ref_des)

        return jsonify(**data)

    except requests.exceptions.ConnectionError as e:
        error = "Error: Cannot connect to uframe.  %s" % e
        print error
        return make_response(error, 500)
Exemplo n.º 7
0
def get_asset(id):
    '''
    Object response for the GET(id) request.  This response is NOT cached.
    '''
    lat = ""
    lon = ""
    ref_des = ""
    uframe_obj = uFrameAssetCollection()
    data = uframe_obj.to_json(id)
    deployment_number = None

    data['events'] = _associate_events(id)
    data['asset_class'] = data.pop('@class')
    data['id'] = data['assetId']

    try:
        if data['metaData'] is not None:
            for meta_data in data['metaData']:
                if meta_data['key'] == 'Laditude ':
                    meta_data['key'] = 'Latitude'
                if meta_data['key'] == 'Latitude':
                    lat = meta_data['value']
                    coord = _convert_lat_lon(lat,"")
                    meta_data['value'] = coord[0]
                if meta_data['key'] == 'Longitude':
                    lon = meta_data['value']
                    coord = _convert_lat_lon("",lon)
                    meta_data['value'] = coord[1]
                if meta_data['key'] == 'Ref Des SN':
                    meta_data['key'] = 'Ref Des'
                if meta_data['key'] == 'Ref Des':
                    ref_des = meta_data['value']
                if meta_data['key'] == 'Deployment Number':
                    deployment_number = meta_data['value']
            data['ref_des'] = ref_des
            if deployment_number is not None:
                data['deployment_number'] = deployment_number
            if lat > 0 and lon > 0:
                data['coordinates'] = _convert_lat_lon(lat, lon)
                lat = ""
                lon = ""
            else:
                for events in data['events']:
                    if events['locationLonLat'] is not None:
                        lat = events['locationLonLat'][1]
                        lon = events['locationLonLat'][0]
                data['coordinates'] = _convert_lat_lon(lat,lon)
                lat = 0.0
                lon = 0.0
            if len(ref_des) > 0:
                '''
                Determine the asset name from the DB if there is none.
                '''

                try:
                    if data['assetInfo']['name'] == None:
                        data['assetInfo']['name'] = get_display_name_by_rd(ref_des)
                except:
                    pass
    except (KeyError, TypeError, AttributeError) as e:
        raise

    return jsonify(**data)
Exemplo n.º 8
0
def get_assets():
    '''
    Listing GET request of all assets.  This method is cached for 1 hour.
    '''

    #Manually set up the cache
    cached = cache.get('asset_list')
    if cached:
        data = cached
    else:
        uframe_obj = uFrameAssetCollection()
        data = uframe_obj.to_json()
        for row in data:
            lat = ""
            lon = ""
            ref_des = ""
            deployment_number = ""
            row['id'] = row.pop('assetId')
            row['asset_class'] = row.pop('@class')
            row['events'] = _associate_events(row['id'])
            try:
                if row['metaData'] is not None:
                    for meta_data in row['metaData']:
                        if meta_data['key'] == 'Laditude ':
                            meta_data['key'] = 'Latitude'
                        if meta_data['key'] == 'Latitude':
                            lat = meta_data['value']
                            coord = _convert_lat_lon(lat,"")
                            meta_data['value'] = coord[0]
                        if meta_data['key'] == 'Longitude':
                            lon = meta_data['value']
                            coord = _convert_lat_lon("",lon)
                            meta_data['value'] = coord[1]
                        if meta_data['key'] == 'Ref Des SN':
                            meta_data['key'] = 'Ref Des'
                        if meta_data['key'] == 'Ref Des':
                            ref_des = meta_data['value']
                        if meta_data['key'] == 'Deployment Number':
                            deployment_number = meta_data['value']
                    row['ref_des'] = ref_des

                    if deployment_number is not None:
                        row['deployment_number'] = deployment_number
                    if lat > 0 and lon > 0:
                        row['coordinates'] = _convert_lat_lon(lat, lon)
                    else:
                        for events in row['events']:
                            if events['locationLonLat'] is not None:
                                lat = events['locationLonLat'][1]
                                lon = events['locationLonLat'][0]
                        row['coordinates'] = _convert_lat_lon(lat,lon)
                        lat = 0.0
                        lon = 0.0
                    if len(ref_des) > 0:
                        # determine the asset name from the DB if there is none.

                        try:
                            if (row['assetInfo']['name'] == None) or (row['assetInfo']['name'] == ""):
                                row['assetInfo']['name'] = get_display_name_by_rd(ref_des)
                        except:
                            pass

            except:
                pass

        if "error" not in data:
            cache.set('asset_list', data, timeout=CACHE_TIMEOUT)

    data = sorted(data, key=itemgetter('id'))

    if request.args.get('min') == 'True':
        for obj in data:
            try:
                del obj['metaData']
                del obj['events']
                del obj['manufactureInfo']
                del obj['notes']
                del obj['physicalInfo']
                del obj['attachments']
                del obj['purchaseAndDeliveryInfo']
                del obj['lastModifiedTimestamp']
            except KeyError:
                raise

    if request.args.get('search') and request.args.get('search') != "":
        return_list = []
        search_term = request.args.get('search')
        for item in data:
            if search_term.lower() in str(item['assetInfo']['name']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['id']):
                return_list.append(item)
            if search_term.lower() in str(item['ref_des']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['assetInfo']['type']).lower():

                return_list.append(item)
            if search_term.lower() in str(item['events']).lower():
                return_list.append(item)
            if search_term.lower() in str(item['metaData']).lower():
                return_list.append(item)
        data = return_list

    if request.args.get('startAt'):
        start_at = int(request.args.get('startAt'))
        count = int(request.args.get('count'))
        total = int(len(data))
        data_slice = data[start_at:(start_at + count)]
        result = jsonify({"count": count,
                            "total": total,
                            "startAt": start_at,
                            "assets": data_slice})
        return result
    else:
        result = jsonify({ 'assets' : data })
        return result