Skip to content
Snippets Groups Projects
Commit c8e8ac76 authored by Daniel Lyons's avatar Daniel Lyons
Browse files

Making it through the REST API for capabilities, kinda of

parent c36bb364
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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):
"""
......
......@@ -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:
"""
......
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