Skip to content

Commit

Permalink
feat: Python API add versions service
Browse files Browse the repository at this point in the history
  • Loading branch information
qdelamea-aneo committed Jan 3, 2024
1 parent eda55a4 commit 6473b97
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/python/src/armonik/client/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .submitter import ArmoniKSubmitter
from .tasks import ArmoniKTasks
from .results import ArmoniKResult
from .versions import ArmoniKVersions
26 changes: 26 additions & 0 deletions packages/python/src/armonik/client/versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from typing import Dict

from grpc import Channel

from ..protogen.client.versions_service_pb2_grpc import VersionsStub
from ..protogen.common.versions_common_pb2 import ListVersionsRequest, ListVersionsResponse


class ArmoniKVersions:
def __init__(self, grpc_channel: Channel):
""" Result service client
Args:
grpc_channel: gRPC channel to use
"""
self._client = VersionsStub(grpc_channel)

def list_versions(self) -> Dict[str, str]:
"""Get versions of ArmoniK components.
Return:
A dictionnary mapping each component to its version.
"""
request = ListVersionsRequest()
response: ListVersionsResponse = self._client.ListVersions(request)
return {"core": response.core, "api": response.api}
28 changes: 28 additions & 0 deletions packages/python/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pytest
import requests

from armonik.client import ArmoniKVersions
from armonik.protogen.worker.agent_service_pb2_grpc import AgentStub
from typing import List

Expand Down Expand Up @@ -53,6 +54,33 @@ def clean_up(request):
print("An error occurred when resetting the server: " + str(e))


def get_client(client_name: str, endpoint: str = grpc_endpoint) -> ArmoniKVersions:
"""
Get the ArmoniK client instance based on the specified service name.
Args:
client_name (str): The name of the ArmoniK client to retrieve.
endpoint (str, optional): The gRPC server endpoint. Defaults to grpc_endpoint.
Returns:
ArmoniKVersions
An instance of the specified ArmoniK client.
Raises:
ValueError: If the specified service name is not recognized.
Example:
>>> result_service = get_service("Results")
>>> submitter_service = get_service("Submitter", "custom_endpoint")
"""
channel = grpc.insecure_channel(endpoint).__enter__()
match client_name:
case "Versions":
return ArmoniKVersions(channel)
case _:
raise ValueError("Unknown service name: " + str(service_name))


def rpc_called(service_name: str, rpc_name: str, n_calls: int = 1, endpoint: str = calls_endpoint) -> bool:
"""Check if a remote procedure call (RPC) has been made a specified number of times.
This function uses ArmoniK.Api.Mock. It just gets the '/calls.json' endpoint.
Expand Down
39 changes: 39 additions & 0 deletions packages/python/tests/test_versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest

from .conftest import all_rpc_called, rpc_called, get_client
from armonik.client import ArmoniKVersions


class TestArmoniKVersions:

def test_list_versions(self):
"""
Test the list_versions method of ArmoniKVersions client.
Args:
grpc_endpoint (str): The gRPC endpoint for the service mock.
calls_recap_endpoint (str): The endpoint for tracking RPC calls.
Assertions:
Ensures that the RPC 'ListVersions' is called on the service 'Versions'.
Asserts that the 'core' version is returned with correct value.
Asserts that the 'api' version is returned with correct value.
"""
versions_client: ArmoniKVersions = get_client("Versions")
versions = versions_client.list_versions()

assert rpc_called("Versions", "ListVersions")
assert versions["core"] == "Unknown"
assert versions["api"] == "3.15.1.0"

def test_service_fully_implemented(self):
"""
Test if all RPCs in the 'Versions' service have been called at least once.
Args:
calls_recap_endpoint (str): The endpoint for tracking RPC calls.
Assertions:
Ensures that all RPCs in the 'Versions' service have been called at least once.
"""
assert all_rpc_called("Versions")

0 comments on commit 6473b97

Please sign in to comment.