Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/hume/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/empathic_voice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/empathic_voice/chat/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/empathic_voice/chat/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/empathic_voice/errors/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/empathic_voice/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/batch/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/batch/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/stream/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/stream/stream/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/expression_measurement/stream/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/tts/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/tts/errors/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
2 changes: 2 additions & 0 deletions src/hume/tts/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ def __getattr__(attr_name: str) -> typing.Any:
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
if module_name == ".":
return import_module(f".{attr_name}", __package__)
module = import_module(module_name, __package__)
result = getattr(module, attr_name)
return result
Expand Down
28 changes: 28 additions & 0 deletions tests/custom/test_lazy_imports.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import importlib
import types

import pytest


MODULES_TO_CHECK = [
"hume",
"hume.tts",
"hume.empathic_voice",
"hume.expression_measurement",
"hume.expression_measurement.stream",
]


@pytest.mark.parametrize("module_name", MODULES_TO_CHECK)
def test_lazy_submodule_resolution_does_not_recurse(module_name: str) -> None:
"""Modules that lazily expose submodules via _dynamic_imports should not recurse."""
module = importlib.import_module(module_name)
dynamic_imports = getattr(module, "_dynamic_imports", {})

for attr, destination in dynamic_imports.items():
if destination != ".":
continue

submodule = getattr(module, attr)
assert isinstance(submodule, types.ModuleType)
assert submodule.__name__.endswith(f"{attr}")