Skip to content

Commit 5f13d34

Browse files
committed
allow for missing kafka/websocket C++ adapters, enable future mmissing parquet adapter after cache cleanup
Signed-off-by: Tim Paine <[email protected]> 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]> Remove superfluous checks Signed-off-by: Tim Paine <[email protected]> Add oldest supported numpy as runtime dep as well Signed-off-by: Tim Paine <[email protected]> fix spacing in action, dont depend on oldest-supported-numpy Signed-off-by: Tim Paine <[email protected]> Isolate sdist build environment Signed-off-by: Tim Paine <[email protected]>
1 parent a386b6c commit 5f13d34

File tree

10 files changed

+31
-25
lines changed

10 files changed

+31
-25
lines changed

.github/actions/setup-caches/action.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ runs:
6161
/Users/runner/vcpkg_download_cache
6262
key: vcpkg-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('vcpkg.json') }}
6363
restore-keys: vcpkg-${{ runner.os }}-${{ runner.arch }}-
64-
if: ${{ runner.os == 'macOS' && inputs.vcpkg == 'true'}}
64+
if: ${{ runner.os == 'macOS' && inputs.vcpkg == 'true' }}
6565

6666
- name: Setup vcpkg cache in shell (Windows)
6767
shell: bash
@@ -70,7 +70,7 @@ runs:
7070
mkdir C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_download_cache
7171
echo "VCPKG_DEFAULT_BINARY_CACHE=C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_cache" >> $GITHUB_ENV
7272
echo "VCPKG_DOWNLOADS=C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_download_cache" >> $GITHUB_ENV
73-
if: ${{ runner.os == 'Windows' && inputs.vcpkg == 'true'}}
73+
if: ${{ runner.os == 'Windows' && inputs.vcpkg == 'true' }}
7474

7575
- name: Setup vcpkg cache (Windows)
7676
uses: actions/cache@v4
@@ -80,4 +80,4 @@ runs:
8080
C:\\Users\\runneradmin\\AppData\\Local\\vcpkg_download_cache
8181
key: vcpkg-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('vcpkg.json') }}
8282
restore-keys: vcpkg-${{ runner.os }}-${{ runner.arch }}-
83-
if: ${{ runner.os == 'Windows' && inputs.vcpkg == 'true'}}
83+
if: ${{ runner.os == 'Windows' && inputs.vcpkg == 'true' }}

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ major:
146146
dist-py: dist-py-sdist # Build python dist
147147
dist-py-sdist:
148148
rm -rf csp/lib/*
149-
python -m build --sdist -n
149+
python -m build --sdist
150150

151151
dist-py-wheel:
152152
python setup.py bdist_wheel $(EXTRA_ARGS)

csp/adapters/db.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@
2525
_SQLALCHEMY_2 = False
2626

2727
import sqlalchemy as db
28-
29-
_HAS_SQLALCHEMY = True
3028
except (PackageNotFoundError, ValueError, TypeError, ImportError):
31-
_HAS_SQLALCHEMY = False
32-
db = None
29+
raise ModuleNotFoundError("csp's db adapter requires `sqlalchemy`")
3330

3431

3532
class TimeAccessor(ABC):
@@ -199,8 +196,6 @@ def __init__(
199196
:param log_query: set to True to see what query was generated to access the data
200197
:param use_raw_user_query: Don't do any alteration to user query, assume it contains all the needed columns and sorting
201198
"""
202-
if not _HAS_SQLALCHEMY:
203-
raise RuntimeError("Could not find SQLAlchemy installation")
204199
self._connection = connection
205200
self._table_name = table_name
206201
self._schema_name = schema_name

csp/adapters/kafka.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
RawTextMessageMapper,
1616
)
1717
from csp.impl.wiring import input_adapter_def, output_adapter_def, status_adapter_def
18-
from csp.lib import _kafkaadapterimpl
18+
19+
try:
20+
from csp.lib import _kafkaadapterimpl
21+
except ImportError:
22+
raise ImportError("csp's kafka adapter requires the C++ csp extension to be built, but it could not be imported")
1923

2024
_ = BytesMessageProtoMapper, DateTimeType, JSONTextMessageMapper, RawBytesMessageMapper, RawTextMessageMapper
2125
T = TypeVar("T")

csp/adapters/parquet.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
from csp.impl.types.typing_utils import CspTypingUtils
1616
from csp.impl.wiring import input_adapter_def, status_adapter_def
1717
from csp.impl.wiring.node import node
18-
from csp.lib import _parquetadapterimpl
18+
19+
try:
20+
from csp.lib import _parquetadapterimpl
21+
except ImportError:
22+
raise ImportError("csp's parquet adapter requires the C++ csp extension to be built, but it could not be imported")
23+
1924

2025
__all__ = [
2126
"ParquetOutputConfig",

csp/adapters/perspective.py

+3-3
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

+1-5
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@
2020
from slack_sdk.socket_mode.request import SocketModeRequest
2121
from slack_sdk.socket_mode.response import SocketModeResponse
2222
from slack_sdk.web import WebClient
23-
24-
_HAVE_SLACK_SDK = True
2523
except ImportError:
26-
_HAVE_SLACK_SDK = False
24+
raise ModuleNotFoundError("csp's slack adapter requires `slack-sdk`")
2725

2826
T = TypeVar("T")
2927
log = getLogger(__file__)
@@ -55,8 +53,6 @@ def mention_user(userid: str) -> str:
5553

5654
class SlackAdapterManager(AdapterManagerImpl):
5755
def __init__(self, app_token: str, bot_token: str, ssl: Optional[SSLContext] = None):
58-
if not _HAVE_SLACK_SDK:
59-
raise RuntimeError("Could not find slack-sdk installation")
6056
if not app_token.startswith("xapp-") or not bot_token.startswith("xoxb-"):
6157
raise RuntimeError("Slack app token or bot token looks malformed")
6258

csp/adapters/symphony.py

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
from csp_adapter_symphony import * # noqa: F403
33
except ImportError:
44
raise ModuleNotFoundError("Install `csp-adapter-symphony` to use csp's Symphony adapter")
5+

csp/adapters/websocket.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@
1919
)
2020
from csp.impl.wiring import input_adapter_def, output_adapter_def, status_adapter_def
2121
from csp.impl.wiring.delayed_node import DelayedNodeWrapperDef
22-
from csp.lib import _websocketadapterimpl
22+
23+
try:
24+
from csp.lib import _websocketadapterimpl
25+
except ImportError:
26+
raise ImportError(
27+
"csp's websocket adapter requires the C++ csp extension to be built, but it could not be imported"
28+
)
2329

2430
from .websocket_types import WebsocketHeaderUpdate
2531

@@ -38,14 +44,14 @@
3844
import tornado.web
3945
import tornado.websocket
4046
except ImportError:
41-
raise ImportError("websocket adapter requires tornado package")
47+
raise ModuleNotFoundError("csp's websocket adapter requires `tornado`")
4248

4349
try:
4450
import rapidjson
4551

4652
datetime_mode = rapidjson.DM_UNIX_TIME | rapidjson.DM_NAIVE_IS_UTC
4753
except ImportError:
48-
raise ImportError("websocket adapter requires rapidjson package")
54+
raise ModuleNotFoundError("csp's websocket adapter requires `rapidjson`")
4955

5056

5157
def diff_dict(old, new):

pyproject.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ dependencies = [
2323
"deprecated",
2424
"numpy<2",
2525
"packaging",
26-
"pandas",
2726
"psutil",
2827
"pyarrow>=7.0.0",
2928
"pytz",
3029
"ruamel.yaml",
31-
"sqlalchemy",
3230
]
3331

3432
classifiers = [
@@ -77,6 +75,7 @@ develop = [
7775
"pillow",
7876
# adapters
7977
"httpx>=0.20,<1", # kafka
78+
"pandas", # pandas extension
8079
"polars", # parquet
8180
"psutil", # test_engine/test_history
8281
"slack-sdk>=3", # slack

0 commit comments

Comments
 (0)