@@ -2403,21 +2403,12 @@ def create_http_requester(
24032403
24042404 api_budget = self ._api_budget
24052405
2406- # Removes QueryProperties components from the interpolated mappings because it has been designed
2407- # to be used by the SimpleRetriever and will be resolved from the provider from the slice directly
2408- # instead of through jinja interpolation
2409- request_parameters : Optional [Union [str , Mapping [str , str ]]]
2410- if isinstance (model .request_parameters , Mapping ):
2411- request_parameters = self ._remove_query_properties (model .request_parameters )
2412- else :
2413- request_parameters = model .request_parameters
2414-
24152406 request_options_provider = InterpolatedRequestOptionsProvider (
24162407 request_body = model .request_body ,
24172408 request_body_data = model .request_body_data ,
24182409 request_body_json = model .request_body_json ,
24192410 request_headers = model .request_headers ,
2420- request_parameters = request_parameters ,
2411+ request_parameters = model . request_parameters , # type: ignore # QueryProperties have been removed in `create_simple_retriever`
24212412 query_properties_key = query_properties_key ,
24222413 config = config ,
24232414 parameters = model .parameters or {},
@@ -3207,7 +3198,8 @@ def _get_url(req: Requester) -> str:
32073198
32083199 query_properties : Optional [QueryProperties ] = None
32093200 query_properties_key : Optional [str ] = None
3210- if self ._query_properties_in_request_parameters (model .requester ):
3201+ self ._ensure_query_properties_to_model (model .requester )
3202+ if self ._has_query_properties_in_request_parameters (model .requester ):
32113203 # It is better to be explicit about an error if PropertiesFromEndpoint is defined in multiple
32123204 # places instead of default to request_parameters which isn't clearly documented
32133205 if (
@@ -3219,7 +3211,7 @@ def _get_url(req: Requester) -> str:
32193211 )
32203212
32213213 query_properties_definitions = []
3222- for key , request_parameter in model .requester .request_parameters .items (): # type: ignore # request_parameters is already validated to be a Mapping using _query_properties_in_request_parameters ()
3214+ for key , request_parameter in model .requester .request_parameters .items (): # type: ignore # request_parameters is already validated to be a Mapping using _has_query_properties_in_request_parameters ()
32233215 if isinstance (request_parameter , QueryPropertiesModel ):
32243216 query_properties_key = key
32253217 query_properties_definitions .append (request_parameter )
@@ -3233,6 +3225,16 @@ def _get_url(req: Requester) -> str:
32333225 query_properties = self ._create_component_from_model (
32343226 model = query_properties_definitions [0 ], config = config
32353227 )
3228+
3229+ # Removes QueryProperties components from the interpolated mappings because it has been designed
3230+ # to be used by the SimpleRetriever and will be resolved from the provider from the slice directly
3231+ # instead of through jinja interpolation
3232+ if hasattr (model .requester , "request_parameters" ) and isinstance (
3233+ model .requester .request_parameters , Mapping
3234+ ):
3235+ model .requester .request_parameters = self ._remove_query_properties (
3236+ model .requester .request_parameters
3237+ )
32363238 elif (
32373239 hasattr (model .requester , "fetch_properties_from_endpoint" )
32383240 and model .requester .fetch_properties_from_endpoint
@@ -3369,7 +3371,7 @@ def _should_limit_slices_fetched(self) -> bool:
33693371 return bool (self ._limit_slices_fetched or self ._emit_connector_builder_messages )
33703372
33713373 @staticmethod
3372- def _query_properties_in_request_parameters (
3374+ def _has_query_properties_in_request_parameters (
33733375 requester : Union [HttpRequesterModel , CustomRequesterModel ],
33743376 ) -> bool :
33753377 if not hasattr (requester , "request_parameters" ):
@@ -4183,3 +4185,26 @@ def create_grouping_partition_router(
41834185 deduplicate = model .deduplicate if model .deduplicate is not None else True ,
41844186 config = config ,
41854187 )
4188+
4189+ def _ensure_query_properties_to_model (
4190+ self , requester : Union [HttpRequesterModel , CustomRequesterModel ]
4191+ ) -> None :
4192+ """
4193+ For some reason, it seems like CustomRequesterModel request_parameters stays as dictionaries which means that
4194+ the other conditions relying on it being QueryPropertiesModel instead of a dict fail. Here, we migrate them to
4195+ proper model.
4196+ """
4197+ if not hasattr (requester , "request_parameters" ):
4198+ return
4199+
4200+ request_parameters = requester .request_parameters
4201+ if request_parameters and isinstance (request_parameters , Dict ):
4202+ for request_parameter_key in request_parameters .keys ():
4203+ request_parameter = request_parameters [request_parameter_key ]
4204+ if (
4205+ isinstance (request_parameter , Dict )
4206+ and request_parameter .get ("type" ) == "QueryProperties"
4207+ ):
4208+ request_parameters [request_parameter_key ] = QueryPropertiesModel .parse_obj (
4209+ request_parameter
4210+ )
0 commit comments