Skip to content

Commit ca27085

Browse files
chore: speedup initial import
1 parent 851f268 commit ca27085

File tree

1 file changed

+179
-45
lines changed

1 file changed

+179
-45
lines changed

src/browserbase/_client.py

Lines changed: 179 additions & 45 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,16 +20,22 @@
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 contexts, projects, extensions
2525
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
2626
from ._exceptions import APIStatusError, BrowserbaseError
2727
from ._base_client import (
2828
DEFAULT_MAX_RETRIES,
2929
SyncAPIClient,
3030
AsyncAPIClient,
3131
)
32-
from .resources.sessions import sessions
32+
33+
if TYPE_CHECKING:
34+
from .resources import contexts, projects, sessions, extensions
35+
from .resources.contexts import ContextsResource, AsyncContextsResource
36+
from .resources.projects import ProjectsResource, AsyncProjectsResource
37+
from .resources.extensions import ExtensionsResource, AsyncExtensionsResource
38+
from .resources.sessions.sessions import SessionsResource, AsyncSessionsResource
3339

3440
__all__ = [
3541
"Timeout",
@@ -44,13 +50,6 @@
4450

4551

4652
class Browserbase(SyncAPIClient):
47-
contexts: contexts.ContextsResource
48-
extensions: extensions.ExtensionsResource
49-
projects: projects.ProjectsResource
50-
sessions: sessions.SessionsResource
51-
with_raw_response: BrowserbaseWithRawResponse
52-
with_streaming_response: BrowserbaseWithStreamedResponse
53-
5453
# client options
5554
api_key: str
5655

@@ -105,12 +104,37 @@ def __init__(
105104
_strict_response_validation=_strict_response_validation,
106105
)
107106

108-
self.contexts = contexts.ContextsResource(self)
109-
self.extensions = extensions.ExtensionsResource(self)
110-
self.projects = projects.ProjectsResource(self)
111-
self.sessions = sessions.SessionsResource(self)
112-
self.with_raw_response = BrowserbaseWithRawResponse(self)
113-
self.with_streaming_response = BrowserbaseWithStreamedResponse(self)
107+
@cached_property
108+
def contexts(self) -> ContextsResource:
109+
from .resources.contexts import ContextsResource
110+
111+
return ContextsResource(self)
112+
113+
@cached_property
114+
def extensions(self) -> ExtensionsResource:
115+
from .resources.extensions import ExtensionsResource
116+
117+
return ExtensionsResource(self)
118+
119+
@cached_property
120+
def projects(self) -> ProjectsResource:
121+
from .resources.projects import ProjectsResource
122+
123+
return ProjectsResource(self)
124+
125+
@cached_property
126+
def sessions(self) -> SessionsResource:
127+
from .resources.sessions import SessionsResource
128+
129+
return SessionsResource(self)
130+
131+
@cached_property
132+
def with_raw_response(self) -> BrowserbaseWithRawResponse:
133+
return BrowserbaseWithRawResponse(self)
134+
135+
@cached_property
136+
def with_streaming_response(self) -> BrowserbaseWithStreamedResponse:
137+
return BrowserbaseWithStreamedResponse(self)
114138

115139
@property
116140
@override
@@ -218,13 +242,6 @@ def _make_status_error(
218242

219243

220244
class AsyncBrowserbase(AsyncAPIClient):
221-
contexts: contexts.AsyncContextsResource
222-
extensions: extensions.AsyncExtensionsResource
223-
projects: projects.AsyncProjectsResource
224-
sessions: sessions.AsyncSessionsResource
225-
with_raw_response: AsyncBrowserbaseWithRawResponse
226-
with_streaming_response: AsyncBrowserbaseWithStreamedResponse
227-
228245
# client options
229246
api_key: str
230247

@@ -279,12 +296,37 @@ def __init__(
279296
_strict_response_validation=_strict_response_validation,
280297
)
281298

282-
self.contexts = contexts.AsyncContextsResource(self)
283-
self.extensions = extensions.AsyncExtensionsResource(self)
284-
self.projects = projects.AsyncProjectsResource(self)
285-
self.sessions = sessions.AsyncSessionsResource(self)
286-
self.with_raw_response = AsyncBrowserbaseWithRawResponse(self)
287-
self.with_streaming_response = AsyncBrowserbaseWithStreamedResponse(self)
299+
@cached_property
300+
def contexts(self) -> AsyncContextsResource:
301+
from .resources.contexts import AsyncContextsResource
302+
303+
return AsyncContextsResource(self)
304+
305+
@cached_property
306+
def extensions(self) -> AsyncExtensionsResource:
307+
from .resources.extensions import AsyncExtensionsResource
308+
309+
return AsyncExtensionsResource(self)
310+
311+
@cached_property
312+
def projects(self) -> AsyncProjectsResource:
313+
from .resources.projects import AsyncProjectsResource
314+
315+
return AsyncProjectsResource(self)
316+
317+
@cached_property
318+
def sessions(self) -> AsyncSessionsResource:
319+
from .resources.sessions import AsyncSessionsResource
320+
321+
return AsyncSessionsResource(self)
322+
323+
@cached_property
324+
def with_raw_response(self) -> AsyncBrowserbaseWithRawResponse:
325+
return AsyncBrowserbaseWithRawResponse(self)
326+
327+
@cached_property
328+
def with_streaming_response(self) -> AsyncBrowserbaseWithStreamedResponse:
329+
return AsyncBrowserbaseWithStreamedResponse(self)
288330

289331
@property
290332
@override
@@ -392,35 +434,127 @@ def _make_status_error(
392434

393435

394436
class BrowserbaseWithRawResponse:
437+
_client: Browserbase
438+
395439
def __init__(self, client: Browserbase) -> None:
396-
self.contexts = contexts.ContextsResourceWithRawResponse(client.contexts)
397-
self.extensions = extensions.ExtensionsResourceWithRawResponse(client.extensions)
398-
self.projects = projects.ProjectsResourceWithRawResponse(client.projects)
399-
self.sessions = sessions.SessionsResourceWithRawResponse(client.sessions)
440+
self._client = client
441+
442+
@cached_property
443+
def contexts(self) -> contexts.ContextsResourceWithRawResponse:
444+
from .resources.contexts import ContextsResourceWithRawResponse
445+
446+
return ContextsResourceWithRawResponse(self._client.contexts)
447+
448+
@cached_property
449+
def extensions(self) -> extensions.ExtensionsResourceWithRawResponse:
450+
from .resources.extensions import ExtensionsResourceWithRawResponse
451+
452+
return ExtensionsResourceWithRawResponse(self._client.extensions)
453+
454+
@cached_property
455+
def projects(self) -> projects.ProjectsResourceWithRawResponse:
456+
from .resources.projects import ProjectsResourceWithRawResponse
457+
458+
return ProjectsResourceWithRawResponse(self._client.projects)
459+
460+
@cached_property
461+
def sessions(self) -> sessions.SessionsResourceWithRawResponse:
462+
from .resources.sessions import SessionsResourceWithRawResponse
463+
464+
return SessionsResourceWithRawResponse(self._client.sessions)
400465

401466

402467
class AsyncBrowserbaseWithRawResponse:
468+
_client: AsyncBrowserbase
469+
403470
def __init__(self, client: AsyncBrowserbase) -> None:
404-
self.contexts = contexts.AsyncContextsResourceWithRawResponse(client.contexts)
405-
self.extensions = extensions.AsyncExtensionsResourceWithRawResponse(client.extensions)
406-
self.projects = projects.AsyncProjectsResourceWithRawResponse(client.projects)
407-
self.sessions = sessions.AsyncSessionsResourceWithRawResponse(client.sessions)
471+
self._client = client
472+
473+
@cached_property
474+
def contexts(self) -> contexts.AsyncContextsResourceWithRawResponse:
475+
from .resources.contexts import AsyncContextsResourceWithRawResponse
476+
477+
return AsyncContextsResourceWithRawResponse(self._client.contexts)
478+
479+
@cached_property
480+
def extensions(self) -> extensions.AsyncExtensionsResourceWithRawResponse:
481+
from .resources.extensions import AsyncExtensionsResourceWithRawResponse
482+
483+
return AsyncExtensionsResourceWithRawResponse(self._client.extensions)
484+
485+
@cached_property
486+
def projects(self) -> projects.AsyncProjectsResourceWithRawResponse:
487+
from .resources.projects import AsyncProjectsResourceWithRawResponse
488+
489+
return AsyncProjectsResourceWithRawResponse(self._client.projects)
490+
491+
@cached_property
492+
def sessions(self) -> sessions.AsyncSessionsResourceWithRawResponse:
493+
from .resources.sessions import AsyncSessionsResourceWithRawResponse
494+
495+
return AsyncSessionsResourceWithRawResponse(self._client.sessions)
408496

409497

410498
class BrowserbaseWithStreamedResponse:
499+
_client: Browserbase
500+
411501
def __init__(self, client: Browserbase) -> None:
412-
self.contexts = contexts.ContextsResourceWithStreamingResponse(client.contexts)
413-
self.extensions = extensions.ExtensionsResourceWithStreamingResponse(client.extensions)
414-
self.projects = projects.ProjectsResourceWithStreamingResponse(client.projects)
415-
self.sessions = sessions.SessionsResourceWithStreamingResponse(client.sessions)
502+
self._client = client
503+
504+
@cached_property
505+
def contexts(self) -> contexts.ContextsResourceWithStreamingResponse:
506+
from .resources.contexts import ContextsResourceWithStreamingResponse
507+
508+
return ContextsResourceWithStreamingResponse(self._client.contexts)
509+
510+
@cached_property
511+
def extensions(self) -> extensions.ExtensionsResourceWithStreamingResponse:
512+
from .resources.extensions import ExtensionsResourceWithStreamingResponse
513+
514+
return ExtensionsResourceWithStreamingResponse(self._client.extensions)
515+
516+
@cached_property
517+
def projects(self) -> projects.ProjectsResourceWithStreamingResponse:
518+
from .resources.projects import ProjectsResourceWithStreamingResponse
519+
520+
return ProjectsResourceWithStreamingResponse(self._client.projects)
521+
522+
@cached_property
523+
def sessions(self) -> sessions.SessionsResourceWithStreamingResponse:
524+
from .resources.sessions import SessionsResourceWithStreamingResponse
525+
526+
return SessionsResourceWithStreamingResponse(self._client.sessions)
416527

417528

418529
class AsyncBrowserbaseWithStreamedResponse:
530+
_client: AsyncBrowserbase
531+
419532
def __init__(self, client: AsyncBrowserbase) -> None:
420-
self.contexts = contexts.AsyncContextsResourceWithStreamingResponse(client.contexts)
421-
self.extensions = extensions.AsyncExtensionsResourceWithStreamingResponse(client.extensions)
422-
self.projects = projects.AsyncProjectsResourceWithStreamingResponse(client.projects)
423-
self.sessions = sessions.AsyncSessionsResourceWithStreamingResponse(client.sessions)
533+
self._client = client
534+
535+
@cached_property
536+
def contexts(self) -> contexts.AsyncContextsResourceWithStreamingResponse:
537+
from .resources.contexts import AsyncContextsResourceWithStreamingResponse
538+
539+
return AsyncContextsResourceWithStreamingResponse(self._client.contexts)
540+
541+
@cached_property
542+
def extensions(self) -> extensions.AsyncExtensionsResourceWithStreamingResponse:
543+
from .resources.extensions import AsyncExtensionsResourceWithStreamingResponse
544+
545+
return AsyncExtensionsResourceWithStreamingResponse(self._client.extensions)
546+
547+
@cached_property
548+
def projects(self) -> projects.AsyncProjectsResourceWithStreamingResponse:
549+
from .resources.projects import AsyncProjectsResourceWithStreamingResponse
550+
551+
return AsyncProjectsResourceWithStreamingResponse(self._client.projects)
552+
553+
@cached_property
554+
def sessions(self) -> sessions.AsyncSessionsResourceWithStreamingResponse:
555+
from .resources.sessions import AsyncSessionsResourceWithStreamingResponse
556+
557+
return AsyncSessionsResourceWithStreamingResponse(self._client.sessions)
424558

425559

426560
Client = Browserbase

0 commit comments

Comments
 (0)