You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by bo...@apache.org on 2013/08/17 00:11:10 UTC

svn commit: r1514906 - /incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py

Author: boustani
Date: Fri Aug 16 22:11:10 2013
New Revision: 1514906

URL: http://svn.apache.org/r1514906
Log:
gettin parameter info more efficiently

Modified:
    incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py

Modified: incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py
URL: http://svn.apache.org/viewvc/incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py?rev=1514906&r1=1514905&r2=1514906&view=diff
==============================================================================
--- incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py (original)
+++ incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py Fri Aug 16 22:11:10 2013
@@ -33,7 +33,7 @@ from dataset import Dataset
 URL = 'http://rcmes.jpl.nasa.gov/query-api/query.php?'
 
 
-def parameters_metadata():
+def get_parameters_metadata():
     '''Get the metadata of all parameter from RCMED.
 
     :returns: Dictionary of information for each parameter stored in one list
@@ -56,20 +56,21 @@ def parameters_metadata():
     return param_info_list
 
 
-def _make_mask_array(values, parameter_id):  
+def _make_mask_array(values, parameter_id, parameters_metadata):  
     '''Created masked array to deal with missing values
 
     :param values: Numpy array of values which may contain missing values
     :type values: Numpy array
     :param parameter_id: Parameter's id
     :type parameter_id: Integer
+    :param parameters_metadata: Metadata for all parameters
+    :type parameters_metadata: List of dictionaries
 
     :returns: Masked array of values
     :rtype: Masked array
     '''
-    
-    all_param_info = parameters_metadata()
-    for each in all_param_info:
+
+    for each in parameters_metadata:
         if each['parameter_id'].encode() == str(parameter_id):
             missing_values = each['missingdataflag'].encode()
             break
@@ -278,11 +279,11 @@ def _generate_query_url(dataset_id, para
     return url_request
 
 
-def _get_parameter_info(dataset_id, parameter_id):
+def _get_parameter_info(parameters_metadata, parameter_id):
     '''General information for given parameter id.
 
-    :param dataset_id: Dataset id.
-    :type dataset_id: Integer
+    :param parameters_metadata: Metadata for all parameters
+    :type parameters_metadata: List of dictionaries
     :param parameter_id: Parameter id
     :type parameter_id: Integer
 
@@ -290,19 +291,15 @@ def _get_parameter_info(dataset_id, para
     :rtype: (string, string, string, string, string, string, string)
     '''
 
-    query = [('datasetId',dataset_id), ('parameterId',parameter_id)]
-    query_url = urllib.urlencode(query)
-    url = URL + query_url + "&info=yes"
-    string = urllib2.urlopen(url)
-    data_string = string.read()
-    data_string = json.loads(data_string)
-    database = data_string["database"]
-    time_step = data_string["timestep"]
-    realm = data_string["realm"]
-    instrument = data_string["instrument"]
-    start_date = data_string["start_date"]
-    end_date = data_string["end_date"]
-    unit = data_string["units"]
+    for dic in parameters_metadata:
+        if int(dic['parameter_id']) == parameter_id:
+            database = dic['database']
+            time_step = dic['timestep']
+            realm = dic['realm']
+            instrument = dic['instrument']
+            start_date = dic['start_date']
+            end_date = dic['end_date']
+            unit = dic['units']
 
     return (database, time_step, realm, instrument, start_date, end_date, unit)
 
@@ -330,10 +327,9 @@ def parameter_dataset(dataset_id, parame
     :returns: Dataset object
     :rtype: Object
     '''
-
-    parameter_info  = _get_parameter_info(dataset_id, parameter_id)
-    time_step = parameter_info[1]
-    parameter_name = parameter_info[0]
+    
+    parameters_metadata = get_parameters_metadata()
+    parameter_name, time_step, _, _, _, _, _= _get_parameter_info(parameters_metadata, parameter_id)
     url = _generate_query_url(dataset_id, parameter_id, min_lat, max_lat, min_lon, max_lon, start_time, end_time, time_step)
     lats, lons, levels, times, values = _get_data(url)
 
@@ -345,6 +341,6 @@ def parameter_dataset(dataset_id, parame
     unique_lats_lons_levels_times = _make_unique(lats, lons, levels, times)
     unique_times = _calculate_time(unique_lats_lons_levels_times[3], time_step)
     values = _reshape_values(values, unique_lats_lons_levels_times)
-    values = _make_mask_array(values, parameter_id)
+    values = _make_mask_array(values, parameter_id, parameters_metadata)
     
     return Dataset(unique_lats_lons_levels_times[0], unique_lats_lons_levels_times[1], unique_times, values, parameter_name)
\ No newline at end of file