Skip to content
Snippets Groups Projects
Commit 35fc9f23 authored by Daniel Nemergut's avatar Daniel Nemergut
Browse files

Made get_versions return the recommended version first in the list

parent b8813e41
No related branches found
No related tags found
2 merge requests!1706merge 2.8.4 to main,!1670WS-1405 CASA matrix service
...@@ -320,7 +320,9 @@ def get_casa_versions(request: Request) -> Response: ...@@ -320,7 +320,9 @@ def get_casa_versions(request: Request) -> Response:
or a 404 response (HTTPNotFound) if none are returned or a 404 response (HTTPNotFound) if none are returned
""" """
params = { params = {
"version": request.params["version"] if "version" in request.params else None,
"capability": request.params["capability"] if "capability" in request.params else None, "capability": request.params["capability"] if "capability" in request.params else None,
"telescope": request.params["telescope"] if "telescope" in request.params else None,
} }
params = {k: v for k, v in params.items() if v is not None} params = {k: v for k, v in params.items() if v is not None}
...@@ -360,10 +362,11 @@ def add_casa_version(request: Request) -> Response: ...@@ -360,10 +362,11 @@ def add_casa_version(request: Request) -> Response:
""" """
added = request.casa_matrix_service.add_version( added = request.casa_matrix_service.add_version(
version=request.params["version"], version=request.params["version"],
capabilities=request.params["capabilities"].split(',') if "capabilities" in request.params else [], capabilities=request.params["capabilities"].split(",") if "capabilities" in request.params else [],
is_cluster_compatible=False if "is_cluster_compatible" in request.params is_cluster_compatible=False
and request.params["is_cluster_compatible"].lower() in ["0", "false"] if "is_cluster_compatible" in request.params
else True, and request.params["is_cluster_compatible"].lower() in ["0", "false"]
else True,
) )
if added: if added:
...@@ -383,10 +386,11 @@ def update_casa_version(request: Request) -> Response: ...@@ -383,10 +386,11 @@ def update_casa_version(request: Request) -> Response:
""" """
updated = request.casa_matrix_service.update_version( updated = request.casa_matrix_service.update_version(
version=request.params["version"], version=request.params["version"],
capabilities=request.params["capabilities"].split(',') if "capabilities" in request.params else [], capabilities=request.params["capabilities"].split(",") if "capabilities" in request.params else [],
is_cluster_compatible=False if "is_cluster_compatible" in request.params is_cluster_compatible=False
and request.params["is_cluster_compatible"].lower() in ["0", "false"] if "is_cluster_compatible" in request.params
else True, and request.params["is_cluster_compatible"].lower() in ["0", "false"]
else True,
) )
if updated: if updated:
......
...@@ -26,7 +26,11 @@ from sqlalchemy.exc import SQLAlchemyError ...@@ -26,7 +26,11 @@ from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from workspaces.capability.schema import Capability, CasaMatrixCasaVersion, matrix_capabilities from workspaces.capability.schema import (
Capability,
CasaMatrixCasaVersion,
matrix_capabilities,
)
from workspaces.system.services.interfaces import CasaMatrixServiceIF from workspaces.system.services.interfaces import CasaMatrixServiceIF
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -247,25 +251,40 @@ class CasaMatrixService(CasaMatrixServiceIF): ...@@ -247,25 +251,40 @@ class CasaMatrixService(CasaMatrixServiceIF):
else: else:
return installed_version return installed_version
def get_versions(self, capability: str | None = DEFAULT_CAPABILITY) -> list[dict[str, str]]: def get_versions(
self,
version: str | None = None,
capability: str | None = DEFAULT_CAPABILITY,
telescope: str | None = DEFAULT_TELESCOPE,
) -> list[dict[str, str]]:
""" """
Returns the CASA versions that are valid for processing as a dict. Returns the CASA versions that are valid for processing as a dict.
The recommended version (either the given version or the default for the given capability) is first in the list.
:param capability: (Optional) The capability to filter versions on :param version: (Optional) A potential CASA version to use as the default
:param capability: (Optional) The capability to filter versions on and to determine the recommended version
:param telescope: (Optional) The telescope to distinguish a recommended version from CAPO
:return: A dict mapping valid CASA versions to their paths :return: A dict mapping valid CASA versions to their paths
""" """
versions = [] versions = []
rec_version = version if version else self.get_default_version(capability, telescope)
# Installed versions are a flat list of dicts containing version names and paths # Installed versions are a flat list of dicts containing version names and paths
self.installed_versions = self.find_installed_versions() self.installed_versions = self.find_installed_versions()
# Allowed versions are a dict of capabilities mapping to lists of version names # Allowed versions are a dict of capabilities mapping to lists of version names
self.allowed_versions = self.fetch_allowed_versions(capability) self.allowed_versions = self.fetch_allowed_versions(capability)
# Add any versions that are both allowed and installed to the list
for allowed_version in self.allowed_versions: for allowed_version in self.allowed_versions:
installed_version = self.get_installed_version_by_basename(allowed_version) installed_version = self.get_installed_version_by_basename(allowed_version)
if installed_version: if installed_version:
versions.append(installed_version) # Put the recommended version as first in the list
if allowed_version == rec_version:
versions.insert(0, installed_version)
else:
versions.append(installed_version)
logger.info(f"Found CASA versions for {capability}: {versions}") logger.info(f"Found CASA versions for {capability}: {versions}")
...@@ -321,7 +340,7 @@ class CasaMatrixService(CasaMatrixServiceIF): ...@@ -321,7 +340,7 @@ class CasaMatrixService(CasaMatrixServiceIF):
:param capabilities: List of capability names to associate to the given version :param capabilities: List of capability names to associate to the given version
""" """
matrix_version = self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).first() matrix_version = self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).first()
mc = [{'matrix_id': matrix_version.matrix_id, 'capability_name': c} for c in capabilities] mc = [{"matrix_id": matrix_version.matrix_id, "capability_name": c} for c in capabilities]
self.session.execute(insert(matrix_capabilities), mc) self.session.execute(insert(matrix_capabilities), mc)
self.session.flush() self.session.flush()
...@@ -355,10 +374,12 @@ class CasaMatrixService(CasaMatrixServiceIF): ...@@ -355,10 +374,12 @@ class CasaMatrixService(CasaMatrixServiceIF):
:return: True if updated successfully :return: True if updated successfully
""" """
try: try:
self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).update({ self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).update(
'casa_version': version, {
'is_cluster_compatible': is_cluster_compatible, "casa_version": version,
}) "is_cluster_compatible": is_cluster_compatible,
}
)
self.session.flush() self.session.flush()
if capabilities: if capabilities:
# Link the given capabilities to the new matrix version, wasn't sure how to do this in one go # Link the given capabilities to the new matrix version, wasn't sure how to do this in one go
......
...@@ -65,7 +65,9 @@ class CasaMatrixServiceIF(ABC): ...@@ -65,7 +65,9 @@ class CasaMatrixServiceIF(ABC):
raise NotImplementedError raise NotImplementedError
@abstractmethod @abstractmethod
def get_versions(self, capability: str | None = None) -> list[dict[str, str]]: def get_versions(
self, version: str | None = None, capability: str | None = None, telescope: str | None = None
) -> list[dict[str, str]]:
raise NotImplementedError raise NotImplementedError
@abstractmethod @abstractmethod
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment