예제 #1
0
파일: notebook.py 프로젝트: ferag/cyberhab
def plot_meteo(region_buttons, ini_date, end_date, actions):
    region = region_buttons.value
    sd = ini_date.value
    #datetime.strptime(ini_date.value, "%m-%d-%Y")
    ed = end_date.value
    m = meteo.Meteo(sd, ed, region)
    meteo_output = m.get_meteo()
    data = pd.read_csv(meteo_output['output'], delimiter=',', decimal=',')
    data['Date'] = pd.to_datetime(data['Date'])
    #data["Temp"] = float(data["Temp"])
    data
    data.plot(x='Date', y='Temp')
    plt.show()
def test_file1_method1(supply_params):
    os.mkdir('datasets')
    os.mkdir('datasets/%s' % supply_params[0])
    config.METEO_API_TOKEN = supply_params[5]
    config.METEO_API_URL = supply_params[6]
    m = meteo.Meteo(supply_params[1], supply_params[2], supply_params[0])
    m.params = supply_params[3]
    meteo_output = m.get_meteo()
    hash_code = hashlib.md5(file_as_bytes(open(meteo_output['output'],
                                               'rb'))).hexdigest()
    os.remove(meteo_output['output'])
    os.rmdir('datasets/%s' % supply_params[0])
    os.rmdir('datasets')
    assert hash_code == supply_params[4]
def test_metadata_attachment(supply_params):
    config.onedata_mode = 1
    config.onedata_token = supply_params[7]
    config.onedata_url = supply_params[9]
    config.onedata_api = supply_params[10]
    os.mkdir('datasets')
    os.mkdir('datasets/%s' % supply_params[0])
    config.METEO_API_TOKEN = supply_params[5]
    config.METEO_API_URL = supply_params[6]
    # rg = supply_params[0]
    # ons = supply_params[11]
    m = meteo.Meteo(supply_params[1], supply_params[2], supply_params[0])
    m.params = supply_params[3]
    meteo_output = m.get_meteo()
    file_out = meteo_output['output']
    file_out = file_out.replace('datasets/', '')
    url = ("https://cloud-90-147-75-163.cloud.ba.infn.it/api/v3/oneprovider"
           "/metadata/json/LifeWatch/CdP/temp_2018-10-10_2018-11-11.csv")
    r = requests.get(url, headers=supply_params[8])
    os.remove(meteo_output['output'])
    os.rmdir('datasets/%s' % supply_params[0])
    os.rmdir('datasets')
    assert r.status_code == 200
예제 #4
0
def prepare_model(start_date, end_date, region, path, onedata_token):
     #Parameters
    ini_date_str = start_date.strftime('%Y-%m-%d')+' 00:00:00'
    end_date_str = end_date.strftime('%Y-%m-%d')+' 00:00:00'
    
    print("Generating new model"+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/')
    try:
        shutil.copytree(path+region+'/model', path+region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/')
        
    except FileExistsError:
        shutil.rmtree(path+region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/')
        shutil.copytree(path+region+'/model', path+region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/')
    base_path = path+region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/'
    fmt = '%Y-%m-%d %H:%M:%S'
    ini_date = datetime.strptime(ini_date_str, fmt)
    end_date = datetime.strptime(end_date_str, fmt)    
    

    f1 = open(base_path+'test_1.mdf','r')
    f2 = open(base_path+'test_1_v2.mdf','w')

    #Layers
    k = 35
    print(modeling_file.minutes_between_date(ini_date,end_date))

    #Check Wind file
    
    wind_input = ''
    #Search once. If it is not found, it tries to download the data
    try:
        print("Searching Wind data")
        wind_input = path+region+'/'+find_dataset_type(ini_date.date(),end_date.date(),'wind',onedata_token)[0]["file"]
    except Exception as e:
        print(e)
        print("Getting data")
        m = meteo.Meteo(ini_date.date(), end_date.date(), region)
        m.params = ["ID","date","speed","dir"]
        wind_input = m.get_meteo()['output']
    #Second time. If it is not found, it generates a generic file.
    try:
        if wind_input == '':
            print("Searching Wind data again")
            wind_input = path + region + '/' + find_dataset_type(ini_date.date(),end_date.date(),'wind',onedata_token)[0]["file"]
    except:
        wf = open(base_path+'wind_generic.csv','w')
        line = "date;speed;dir\n\"%s\";2.72;277\n\"%s\";2.72;277\n" % (ini_date_str, end_date_str)
        wf.write(line)
        wf.close()
        wind_input = base_path+'wind_generic.csv'
        
    print("Creating file .wnd from CSV: %s" % wind_input)
    wind_file_name = "wind_"+ini_date.strftime('%Y-%m-%d%H%M%S')+"_"+end_date.strftime('%Y-%m-%d%H%M%S')+".wnd"
    modeling_file.csv_to_wind(wind_input, ini_date, end_date, base_path+wind_file_name)
    print("Wind file created: %s" % wind_file_name)


    #Check initial conditions
    #TODO For the moment, only with uniform values
    print("Searching Initial data")
    print("Getting initial data")
    print("Creating initial data file .ini")
    ini_file_name = "initial_"+ini_date.strftime('%Y-%m-%d%H%M%S')+"_"+end_date.strftime('%Y-%m-%d%H%M%S')+".ini"
    print("Initial file created: %s" % ini_file_name)

    #Check Radiation file
    print("Searching Radiation data")
    print("Getting data")
    try:
        rad_input = path+find_dataset_type(ini_date.date(),end_date.date(),'rad')[0]['file']
    except:
        rf = open(base_path+'rad_generic.csv','w')
        line = "date;hum;temp;rad\n\"%s\";22.72;12.4;0\n\"%s\";22.72;12.4;200\n" % (ini_date_str, end_date_str)
        rf.write(line)
        rf.close()
        rad_input = base_path+'rad_generic.csv'
    print("Creating file .tem")
    rad_file_name = "rad_"+ini_date.strftime('%Y-%m-%d%H%M%S')+"_"+end_date.strftime('%Y-%m-%d%H%M%S')+".tem"
    modeling_file.csv_to_tem(rad_input, ini_date, end_date, base_path+rad_file_name)
    print("Radiation file created: %s" % rad_file_name)

    #Input-Output flow
    print("Searching flow data")
    print("Getting data")

    #Uniform output
    out_dic = {1: {'Name':'Presa','Flow': 0.5}}
    presa_bct = 'Presa.bct'
    #input_csv = 'data/'
    #csv_to_bct(out_dic,presa_bct,input_csv,ini_date,end_date)
    modeling_file.gen_uniform_output_bct(out_dic,base_path+presa_bct,ini_date,end_date)

    out_dic = {1: {'Name':'Presa','Temperature': 12.5, 'Salinity': 0.03}}
    presa_bcc = 'Presa.bcc'
    modeling_file.gen_uniform_output_bcc(out_dic,base_path+presa_bcc,ini_date,end_date)

    input_dic = {1: {'Name': 'Duero', 'Flow': 0.4, 'Temperature': 12.5, 'Salinity': 0.03}, 2: {'Name': 'Revinuesa', 'Flow': 0.4, 'Temperature': 12.5, 'Salinity': 0.03}, 3: {'Name':'Ebrillos', 'Flow': 0.4, 'Temperature': 12.5, 'Salinity': 0.03}, 4: {'Name': 'Dehesa', 'Flow': 0.4, 'Temperature': 12.5, 'Salinity': 0.03}, 5: {'Name': 'Remonicio', 'Flow': 0.4, 'Temperature': 12.5, 'Salinity': 0.03}}
    input_dis = 'tributaries.dis'
    #input_dis_csv_folder = 'data/'
    #try:
    #    csv_to_dis(input_dic,input_dis_csv_folder,input_dis,ini_date,end_date)
    #except:
    modeling_file.gen_uniform_intput_dis(input_dic,base_path+input_dis,ini_date,end_date)

    #Parameters update
    dic = {'Itdate': "#"+ini_date.strftime('%Y-%m-%d')+"#\n", 
           'Tstart': "%i\n" % modeling_file.minutes_between_date(datetime.strptime(ini_date.strftime('%Y-%m-%d'),'%Y-%m-%d'),ini_date), 
           'Tstop': "%i\n" % modeling_file.minutes_between_date(ini_date,end_date),
           'Filwnd': "#" + wind_file_name + "#\n",
           'Filtmp': "#" + rad_file_name + "#\n",
           'FilbcT': "#" + presa_bct + "#\n",
           'FilbcC':"#" + presa_bcc + "#\n",
           'Fildis': "#" + input_dis + "#\n",           
           'Flmap' : "0 360 %i" % modeling_file.minutes_between_date(ini_date,end_date),
           'Zeta0' : "0\n"
          }
    #Update params
    modeling_file.update_param_value(dic,f1,f2)

    f1.close()

    #f1 = open(base_path+'test_1.mdf','r')
    #f2 = open(base_path+'test_1_v2.mdf','w')
    os.rename(base_path+'test_1.mdf', base_path+'test_old.mdf')
    os.rename(base_path+'test_1_v2.mdf',base_path+'test_1.mdf')
    
    # WATER QUALITY
    ini_date_str = start_date.strftime('%Y/%m/%d') + '-00:00:00'
    end_date_str = end_date.strftime('%Y/%m/%d')+'-00:00:00'


    q1 = open(base_path+'test_1.inp','r')
    q2 = open(base_path+'test_1_v2.inp','w')

     #TODO 
    wind_data = ini_date_str + '  2.55\n' + end_date_str + '  1.55\n'
    rad_data = ini_date_str + '  255.5\n' + end_date_str + '  155.5\n'


     #Layers
    k = 35
    #Check Wind file
    print("Searching Wind data")
    print("Getting data")
    wind_block = False
    rad_block = False
    for line in q1:
        if wind_block==False and rad_block==False:
            if '2012.01.02 00:00:00' in line:
                line = line.replace('2012.01.02',start_date.strftime('%Y')+'.'+start_date.strftime('%m') + '.' + start_date.strftime('%d'))
            if '2012/01/02-00:00:00' in line:
                line = line.replace('2012/01/02-00:00:00',ini_date_str)
            if '2012/01/05-00:00:00' in line:
                line = line.replace('2012/01/05-00:00:00',end_date_str)
            q2.write(line)
            if '; wind_start' in line:
                wind_block = True
                q2.write(wind_data)
            if '; rad_start' in line:
                wind_block = True
                q2.write(rad_data)
        elif wind_block:
            if '; wind_end' in line:
                q2.write(line)
                wind_block = False
        elif rad_block:
            if '; rad_end' in line:
                q2.write(line)
                rad_block = False

    q1.close()
    q2.close()

    os.rename(base_path+'test_1.inp', base_path+'test_old.inp')
    os.rename(base_path+'test_1_v2.inp',base_path+'test_1.inp')
    
    try:
        deployment_id = launch_orchestrator_job('hydro',region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/')
    except Exception as e:
        print(e)
        print("PaaS Orchestrator disconnected. Run the model manually")
        return path+region+'/model_'+start_date.strftime('%Y-%m-%d')+'_'+end_date.strftime('%Y-%m-%d')+'/'
    
    return deployment_id