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

Fixed associated capability additions, updates, and deletes

parent 0b3de348
No related branches found
No related tags found
2 merge requests!1706merge 2.8.4 to main,!1670WS-1405 CASA matrix service
......@@ -21,11 +21,12 @@ import re
import shutil
from pycapo import CapoConfig
from sqlalchemy import insert
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session
from workspaces.capability.schema import Capability, CasaMatrixCasaVersion
from workspaces.capability.schema import Capability, CasaMatrixCasaVersion, matrix_capabilities
from workspaces.system.services.interfaces import CasaMatrixServiceIF
logger = logging.getLogger(__name__)
......@@ -312,6 +313,19 @@ class CasaMatrixService(CasaMatrixServiceIF):
self.session.add(entity)
self.session.flush()
def save_capabilities(self, version: str, capabilities: list[str]):
"""
Saves the given version + capabilities to the casa_matrix_capabilities table.
:param version: CASA matrix version to look up
:param capabilities: List of capability names to associate to the given version
"""
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]
self.session.execute(insert(matrix_capabilities), mc)
self.session.flush()
def add_version(self, version: str, capabilities: list[str] = None, is_cluster_compatible: bool = True) -> bool:
"""
Adds a new CASA version to the matrix using the provided version string and capability name list.
......@@ -322,11 +336,13 @@ class CasaMatrixService(CasaMatrixServiceIF):
matrix_version = CasaMatrixCasaVersion(
casa_version=version,
is_cluster_compatible=is_cluster_compatible,
capabilities=capabilities if capabilities else [],
)
try:
self.save_entity(matrix_version)
if capabilities:
# Link the given capabilities to the new matrix version, wasn't sure how to do this in one go
self.save_capabilities(version, capabilities)
return True
except SQLAlchemyError as e:
logger.critical(f"Unable to add CASA version {version}: %s", e)
......@@ -338,16 +354,15 @@ class CasaMatrixService(CasaMatrixServiceIF):
:return: True if updated successfully
"""
logger.info(f"Full list = {capabilities}")
for thing in capabilities:
logger.info(f"Thing = {thing}")
try:
self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).update({
'casa_version': version,
'is_cluster_compatible': is_cluster_compatible,
'capabilities': capabilities if capabilities else [],
})
self.session.flush()
if capabilities:
# Link the given capabilities to the new matrix version, wasn't sure how to do this in one go
self.save_capabilities(version, capabilities)
return True
except SQLAlchemyError as e:
logger.critical(f"Unable to update CASA version {version} %s", e)
......@@ -355,12 +370,14 @@ class CasaMatrixService(CasaMatrixServiceIF):
def delete_version(self, version: str) -> bool:
"""
Deletes a CASA version from the matrix.
Deletes a CASA version and its capability links from the matrix.
:return: True if deleted successfully
"""
try:
self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).delete()
matrix_version = self.session.query(CasaMatrixCasaVersion).filter_by(casa_version=version).first()
matrix_version.capabilities = []
self.session.delete(matrix_version)
self.session.flush()
return True
except SQLAlchemyError as e:
......
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