@@ -310,72 +310,88 @@ def request_parse_workflow(
310310 nc .variables ["metaStationName" ][:].compressed ().tobytes ().decode ("utf-8" )
311311 )
312312
313- if years is not None :
314- start_date = []
315- end_date = []
313+ multiyear = False
314+ if years :
316315 if isinstance (years , int ):
317- years = [years ]
318- for year in years :
319- start_date .append (datetime .datetime (year , 1 , 1 , tzinfo = pytz .UTC ))
320- end_date .append (datetime .datetime (year + 1 , 1 , 1 , tzinfo = pytz .UTC ))
321- else :
322- start_date = [start_date ]
323- end_date = [end_date ]
324-
325- data = {"metadata" : {}}
326- multiyear_data = {}
327- for start , end in zip (start_date , end_date ):
328- # Check the cache for each individual year
329- hash_params = f"{ station_number } -{ parameters } -{ start } -{ end } "
330- year_data , _ , _ = handle_caching (
316+ start_date = datetime .datetime (years , 1 , 1 , tzinfo = pytz .UTC )
317+ end_date = datetime .datetime (years + 1 , 1 , 1 , tzinfo = pytz .UTC )
318+ elif isinstance (years , list ):
319+ if len (years ) == 1 :
320+ start_date = datetime .datetime (years [0 ], 1 , 1 , tzinfo = pytz .UTC )
321+ end_date = datetime .datetime (years [0 ] + 1 , 1 , 1 , tzinfo = pytz .UTC )
322+ else :
323+ multiyear = True
324+ if not multiyear :
325+ # Check the cache first
326+ hash_params = f"{ station_number } -{ parameters } -{ start_date } -{ end_date } "
327+ data , _ , _ = handle_caching (
331328 hash_params ,
332329 cache_dir ,
333330 cache_content = {"data" : None , "metadata" : None , "write_json" : None },
334331 )
335- if year_data is None :
336- new_data = get_netcdf_variables (
332+
333+ if data is None :
334+ data = get_netcdf_variables (
337335 nc ,
338- start_date = start ,
339- end_date = end ,
336+ start_date = start_date ,
337+ end_date = end_date ,
340338 parameters = parameters ,
341339 all_2D_variables = all_2D_variables ,
342340 silent = silent ,
343341 )
344- year_data = new_data ["data" ]
345- # If waveFrequency is in the metadata, move it to the top level of metadata
346- if "wave" in new_data ["metadata" ]:
347- if "waveFrequency" in new_data ["metadata" ]["wave" ]:
348- new_data ["metadata" ]["waveFrequency" ] = new_data ["metadata" ][
349- "wave"
350- ]["waveFrequency" ]
351- new_data ["metadata" ].pop ("wave" )
352- # Cache the individual year's data
353342 handle_caching (
354343 hash_params ,
355344 cache_dir ,
356- cache_content = {
357- "data" : year_data ,
358- "metadata" : new_data ["metadata" ],
359- "write_json" : None ,
360- },
345+ cache_content = {"data" : data , "metadata" : None , "write_json" : None },
361346 )
362- year = start .year
363- multiyear_data [year ] = year_data
364-
365- for data_key in year_data .keys ():
366- if data_key .endswith ("2D" ):
367- data [data_key ] = {}
368- for data_key2D in year_data [data_key ].keys ():
369- data_list = []
370- for year in multiyear_data .keys ():
371- data2D = multiyear_data [year ][data_key ][data_key2D ]
372- data_list .append (data2D )
373- data [data_key ][data_key2D ] = pd .concat (data_list )
374- else :
375- data_list = [
376- multiyear_data [year ][data_key ] for year in multiyear_data .keys ()
377- ]
378- data [data_key ] = pd .concat (data_list )
347+
348+ else :
349+ data = {"data" : {}, "metadata" : {}}
350+ multiyear_data = {}
351+ for year in years :
352+ start_date = datetime .datetime (year , 1 , 1 , tzinfo = pytz .UTC )
353+ end_date = datetime .datetime (year + 1 , 1 , 1 , tzinfo = pytz .UTC )
354+
355+ # Check the cache for each individual year
356+ hash_params = f"{ station_number } -{ parameters } -{ start_date } -{ end_date } "
357+ year_data , _ , _ = handle_caching (
358+ hash_params ,
359+ cache_dir ,
360+ cache_content = {"data" : None , "metadata" : None , "write_json" : None },
361+ )
362+ if year_data is None :
363+ year_data = get_netcdf_variables (
364+ nc ,
365+ start_date = start_date ,
366+ end_date = end_date ,
367+ parameters = parameters ,
368+ all_2D_variables = all_2D_variables ,
369+ silent = silent ,
370+ )
371+ # Cache the individual year's data
372+ handle_caching (
373+ hash_params ,
374+ cache_dir ,
375+ cache_content = {
376+ "data" : year_data ,
377+ "metadata" : None ,
378+ "write_json" : None ,
379+ },
380+ )
381+ multiyear_data [year ] = year_data ["data" ]
382+
383+ for data_key in year_data ["data" ].keys ():
384+ if data_key .endswith ("2D" ):
385+ data ["data" ][data_key ] = {}
386+ for data_key2D in year_data ["data" ][data_key ].keys ():
387+ data_list = []
388+ for year in years :
389+ data2D = multiyear_data [year ][data_key ][data_key2D ]
390+ data_list .append (data2D )
391+ data ["data" ][data_key ][data_key2D ] = pd .concat (data_list )
392+ else :
393+ data_list = [multiyear_data [year ][data_key ] for year in years ]
394+ data ["data" ][data_key ] = pd .concat (data_list )
379395
380396 if buoy_name :
381397 try :
0 commit comments