Skip to content

Commit

Permalink
fix build (#277)
Browse files Browse the repository at this point in the history
* Update deprecated test methods

* Remove unneeded files

* Move to uv

* Add coverage test

* Testing in GHA

* Downgrade python

* Minor reformatting

* Add version to package

* Sort imports
  • Loading branch information
enolfc authored Jan 15, 2025
1 parent 765079c commit b3fdb4e
Show file tree
Hide file tree
Showing 11 changed files with 1,424 additions and 87 deletions.
22 changes: 12 additions & 10 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,21 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5

- name: Install uv and set the python version
uses: astral-sh/setup-uv@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Tox
run: pip install tox
- name: Run Tox

- name: Install the project
run: uv sync --all-extras --dev

- name: Run tests
run: |
# Run tox using the version of Python in `PATH`
tox -e py
tox -e bandit
tox -e cobertura
uv run pytest
uv run bandit -r cloud_info_provider -x tests -s B110,B702
uv run py.test --cov=cloud_info_provider --cov-report=xml --cov-report=term-missing cloud_info_provider/tests
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
3 changes: 3 additions & 0 deletions cloud_info_provider/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import importlib.metadata

__version__ = importlib.metadata.version(__package__)
5 changes: 5 additions & 0 deletions cloud_info_provider/core.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import argparse
import logging

import cloud_info_provider
from stevedore import driver, extension


Expand Down Expand Up @@ -48,6 +49,10 @@ def get_parser(providers, formatters, auth_refreshers, publishers):
conflict_handler="resolve",
)

parser.add_argument(
"--version", action="version", version=f"{cloud_info_provider.__version__}"
)

parser.add_argument(
"--middleware",
metavar="MIDDLEWARE",
Expand Down
2 changes: 1 addition & 1 deletion cloud_info_provider/providers/openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ def populate_parser(parser):
default=opt.argparse_default,
metavar="<auth-%s>" % opt.name,
help=opt.help,
dest="os_%s" % opt.dest.replace("-", "_")
dest="os_%s" % opt.dest.replace("-", "_"),
)

parser.add_argument(
Expand Down
2 changes: 1 addition & 1 deletion cloud_info_provider/tests/test_opennebula.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def test_get_marketplace_images(self):
for k, v in self.expected_images.items()
if v.get("image_marketplace_id")
}
self.assertItemsEqual(
self.assertCountEqual(
marketplace_images.keys(), self.provider.get_images().keys()
)

Expand Down
9 changes: 5 additions & 4 deletions cloud_info_provider/tests/test_openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,7 @@ def test_get_markeplace_images(self):

images = self.provider.get_images(**{"auth": {"project_id": None}})
self.assertTrue(m_get_image_defaults.called)

self.assertItemsEqual(images.keys(), expected_images)
self.assertCountEqual(images.keys(), expected_images)

def test_get_endpoints_with_defaults_from_static(self):
expected_endpoints = {
Expand Down Expand Up @@ -664,7 +663,8 @@ def test_get_endpoints_with_defaults_from_static(self):
m_get_goc_info.assert_called_with("http://foo.example.org:5000/v2", False)
self.assertEqual("baz", endpoints.pop("gocfoo"))
for k, v in expected_endpoints["endpoints"].items():
self.assertDictContainsSubset(v, endpoints["endpoints"].get(k, {}))
sub = endpoints["endpoints"].get(k, {})
self.assertEqual(sub, sub | v)

def test_get_endpoints_with_defaults(self):
expected_endpoints = {
Expand Down Expand Up @@ -832,7 +832,8 @@ def test_get_endpoints_with_defaults_from_static(self):

self.assertEqual("baz", endpoints.pop("gocfoo"))
for k, v in expected_endpoints["endpoints"].items():
self.assertDictContainsSubset(v, endpoints["endpoints"].get(k, {}))
sub = endpoints["endpoints"].get(k, {})
self.assertEqual(sub, sub | v)

def test_get_endpoints_with_defaults(self):
expected_endpoints = {
Expand Down
83 changes: 81 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,82 @@
[project]
name = "cloud-info-provider"
dynamic = ["version"]
description = "A cloud information discovery tool for EGI FedCloud"
readme = "README.md"
authors = [
{ name = "Enol Fernandez", email = "[email protected]" },
{ name = "Baptiste Grenier", email = "[email protected]" },
{ name = "Alvaro Lopez", email = "[email protected]" },
{ name = "Andre Gemuend", email = "[email protected]" },
{ name = "Bjorn Hagemeier", email = "[email protected]" },
{ name = "Boris Parak", email = "[email protected]" },
{ name = "Bruce Becker", email = "[email protected]" },
{ name = "Carlos Gimeno Yanez", email = "[email protected]" },
{ name = "Pablo Orviz", email = "[email protected]" },
{ name = "Ruben Diez", email = "[email protected]" },
{ name = "Salvatore Pinto", email = "[email protected]" },
]
requires-python = ">=3.10"
dependencies = [
"boto3>=1.35.98",
"defusedxml>=0.7.1",
"keystoneauth1>=5.9.1",
"mako>=1.3.8",
"pyopenssl>=25.0.0",
"python-dateutil>=2.9.0.post0",
"python-glanceclient>=4.7.0",
"python-keystoneclient>=5.5.0",
"python-novaclient>=18.7.0",
"pyyaml>=6.0.2",
"requests>=2.32.3",
"six>=1.17.0",
"stevedore>=5.4.0",
]

[build-system]
requires = ["pbr>=6.0.0", "setuptools>=64.0.0"]
build-backend = "pbr.build"
requires = ["hatchling", "uv-dynamic-versioning"]
build-backend = "hatchling.build"

[tool.hatch.version]
source = "uv-dynamic-versioning"

[dependency-groups]
dev = [
"bandit>=1.8.2",
"fixtures>=4.2.2",
"mock>=5.1.0",
"pytest>=8.3.4",
"pytest-cov>=6.0.0",
"testtools>=2.7.2",
]

[project.scripts]
cloud-info-provider-service = "cloud_info_provider.core:main"

[project.entry-points.'cip.providers']
openstack = "cloud_info_provider.providers.openstack:OpenStackProvider"
opennebula = "cloud_info_provider.providers.opennebula:OpenNebulaProvider"
opennebularocci = "cloud_info_provider.providers.opennebula:OpenNebulaROCCIProvider"
static = "cloud_info_provider.providers.static:StaticProvider"
ooi = "cloud_info_provider.providers.ooi:OoiProvider"

[project.entry-points.'cip.formatters']
glue = "cloud_info_provider.formatters.glue:GLUE"
glue21 = "cloud_info_provider.formatters.glue:GLUE21"
glue21json = "cloud_info_provider.formatters.glue:GLUE21Json"
cmdb = "cloud_info_provider.formatters.cmdb:CMDB"

[project.entry-points.'cip.collectors']
headers = "cloud_info_provider.collectors.cloud:CloudCollector"
clouddomain = "cloud_info_provider.collectors.cloud:CloudCollector"
storage = "cloud_info_provider.collectors.storage:StorageCollector"
compute = "cloud_info_provider.collectors.compute:ComputeCollector"

[project.entry-points.'cip.auth_refreshers']
oidcrefresh = "cloud_info_provider.auth_refreshers.oidc_refresh:OidcRefreshToken"
oidcvorefresh = "cloud_info_provider.auth_refreshers.oidc_vo_refresh:OidcVORefreshToken"
accesstoken = "cloud_info_provider.auth_refreshers.access_token:AccessToken"

[project.entry-points.'cip.publishers']
stdout = "cloud_info_provider.publishers.stdout:StdOutPublisher"
ams = "cloud_info_provider.publishers.ams:AMSPublisher"
63 changes: 0 additions & 63 deletions setup.cfg

This file was deleted.

6 changes: 0 additions & 6 deletions setup.py

This file was deleted.

Loading

0 comments on commit b3fdb4e

Please sign in to comment.