diff --git a/shared/workspaces/src/workspaces/capability_interfaces.py b/shared/workspaces/src/workspaces/capability_interfaces.py index 7ebf3fbbc8f7b1bc64f4f7dd2abc1a4b1cead631..b525dc790368486ac46073b319053f03c5c9f7d2 100644 --- a/shared/workspaces/src/workspaces/capability_interfaces.py +++ b/shared/workspaces/src/workspaces/capability_interfaces.py @@ -4,7 +4,7 @@ Interfaces used by the Workspaces' capabilities system. import inspect from abc import ABC, abstractmethod -from typing import List, Union, Optional +from typing import List, Union, Optional, Any from .product_interfaces import ProductIF, FutureProductIF @@ -30,6 +30,9 @@ class CapabilityRequestIF: future_products: str versions: List["CapabilityVersionIF"] + def __json__(self, request: Any) -> dict: + raise NotImplementedError + class CapabilityVersionIF: capability_request: CapabilityRequestIF @@ -42,6 +45,9 @@ class CapabilityExecutionIF: state: str current_step: int + def __json__(self, request: Any) -> dict: + raise NotImplementedError + """ Capability System / Services diff --git a/shared/workspaces/src/workspaces/schema.py b/shared/workspaces/src/workspaces/schema.py index 5c818d36e97e767b29efc7d215f3f4d4a58c135d..9cdd83c97b542bba33c4ef69e5533e7e56a1bafb 100644 --- a/shared/workspaces/src/workspaces/schema.py +++ b/shared/workspaces/src/workspaces/schema.py @@ -5,7 +5,7 @@ import abc import enum import json from pathlib import Path -from typing import Dict, List, Tuple +from typing import Dict, List, Tuple, Any import sqlalchemy as sa from pycapo import CapoConfig @@ -265,6 +265,10 @@ class CapabilityRequest(Base, CapabilityRequestIF): def __str__(self): return f"CapabilityRequest object: {self.__dict__}" + def __json__(self, request) -> dict: + return dict(id=self.id, capability_id=self.capability_id, + state=self.state, parameters=self.parameters) + class CapabilityVersion(Base, CapabilityVersionIF): """ @@ -289,12 +293,13 @@ class CapabilityExecution(Base, CapabilityExecutionIF): """ Schema representation of a capability request's execution record """ + __tablename__ = "capability_executions" __tablename__ = "capability_executions" id = sa.Column("execution_id", sa.Integer, primary_key=True) state = sa.Column("state", sa.String) - capability_request = sa.Column( + capability_request_id = sa.Column( "capability_request_id", sa.Integer, sa.ForeignKey("capability_requests.capability_request_id"), @@ -306,11 +311,15 @@ class CapabilityExecution(Base, CapabilityExecutionIF): __table_args__ = ( sa.ForeignKeyConstraint( - [capability_request, version_number], + [capability_request_id, version_number], [CapabilityVersion.capability_request_id, CapabilityVersion.version_number], ), ) + def __json__(self, request: Any) -> dict: + return dict(id=self.id, state=self.state, capability_request_id=self.capability_request_id, + version_number=self.version_number, current_step=self.current_step) + class Workflow(Base): """ diff --git a/shared/workspaces/src/workspaces/services.py b/shared/workspaces/src/workspaces/services.py index a67799a3e94d61edbf0ecc6632647a87f8e90fad..fa1e830f6b45e7825ab79532e1b9ee4c3969e72c 100644 --- a/shared/workspaces/src/workspaces/services.py +++ b/shared/workspaces/src/workspaces/services.py @@ -64,7 +64,7 @@ class CapabilityService(CapabilityServiceIF): parameters: List[ParameterIF] = None, products: List[FutureProductIF] = None, ) -> CapabilityRequest: - self.capability_info.create_capability_request( + return self.capability_info.create_capability_request( capability_name, parameters, products ) @@ -163,7 +163,8 @@ class CapabilityInfo(CapabilityInfoIF): capability=capability, parameters=str(parameters) ) - return self.save_entity(request) + self.save_entity(request) + return request def create_execution_record(self, request_id: int) -> int: """ @@ -173,10 +174,11 @@ class CapabilityInfo(CapabilityInfoIF): """ record = CapabilityExecution( state=ExecutionState.Ready.name, - capability_request=request_id, - current_step=0, + capability_request_id=request_id, + current_step=0 ) - return self.save_entity(record) + self.save_entity(record) + return record def lookup_entity( self, @@ -191,7 +193,7 @@ class CapabilityInfo(CapabilityInfoIF): :param entity_schema: Database schema of the entity :return: Object representation of entity if found, else None """ - return self.session.query(entity_schema).filter(entity_schema.id == entity_id) + return self.session.query(entity_schema).filter(entity_schema.id == entity_id).one() def save_entity( self, entity: Union[Capability, CapabilityRequest, CapabilityExecution]