def set_form(request, clean=True): ''' Coverts request input to usable form input: Deals with unicode issues and autofill options for identifiers NOTE: variables 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 variables, always needs to be list if 'variable' in request.keys() and not 'variables' in request.keys(): form['variables'] = [form['variable']] if 'variables' in request.keys(): form['variables'] = WRCCUtils.convert_variables_to_list(request['variables']) 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 variables, always needs to be list if 'variable' in request.POST.keys() and not 'variables' in request.POST.keys(): form['variables'] = [str(request.POST['variable'])] if 'variables' in request.POST.keys(): #form['variables'] = WRCCUtils.convert_variables_to_list(request.POST['variables']) els = request.POST.getlist('variables',request.POST.get('variables','').split(',')) form['variables'] = [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 variables, always needs to be list if 'variable' in request.GET.keys() and not 'variables' in request.GET.keys(): form['variables'] = [str(request.GET['variable'])] if 'variables' in request.GET.keys(): #form['variables'] = WRCCUtils.convert_variables_to_list(request.GET['variables']) form['variables'] = request.GET.get('variables','').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 'variables' in form.keys(): form['variables'] = [str(el) for el in form['variables']] 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 #Get element list for vd el_list = None if 'variable' in form.keys() and not 'variables' in form.keys(): el_list = [form['variable']] if 'variables' in form.keys() and not 'variable' in form.keys(): if isinstance(form['variables'],basestring): el_list = form['variables'].replace(', ',',').split(',') else: el_list = form['variables'] #Get valid daterange vd = ['9999-99-99', '9999-99-99'] #Clean Dates and windows 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 'station_id' in form.keys(): stn_id, stn_name = WRCCUtils.find_id_and_name(str(form['station_id']),settings.MEDIA_DIR +'json/US_station_id.json') vd, no_vd_els = 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': if vd[0] != '9999-99-99':form['start_year'] = vd[0][0:4] if key == 'end_year' and form['end_year'].lower() == 'por': if vd[1] != '9999-99-99':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 variables 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['variables'].append(el_strip + str(WRCCUtils.convert_to_english('base_temp',base_temp))) else: form['variables'].append(dd) ''' form['variables'].append(dd) return form