Skip to content

Commit

Permalink
Merge pull request #119 from dls-controls/hello_part
Browse files Browse the repository at this point in the history
Replace HelloController with HelloPart
  • Loading branch information
coretl committed Aug 11, 2016
2 parents 87d4e50 + 436bf59 commit 3120f05
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 23 deletions.
3 changes: 2 additions & 1 deletion malcolm/assemblies/demo/hello.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
- controllers.HelloController:
- parts.demo.HelloPart:
name: Hello_Part
5 changes: 4 additions & 1 deletion malcolm/assemblyutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,9 @@ def call_with_map(ob, name, d, *args):
for n in split:
ob = getattr(ob, n)

if d and "name" not in ob.MethodMeta.takes.elements and "name" in d:
d = dict(d)
d.pop("name")
params = ob.MethodMeta.prepare_input_map(d)
args += (params,)
return ob(*args)
return ob(*args)
6 changes: 6 additions & 0 deletions malcolm/parts/demo/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# make the import path nice
from malcolm.packageutil import import_methodmeta_decorated_classes

__all__ = import_methodmeta_decorated_classes(globals(), __name__)

del import_methodmeta_decorated_classes
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from malcolm.core import method_takes, method_returns, REQUIRED
from malcolm.core import Part, method_takes, method_returns, REQUIRED
from malcolm.core.vmetas import StringMeta
from malcolm.controllers.defaultcontroller import DefaultController


@method_takes()
class HelloController(DefaultController):
class HelloPart(Part):
@method_takes("name", StringMeta(description="a name"), REQUIRED)
@method_returns("greeting", StringMeta(description="a greeting"), REQUIRED)
def say_hello(self, parameters, return_map):
Expand Down
9 changes: 6 additions & 3 deletions tests/test_comms/test_websocket/test_system_websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@


# module imports
from malcolm.controllers import HelloController, ClientController
from malcolm.controllers import DefaultController, ClientController
from malcolm.core import Process, SyncFactory, Task
from malcolm.comms.websocket import WebsocketServerComms, WebsocketClientComms
from malcolm.parts.demo import HelloPart


class TestSystemWSCommsServerOnly(unittest.TestCase):
Expand All @@ -28,7 +29,8 @@ class TestSystemWSCommsServerOnly(unittest.TestCase):
def setUp(self):
self.sf = SyncFactory("sync")
self.process = Process("proc", self.sf)
HelloController("hello", self.process)
part = HelloPart(self.process, None)
DefaultController("hello", self.process, parts={"hello":part})
self.sc = WebsocketServerComms("sc", self.process, self.socket)
self.process.start()
self.sc.start()
Expand Down Expand Up @@ -71,7 +73,8 @@ class TestSystemWSCommsServerAndClient(unittest.TestCase):
def setUp(self):
self.sf = SyncFactory("sync")
self.process = Process("proc", self.sf)
HelloController("hello", self.process)
part = HelloPart(self.process, None)
DefaultController("hello", self.process, parts={"hello":part})
self.sc = WebsocketServerComms("sc", self.process, self.socket)
self.process.start()
self.sc.start()
Expand Down
8 changes: 6 additions & 2 deletions tests/test_controllers/test_clientcontroller.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,21 @@
# logging.basicConfig(level=logging.DEBUG)

# module imports
from malcolm.controllers import ClientController, HelloController
from malcolm.controllers import ClientController, DefaultController
from malcolm.core import Attribute
from malcolm.core.vmetas import StringMeta
from malcolm.compat import queue
from malcolm.parts.demo import HelloPart


class TestClientController(unittest.TestCase):

def setUp(self):
p = MagicMock()
part = HelloPart(p, None)
# Serialized version of the block we want
source = HelloController("blockname", MagicMock()).block
source = DefaultController(
"blockname", p, parts={"hello":part}).block
self.serialized = source.to_dict()
# Setup client controller prerequisites
self.p = MagicMock()
Expand Down
17 changes: 10 additions & 7 deletions tests/test_core/test_system_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,32 @@
# logging.basicConfig(level=logging.DEBUG)

# module imports
from malcolm.controllers.hellocontroller import HelloController
from malcolm.controllers.countercontroller import CounterController
from malcolm.controllers import CounterController, DefaultController
from malcolm.core.attribute import Attribute
from malcolm.core.block import Block
from malcolm.core.process import Process
from malcolm.core.syncfactory import SyncFactory
from malcolm.core.request import Post, Subscribe
from malcolm.core.response import Return, Update
from malcolm.core.task import Task
from malcolm.parts.demo.hellopart import HelloPart


class TestHelloControllerSystem(unittest.TestCase):
class TestHelloDemoSystem(unittest.TestCase):

def test_hello_controller_good_input(self):
block = HelloController("hello", MagicMock()).block
def test_hello_good_input(self):
p = MagicMock()
part = HelloPart(p, None)
block = DefaultController("hello", p, parts={"hello":part}).block
block.reset()
result = block.say_hello(name="me")
self.assertEquals(result.greeting, "Hello me")

def test_hello_controller_with_process(self):
def test_hello_with_process(self):
sync_factory = SyncFactory("sched")
process = Process("proc", sync_factory)
b = HelloController("hello", process).block
part = HelloPart(process, None)
b = DefaultController("hello", process, parts={"hello":part}).block
process.start()
# wait until block is Ready
task = Task("task", process)
Expand Down
7 changes: 5 additions & 2 deletions tests/test_gui/test_blockmodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
# module imports
from malcolm.gui.blockmodel import BlockModel, BlockItem
from malcolm.core.block import Block
from malcolm.controllers.hellocontroller import HelloController
from malcolm.controllers import DefaultController
from malcolm.parts.demo import HelloPart


class TestBlockModel(unittest.TestCase):
def setUp(self):
self.process = MagicMock()
self.block = HelloController("hello", self.process).block
part = HelloPart(self.process, None)
self.block = DefaultController(
"hello", self.process, parts={"hello":part}).block
self.block.name = "hello"
self.m = BlockModel(self.process, self.block)

Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
import setup_malcolm_paths

import unittest
from mock import Mock, MagicMock

from malcolm.controllers.hellocontroller import HelloController
from malcolm.parts.demo.hellopart import HelloPart


class TestHelloController(unittest.TestCase):
class TestHelloPart(unittest.TestCase):

def setUp(self):
self.block = Mock()
self.c = HelloController('block', MagicMock())
self.c = HelloPart('block', MagicMock())

def test_say_hello(self):
expected = "Hello test_name"
Expand Down

0 comments on commit 3120f05

Please sign in to comment.