Skip to content

Commit a25d3e1

Browse files
committed
Raise hard import errors if trying to use adapters with missing dependencies, with helpful error messages. Remove runtime requirement on pandas
Signed-off-by: Tim Paine <[email protected]>
1 parent b5c6fee commit a25d3e1

File tree

8 files changed

+18
-17
lines changed

8 files changed

+18
-17
lines changed

csp/adapters/db.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828

2929
_HAS_SQLALCHEMY = True
3030
except (PackageNotFoundError, ValueError, TypeError, ImportError):
31-
_HAS_SQLALCHEMY = False
32-
db = None
31+
raise ModuleNotFoundError("csp's db adapter requires `sqlalchemy`")
3332

3433

3534
class TimeAccessor(ABC):

csp/adapters/kafka.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
_HAS_KAFKA_ADAPTER = True
2121
from csp.lib import _kafkaadapterimpl
2222
except ImportError:
23-
_HAS_KAFKA_ADAPTER = False
24-
_kafkaadapterimpl = None
23+
raise ImportError("csp's kafka adapter requires the C++ csp extension to be built, but it could not be imported")
2524

2625
_ = BytesMessageProtoMapper, DateTimeType, JSONTextMessageMapper, RawBytesMessageMapper, RawTextMessageMapper
2726
T = typing.TypeVar("T")

csp/adapters/parquet.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
_HAS_PARQUET_ADAPTER = True
2121
from csp.lib import _parquetadapterimpl
2222
except ImportError:
23-
_HAS_PARQUET_ADAPTER = False
24-
_parquetadapterimpl = None
23+
raise ImportError("csp's parquet adapter requires the C++ csp extension to be built, but it could not be imported")
2524

2625

2726
__all__ = [

csp/adapters/perspective.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
import tornado.web
1212
import tornado.websocket
1313
except ImportError:
14-
raise ImportError("perspective adapter requires tornado package")
14+
raise ModuleNotFoundError("csp's perspective adapter requires `tornado`")
1515

1616

1717
try:
1818
from perspective import PerspectiveManager, Table as Table_, View as View_, __version__, set_threadpool_size
1919

2020
MAJOR, MINOR, PATCH = map(int, __version__.split("."))
2121
if (MAJOR, MINOR, PATCH) < (0, 6, 2):
22-
raise ImportError("perspective adapter requires 0.6.2 or greater of the perspective-python package")
22+
raise ModuleNotFoundError("csp's perspective adapter requires `perspective-python>=0.6.2`")
2323
except ImportError:
24-
raise ImportError("perspective adapter requires 0.6.2 or greater of the perspective-python package")
24+
raise ModuleNotFoundError("csp's perspective adapter requires `perspective-python>=0.6.2`")
2525

2626

2727
# Run perspective update in a separate tornado loop

csp/adapters/slack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
_HAVE_SLACK_SDK = True
2525
except ImportError:
26-
_HAVE_SLACK_SDK = False
26+
raise ModuleNotFoundError("csp's slack adapter requires `slack-sdk`")
2727

2828
T = TypeVar("T")
2929
log = getLogger(__file__)

csp/adapters/symphony.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import http.client
22
import json
3-
import requests
43
import ssl
54
import threading
65
from logging import getLogger
@@ -14,6 +13,11 @@
1413
from csp.impl.pushadapter import PushInputAdapter
1514
from csp.impl.wiring import py_push_adapter_def
1615

16+
try:
17+
import requests
18+
except ImportError:
19+
raise ModuleNotFoundError("csp's symphony adapter requires `requests`")
20+
1721
__all__ = ["SymphonyAdapter", "SymphonyMessage"]
1822

1923
log = getLogger(__file__)

csp/adapters/websocket.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525
_HAS_WS_ADAPTER = True
2626
from csp.lib import _websocketadapterimpl
2727
except ImportError:
28-
_HAS_WS_ADAPTER = False
29-
_websocketadapterimpl = None
28+
raise ImportError(
29+
"csp's websocket adapter requires the C++ csp extension to be built, but it could not be imported"
30+
)
3031

3132
from .websocket_types import WebsocketHeaderUpdate
3233

@@ -45,14 +46,14 @@
4546
import tornado.web
4647
import tornado.websocket
4748
except ImportError:
48-
raise ImportError("websocket adapter requires tornado package")
49+
raise ModuleNotFoundError("csp's websocket adapter requires `tornado`")
4950

5051
try:
5152
import rapidjson
5253

5354
datetime_mode = rapidjson.DM_UNIX_TIME | rapidjson.DM_NAIVE_IS_UTC
5455
except ImportError:
55-
raise ImportError("websocket adapter requires rapidjson package")
56+
raise ModuleNotFoundError("csp's websocket adapter requires `rapidjson`")
5657

5758

5859
def diff_dict(old, new):

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ dependencies = [
2121
"backports.zoneinfo; python_version<'3.9'",
2222
"numpy",
2323
"packaging",
24-
"pandas",
2524
"psutil",
2625
"pyarrow>=7.0.0",
2726
"pytz",
2827
"ruamel.yaml",
29-
"sqlalchemy",
3028
]
3129

3230
classifiers = [
@@ -75,6 +73,7 @@ develop = [
7573
"pillow",
7674
# adapters
7775
"httpx>=0.20,<1", # kafka
76+
"pandas", # pandas extension
7877
"polars", # parquet
7978
"psutil", # test_engine/test_history
8079
"slack-sdk>=3", # slack

0 commit comments

Comments
 (0)