def fbp(config, service : grid_capnp.Grid): conman = common.ConnectionManager() inp = conman.try_connect(config["in_sr"], cast_as=common_capnp.Channel.Reader, retry_secs=1) outp = conman.try_connect(config["out_sr"], cast_as=common_capnp.Channel.Writer, retry_secs=1) try: if inp and outp and service: while True: in_msg = inp.read().wait() if in_msg.which() == "done": break in_ip = in_msg.value.as_struct(common_capnp.IP) attr = common.get_fbp_attr(in_ip, config["from_attr"]) if attr: coord = attr.as_struct(geo_capnp.LatLonCoord) else: coord = in_ip.content.as_struct(geo_capnp.LatLonCoord) val = service.closestValueAt(coord).wait().val out_ip = common_capnp.IP.new_message() if not config["to_attr"]: out_ip.content = val common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], val) outp.write(value=out_ip).wait() outp.write(done=None).wait() except Exception as e: print("ascii_grid.py ex:", e) print("ascii_grid.py: exiting FBP component")
def fbp(config, service: soil_capnp.Service): conman = common.ConnectionManager() inp = conman.try_connect(config["in_sr"], cast_as=common_capnp.Channel.Reader, retry_secs=1) outp = conman.try_connect(config["out_sr"], cast_as=common_capnp.Channel.Writer, retry_secs=1) mandatory = json.loads(config["mandatory"]) try: if inp and outp and service: while True: in_msg = inp.read().wait() if in_msg.which() == "done": break in_ip = in_msg.value.as_struct(common_capnp.IP) attr = common.get_fbp_attr(in_ip, config["from_attr"]) if attr: coord = attr.as_struct(geo_capnp.LatLonCoord) else: coord = in_ip.content.as_struct(geo_capnp.LatLonCoord) profiles = service.profilesAt(coord, { "mandatory": mandatory, "onlyRawData": False }).wait().profiles if len(profiles) > 0: profile = profiles[0] out_ip = common_capnp.IP.new_message() if not config["to_attr"]: out_ip.content = profile common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], profile) outp.write(value=out_ip).wait() outp.write(done=None).wait() except Exception as e: print("sqlite_soil_data_service.py ex:", e) print("dwd_germany_service.py: exiting FBP component")
try: if inp and outp: while True: msg = inp.read().wait() # check for end of data from in port if msg.which() == "done": break in_ip = msg.value.as_struct(common_capnp.IP) attr = common.get_fbp_attr(in_ip, config["from_attr"]) if attr: from_coord = attr.as_struct(from_type) else: from_coord = in_ip.content.as_struct(from_type) to_coord = geo.transform_from_to_geo_coord(from_coord, config["to_name"]) out_ip = common_capnp.IP.new_message() if not config["to_attr"]: out_ip.content = to_coord common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], to_coord) outp.write(value=out_ip).wait() # close out port outp.write(done=None).wait() except Exception as e: print("proj_transformer.py ex:", e) print("proj_transformer.py: exiting run")
if inp and outp: while True: msg = inp.read().wait() # check for end of data from in port if msg.which() == "done": break in_ip = msg.value.as_struct(common_capnp.IP) attr = common.get_fbp_attr(in_ip, config["from_attr"]) if attr: data = attr.as_struct(climate_capnp.TimeSeriesData) else: data = in_ip.content.as_struct(climate_capnp.TimeSeriesData) csv = data_to_csv(data.header, data.data, data.startDate) out_ip = common_capnp.IP.new_message() if not config["to_attr"]: out_ip.content = csv common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], csv) outp.write(value=out_ip).wait() # close out port outp.write(done=None).wait() except Exception as e: print("climate_data_to_csv.py ex:", e) print("climate_data_to_csv.py: exiting run")
def fbp(config : dict, service : ccdi.Service): conman = common.ConnectionManager() inp = conman.try_connect(config["in_sr"], cast_as=common_capnp.Channel.Reader, retry_secs=1) outp = conman.try_connect(config["out_sr"], cast_as=common_capnp.Channel.Writer, retry_secs=1) mode = config["mode"] def iso_to_cdate(iso_date_str): ds = iso_date_str.split("-") return {"year": int(ds[0]), "month": int(ds[1]), "day": int(ds[2])} try: if inp and outp and service: dataset : csv_based.Dataset = service.getAvailableDatasets().wait().datasets[0].data while True: in_msg = inp.read().wait() if in_msg.which() == "done": break in_ip = in_msg.value.as_struct(common_capnp.IP) attr = common.get_fbp_attr(in_ip, config["latlon_attr"]) if attr: coord = attr.as_struct(geo_capnp.LatLonCoord) else: coord = in_ip.content.as_struct(geo_capnp.LatLonCoord) start_date = common.get_fbp_attr(in_ip, config["start_date_attr"]).as_text() end_date = common.get_fbp_attr(in_ip, config["end_date_attr"]).as_text() timeseries_p : csv_based.TimeSeries = dataset.closestTimeSeriesAt(coord).timeSeries timeseries = timeseries_p.subrange(iso_to_cdate(start_date), iso_to_cdate(end_date)).wait().timeSeries res = timeseries if mode == "sturdyref": res = timeseries.save().wait() elif mode == "capability": res = timeseries elif mode == "data": res = climate_capnp.TimeSeriesData.new_message() res.isTransposed = False header = timeseries.header().header se_date = timeseries.range() resolution = timeseries.resolution().resolution res.data = timeseries.data().wait().data res.header = header se_date = se_date res.startDate = se_date.startDate res.endDate = se_date.endDate res.resolution = resolution #print(res.data().wait()) out_ip = common_capnp.IP.new_message() if not config["to_attr"]: out_ip.content = res common.copy_fbp_attr(in_ip, out_ip, config["to_attr"], res) outp.write(value=out_ip).wait() outp.write(done=None).wait() except Exception as e: print("dwd_germany_service.py ex:", e) print("dwd_germany_service.py: exiting FBP component")
in_ip, config["latlon_attr"]).as_struct(geo_capnp.LatLonCoord) sowing_time = common.get_fbp_attr( in_ip, config["sowing_time_attr"]).as_text() harvest_time = common.get_fbp_attr( in_ip, config["harvest_time_attr"]).as_text() crop_id = common.get_fbp_attr(in_ip, config["crop_id_attr"]).as_text() utm = geo.transform_from_to_geo_coord(latlon, "utm32n") ilr_interpolate = ilr_seed_harvest_data[crop_id]["interpolate"] seed_harvest_cs = ilr_interpolate( utm.r, utm.h) if ilr_interpolate else None out_ip = common_capnp.IP.new_message() if ilr_interpolate is None or seed_harvest_cs is None: common.copy_fbp_attr(in_ip, out_ip) outp.write(value=out_ip).wait() else: ilr_dates = mgmt_capnp.ILRDates.new_message() seed_harvest_data = ilr_seed_harvest_data[crop_id]["data"][ seed_harvest_cs] if seed_harvest_data: is_winter_crop = ilr_seed_harvest_data[crop_id][ "is-winter-crop"] if sowing_time == "fixed": # fixed indicates that regionally fixed sowing dates will be used sowing_date = seed_harvest_data["sowing-date"] elif sowing_time == "auto": # auto indicates that automatic sowng dates will be used that vary between regions sowing_date = seed_harvest_data["latest-sowing-date"] else: