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

Adding request versions, still don't have success with generating a request and saving it though

parent 0eef36e4
No related branches found
No related tags found
No related merge requests found
......@@ -17,6 +17,7 @@ depends_on = None
def upgrade():
print('creating capabilities')
op.create_table('capabilities',
sa.Column('capability_id', sa.Integer, primary_key=True),
sa.Column('capability_name', sa.String),
......@@ -24,14 +25,35 @@ def upgrade():
sa.Column('max_jobs', sa.Integer))
op.create_table('capability_requests',
sa.Column('request_id', sa.Integer, primary_key=True),
sa.Column('capability_request_id', sa.Integer, primary_key=True),
sa.Column('state', sa.String),
sa.Column('capability', sa.Integer, sa.ForeignKey('capabilities.capability_id')),
sa.Column('capability_id', sa.Integer, sa.ForeignKey('capabilities.capability_id')),
sa.Column('parameters', sa.String))
op.create_table('capability_versions',
sa.Column('capability_request_id',
sa.Integer,
sa.ForeignKey('capability_requests.capability_request_id'),
primary_key=True),
sa.Column('version_number',
sa.Integer,
primary_key=True))
op.create_table('capability_executions',
sa.Column('execution_id', sa.Integer, primary_key=True),
sa.Column('state', sa.String),
sa.Column('capability_request_id', sa.Integer),
sa.Column('capability_version_number', sa.Integer),
sa.Column('current_step', sa.Integer),
sa.ForeignKeyConstraint(['capability_request_id', 'capability_version_number'],
['capability_versions.capability_request_id', 'capability_versions.version_number']))
op.execute("INSERT INTO capabilities (capability_name, capability_steps, max_jobs) "
"VALUES ('null', 'PREPARE AND EXECUTE WORKFLOW null\nAWAIT WORKFLOW', 2)")
def downgrade():
op.drop_table('capability_executions')
op.drop_table('capability_versions')
op.drop_table('capability_requests')
op.drop_table('capabilities')
......@@ -13,45 +13,34 @@ CapabilityName = str
class CapabilityIF:
@property
def id(self) -> int: raise NotImplementedError
@property
def name(self) -> str: raise NotImplementedError
@property
def steps(self) -> List["CapabilityStepIF"]: raise NotImplementedError
@property
def max_jobs(self) -> int: raise NotImplementedError
id: int
name: str
steps: List["CapabilityStepIF"]
max_jobs: int
def create_request(self, parameters: "ParameterIF", future_products: FutureProductIF) -> "CapabilityRequestIF":
raise NotImplementedError
class CapabilityRequestIF:
@property
def id(self) -> int: raise NotImplementedError
@property
def state(self) -> str: raise NotImplementedError
id: int
state: str
capability: CapabilityIF
parameters: str
future_products: str
versions: List["CapabilityVersionIF"]
@property
def capability(self) -> CapabilityIF: raise NotImplementedError
@property
def parameters(self) -> str: raise NotImplementedError
@property
def future_products(self) -> str: raise NotImplementedError
@property
def versions(self) -> List["CapabilityVersionIF"]: raise NotImplementedError
class CapabilityVersionIF:
capability_request: CapabilityRequestIF
version_number: int
# eventually, the parameters should go here
class CapabilityExecutionIF:
pass
capability_version: CapabilityVersionIF
state: str
current_step: int
"""
......
......@@ -14,7 +14,7 @@ from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from .capability_interfaces import CapabilityIF, CapabilityRequestIF, CapabilityExecutionIF, \
CapabilitySequenceIF, ParameterIF
CapabilitySequenceIF, ParameterIF, CapabilityVersionIF
from .helpers import CapabilityStepType, CapabilityStep, CapabilitySequence
from .product_interfaces import FutureProductIF
......@@ -223,7 +223,7 @@ class CapabilityRequest(Base, CapabilityRequestIF):
the expectation of a new product given a set of parameters
"""
__tablename__ = 'capability_requests'
id = sa.Column('request_id', sa.Integer, primary_key=True)
id = sa.Column('capability_request_id', sa.Integer, primary_key=True)
state = sa.Column('state', sa.String)
capability = sa.Column(
'capability',
......@@ -233,7 +233,7 @@ class CapabilityRequest(Base, CapabilityRequestIF):
parameters = sa.Column('parameters', sa.String)
# FIXME: This needs to be changed to properly keep track of product locators.
#future_products = sa.Column('future_products', sa.String)
#versions = sa.Column('versions', sa.String)
versions = relationship("CapabilityVersion", back_populates="capability_request")
def update_status(self, status: str):
# TODO: create field in table
......@@ -243,11 +243,28 @@ class CapabilityRequest(Base, CapabilityRequestIF):
return f"CapabilityRequest object: {self.__dict__}"
class CapabilityVersion(Base, CapabilityVersionIF):
"""
Schema representation of a capability version
"""
__tablename__ = 'capability_versions'
capability_request_id = sa.Column('capability_request_id',
sa.Integer,
sa.ForeignKey('capability_requests.capability_request_id'),
primary_key=True)
version_number = sa.Column('version_number',
sa.Integer,
primary_key=True)
capability_request = relationship(CapabilityRequest, back_populates="versions")
executions = relationship("CapabilityExecution", back_populates="capability_version")
class CapabilityExecution(Base, CapabilityExecutionIF):
"""
Schema representation of a capability request's execution record
"""
__tablename__ = 'capability_executions'
id = sa.Column('execution_id', sa.Integer, primary_key=True)
state = sa.Column('state', sa.String)
capability_request = sa.Column(
......@@ -255,7 +272,13 @@ class CapabilityExecution(Base, CapabilityExecutionIF):
sa.Integer,
sa.ForeignKey('capability_requests.capability_request_id')
)
version_number = sa.Column('capability_version_number', sa.Integer)
current_step = sa.Column('current_step', sa.Integer)
capability_version = relationship(CapabilityVersion, back_populates="executions")
__table_args__ = (sa.ForeignKeyConstraint([capability_request, version_number],
[CapabilityVersion.capability_request_id,
CapabilityVersion.version_number]),)
class Workflow(Base):
......
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