Skip to content

Commit c68d4fe

Browse files
committed
refactor: replace sophys-xxx import with env. variables at pre execution
This further reduces the surface API we require from extension base packages, and flexibilixes our ability to change sophys-cli behavior via startup scripts. Signed-off-by: Sofia Donato Ferreira <[email protected]>
1 parent 4ff1755 commit c68d4fe

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

src/sophys/cli/core/base_configuration.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import functools
22
import importlib
33

4+
from sophys.cli.core import ENVVARS
45
from sophys.cli.core.magics import NamespaceKeys, add_to_namespace, get_from_namespace
56

67

@@ -65,16 +66,15 @@ def resume(self, *args, **kwargs):
6566
return RE
6667

6768

68-
def create_kafka_parameters(default_topic_names, default_bootstrap_servers, extension_name, _globals):
69-
kafka_topic = default_topic_names()[0]
69+
def create_kafka_parameters(extension_name, _globals):
70+
kafka_topic = ENVVARS.KAFKA_TOPIC
71+
bootstrap_servers = [f"{ENVVARS.KAFKA_HOST}:{ENVVARS.KAFKA_PORT}"]
7072

7173
in_test_mode = get_from_namespace(NamespaceKeys.TEST_MODE, False, ns=_globals)
7274
in_local_mode = get_from_namespace(NamespaceKeys.LOCAL_MODE, False, ns=_globals)
7375
if in_test_mode and in_local_mode:
7476
kafka_topic = kafka_topic.replace(extension_name, "test")
7577

76-
bootstrap_servers = default_bootstrap_servers()
77-
7878
add_to_namespace(NamespaceKeys.KAFKA_BOOTSTRAP, bootstrap_servers, _globals=_globals)
7979
add_to_namespace(NamespaceKeys.KAFKA_TOPIC, kafka_topic, _globals=_globals)
8080

@@ -96,14 +96,15 @@ def __create_kafka_monitor(topic_name: str, bootstrap_servers: list[str], subscr
9696
add_to_namespace(NamespaceKeys.KAFKA_MONITOR, monitor, _globals=_globals)
9797

9898

99-
def create_kafka_callback(RE, kafka_callback_factory, logger, kafka_topic, bootstrap_servers, callbacks, _globals):
99+
def create_kafka_callback(RE, logger, kafka_topic, bootstrap_servers, callbacks, _globals):
100100
from kafka.errors import NoBrokersAvailable
101+
from sophys.common.utils.kafka import make_kafka_callback
101102

102103
logger.info(f"Connecting to kafka... (IPs: {bootstrap_servers} | Topic: {kafka_topic})")
103104

104105
try:
105106
# RE -> Kafka
106-
RE.subscribe(kafka_callback_factory(topic_names=[kafka_topic], bootstrap_servers=bootstrap_servers, backoff_times=[0.1, 1.0]))
107+
RE.subscribe(make_kafka_callback(topic_names=[kafka_topic], bootstrap_servers=bootstrap_servers, backoff_times=[0.1, 1.0]))
107108

108109
logger.info("Connected to the kafka broker successfully!")
109110
except (TypeError, NoBrokersAvailable):
@@ -160,11 +161,7 @@ def execute_at_start(extension_name, _globals):
160161

161162
callbacks = create_callbacks(_globals)
162163

163-
sophys_utils = importlib.import_module(f"sophys.{extension_name}.utils")
164-
default_topic_names = sophys_utils.default_topic_names
165-
default_bootstrap_servers = sophys_utils.default_bootstrap_servers
166-
167-
kafka_topic, bootstrap_servers = create_kafka_parameters(default_topic_names, default_bootstrap_servers, extension_name, _globals)
164+
kafka_topic, bootstrap_servers = create_kafka_parameters(extension_name, _globals)
168165

169166
if not get_from_namespace(NamespaceKeys.LOCAL_MODE, False, ns=_globals):
170167
# Remote mode, only setup the monitor
@@ -176,6 +173,6 @@ def execute_at_start(extension_name, _globals):
176173

177174
# Kafka callback
178175
# NOTE: This is needed even in the local setting so that `kbl` works even in this case.
179-
create_kafka_callback(RE, sophys_utils, kafka_logger, kafka_topic, bootstrap_servers, callbacks, _globals)
176+
create_kafka_callback(RE, kafka_logger, kafka_topic, bootstrap_servers, callbacks, _globals)
180177

181178
instantiate_devices(sophys_logger, extension_name, _globals)

tests/test_base_configuration.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import pytest
22

3+
import os
34
import typing
45

6+
from sophys.cli.core import KAFKA_HOST_ENVVAR, KAFKA_PORT_ENVVAR, KAFKA_TOPIC_ENVVAR
57
from sophys.cli.core.magics import NamespaceKeys, get_from_namespace, add_to_namespace
68
from sophys.cli.core.base_configuration import create_bec, create_callbacks, create_run_engine, create_kafka_parameters
79

@@ -45,27 +47,31 @@ def test_create_run_engine():
4547
assert isinstance(RE, RunEngine)
4648

4749

48-
def test_create_kafka_parameters():
50+
def test_create_kafka_parameters(monkeypatch):
4951
_globals = {}
5052

51-
def default_kafka_topics(): return ["skip_bluesky_documents", "not_used"]
52-
def default_bootstrap_servers(): return ["1.2.3.4:1234", "5.6.7.8:5678"]
53+
monkeypatch.setenv(KAFKA_HOST_ENVVAR, "1.2.3.4")
54+
monkeypatch.setenv(KAFKA_PORT_ENVVAR, "1234")
55+
monkeypatch.setenv(KAFKA_TOPIC_ENVVAR, "skip_bluesky_documents")
5356

54-
topic_name, bootstrap_servers = create_kafka_parameters(default_kafka_topics, default_bootstrap_servers, "skip", _globals)
57+
original_topic_name = os.environ[KAFKA_TOPIC_ENVVAR]
58+
original_bootstrap_servers = [f"{os.environ[KAFKA_HOST_ENVVAR]}:{os.environ[KAFKA_PORT_ENVVAR]}"]
5559

56-
assert topic_name == default_kafka_topics()[0]
57-
assert bootstrap_servers == default_bootstrap_servers()
60+
topic_name, bootstrap_servers = create_kafka_parameters("skip", _globals)
61+
62+
assert topic_name == original_topic_name
63+
assert bootstrap_servers == original_bootstrap_servers
5864

5965
assert get_from_namespace(NamespaceKeys.KAFKA_TOPIC, ns=_globals) == topic_name
6066
assert get_from_namespace(NamespaceKeys.KAFKA_BOOTSTRAP, ns=_globals) == bootstrap_servers
6167

6268
add_to_namespace(NamespaceKeys.TEST_MODE, True, _globals=_globals)
6369
add_to_namespace(NamespaceKeys.LOCAL_MODE, True, _globals=_globals)
6470

65-
topic_name, bootstrap_servers = create_kafka_parameters(default_kafka_topics, default_bootstrap_servers, "skip", _globals)
71+
topic_name, bootstrap_servers = create_kafka_parameters("skip", _globals)
6672

67-
assert topic_name == default_kafka_topics()[0].replace("skip", "test")
68-
assert bootstrap_servers == default_bootstrap_servers()
73+
assert topic_name == original_topic_name.replace("skip", "test")
74+
assert bootstrap_servers == original_bootstrap_servers
6975

7076
assert get_from_namespace(NamespaceKeys.KAFKA_TOPIC, ns=_globals) == topic_name
7177
assert get_from_namespace(NamespaceKeys.KAFKA_BOOTSTRAP, ns=_globals) == bootstrap_servers

0 commit comments

Comments
 (0)