From c84016e1b6fab5bd55fa1e79cb9c6e06b5776867 Mon Sep 17 00:00:00 2001 From: Robert Craigie Date: Fri, 9 May 2025 12:08:24 +0100 Subject: [PATCH 1/2] fix(package): export resources import proxy --- src/openai/__init__.py | 5 ++++- src/openai/_resources_proxy.py | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/openai/_resources_proxy.py diff --git a/src/openai/__init__.py b/src/openai/__init__.py index 9e97098bb0..aae95c32ae 100644 --- a/src/openai/__init__.py +++ b/src/openai/__init__.py @@ -3,6 +3,7 @@ from __future__ import annotations import os as _os +import typing as _t from typing_extensions import override from . import types @@ -35,6 +36,9 @@ from ._utils._logs import setup_logging as _setup_logging from ._legacy_response import HttpxBinaryResponseContent as HttpxBinaryResponseContent +if not _t.TYPE_CHECKING: + from ._resources_proxy import resources as resources + __all__ = [ "types", "__version__", @@ -103,7 +107,6 @@ pass # ------ Module level client ------ -import typing as _t import typing_extensions as _te import httpx as _httpx diff --git a/src/openai/_resources_proxy.py b/src/openai/_resources_proxy.py new file mode 100644 index 0000000000..3bd79e7900 --- /dev/null +++ b/src/openai/_resources_proxy.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from typing import Any +from typing_extensions import override + +from ._utils import LazyProxy + + +class ResourcesProxy(LazyProxy[Any]): + _loaded = None + + @override + def __load__(self) -> Any: + if self._loaded is not None: + return self._loaded + + import importlib + mod = importlib.import_module('openai.resources') + self._loaded = mod + return mod + + +resources = ResourcesProxy().__as_proxied__() From cec607d4bbafd1904245c3d4b3315abc325a1094 Mon Sep 17 00:00:00 2001 From: Robert Craigie Date: Fri, 9 May 2025 12:25:03 +0100 Subject: [PATCH 2/2] doc --- src/openai/_resources_proxy.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/openai/_resources_proxy.py b/src/openai/_resources_proxy.py index 3bd79e7900..a4c3f73a2d 100644 --- a/src/openai/_resources_proxy.py +++ b/src/openai/_resources_proxy.py @@ -7,6 +7,20 @@ class ResourcesProxy(LazyProxy[Any]): + """A proxy for the `openai.resources` module. + + This is used so that we can lazily import `openai.resources` only when + needed *and* so that users can just import `openai` and reference `openai.resources` + + e.g. + + ```py + import openai + + completions: openai.resources.chat.Completions + ``` + """ + _loaded = None @override @@ -15,8 +29,8 @@ def __load__(self) -> Any: return self._loaded import importlib - mod = importlib.import_module('openai.resources') - self._loaded = mod + + self._loaded = mod = importlib.import_module("openai.resources") return mod