def save_forecast_timeseries(my_adapter, timeseries, my_model_date, my_model_time, my_opts): print('CSVTODAT:: save_forecast_timeseries:: len', len(timeseries), my_model_date, my_model_time) forecast_timeseries = extractForecastTimeseries(timeseries, my_model_date, my_model_time, by_day=True) # print(forecastTimeseries[:10]) extracted_timeseries = extractForecastTimeseriesInDays(forecast_timeseries) print('Extracted forecast types # :', len(extracted_timeseries)) # for ll in extractedTimeseries : # print(ll) force_insert = my_opts.get('forceInsert', False) my_model_date_time = datetime.datetime.strptime( '%s %s' % (my_model_date, my_model_time), '%Y-%m-%d %H:%M:%S') # TODO: Check whether station exist in Database run_name = my_opts.get('runName', 'Cloud-1') less_char_index = run_name.find('<') greater_char_index = run_name.find('>') # if less_char_index > -1 and greater_char_index > -1 and less_char_index < greater_char_index : if -1 < less_char_index < greater_char_index > -1: start_str = run_name[:less_char_index] date_format_str = run_name[less_char_index + 1:greater_char_index] end_str = run_name[greater_char_index + 1:] try: date_str = my_model_date_time.strftime(date_format_str) run_name = start_str + date_str + end_str except ValueError: raise ValueError("Incorrect data format " + date_format_str) types = [ 'Forecast-0-d', 'Forecast-1-d-after', 'Forecast-2-d-after', 'Forecast-3-d-after', 'Forecast-4-d-after', 'Forecast-5-d-after', 'Forecast-6-d-after', 'Forecast-7-d-after', 'Forecast-8-d-after', 'Forecast-9-d-after' ] meta_data = { 'station': 'Hanwella', 'variable': 'Discharge', 'unit': 'm3/s', 'type': types[0], 'source': 'HEC-HMS', 'name': run_name, } for index in range(0, min(len(types), len(extracted_timeseries))): meta_data_copy = copy.deepcopy(meta_data) meta_data_copy['type'] = types[index] event_id = my_adapter.get_event_id(meta_data_copy) if event_id is None: event_id = my_adapter.create_event_id(meta_data_copy) print('HASH SHA256 created: ', event_id) else: print('HASH SHA256 exists: ', event_id) if not force_insert: print( 'Timeseries already exists. User --force to update the existing.\n' ) continue # for l in timeseries[:3] + timeseries[-2:] : # print(l) row_count = my_adapter.insert_timeseries(event_id, extracted_timeseries[index], force_insert) print('%s rows inserted.\n' % row_count)
def save_forecast_timeseries(my_adapter, my_timeseries, my_model_date, my_model_time, my_opts): print('EXTRACTFLO2DWATERLEVEL:: save_forecast_timeseries >>', my_opts) # Convert date time with offset date_time = datetime.strptime('%s %s' % (my_model_date, my_model_time), Constants.COMMON_DATE_TIME_FORMAT) if 'utcOffset' in my_opts: date_time = date_time + my_opts['utcOffset'] my_model_date = date_time.strftime('%Y-%m-%d') my_model_time = date_time.strftime('%H:%M:%S') # If there is an offset, shift by offset before proceed forecast_timeseries = [] if 'utcOffset' in my_opts: print('Shit by utcOffset:', my_opts['utcOffset'].resolution) for item in my_timeseries: forecast_timeseries.append( [datetime.strptime(item[0], Constants.COMMON_DATE_TIME_FORMAT) + my_opts['utcOffset'], item[1]]) forecast_timeseries = extractForecastTimeseries(forecast_timeseries, my_model_date, my_model_time, by_day=True) else: forecast_timeseries = extractForecastTimeseries(my_timeseries, my_model_date, my_model_time, by_day=True) # print(forecast_timeseries[:10]) extracted_timeseries = extractForecastTimeseriesInDays(forecast_timeseries) # for ll in extractedTimeseries : # print(ll) # Check whether existing station force_insert = my_opts.get('forceInsert', False) station = my_opts.get('station', '') is_station_exists = adapter.get_station({'name': station}) if is_station_exists is None: print('WARNING: Station %s does not exists. Continue with others.' % station) return # TODO: Create if station does not exists. run_name = my_opts.get('run_name', 'Cloud-1') less_char_index = run_name.find('<') greater_char_index = run_name.find('>') if -1 < less_char_index > -1 < greater_char_index: start_str = run_name[:less_char_index] date_format_str = run_name[less_char_index + 1:greater_char_index] end_str = run_name[greater_char_index + 1:] try: date_str = date_time.strftime(date_format_str) run_name = start_str + date_str + end_str except ValueError: raise ValueError("Incorrect data format " + date_format_str) types = [ 'Forecast-0-d', 'Forecast-1-d-after', 'Forecast-2-d-after', 'Forecast-3-d-after', 'Forecast-4-d-after', 'Forecast-5-d-after', 'Forecast-6-d-after', 'Forecast-7-d-after', 'Forecast-8-d-after', 'Forecast-9-d-after', 'Forecast-10-d-after', 'Forecast-11-d-after', 'Forecast-12-d-after', 'Forecast-13-d-after', 'Forecast-14-d-after' ] meta_data = { 'station': station, 'variable': 'WaterLevel', 'unit': 'm', 'type': types[0], 'source': 'FLO2D', 'name': run_name } for i in range(0, min(len(types), len(extracted_timeseries))): meta_data_copy = copy.deepcopy(meta_data) meta_data_copy['type'] = types[i] event_id = my_adapter.get_event_id(meta_data_copy) if event_id is None: event_id = my_adapter.create_event_id(meta_data_copy) print('HASH SHA256 created: ', event_id) else: print('HASH SHA256 exists: ', event_id) if not force_insert: print('Timeseries already exists. User --force to update the existing.\n') continue # for l in timeseries[:3] + timeseries[-2:] : # print(l) row_count = my_adapter.insert_timeseries(event_id, extracted_timeseries[i], force_insert) print('%s rows inserted.\n' % row_count)