Skip to content

Commit

Permalink
Merge pull request #69 from Snailed/master
Browse files Browse the repository at this point in the history
Add Python 3.8-3.11 in CI test setup, and fix several version-related bugs.
  • Loading branch information
PedramBakh committed Mar 26, 2024
2 parents b1d56a7 + 3bb1988 commit d122cce
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.12']
python-version: ['3.8','3.9', '3.10', '3.11', '3.12']

steps:
- uses: actions/checkout@v3
Expand Down
4 changes: 2 additions & 2 deletions carbontracker/components/gpu/nvidia.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ def devices(self):
names = [pynvml.nvmlDeviceGetName(handle) for handle in self._handles]

# Decode names if Python version is less than 3.9
if sys.version_info < (3, 9):
names = [name.decode("utf-8") for name in names]
if sys.version_info < (3,10):
names = [name.decode() for name in names]

return names

Expand Down
12 changes: 9 additions & 3 deletions carbontracker/emissions/intensity/intensity.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import traceback

import geocoder
import importlib.resources
import numpy as np
import pandas as pd
import sys

from carbontracker import loggerutil
from carbontracker import exceptions
Expand All @@ -26,8 +26,14 @@ def get_default_intensity():
country = "Unknown"

try:
carbon_intensities_df = pd.read_csv(
str(importlib.resources.files("carbontracker").joinpath("data", "carbon-intensities.csv")))
# importlib.resources.files was introduced in Python 3.9
if sys.version_info < (3,9):
import pkg_resources
path = pkg_resources.resource_filename("carbontracker", "data/carbon-intensities.csv")
else:
import importlib.resources
path = importlib.resources.files("carbontracker").joinpath("data", "carbon-intensities.csv")
carbon_intensities_df = pd.read_csv(str(path))
intensity_row = carbon_intensities_df[carbon_intensities_df["alpha-2"] == country].iloc[0]
intensity = intensity_row["Carbon intensity of electricity (gCO2/kWh)"]
year = intensity_row["Year"]
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ dynamic = ["version"]
homepage = "https://github.com/lfwa/carbontracker"
repository = "https://github.com/lfwa/carbontracker"

[tool.setuptools]
packages = ['carbontracker']

[tool.setuptools_scm]

[project.optional-dependencies]
Expand Down
15 changes: 11 additions & 4 deletions tests/intensity/test_intensity.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from unittest.mock import patch, MagicMock
import numpy as np
import pandas as pd
import importlib.resources
import sys

from carbontracker import constants
from carbontracker.emissions.intensity import intensity
Expand All @@ -21,9 +21,16 @@ def test_get_default_intensity_success(self, mock_geocoder_ip):
mock_geocoder_ip.return_value = mock_location

result = intensity.get_default_intensity()
ref = importlib.resources.files("carbontracker") / "data/carbon-intensities.csv"
with importlib.resources.as_file(ref) as path:
carbon_intensities_df = pd.read_csv(path)

# importlib.resources.files was introduced in Python 3.9 and replaces deprecated pkg_resource.resources
if sys.version_info < (3,9):
import pkg_resources
carbon_intensities_df = pd.read_csv(pkg_resources.resource_filename("carbontracker", "data/carbon-intensities.csv"))
else:
import importlib.resources
ref = importlib.resources.files("carbontracker") / "data/carbon-intensities.csv"
with importlib.resources.as_file(ref) as path:
carbon_intensities_df = pd.read_csv(path)
intensity_row = carbon_intensities_df[carbon_intensities_df["alpha-2"] == mock_location.country].iloc[0]
expected_intensity = intensity_row["Carbon intensity of electricity (gCO2/kWh)"]

Expand Down
4 changes: 3 additions & 1 deletion tests/test_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,9 @@ def test_stop_tracker(self):
self.thread.stop()

self.assertFalse(self.thread.running)
self.mock_logger.info.assert_called_with("Monitoring thread ended.")

# assert_any_call because different log statements races in Python 3.11 in Github Actions
self.mock_logger.info.assert_any_call("Monitoring thread ended.")
self.mock_logger.output.assert_called_with("Finished monitoring.", verbose_level=1)

def test_stop_tracker_not_running(self):
Expand Down
7 changes: 4 additions & 3 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[tox]
isolated_build = True
envlist = py38, py39, py310

envlist = py38, py39, py310, py311, py312
[testenv]
deps=pyfakefs
commands =
python -m unittest discover
python -m unittest {posargs}

0 comments on commit d122cce

Please sign in to comment.