Skip to content

Commit 5aafb83

Browse files
chore: speedup initial import
1 parent 72aa8b8 commit 5aafb83

File tree

1 file changed

+68
-20
lines changed

1 file changed

+68
-20
lines changed

src/stagehand/_client.py

Lines changed: 68 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
import os
6-
from typing import Any, Mapping
6+
from typing import TYPE_CHECKING, Any, Mapping
77
from typing_extensions import Self, override
88

99
import httpx
@@ -20,8 +20,8 @@
2020
not_given,
2121
)
2222
from ._utils import is_given, get_async_library
23+
from ._compat import cached_property
2324
from ._version import __version__
24-
from .resources import sessions
2525
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
2626
from ._exceptions import APIStatusError, StagehandError
2727
from ._base_client import (
@@ -30,6 +30,10 @@
3030
AsyncAPIClient,
3131
)
3232

33+
if TYPE_CHECKING:
34+
from .resources import sessions
35+
from .resources.sessions import SessionsResource, AsyncSessionsResource
36+
3337
__all__ = [
3438
"Timeout",
3539
"Transport",
@@ -43,10 +47,6 @@
4347

4448

4549
class Stagehand(SyncAPIClient):
46-
sessions: sessions.SessionsResource
47-
with_raw_response: StagehandWithRawResponse
48-
with_streaming_response: StagehandWithStreamedResponse
49-
5050
# client options
5151
browserbase_api_key: str
5252
browserbase_project_id: str
@@ -124,9 +124,19 @@ def __init__(
124124
_strict_response_validation=_strict_response_validation,
125125
)
126126

127-
self.sessions = sessions.SessionsResource(self)
128-
self.with_raw_response = StagehandWithRawResponse(self)
129-
self.with_streaming_response = StagehandWithStreamedResponse(self)
127+
@cached_property
128+
def sessions(self) -> SessionsResource:
129+
from .resources.sessions import SessionsResource
130+
131+
return SessionsResource(self)
132+
133+
@cached_property
134+
def with_raw_response(self) -> StagehandWithRawResponse:
135+
return StagehandWithRawResponse(self)
136+
137+
@cached_property
138+
def with_streaming_response(self) -> StagehandWithStreamedResponse:
139+
return StagehandWithStreamedResponse(self)
130140

131141
@property
132142
@override
@@ -252,10 +262,6 @@ def _make_status_error(
252262

253263

254264
class AsyncStagehand(AsyncAPIClient):
255-
sessions: sessions.AsyncSessionsResource
256-
with_raw_response: AsyncStagehandWithRawResponse
257-
with_streaming_response: AsyncStagehandWithStreamedResponse
258-
259265
# client options
260266
browserbase_api_key: str
261267
browserbase_project_id: str
@@ -333,9 +339,19 @@ def __init__(
333339
_strict_response_validation=_strict_response_validation,
334340
)
335341

336-
self.sessions = sessions.AsyncSessionsResource(self)
337-
self.with_raw_response = AsyncStagehandWithRawResponse(self)
338-
self.with_streaming_response = AsyncStagehandWithStreamedResponse(self)
342+
@cached_property
343+
def sessions(self) -> AsyncSessionsResource:
344+
from .resources.sessions import AsyncSessionsResource
345+
346+
return AsyncSessionsResource(self)
347+
348+
@cached_property
349+
def with_raw_response(self) -> AsyncStagehandWithRawResponse:
350+
return AsyncStagehandWithRawResponse(self)
351+
352+
@cached_property
353+
def with_streaming_response(self) -> AsyncStagehandWithStreamedResponse:
354+
return AsyncStagehandWithStreamedResponse(self)
339355

340356
@property
341357
@override
@@ -461,23 +477,55 @@ def _make_status_error(
461477

462478

463479
class StagehandWithRawResponse:
480+
_client: Stagehand
481+
464482
def __init__(self, client: Stagehand) -> None:
465-
self.sessions = sessions.SessionsResourceWithRawResponse(client.sessions)
483+
self._client = client
484+
485+
@cached_property
486+
def sessions(self) -> sessions.SessionsResourceWithRawResponse:
487+
from .resources.sessions import SessionsResourceWithRawResponse
488+
489+
return SessionsResourceWithRawResponse(self._client.sessions)
466490

467491

468492
class AsyncStagehandWithRawResponse:
493+
_client: AsyncStagehand
494+
469495
def __init__(self, client: AsyncStagehand) -> None:
470-
self.sessions = sessions.AsyncSessionsResourceWithRawResponse(client.sessions)
496+
self._client = client
497+
498+
@cached_property
499+
def sessions(self) -> sessions.AsyncSessionsResourceWithRawResponse:
500+
from .resources.sessions import AsyncSessionsResourceWithRawResponse
501+
502+
return AsyncSessionsResourceWithRawResponse(self._client.sessions)
471503

472504

473505
class StagehandWithStreamedResponse:
506+
_client: Stagehand
507+
474508
def __init__(self, client: Stagehand) -> None:
475-
self.sessions = sessions.SessionsResourceWithStreamingResponse(client.sessions)
509+
self._client = client
510+
511+
@cached_property
512+
def sessions(self) -> sessions.SessionsResourceWithStreamingResponse:
513+
from .resources.sessions import SessionsResourceWithStreamingResponse
514+
515+
return SessionsResourceWithStreamingResponse(self._client.sessions)
476516

477517

478518
class AsyncStagehandWithStreamedResponse:
519+
_client: AsyncStagehand
520+
479521
def __init__(self, client: AsyncStagehand) -> None:
480-
self.sessions = sessions.AsyncSessionsResourceWithStreamingResponse(client.sessions)
522+
self._client = client
523+
524+
@cached_property
525+
def sessions(self) -> sessions.AsyncSessionsResourceWithStreamingResponse:
526+
from .resources.sessions import AsyncSessionsResourceWithStreamingResponse
527+
528+
return AsyncSessionsResourceWithStreamingResponse(self._client.sessions)
481529

482530

483531
Client = Stagehand

0 commit comments

Comments
 (0)