Skip to content

Commit 0b3f7de

Browse files
author
Alan Christie
committed
refactor: DB adapter now API adapter
1 parent 8e4a70c commit 0b3f7de

File tree

7 files changed

+41
-42
lines changed

7 files changed

+41
-42
lines changed

tests/database_adapter.py renamed to tests/api_adapter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import yaml
55

6-
from workflow.workflow_abc import DatabaseAdapter
6+
from workflow.workflow_abc import APIAdapter
77

88
# Load the Unit test Job Definitions file now.
99
_JOB_DEFINITION_FILE: str = os.path.join(
@@ -20,8 +20,8 @@
2020
)
2121

2222

23-
class UnitTestDatabaseAdapter(DatabaseAdapter):
24-
"""A minimal Database adapter. It serves-up Job Definitions
23+
class UnitTestAPIAdapter(APIAdapter):
24+
"""A minimal API adapter. It serves-up Job Definitions
2525
from the job-definitions/job-definitions.yaml file and provides basic
2626
(in-memory) storage for Workflow Definitions and related tables."""
2727

tests/test_test_database_adapter.py renamed to tests/test_test_api_adapter.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
pytestmark = pytest.mark.unit
66

7-
from tests.database_adapter import UnitTestDatabaseAdapter
7+
from tests.api_adapter import UnitTestAPIAdapter
88

99

1010
def test_get_nop_job():
1111
# Arrange
12-
utda = UnitTestDatabaseAdapter()
12+
utaa = UnitTestAPIAdapter()
1313

1414
# Act
15-
jd = utda.get_job(
15+
jd = utaa.get_job(
1616
collection="workflow-engine-unit-test-jobs", job="nop", version="1.0.0"
1717
)
1818

@@ -22,10 +22,10 @@ def test_get_nop_job():
2222

2323
def test_get_unknown_workflow():
2424
# Arrange
25-
utda = UnitTestDatabaseAdapter()
25+
utaa = UnitTestAPIAdapter()
2626

2727
# Act
28-
wfd = utda.get_workflow(
28+
wfd = utaa.get_workflow(
2929
workflow_definition_id="workflow-00000000-0000-0000-0000-000000000001"
3030
)
3131

@@ -35,35 +35,35 @@ def test_get_unknown_workflow():
3535

3636
def test_save_workflow():
3737
# Arrange
38-
utda = UnitTestDatabaseAdapter()
38+
utaa = UnitTestAPIAdapter()
3939

4040
# Act
41-
wfid = utda.save_workflow(workflow_definition={"name": "blah"})
41+
wfid = utaa.save_workflow(workflow_definition={"name": "blah"})
4242

4343
# Assert
4444
assert wfid == {"id": "workflow-00000000-0000-0000-0000-000000000001"}
4545

4646

4747
def test_get_workflow():
4848
# Arrange
49-
utda = UnitTestDatabaseAdapter()
50-
response = utda.save_workflow(workflow_definition={"name": "blah"})
49+
utaa = UnitTestAPIAdapter()
50+
response = utaa.save_workflow(workflow_definition={"name": "blah"})
5151
wfid = response["id"]
5252

5353
# Act
54-
wf = utda.get_workflow(workflow_definition_id=wfid)
54+
wf = utaa.get_workflow(workflow_definition_id=wfid)
5555

5656
# Assert
5757
assert wf["workflow"]["name"] == "blah"
5858

5959

6060
def test_get_workflow_by_name():
6161
# Arrange
62-
utda = UnitTestDatabaseAdapter()
63-
_ = utda.save_workflow(workflow_definition={"name": "blah"})
62+
utaa = UnitTestAPIAdapter()
63+
_ = utaa.save_workflow(workflow_definition={"name": "blah"})
6464

6565
# Act
66-
response = utda.get_workflow_by_name(name="blah", version="1.0.0")
66+
response = utaa.get_workflow_by_name(name="blah", version="1.0.0")
6767

6868
# Assert
6969
assert response["workflow"]["name"] == "blah"

tests/test_worflow_validator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
pytestmark = pytest.mark.unit
66

7-
from tests.database_adapter import UnitTestDatabaseAdapter
7+
from tests.api_adapter import UnitTestAPIAdapter
88
from tests.message_dispatcher import UnitTestMessageDispatcher
99
from tests.message_queue import UnitTestMessageQueue
1010
from tests.test_decoder_minimal import _MINIMAL_WORKFLOW
@@ -15,10 +15,10 @@
1515
def basic_validator():
1616
# A 'basic' unit-test WorkflowAdapter needs a DB adapter and Message Dispatcher.
1717
# For testing outside of the DM the Message Dispatcher also needs a Message Queue
18-
db_adapter = UnitTestDatabaseAdapter()
18+
api_adapter = UnitTestAPIAdapter()
1919
msg_queue = UnitTestMessageQueue()
2020
msg_dispatcher = UnitTestMessageDispatcher(msg_queue=msg_queue)
21-
return WorkflowValidator(db_adapter=db_adapter, msg_dispatcher=msg_dispatcher)
21+
return WorkflowValidator(api_adapter=api_adapter, msg_dispatcher=msg_dispatcher)
2222

2323

2424
def test_validate_minimal_for_create(basic_validator):

tests/test_workflow_engine_with_examples.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from informaticsmatters.protobuf.datamanager.workflow_message_pb2 import WorkflowMessage
1010

11-
from tests.database_adapter import UnitTestDatabaseAdapter
11+
from tests.api_adapter import UnitTestAPIAdapter
1212
from tests.instance_launcher import UnitTestInstanceLauncher
1313
from tests.message_dispatcher import UnitTestMessageDispatcher
1414
from tests.message_queue import UnitTestMessageQueue
@@ -17,16 +17,20 @@
1717

1818
@pytest.fixture
1919
def basic_engine():
20-
utda = UnitTestDatabaseAdapter()
21-
utmq = UnitTestMessageQueue()
22-
utmd = UnitTestMessageDispatcher(msg_queue=utmq)
23-
util = UnitTestInstanceLauncher(msg_dispatcher=utmd)
24-
return [utda, utmd, WorkflowEngine(db_adapter=utda, instance_launcher=util)]
20+
api_adapter = UnitTestAPIAdapter()
21+
message_queue = UnitTestMessageQueue()
22+
message_dispatcher = UnitTestMessageDispatcher(msg_queue=message_queue)
23+
instance_launcher = UnitTestInstanceLauncher(msg_dispatcher=message_dispatcher)
24+
return [
25+
api_adapter,
26+
message_dispatcher,
27+
WorkflowEngine(api_adapter=api_adapter, instance_launcher=instance_launcher),
28+
]
2529

2630

2731
def test_workflow_engine_with_example_1(basic_engine):
2832
# Arrange
29-
da, md, engine = basic_engine
33+
da, md, _ = basic_engine
3034
# LOAD THE EXAMPLE-1 WORKFLOW DEFINITION INTO THE DATABASE
3135
# TODO
3236
# SIMULATE THE API CREATION OF A RUNNING WORKFLOW FROM THE WORKFLOW

workflow/workflow_abc.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,10 @@ def launch(
5555
# the Data Manager will not permit the use of this parameter.
5656

5757

58-
class DatabaseAdapter(ABC):
59-
"""The DatabaseAdapter will not need to provide a save/commit service.
60-
Instead it should be assumed that new database records are the
61-
responsibility of the governing application code. The WE simply has
62-
to implement engine logic and launch instance. The InstanceLauncher
63-
is responsible for creating RunningWorkflow and RunningWorkflowStep
64-
records for example."""
58+
class APIAdapter(ABC):
59+
"""The APIAdapter providing read/write access to the Model. It provides
60+
the ability to create and retrieve Workflow, RunningWorkflow and RunningWorkflowStep
61+
records returning dictionary (API-like) responses."""
6562

6663
@abstractmethod
6764
def save_workflow(

workflow/workflow_engine.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from google.protobuf.message import Message
55

6-
from .workflow_abc import DatabaseAdapter, InstanceLauncher
6+
from .workflow_abc import APIAdapter, InstanceLauncher
77

88

99
class WorkflowEngine:
@@ -15,11 +15,11 @@ class WorkflowEngine:
1515
def __init__(
1616
self,
1717
*,
18-
db_adapter: DatabaseAdapter,
18+
api_adapter: APIAdapter,
1919
instance_launcher: InstanceLauncher,
2020
):
2121
# Keep the dependent objects
22-
self._db_adapter = db_adapter
22+
self._api_adapter = api_adapter
2323
self._instance_launcher = instance_launcher
2424

2525
def handle_message(self, msg: Message) -> None:

workflow/worklfow_validator.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from typing import Any, Dict, List, Optional
77

88
from .decoder import validate_schema
9-
from .workflow_abc import DatabaseAdapter, MessageDispatcher
9+
from .workflow_abc import APIAdapter, MessageDispatcher
1010

1111

1212
class ValidationLevel(Enum):
@@ -52,12 +52,10 @@ class WorkflowValidator:
5252
to check workflow content prior to creation and execution.
5353
"""
5454

55-
def __init__(
56-
self, *, db_adapter: DatabaseAdapter, msg_dispatcher: MessageDispatcher
57-
):
58-
assert db_adapter
55+
def __init__(self, *, api_adapter: APIAdapter, msg_dispatcher: MessageDispatcher):
56+
assert api_adapter
5957

60-
self._db_adapter = db_adapter
58+
self._api_adapter = api_adapter
6159
self._msg_dispatcher = msg_dispatcher
6260

6361
def validate(

0 commit comments

Comments
 (0)