diff --git a/services/capability/src/capability/capability_launcher.py b/services/capability/src/capability/capability_launcher.py index 54c8494c0260d6530a7aa570c0ceb78946280206..54a47082a2617596ef2b2357bdca4b05693855ac 100644 --- a/services/capability/src/capability/capability_launcher.py +++ b/services/capability/src/capability/capability_launcher.py @@ -61,6 +61,7 @@ def main(): # an execution ID request_id = r.json()['id'] r = requests.post(f'{settings.serviceUrl}/capability/request/{request_id}/submit') + print(r.content) execution_id = r.json()['id'] # at this point we can start listening for events from rabbitmq concerning 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 a061380d672d0d2976c7fda0cd4190703a1993f2..570e604232b31305cecc0aaba2f82895e7fe910c 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 @@ -244,6 +244,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): """ @@ -269,7 +273,7 @@ class CapabilityExecution(Base, CapabilityExecutionIF): 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') @@ -278,10 +282,14 @@ class CapabilityExecution(Base, CapabilityExecutionIF): current_step = sa.Column('current_step', sa.Integer) capability_version = relationship(CapabilityVersion, back_populates="executions") - __table_args__ = (sa.ForeignKeyConstraint([capability_request, version_number], + __table_args__ = (sa.ForeignKeyConstraint([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 ba36214f1662e63ea3de1232a030e1b850c2a9e8..c549b4434c116de65dec42b209e6b133147cdea1 100644 --- a/shared/workspaces/src/workspaces/services.py +++ b/shared/workspaces/src/workspaces/services.py @@ -37,7 +37,7 @@ class CapabilityService(CapabilityServiceIF): capability_name: str, parameters: List[ParameterIF]=None, products: List[FutureProductIF]=None) -> "CapabilityRequestIF": - self.capability_info.create_capability_request(capability_name, parameters, products) + return self.capability_info.create_capability_request(capability_name, parameters, products) def run_capability(self, request: CapabilityRequest) -> CapabilityExecution: """ @@ -136,7 +136,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: """ @@ -145,9 +146,10 @@ class CapabilityInfo(CapabilityInfoIF): :return: Integer identifier for the record """ record = CapabilityExecution( - state=ExecutionState.Ready.name, capability_request=request_id, current_step=0 + state=ExecutionState.Ready.name, capability_request_id=request_id, current_step=0 ) - return self.save_entity(record) + self.save_entity(record) + return record def lookup_entity( self, @@ -160,7 +162,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]) -> int: """