@@ -152,17 +152,20 @@ def __init__(
152152 self,
153153 *,
154154 httpx_client: httpx.Client,
155- base_timeout: typing.Optional[float],
156- base_headers: typing.Dict[str, str],
157- base_url: typing.Optional[str] = None,
155+ base_timeout: typing.Callable[[], typing. Optional[float] ],
156+ base_headers: typing.Callable[[], typing. Dict[str, str] ],
157+ base_url: typing.Optional[typing.Callable[[], str] ] = None,
158158 ):
159159 self.base_url = base_url
160160 self.base_timeout = base_timeout
161161 self.base_headers = base_headers
162162 self.httpx_client = httpx_client
163163
164164 def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str:
165- base_url = self.base_url if maybe_base_url is None else maybe_base_url
165+ base_url = maybe_base_url
166+ if self.base_url is not None and base_url is None:
167+ base_url = self.base_url()
168+
166169 if base_url is None:
167170 raise ValueError("A base_url is required to make this request, please provide one and try again.")
168171 return base_url
@@ -187,7 +190,7 @@ def request(
187190 timeout = (
188191 request_options.get("timeout_in_seconds")
189192 if request_options is not None and request_options.get("timeout_in_seconds") is not None
190- else self.base_timeout
193+ else self.base_timeout()
191194 )
192195
193196 json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
@@ -198,7 +201,7 @@ def request(
198201 headers=jsonable_encoder(
199202 remove_none_from_dict(
200203 {
201- **self.base_headers,
204+ **self.base_headers() ,
202205 **(headers if headers is not None else {}),
203206 **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}),
204207 }
@@ -271,7 +274,7 @@ def stream(
271274 timeout = (
272275 request_options.get("timeout_in_seconds")
273276 if request_options is not None and request_options.get("timeout_in_seconds") is not None
274- else self.base_timeout
277+ else self.base_timeout()
275278 )
276279
277280 json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
@@ -282,7 +285,7 @@ def stream(
282285 headers=jsonable_encoder(
283286 remove_none_from_dict(
284287 {
285- **self.base_headers,
288+ **self.base_headers() ,
286289 **(headers if headers is not None else {}),
287290 **(request_options.get("additional_headers", {}) if request_options is not None else {}),
288291 }
@@ -321,17 +324,20 @@ def __init__(
321324 self,
322325 *,
323326 httpx_client: httpx.AsyncClient,
324- base_timeout: typing.Optional[float],
325- base_headers: typing.Dict[str, str],
326- base_url: typing.Optional[str] = None,
327+ base_timeout: typing.Callable[[], typing. Optional[float] ],
328+ base_headers: typing.Callable[[], typing. Dict[str, str] ],
329+ base_url: typing.Optional[typing.Callable[[], str] ] = None,
327330 ):
328331 self.base_url = base_url
329332 self.base_timeout = base_timeout
330333 self.base_headers = base_headers
331334 self.httpx_client = httpx_client
332335
333336 def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str:
334- base_url = self.base_url if maybe_base_url is None else maybe_base_url
337+ base_url = maybe_base_url
338+ if self.base_url is not None and base_url is None:
339+ base_url = self.base_url()
340+
335341 if base_url is None:
336342 raise ValueError("A base_url is required to make this request, please provide one and try again.")
337343 return base_url
@@ -356,7 +362,7 @@ async def request(
356362 timeout = (
357363 request_options.get("timeout_in_seconds")
358364 if request_options is not None and request_options.get("timeout_in_seconds") is not None
359- else self.base_timeout
365+ else self.base_timeout()
360366 )
361367
362368 json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
@@ -368,7 +374,7 @@ async def request(
368374 headers=jsonable_encoder(
369375 remove_none_from_dict(
370376 {
371- **self.base_headers,
377+ **self.base_headers() ,
372378 **(headers if headers is not None else {}),
373379 **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}),
374380 }
@@ -438,7 +444,7 @@ async def stream(
438444 timeout = (
439445 request_options.get("timeout_in_seconds")
440446 if request_options is not None and request_options.get("timeout_in_seconds") is not None
441- else self.base_timeout
447+ else self.base_timeout()
442448 )
443449
444450 json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
@@ -449,7 +455,7 @@ async def stream(
449455 headers=jsonable_encoder(
450456 remove_none_from_dict(
451457 {
452- **self.base_headers,
458+ **self.base_headers() ,
453459 **(headers if headers is not None else {}),
454460 **(request_options.get("additional_headers", {}) if request_options is not None else {}),
455461 }
0 commit comments