Skip to content

Commit ee75977

Browse files
fix(cli): use OfflineEmissionsTracker for offline monitor runs
When monitor delegates to run_and_monitor with --offline, country_iso_code was passed to EmissionsTracker and rejected by BaseEmissionsTracker. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 7000cd4 commit ee75977

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

codecarbon/cli/monitor.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from rich import print
99
from typing_extensions import Annotated
1010

11-
from codecarbon.emissions_tracker import EmissionsTracker
11+
from codecarbon.emissions_tracker import EmissionsTracker, OfflineEmissionsTracker
1212

1313

1414
def run_and_monitor(
@@ -63,8 +63,12 @@ def run_and_monitor(
6363
)
6464
raise typer.Exit(1)
6565

66-
# Initialize tracker with specified logging level and shared args
67-
tracker = EmissionsTracker(
66+
tracker_cls = (
67+
OfflineEmissionsTracker
68+
if "country_iso_code" in tracker_args
69+
else EmissionsTracker
70+
)
71+
tracker = tracker_cls(
6872
log_level=log_level,
6973
save_to_logger=False,
7074
tracking_mode="process",

tests/cli/test_monitor.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,36 @@ def __init__(self, command, text=True):
6060
assert exc_info.value.exit_code == 1
6161

6262

63+
def test_run_and_monitor_uses_offline_tracker_when_country_iso_code_set(monkeypatch):
64+
captured = {}
65+
66+
class FakeOfflineTracker(FakeTracker):
67+
def __init__(self, **kwargs):
68+
captured["kwargs"] = kwargs
69+
super().__init__()
70+
71+
class FakePopen:
72+
def __init__(self, command, text=True):
73+
pass
74+
75+
def wait(self):
76+
return 0
77+
78+
monkeypatch.setattr(monitor_module, "OfflineEmissionsTracker", FakeOfflineTracker)
79+
monkeypatch.setattr(monitor_module, "EmissionsTracker", FakeTracker)
80+
monkeypatch.setattr(monitor_module.subprocess, "Popen", FakePopen)
81+
monkeypatch.setattr(monitor_module, "print", lambda *args, **kwargs: None)
82+
83+
with pytest.raises(typer.Exit) as exc_info:
84+
monitor_module.run_and_monitor(
85+
SimpleNamespace(args=["echo", "hi"]),
86+
country_iso_code="FRA",
87+
)
88+
89+
assert exc_info.value.exit_code == 0
90+
assert captured["kwargs"]["country_iso_code"] == "FRA"
91+
92+
6393
def test_run_and_monitor_handles_keyboard_interrupt(monkeypatch):
6494
process_info = {"terminated": 0, "killed": 0}
6595

0 commit comments

Comments
 (0)