Skip to content

Commit b3b9147

Browse files
Improve addon discovery code for top level addons. (#429)
1 parent abaca7a commit b3b9147

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

copulas/__init__.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from copy import deepcopy
1414
from importlib.metadata import entry_points
1515
from operator import attrgetter
16+
from types import ModuleType
1617

1718
import numpy as np
1819
import pandas as pd
@@ -319,8 +320,11 @@ def _find_addons():
319320
for entry_point in eps:
320321
try:
321322
addon = entry_point.load()
322-
except Exception: # pylint: disable=broad-exception-caught
323-
msg = f'Failed to load "{entry_point.name}" from "{entry_point.value}".'
323+
except Exception as e: # pylint: disable=broad-exception-caught
324+
msg = (
325+
f'Failed to load "{entry_point.name}" from "{entry_point.value}" '
326+
f'with error:\n{e}'
327+
)
324328
warnings.warn(msg)
325329
continue
326330

@@ -331,6 +335,11 @@ def _find_addons():
331335
warnings.warn(msg)
332336
continue
333337

338+
if isinstance(addon, ModuleType):
339+
addon_module_name = f'{addon_target.__name__}.{addon_name}'
340+
if addon_module_name not in sys.modules:
341+
sys.modules[addon_module_name] = addon
342+
334343
setattr(addon_target, addon_name, addon)
335344

336345

tests/unit/test___init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sys
22
from unittest import TestCase
3-
from unittest.mock import MagicMock, call, patch
3+
from unittest.mock import MagicMock, Mock, call, patch
44

55
import numpy as np
66
import pandas as pd
@@ -464,14 +464,14 @@ def test__find_addons_bad_addon(entry_points_mock, warning_mock):
464464

465465
# Setup
466466
def entry_point_error():
467-
raise ValueError()
467+
raise ValueError('bad value')
468468

469-
bad_entry_point = MagicMock()
469+
bad_entry_point = Mock()
470470
bad_entry_point.name = 'bad_entry_point'
471471
bad_entry_point.value = 'bad_module'
472472
bad_entry_point.load.side_effect = entry_point_error
473473
entry_points_mock.return_value = [bad_entry_point]
474-
msg = 'Failed to load "bad_entry_point" from "bad_module".'
474+
msg = 'Failed to load "bad_entry_point" from "bad_module" with error:\nbad value'
475475

476476
# Run
477477
_find_addons()

0 commit comments

Comments
 (0)