def test_find_ids_and_names(self): area_type = 'station_ids' area_val = self.test_areas[area_type] json_file_path = '/www/apps/csc/dj-projects/my_acis/media/json/US_station_id.json' IDs, names = WRCCUtils.find_ids_and_names(area_val, json_file_path) try: self.assertIsInstance(IDs, str) except AssertionError as err: logger.error('AssertionError' + str(err)) try: self.assertNotEqual(IDs.split(','),[]) except AssertionError as err: logger.error('AssertionError' + str(err))
def set_form(request, clean=True): ''' Coverts request input to usable form input: Deals with unicode issues and autofill options for identifiers NOTE: elements should always be a list (also when clean = False) If Clean == True, We also clean up some form fields for submission: date fields, convert to yyyymmdd window fields, convert to mmdd name strings are converted to ids Combine elemenst weith degree days ''' try: req_method = request.method except: if isinstance(request,dict): req_method = 'dict' else:req_method = None form= {} form['req_method'] = req_method #Convert request object to python dictionary if req_method == 'dict': form = copy.deepcopy(request) #Special case elements, always needs to be list if 'element' in request.keys() and not 'elements' in request.keys(): form['elements'] = [form['element']] if 'elements' in request.keys(): form['elements'] = WRCCUtils.convert_elements_to_list(request['elements']) elif req_method == 'POST': for key, val in request.POST.items(): form[str(key)]= val #form = dict((str(x),str(y)) for x,y in request.POST.items()) #Special case elements, always needs to be list if 'element' in request.POST.keys() and not 'elements' in request.POST.keys(): form['elements'] = [str(request.POST['element'])] if 'elements' in request.POST.keys(): #form['elements'] = WRCCUtils.convert_elements_to_list(request.POST['elements']) els = request.POST.getlist('elements',request.POST.get('elements','').split(',')) form['elements'] = [str(el) for el in els] if 'metadata_keys' in request.POST.keys(): form['metadata_keys'] = request.POST.getlist('metadata_keys',request.POST.get('metadata_keys','').split(',')) elif req_method == 'GET': #form = dict((str(x),str(y)) for x,y in request.GET.items()) for key, val in request.GET.items(): form[str(key)]= val #Special case elements, always needs to be list if 'element' in request.GET.keys() and not 'elements' in request.GET.keys(): form['elements'] = [str(request.GET['element'])] if 'elements' in request.GET.keys(): #form['elements'] = WRCCUtils.convert_elements_to_list(request.GET['elements']) form['elements'] = request.GET.get('elements','').split(',') if 'metadata_keys' in request.GET.keys(): form['metadata_keys'] = request.GET.getlist('metadata_keys',request.GET.get('metadata_keys','').split(',')) else: form = {} #set data type for single apps if 'data_type' not in form.keys(): if 'station_id' in form.keys(): form['data_type'] = 'station' if 'location' in form.keys(): form['data_type'] = 'grid' if 'app_name' in form.keys() and form['app_name'] in ['temporal_summary','monthly_spatial_summary']: form['data_type'] = 'grid' #Convert unicode to string if 'elements' in form.keys(): form['elements'] = [str(el) for el in form['elements']] if 'csrfmiddlewaretoken' in form.keys(): del form['csrfmiddlewaretoken'] if 'formData' in form.keys(): del form['formData'] if 'form_options' in form.keys(): del form['form_options'] if not clean: return form #Clean up form for submission #Clean Dates and windows vd = None for key in ['start_date', 'end_date', 'start_year', 'end_year','start_window','end_window']: if key not in form.keys(): continue if form[key].lower() == 'por': if str(key) in ['start_date']: k=key; idx = 0;sd = 'por'; ed = form['end_date'] if str(key) in ['end_date']: k=key; idx = 1;ed = 'por'; sd = form['start_date'] if str(key) in ['start_year']: k='start_date'; idx = 0;sd = 'por' if form['end_year'].lower() == 'por':ed = 'por' else:ed = str(int(form['end_year']) -1) + '-12-31' if str(key) in ['end_year']: k='end_date'; idx = 1;ed = 'por' if form['start_year'].lower() == 'por':sd = 'por' else:sd = form['start_year'] + '-01-01' if 'element' in form.keys() and not 'elements' in form.keys(): if form['element'] in ['dtr']: el_list = ['maxt','mint'] if form['element'] in ['pet']: el_list = ['maxt','mint','pcpn'] if 'elements' in form.keys() and not 'element' in form.keys(): if isinstance(form['elements'],basestring): el_list = form['elements'].replace(' ','').split(',') else: el_list = form['elements'] else: el_list = None if 'station_id' in form.keys(): if vd is None: stn_id, stn_name = WRCCUtils.find_id_and_name(str(form['station_id']),settings.MEDIA_DIR +'json/US_station_id.json') vd = WRCCUtils.find_valid_daterange(stn_id, start_date=sd, end_date=ed, el_list=el_list, max_or_min='max') form[k] = vd[idx] if key == 'start_year' and form['start_year'].lower() == 'por': form['start_year'] = vd[0][0:4] if key == 'end_year' and form['end_year'].lower() == 'por': form['end_year'] = vd[1][0:4] else: form[str(key)] = str(form[key]).replace('-','').replace(':','').replace('/','').replace(' ','') else: form[str(key)] = str(form[key]).replace('-','').replace(':','').replace('/','').replace(' ','') #Convert user input of area names to ids for key in ['station_id','county', 'basin', 'county_warning_area', 'climate_division']: if not key in form.keys(): continue ID,name = WRCCUtils.find_id_and_name(form[key],settings.MEDIA_DIR +'json/US_' + key + '.json') form[key] = ID form['user_area_id'] = str(name) + ', ' + str(ID) if not 'user_area_id' in form.keys(): try: form['user_area_id'] = form[form['area_type']] except: try: form['user_area_id'] = form[form['data_type']] except: pass #station_ids is special case if 'station_ids' in form.keys(): stn_ids = '' stn_list = form['station_ids'].rstrip(',').split(',') #Remove leading spaces from list items stn_list = [v.lstrip(' ').rstrip(' ') for v in stn_list] stn_ids, stn_names = WRCCUtils.find_ids_and_names(stn_list,settings.MEDIA_DIR +'json/US_' + 'station_id' + '.json') form['station_ids'] = stn_ids uai = '' stn_names_list = stn_names.split(',') for idx, stn_id in enumerate(stn_ids.split(',')): uai+=str(stn_names[idx]) + ', ' + str(stn_id) + ';' form['user_area_id'] = uai #set data summary if needed if 'data_summary' not in form.keys(): if 'temporal_summary' in form.keys(): form['data_summary'] = 'temporal_summary' if 'spatial_summary' in form.keys(): form['data_summary'] = 'spatial_summary' #Combine elements if 'add_degree_days' in form.keys() and form['add_degree_days'] == 'T': for dd in form['degree_days'].replace(' ','').split(','): ''' if form['units'] == 'metric': el_strip, base_temp = WRCCUtils.get_el_and_base_temp(dd) form['elements'].append(el_strip + str(WRCCUtils.convert_to_english('base_temp',base_temp))) else: form['elements'].append(dd) ''' form['elements'].append(dd) return form