def from_edge_point()

in analysis/webservice/algorithms_spark/Matchup.py [0:0]


    def from_edge_point(edge_point):
        point = DomsPoint()
        x, y = edge_point['longitude'], edge_point['latitude']

        point.longitude = x
        point.latitude = y

        point.time = edge_point['time']

        point.source = edge_point.get('source')
        point.platform = edge_point.get('platform')
        point.device = edge_point.get('device')
        point.file_url = edge_point.get('fileurl')
        point.depth = edge_point.get('depth')

        def is_defined(key, d):
            return key in d and d[key] is not None and d[key] != ''

        if is_defined('id', point.platform):
            point.platform = edge_point.get('platform')['id']
        elif is_defined('code', point.platform):
            point.platform = edge_point.get('platform')['code']
        elif is_defined('type', point.platform):
            point.platform = edge_point.get('platform')['type']

        data_fields = [
            'air_pressure',
            'air_pressure_quality',
            'air_temperature',
            'air_temperature_quality',
            'dew_point_temperature',
            'dew_point_temperature_quality',
            'downwelling_longwave_flux_in_air',
            'downwelling_longwave_flux_in_air_quality',
            'downwelling_longwave_radiance_in_air',
            'downwelling_longwave_radiance_in_air_quality',
            'downwelling_shortwave_flux_in_air',
            'downwelling_shortwave_flux_in_air_quality',
            'mass_concentration_of_chlorophyll_in_sea_water',
            'mass_concentration_of_chlorophyll_in_sea_water_quality',
            'rainfall_rate',
            'rainfall_rate_quality',
            'relative_humidity',
            'relative_humidity_quality',
            'sea_surface_salinity',
            'sea_surface_salinity_quality',
            'sea_surface_skin_temperature',
            'sea_surface_skin_temperature_quality',
            'sea_surface_subskin_temperature',
            'sea_surface_subskin_temperature_quality',
            'sea_surface_temperature',
            'sea_surface_temperature_quality',
            'sea_water_density',
            'sea_water_density_quality',
            'sea_water_electrical_conductivity',
            'sea_water_electrical_conductivity_quality',
            'sea_water_practical_salinity',
            'sea_water_practical_salinity_quality',
            'sea_water_salinity',
            'sea_water_salinity_quality',
            'sea_water_temperature',
            'sea_water_temperature_quality',
            'surface_downwelling_photosynthetic_photon_flux_in_air',
            'surface_downwelling_photosynthetic_photon_flux_in_air_quality',
            'wet_bulb_temperature',
            'wet_bulb_temperature_quality',
            'wind_speed',
            'wind_speed_quality',
            'wind_from_direction',
            'wind_from_direction_quality',
            'wind_to_direction',
            'wind_to_direction_quality',
            'eastward_wind',
            'northward_wind',
            'wind_component_quality'
        ]
        data = []
        # This is for in-situ secondary points
        for name in data_fields:
            val = edge_point.get(name)
            if not val:
                continue
            unit = get_insitu_unit(name, insitu_schema.get())
            data.append(DataPoint(
                variable_name=name,
                cf_variable_name=name,
                variable_value=val,
                variable_unit=unit
            ))


        # This is for satellite secondary points
        if 'variables' in edge_point:

            data.extend([DataPoint(
                variable_name=variable.variable_name,
                variable_value=var_value,
                cf_variable_name=variable.standard_name,
                variable_unit=None
            ) for var_value, variable in zip(
                edge_point['var_values'],
                edge_point['variables']
            ) if var_value])
        point.data = data

        meta = edge_point.get('meta', None)

        # Appending depth to data_id. Currently, our insitu data has the same id value for measurements taken at
        # different depths. This causes secondary insitu matches to be incorrectly filtered out from NetCDF files.

        if meta:
            point.data_id = f'{meta}@{point.depth}'
        else:
            point.data_id = f'{point.time}:{point.longitude}:{point.latitude}@{point.depth}'

        return point