@@ -2395,21 +2395,12 @@ def create_http_requester(
23952395
23962396 api_budget = self ._api_budget
23972397
2398- # Removes QueryProperties components from the interpolated mappings because it has been designed
2399- # to be used by the SimpleRetriever and will be resolved from the provider from the slice directly
2400- # instead of through jinja interpolation
2401- request_parameters : Optional [Union [str , Mapping [str , str ]]]
2402- if isinstance (model .request_parameters , Mapping ):
2403- request_parameters = self ._remove_query_properties (model .request_parameters )
2404- else :
2405- request_parameters = model .request_parameters
2406-
24072398 request_options_provider = InterpolatedRequestOptionsProvider (
24082399 request_body = model .request_body ,
24092400 request_body_data = model .request_body_data ,
24102401 request_body_json = model .request_body_json ,
24112402 request_headers = model .request_headers ,
2412- request_parameters = request_parameters ,
2403+ request_parameters = model . request_parameters ,
24132404 query_properties_key = query_properties_key ,
24142405 config = config ,
24152406 parameters = model .parameters or {},
@@ -3199,7 +3190,8 @@ def _get_url(req: Requester) -> str:
31993190
32003191 query_properties : Optional [QueryProperties ] = None
32013192 query_properties_key : Optional [str ] = None
3202- if self ._query_properties_in_request_parameters (model .requester ):
3193+ self ._ensure_query_properties_to_model (model .requester )
3194+ if self ._has_query_properties_in_request_parameters (model .requester ):
32033195 # It is better to be explicit about an error if PropertiesFromEndpoint is defined in multiple
32043196 # places instead of default to request_parameters which isn't clearly documented
32053197 if (
@@ -3211,7 +3203,7 @@ def _get_url(req: Requester) -> str:
32113203 )
32123204
32133205 query_properties_definitions = []
3214- 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 ()
3206+ 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 ()
32153207 if isinstance (request_parameter , QueryPropertiesModel ):
32163208 query_properties_key = key
32173209 query_properties_definitions .append (request_parameter )
@@ -3225,6 +3217,11 @@ def _get_url(req: Requester) -> str:
32253217 query_properties = self ._create_component_from_model (
32263218 model = query_properties_definitions [0 ], config = config
32273219 )
3220+
3221+ if isinstance (model .requester .request_parameters , Mapping ):
3222+ model .requester .request_parameters = self ._remove_query_properties (
3223+ model .requester .request_parameters
3224+ )
32283225 elif (
32293226 hasattr (model .requester , "fetch_properties_from_endpoint" )
32303227 and model .requester .fetch_properties_from_endpoint
@@ -3247,6 +3244,9 @@ def _get_url(req: Requester) -> str:
32473244 config = config ,
32483245 )
32493246
3247+ # Removes QueryProperties components from the interpolated mappings because it has been designed
3248+ # to be used by the SimpleRetriever and will be resolved from the provider from the slice directly
3249+ # instead of through jinja interpolation
32503250 requester = self ._create_component_from_model (
32513251 model = model .requester ,
32523252 decoder = decoder ,
@@ -3361,7 +3361,7 @@ def _should_limit_slices_fetched(self) -> bool:
33613361 return bool (self ._limit_slices_fetched or self ._emit_connector_builder_messages )
33623362
33633363 @staticmethod
3364- def _query_properties_in_request_parameters (
3364+ def _has_query_properties_in_request_parameters (
33653365 requester : Union [HttpRequesterModel , CustomRequesterModel ],
33663366 ) -> bool :
33673367 if not hasattr (requester , "request_parameters" ):
@@ -4175,3 +4175,26 @@ def create_grouping_partition_router(
41754175 deduplicate = model .deduplicate if model .deduplicate is not None else True ,
41764176 config = config ,
41774177 )
4178+
4179+ def _ensure_query_properties_to_model (
4180+ self , requester : Union [HttpRequesterModel , CustomRequesterModel ]
4181+ ) -> None :
4182+ """
4183+ For some reason, it seems like CustomRequesterModel request_parameters stays as dictionaries which means that
4184+ the other conditions relying on it being QueryPropertiesModel instead of a dict fail. Here, we migrate them to
4185+ proper model.
4186+ """
4187+ if not hasattr (requester , "request_parameters" ):
4188+ return
4189+
4190+ request_parameters = requester .request_parameters
4191+ if request_parameters and isinstance (request_parameters , Dict ):
4192+ for request_parameter_key in request_parameters .keys ():
4193+ request_parameter = request_parameters [request_parameter_key ]
4194+ if (
4195+ isinstance (request_parameter , Dict )
4196+ and request_parameter .get ("type" ) == "QueryProperties"
4197+ ):
4198+ request_parameters [request_parameter_key ] = QueryPropertiesModel .parse_obj (
4199+ request_parameter
4200+ )
0 commit comments