Esempio n. 1
0
def prepare_locals(args):
    from malcolm.core import Process
    from malcolm.yamlutil import make_include_creator

    if args.yaml:
        proc_name = os.path.basename(args.yaml).split(".")[-2]
        proc = Process(proc_name)
        controllers, parts = make_include_creator(args.yaml)()
        assert not parts, "%s defines parts" % (args.yaml, )
        for controller in controllers:
            proc.add_controller(controller)
        proc_name = "%s - imalcolm" % proc_name
    else:
        proc = Process("Process")
        proc_name = "imalcolm"
    # set terminal title
    sys.stdout.write("\x1b]0;%s\x07" % proc_name)

    if args.client:
        if args.client.startswith("ws://"):
            from malcolm.modules.web.controllers import WebsocketClientComms
            hostname, port = args.client[5:].split(":")
            comms = WebsocketClientComms(mri="%s:%s" % (hostname, port),
                                         hostname=hostname,
                                         port=int(port))
        elif args.client == "pva":
            from malcolm.modules.pva.controllers import PvaClientComms
            comms = PvaClientComms(mri="pva")
        else:
            raise ValueError("Don't know how to create client to %s" %
                             args.client)
        proc.add_controller(comms)
    proc.start(timeout=60)
    return proc
Esempio n. 2
0
 def setUp(self):
     self.process = Process("proc")
     for controller in motion_block(
             mri="TESTMOTION",
             config_dir="/tmp") + pva_server_block(mri="PVA-SERVER"):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in pva_client_block(mri="PVA-CLIENT") + proxy_block(
             mri="TESTMOTION", comms="PVA-CLIENT"):
         self.process2.add_controller(controller)
     self.process2.start()
Esempio n. 3
0
 def setUp(self):
     self.process = Process("proc")
     for controller in \
             ticker_block(mri="TICKER", config_dir="/tmp") + \
             pva_server_block(mri="PVA-SERVER"):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in \
             pva_client_block(mri="PVA-CLIENT") + \
             proxy_block(mri="TICKER", comms="PVA-CLIENT"):
         self.process2.add_controller(controller)
     self.process2.start()
Esempio n. 4
0
 def setUp(self):
     self.process = Process("proc")
     for controller in detector_block(
             mri="TESTDET",
             config_dir="/tmp") + pva_server_block(mri="PVA-SERVER"):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in pva_client_block(mri="PVA-CLIENT") + proxy_block(
             mri="TESTDET", comms="PVA-CLIENT"):
         self.process2.add_controller(controller)
     self.process2.start()
     self.tmpdir = tempfile.mkdtemp()
Esempio n. 5
0
 def setUp(self):
     self.process = Process("proc")
     self.hello = call_with_params(hello_block, self.process, mri="hello")
     self.counter = call_with_params(
         counter_block, self.process, mri="counter")
     self.server = call_with_params(
         web_server_block, self.process, mri="server", port=self.socket)
     self.process.start()
     self.process2 = Process("proc2")
     self.client = call_with_params(
         websocket_client_block, self.process2, mri="client",
         port=self.socket)
     self.process2.start()
 def setUp(self):
     self.process = Process("proc")
     for controller in (hello_block(mri="hello") +
                        counter_block(mri="counter") +
                        web_server_block(mri="server", port=self.socket)):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in (
             websocket_client_block(mri="client", port=self.socket) +
             proxy_block(mri="hello", comms="client") +
             proxy_block(mri="counter", comms="client")):
         self.process2.add_controller(controller)
     self.process2.start()
 def setUp(self):
     self.sf = SyncFactory("sync")
     self.process = Process("proc", self.sf)
     DefaultController("hello",
                       self.process,
                       parts=dict(hello=HelloPart(self.process, None)))
     DefaultController("counter",
                       self.process,
                       parts=dict(counter=CounterPart(self.process, None)))
     WebsocketServerComms(self.process, dict(port=self.socket))
     self.process.start()
     self.process2 = Process("proc2", self.sf)
     WebsocketClientComms(self.process2,
                          dict(hostname="localhost", port=self.socket))
     self.process2.start()
Esempio n. 8
0
 def setUp(self):
     sf = SyncFactory("sync")
     self.process = Process("proc", sf)
     Hello(self.process, dict(mri="hello"))
     Counter(self.process, dict(mri="counter"))
     self.process.add_comms(
         WebsocketServerComms(self.process, dict(port=self.socket)))
     self.process.start()
     # If we don't wait long enough, sometimes the websocket_connect()
     # in process2 will hang...
     time.sleep(0.1)
     self.process2 = Process("proc2", sf)
     self.process2.add_comms(
         WebsocketClientComms(self.process2,
                              dict(hostname="localhost", port=self.socket)))
     self.process2.start()
    def setUp(self):
        self.process = Process("Process")
        self.context = Context(self.process)
        self.child = self.create_child_block(odin_writer_block,
                                             self.process,
                                             mri="mri",
                                             prefix="prefix")
        self.mock_when_value_matches(self.child)
        # set up some values for OdinData PVs that Excalibur would have
        settings = {
            "imageHeight": 1536,
            "imageWidth": 1048,
            "blockSize": 1,
            "numProcesses": 4,
            "dataType": "uint16",
        }
        self.set_attributes(self.child, **settings)
        self.o = OdinWriterPart(name="m", mri="mri")
        self.context.set_notify_dispatch_request(
            self.o.notify_dispatch_request)
        self.process.start()

        self.completed_steps = 0
        # goal for these is 3000, 2000, True
        cols, rows, alternate = 3000, 2000, False
        self.steps_to_do = cols * rows
        xs = LineGenerator("x", "mm", 0.0, 0.5, cols, alternate=alternate)
        ys = LineGenerator("y", "mm", 0.0, 0.1, rows)
        self.generator = CompoundGenerator([ys, xs], [], [], 0.1)
        self.generator.prepare()
Esempio n. 10
0
 def setUp(self):
     self.process = Process("proc")
     self.hello = call_with_params(hello_block, self.process, mri="hello")
     self.server = call_with_params(
         web_server_block, self.process, mri="server", port=self.socket)
     self.result = Queue()
     self.process.start()
    def setUp(self):
        self.p = Process('process1')
        self.context = Context(self.p)

        # Make a ticker_block block to act as our child
        for c in ticker_block(mri="childBlock", config_dir="/tmp"):
            self.p.add_controller(c)
        self.b_child = self.context.block_view("childBlock")

        # Make an empty part for our parent
        part1 = Part("part1")

        # Make a RunnableChildPart to control the ticker_block
        part2 = RunnableChildPart(mri='childBlock',
                                  name='part2',
                                  initial_visibility=True)

        # create a root block for the RunnableController block to reside in
        self.c = RunnableController(mri='mainBlock', config_dir="/tmp")
        self.c.add_part(part1)
        self.c.add_part(part2)
        self.p.add_controller(self.c)
        self.b = self.context.block_view("mainBlock")
        self.ss = self.c.state_set

        # start the process off
        self.checkState(self.ss.DISABLED)
        self.p.start()
        self.checkState(self.ss.READY)
Esempio n. 12
0
    def setUp(self):
        self.p = Process('process1', SyncFactory('threading'))

        # create a child ManagerController block
        params = ManagerController.MethodMeta. \
            prepare_input_map(mri='childBlock', configDir="/tmp")
        self.c_child = ManagerController(self.p, [], params)
        self.b_child = self.c_child.block

        self.sm = self.c_child.stateMachine

        params = Part.MethodMeta.prepare_input_map(name='part1')
        part1 = Part(self.p, params)
        params = {'name': 'part2', 'mri': 'childBlock'}
        params = ChildPart.MethodMeta.prepare_input_map(**params)
        part2 = ChildPart(self.p, params)

        # create a root block for the ManagerController block to reside in
        parts = [part1, part2]
        params = ManagerController.MethodMeta.prepare_input_map(
            mri='mainBlock', configDir="/tmp")
        self.c = ManagerController(self.p, parts, params)
        self.b = self.c.block

        # check that do_initial_reset works asynchronously
        self.p.start()

        # wait until block is Ready
        task = Task("block_ready_task", self.p)
        task.when_matches(self.b["state"], self.sm.READY, timeout=1)

        self.checkState(self.sm.READY)
Esempio n. 13
0
 def setUp(self):
     self.p = Process("proc")
     for c in detector_block("mri", config_dir="/tmp"):
         self.p.add_controller(c)
     self.p.start()
     self.b = self.p.block_view("mri")
     self.tmpdir = tempfile.mkdtemp()
Esempio n. 14
0
 def test_caput_status_pv_message(self, catools):
     p = self.create_part(
         dict(
             name="mname",
             description="desc",
             pv="pv",
             status_pv="spv",
             good_status="All Good",
             message_pv="mpv",
         )
     )
     catools.caget.return_value = [caint(4)]
     c = StatefulController("mri")
     c.add_part(p)
     proc = Process("proc")
     proc.add_controller(c)
     proc.start()
     self.addCleanup(proc.stop)
     b = proc.block_view("mri")
     self.make_camonitor_return(catools, "No Good")
     catools.caget.return_value = "Bad things happened"
     with self.assertRaises(AssertionError) as cm:
         b.mname()
     assert (
         str(cm.exception) == "Status No Good: Bad things happened: "
         "while performing 'caput pv 1'"
     )
Esempio n. 15
0
 def setUp(self):
     self.process = Process("Process")
     self.context = Context(self.process)
     self.child = self.create_child_block(stats_plugin_block,
                                          self.process,
                                          mri="BLOCK:STAT",
                                          prefix="prefix")
Esempio n. 16
0
 def setUp(self):
     self.p = Process("process1")
     self.context = Context(self.p)
     self.c1 = RunnableController(mri="SYS", config_dir="/tmp")
     self.tmp_dir = f"/tmp/{now}-{os.getpid()}"
     os.mkdir(self.tmp_dir)
     os.mkdir(self.tmp_dir + "/configure")
Esempio n. 17
0
    def setUp(self):
        self.process = Process("Process")
        self.context = Context(self.process)
        pmac_block = make_block_creator(__file__,
                                        "test_pmac_manager_block.yaml")
        self.child = self.create_child_block(pmac_block,
                                             self.process,
                                             mri_prefix="PMAC",
                                             config_dir="/tmp")
        # These are the child blocks we are interested in
        self.child_x = self.process.get_controller("BL45P-ML-STAGE-01:X")
        # self.child_y = self.process.get_controller(
        #    "BL45P-ML-STAGE-01:Y")
        self.child_cs1 = self.process.get_controller("PMAC:CS1")
        self.child_traj = self.process.get_controller("PMAC:TRAJ")
        self.child_status = self.process.get_controller("PMAC:STATUS")

        # CS1 needs to have the right port otherwise we will error
        self.set_attributes(self.child_cs1, port="CS1")
        self.o = BeamSelectorPart(
            name="beamSelector",
            mri="PMAC",
            selectorAxis="x",
            tomoAngle=0,
            diffAngle=0.5,
            moveTime=0.5,
        )
        self.context.set_notify_dispatch_request(
            self.o.notify_dispatch_request)
        self.process.start()

        pass
Esempio n. 18
0
    def setUp(self):
        self.maxDiff = 5000

        self.p = Process('process1', SyncFactory('threading'))

        # Make a ticker block to act as our child
        params = Ticker.MethodMeta.prepare_input_map(mri="childBlock",
                                                     configDir="/tmp")
        self.b_child = Ticker(self.p, params)[-1]

        # Make an empty part for our parent
        params = Part.MethodMeta.prepare_input_map(name='part1')
        part1 = Part(self.p, params)

        # Make a RunnableChildPart to control the ticker
        params = RunnableChildPart.MethodMeta.prepare_input_map(
            mri='childBlock', name='part2')
        part2 = RunnableChildPart(self.p, params)

        # create a root block for the RunnableController block to reside in
        params = RunnableController.MethodMeta.prepare_input_map(
            mri='mainBlock', configDir="/tmp")
        self.c = RunnableController(self.p, [part1, part2], params)
        self.b = self.c.block
        self.sm = self.c.stateMachine

        # start the process off
        self.p.start()

        # wait until block is Ready
        task = Task("block_ready_task", self.p)
        task.when_matches(self.b["state"], self.sm.IDLE, timeout=1)

        self.checkState(self.sm.IDLE)
Esempio n. 19
0
 def setUp(self):
     self.process = Process("proc")
     self.comms = MagicMock()
     self.comms.mri = "comms"
     self.process.add_controller(self.comms)
     self.o = ProxyController(mri="mri", comms="comms")
     self.process.add_controller(self.o)
Esempio n. 20
0
    def setUp(self):
        self.p = Process('process1')
        self.context = Context(self.p)

        # Make a fast child
        c1 = call_with_params(RunnableController, self.p,
                              [WaitingPart("p", 0.01)],
                              mri="fast", configDir="/tmp")
        self.p.add_controller("fast", c1)

        # And a slow one
        c2 = call_with_params(RunnableController,  self.p,
                              [WaitingPart("p", 1.0)],
                              mri="slow", configDir="/tmp")
        self.p.add_controller("slow", c2)

        # And a top level one
        p1 = call_with_params(RunnableChildPart, name="FAST", mri="fast")
        p2 = call_with_params(RunnableChildPart, name="SLOW", mri="slow")
        c3 = call_with_params(RunnableController, self.p, [p1, p2],
                              mri="top", configDir="/tmp")
        self.p.add_controller("top", c3)
        self.b = self.context.block_view("top")
        self.bf = self.context.block_view("fast")
        self.bs = self.context.block_view("slow")

        # start the process off
        self.p.start()
 def setUp(self):
     self.sf = SyncFactory("sync")
     self.process = Process("proc", self.sf)
     part = HelloPart(self.process, None)
     DefaultController("hello", self.process, parts={"hello": part})
     WebsocketServerComms(self.process, dict(port=self.socket))
     self.process.start()
Esempio n. 22
0
    def setUp(self):
        self.p = Process('process1')

        # create a child to client
        self.c_part = MyPart("cp1")
        self.c_child = call_with_params(StatefulController,
                                        self.p, [self.c_part],
                                        mri="childBlock")
        self.p.add_controller("childBlock", self.c_child)

        part1 = MyPart("part1")
        part2 = call_with_params(ChildPart, name='part2', mri='childBlock')

        # create a root block for the ManagerController block to reside in
        parts = [part1, part2]
        self.c = call_with_params(ManagerController,
                                  self.p,
                                  parts,
                                  mri='mainBlock',
                                  configDir="/tmp")
        self.p.add_controller("mainBlock", self.c)

        # check that do_initial_reset works asynchronously
        assert self.c.state.value == "Disabled"
        self.p.start()
        assert self.c.state.value == "Ready"
Esempio n. 23
0
    def setUp(self):
        self.p = Process('process1', SyncFactory('threading'))

        self.p1, self.c1 = self.makeChildBlock('child1')
        self.p2, self.c2 = self.makeChildBlock('child2')
        self.p3, self.c3 = self.makeChildBlock('child3')

        # create a root block for the child blocks to reside in
        parts = [self.p1, self.p2, self.p3]
        params = RunnableController.MethodMeta.prepare_input_map(
            mri='mainBlock', configDir="/tmp")
        self.c = RunnableController(self.p, parts, params)
        self.b = self.c.block

        params = ChildPart.MethodMeta.prepare_input_map(mri='mainBlock',
                                                        name='mainPart')
        self.part = ChildPart(self.p, params)

        # Get the parent block into idle state
        self.p.start()

        # wait until block is Ready
        task = Task("block_ready_task", self.p)
        task.when_matches(self.c.block["state"], sm.IDLE, timeout=1)

        self.checkState(sm.IDLE)
Esempio n. 24
0
 def setUp(self):
     self.process = Process("proc")
     self.part = MyPart("test_part")
     self.o = Controller("mri")
     self.o.add_part(self.part)
     self.process.add_controller(self.o)
     self.process.start()
Esempio n. 25
0
 def setUp(self):
     self.p = Process("proc")
     c = BasicController("mri")
     c.add_part(CounterPart(name='counting'))
     self.p.add_controller(c)
     self.p.start()
     self.b = self.p.block_view("mri")
    def setUp(self):
        self.p = Process('process1')
        self.context = Context(self.p)

        # Make a ticker_block block to act as our child
        self.c_child = call_with_params(ticker_block,
                                        self.p,
                                        mri="childBlock",
                                        configDir="/tmp")
        self.b_child = self.context.block_view("childBlock")

        # Make an empty part for our parent
        part1 = Part("part1")

        # Make a RunnableChildPart to control the ticker_block
        part2 = call_with_params(RunnableChildPart,
                                 mri='childBlock',
                                 name='part2')

        # create a root block for the RunnableController block to reside in
        self.c = call_with_params(RunnableController,
                                  self.p, [part1, part2],
                                  mri='mainBlock',
                                  configDir="/tmp",
                                  axesToMove=["x"])
        self.p.add_controller('mainBlock', self.c)
        self.b = self.context.block_view("mainBlock")
        self.ss = self.c.stateSet

        # start the process off
        self.checkState(self.ss.DISABLED)
        self.p.start()
        self.checkState(self.ss.READY)
Esempio n. 27
0
 def setUp(self):
     self.config_dir = tmp_dir("config_dir")
     self.process = Process("proc")
     self.o = ProcessController("MyMRI", self.prefix, self.config_dir.value)
     self.process.add_controller(self.o)
     self.process.start()
     self.b = self.process.block_view("MyMRI")
 def setUp(self):
     self.process = Process("proc")
     self.o = RawMotorSinkPortsPart("PV:PRE")
     c = StatefulController("mri")
     c.add_part(self.o)
     self.process.add_controller(c)
     self.b = self.process.block_view("mri")
     self.addCleanup(self.process.stop)
Esempio n. 29
0
 def setUp(self):
     self.process = Process("proc")
     self.o = call_with_params(MQTTServerComms,
                               self.process, (),
                               mri="mri",
                               block="block",
                               attribute="attribute",
                               topic_prefix="prefix")
Esempio n. 30
0
 def setUp(self):
     self.process = Process("proc")
     self.part = MyPart("test_part")
     self.controller = Controller("mri")
     self.controller.add_part(self.part)
     self.process.add_controller(self.controller)
     self.block = self.controller.block_view()
     self.process.start()