Skip to content
Snippets Groups Projects
Commit 1c26be09 authored by Charlotte Hausman's avatar Charlotte Hausman
Browse files

Merge branch 'matrix-model-fixes' into '2.8.4-DEVELOPMENT'

Fix matrix model

See merge request !1662
parents 1f95316a ddcca76e
No related branches found
No related tags found
2 merge requests!1706merge 2.8.4 to main,!1662Fix matrix model
Pipeline #15761 passed
......@@ -92,6 +92,7 @@ def add_services(config: Configurator, session_factory: BeakerSessionFactoryConf
:param session_factory: Pyramid Beaker session factory
:return: Updated Configurator
"""
# # these objects should exist across request boundaries
workflow_rest_client = WorkflowServiceRESTClient()
notification_rest_client = TransactionalNotificationSender(transaction.manager)
......
......@@ -50,6 +50,7 @@ from workspaces.products.schema_interfaces import FutureProductIF
from workspaces.system.schema import AbstractFile, JSONSerializable
mapper_registry = registry()
Base = mapper_registry.generate_base()
logger = logging.getLogger(__name__)
......@@ -967,6 +968,60 @@ class QaStaff(JSONSerializable):
return QaStaff(**copy)
matrix_capabilities = sa.Table(
"casa_matrix_capabilities",
Base.metadata,
sa.Column("matrix_id", sa.Integer, sa.ForeignKey("casa_matrix_casa_versions.matrix_id")),
sa.Column("capability_name", sa.String, sa.ForeignKey("capabilities.capability_name")),
)
@mapper_registry.mapped
class CasaMatrixCasaVersion(JSONSerializable):
"""
Schema representation of a CASA version within the CASA Matrix
"""
matrix_id: int
casa_version: str
is_cluster_compatible: bool
__tablename__ = "casa_matrix_casa_versions"
matrix_id = sa.Column(
"matrix_id",
sa.Integer,
primary_key=True,
)
casa_version = sa.Column(
"casa_version",
sa.String,
nullable=False,
unique=True,
)
is_cluster_compatible = sa.Column(
"is_cluster_compatible",
sa.Boolean,
default=True,
)
capabilities = relationship("Capability", back_populates="casa_versions", secondary=matrix_capabilities)
# Pyramid support method: must accept a "request" argument that is unused by us
def __json__(self, request=None) -> dict:
return {
"type": self.__class__.__name__,
"matrix_id": self.matrix_id,
"casa_version": self.casa_version,
"is_cluster_compatible": self.is_cluster_compatible,
}
def from_json(cls, json: dict) -> any:
return CasaMatrixCasaVersion(
casa_version=json["casa_version"],
is_cluster_compatible=json["is_cluster_compatible"],
)
@mapper_registry.mapped
class Capability(JSONSerializable):
"""
......@@ -999,6 +1054,9 @@ class Capability(JSONSerializable):
templates = relationship("CapabilityTemplate", backref="capabilities", lazy="dynamic")
requests = relationship("CapabilityRequest", back_populates="capability")
state_machine = relationship("StateMachine", back_populates="capability", uselist=False)
casa_versions = relationship(
"CasaMatrixCasaVersion", back_populates="capabilities", lazy=True, secondary=matrix_capabilities
)
def create_request(self, parameters: ParameterIF, future_products: FutureProductIF):
"""
......@@ -1702,61 +1760,3 @@ class CapabilityRequestStateSetter:
return False
return True
return False
@mapper_registry.mapped
class CasaMatrixCapability:
"""
a bridge between the casa matrix versions and the available capabilities
"""
__tablename__ = "casa_matrix_capabilities"
matrix_id = sa.Column(sa.ForeignKey("casa_matrix_casa_version.matrix_id"), primary_key=True)
capability_name = sa.Column(sa.ForeignKey("capabilities.capability_name"), primary_key=True)
capability = relationship("Capability")
@mapper_registry.mapped
class CasaMatrixCasaVersion(JSONSerializable):
"""
Schema representation of a CASA version within the CASA Matrix
"""
matrix_id: int
casa_version: str
is_cluster_compatible: bool
__tablename__ = "casa_matrix_casa_versions"
matrix_id = sa.Column(
"matrix_id",
sa.Integer,
primary_key=True,
)
casa_version = sa.Column(
"casa_version",
sa.String,
nullable=False,
unique=True,
)
is_cluster_compatible = sa.Column(
"is_cluster_compatible",
sa.Boolean,
default=True,
)
capabilities = relationship("CasaMatrixCapability")
# Pyramid support method: must accept a "request" argument that is unused by us
def __json__(self, request=None) -> dict:
return {
"type": self.__class__.__name__,
"matrix_id": self.matrix_id,
"casa_version": self.casa_version,
"is_cluster_compatible": self.is_cluster_compatible,
}
def from_json(cls, json: dict) -> any:
return CasaMatrixCasaVersion(
casa_version=json["casa_version"],
is_cluster_compatible=json["is_cluster_compatible"],
)
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