Skip to content

Commit 62a27c4

Browse files
committed
feat(misc): modularize kwargs filter
1 parent 9f3036c commit 62a27c4

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

cryoswath/l2.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import geopandas as gpd
2-
import inspect
32
from multiprocessing import Pool
43
import numpy as np
54
import os
@@ -200,12 +199,8 @@ def process_track(idx, reprocess, l2_paths, save_or_return, data_path, current_s
200199
cs_full_file_names = kwargs.pop("cs_full_file_names")
201200
else:
202201
cs_full_file_names = load_cs_full_file_names(update="no")
203-
# filter l1b_data kwargs
204-
params = inspect.signature(l1b.l1b_data).parameters
205-
l1b_kwargs = {k: v for k, v in kwargs.items() if k in params}
206-
# filter to_l2 kwargs
207-
params = inspect.signature(l1b.l1b_data.to_l2).parameters
208-
to_l2_kwargs = {k: v for k, v in kwargs.items() if k in params and k != "swath_or_poca"}
202+
l1b_kwargs = filter_kwargs(l1b.l1b_data, kwargs)
203+
to_l2_kwargs = filter_kwargs(l1b.l1b_data.to_l2, kwargs, blacklist=["swath_or_poca"])
209204
swath_poca_tuple = l1b.l1b_data.from_id(cs_time_to_id(idx), **l1b_kwargs)\
210205
.to_l2(swath_or_poca="both", **to_l2_kwargs)
211206
if save_or_return != "return":

cryoswath/l3.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ def build_dataset(region_of_interest: str|shapely.Polygon,
4343
# I believe passing loading l2 data to the function prevents copying
4444
# on .drop. an alternative would be to define l2_data nonlocal
4545
# within the gridding function
46-
l3_data = med_mad_cnt_grid(l2.from_id(cs_tracks.index), start_datetime=start_datetime, end_datetime=end_datetime,
47-
aggregation_period=aggregation_period, timestep=timestep, spatial_res_meter=spatial_res_meter)
46+
l3_data = med_mad_cnt_grid(l2.from_id(cs_tracks.index, **filter_kwargs(l2.from_id, kwargs)),
47+
start_datetime=start_datetime, end_datetime=end_datetime,
48+
aggregation_period=aggregation_period, timestep=timestep,
49+
spatial_res_meter=spatial_res_meter)
4850
l3_data.to_netcdf(build_path(region_of_interest, timestep, spatial_res_meter, aggregation_period))
4951
return l3_data
5052
__all__.append("build_dataset")

cryoswath/misc.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ftplib
44
import geopandas as gpd
55
import glob
6+
import inspect
67
import numpy as np
78
import os
89
import pandas as pd
@@ -135,6 +136,23 @@ def convert_all_esri_to_feather(dir_path: str = None) -> None:
135136
# return local_filename
136137

137138

139+
# ! make recursive
140+
def filter_kwargs(func: callable,
141+
kwargs: dict, *,
142+
blacklist: list[str] = None,
143+
whitelist: list[str] = None,
144+
) -> dict:
145+
def ensure_list(tmp_list):
146+
if tmp_list is None: return []
147+
elif isinstance(tmp_list, str): return [tmp_list]
148+
else: return tmp_list
149+
blacklist = ensure_list(blacklist)
150+
whitelist = ensure_list(whitelist)
151+
params = inspect.signature(func).parameters
152+
return {k: v for k, v in kwargs.items() if (k in params and k not in blacklist) or k in whitelist}
153+
__all__.append("filter_kwargs")
154+
155+
138156
def find_region_id(location: any, scope: str = "o2") -> str:
139157
if isinstance(location, gpd.GeoDataFrame):
140158
location = location.geometry

0 commit comments

Comments
 (0)