From c8e8ac76cbc9de32f59b70d73a05a7881b38022e Mon Sep 17 00:00:00 2001 From: Daniel K Lyons <dlyons@nrao.edu> Date: Thu, 8 Oct 2020 14:15:46 -0600 Subject: [PATCH] Making it through the REST API for capabilities, kinda of --- .../src/capability/capability_launcher.py | 1 + .../src/workspaces/capability_interfaces.py | 8 +++++++- shared/workspaces/src/workspaces/schema.py | 14 +++++++++++--- shared/workspaces/src/workspaces/services.py | 12 +++++++----- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/services/capability/src/capability/capability_launcher.py b/services/capability/src/capability/capability_launcher.py index 54c8494c0..54a47082a 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 7ebf3fbbc..b525dc790 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 a061380d6..570e60423 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 ba36214f1..c549b4434 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: """ -- GitLab