Skip to content

Commit 95d7369

Browse files
Merge pull request #19 from vidartf/optional-imports
Allow pandas as optional dependency
2 parents b3b8225 + 6d0c856 commit 95d7369

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ python:
66
- 3.3
77
sudo: false
88
install:
9-
- pip install . coveralls
9+
- pip install -U pip
10+
- pip install ".[test]" coveralls
1011
script:
1112
- nosetests --with-coverage --cover-package traittypes traittypes
1213
after_success:

setup.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,14 @@
7878

7979
install_requires = setuptools_args['install_requires'] = [
8080
'traitlets>=4.2.2',
81-
'numpy',
82-
'pandas'
8381
]
8482

8583
extras_require = setuptools_args['extras_require'] = {
84+
'test': [
85+
'numpy',
86+
'pandas',
87+
'pytest', # traitlets[test] require this
88+
]
8689
}
8790

8891
if 'setuptools' in sys.modules:
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
import nose.tools as nt
3+
4+
from ..traittypes import _DelayedImportError
5+
6+
7+
@nt.raises(RuntimeError)
8+
def test_delayed_access_raises():
9+
dummy = _DelayedImportError('mypackage')
10+
dummy.asarray([1, 2, 3])

traittypes/traittypes.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
from traitlets import TraitType, TraitError, Undefined
2-
import numpy as np
3-
import pandas as pd
2+
3+
class _DelayedImportError(object):
4+
def __init__(self, package_name):
5+
self.package_name = package_name
6+
7+
def __getattribute__(self, name):
8+
package_name = super(_DelayedImportError, self).__getattribute__('package_name')
9+
raise RuntimeError('Missing dependency: %s' % package_name)
10+
11+
try:
12+
import numpy as np
13+
except ImportError:
14+
np = _DelayedImportError('numpy')
15+
try:
16+
import pandas as pd
17+
except ImportError:
18+
pd = _DelayedImportError('pandas')
419

520

621
class SciType(TraitType):
@@ -111,6 +126,7 @@ def set(self, obj, value):
111126
obj._notify_trait(self.name, old_value, new_value)
112127

113128
def __init__(self, default_value=Undefined, allow_none=False, dtype=None, **kwargs):
129+
import pandas as pd
114130
self.dtype = dtype
115131
if default_value is Undefined:
116132
default_value = pd.DataFrame()
@@ -151,6 +167,7 @@ def set(self, obj, value):
151167
obj._notify_trait(self.name, old_value, new_value)
152168

153169
def __init__(self, default_value=Undefined, allow_none=False, dtype=None, **kwargs):
170+
import pandas as pd
154171
self.dtype = dtype
155172
if default_value is Undefined:
156173
default_value = pd.Series()

0 commit comments

Comments
 (0)