Esempio n. 1
0
def test_fakepv():
    pvname = 'fakepv_nowaythisexists' * 10

    info = dict(called=False)

    def conn(**kwargs):
        info['conn'] = True
        info['conn_kw'] = kwargs

    def value_cb(**kwargs):
        info['value'] = True
        info['value_kw'] = kwargs
    cl = get_cl()
    pv = cl.get_pv(pvname, callback=value_cb, connection_callback=conn)

    if not pv.wait_for_connection():
        raise ValueError('should return True on connection')

    assert pv.pvname == pvname

    pv._update_rate = 0.5
    time.sleep(0.2)

    assert info['conn']
    assert info['value']
    assert info['value_kw']['value'] == pv.value
Esempio n. 2
0
def test_fakepv():
    pvname = 'fakepv_nowaythisexists' * 10

    info = dict(called=False)

    def conn(**kwargs):
        info['conn'] = True
        info['conn_kw'] = kwargs

    def value_cb(**kwargs):
        info['value'] = True
        info['value_kw'] = kwargs

    cl = get_cl()
    pv = cl.get_pv(pvname, callback=value_cb, connection_callback=conn)

    if not pv.wait_for_connection():
        raise ValueError('should return True on connection')

    assert pv.pvname == pvname

    pv._update_rate = 0.5
    time.sleep(0.2)

    assert info['conn']
    assert info['value']
    assert info['value_kw']['value'] == pv.value
Esempio n. 3
0
    def move(self, *args, **kwargs):
        status = super(Motor, self).move(*args, **kwargs)

        def statusmonitor_thread():
            thisthread = self._status_threads[-1]
            try:
                while True:
                    time.sleep(.01)
                    # check if within threshold
                    if abs(
                            self.user_readback.get(use_monitor=False) -
                            self.user_setpoint.get()) < .0001:
                        success = True
                        break
            except TimeoutError:
                # logger.debug('automonitor(%r, %s) timed out', self.name)
                success = False
            except Exception as ex:
                # logger.debug('automonitor(%r, %s) failed', self.name, exc_info=ex)
                success = False
            finally:
                status._finished(success=success)
                self._status_threads.remove(thisthread)
                del thisthread

        statusthread = get_cl().thread_class(target=statusmonitor_thread)
        self._status_threads.append(statusthread)
        statusthread.daemon = True
        statusthread.start()
        return status
Esempio n. 4
0
def test_pv_form():
    from ophyd import get_cl
    o_ps = pytest.importorskip('ophyd._pyepics_shim')
    cl = get_cl()
    assert cl.pv_form in ('native', 'time')
    versions = ('3.2.3', '3.2.3rc1', '3.2.3-gABCD', 'unknown')
    for version in versions:
        assert o_ps.get_pv_form(version) in ('native', 'time')
Esempio n. 5
0
 def test_pv_form(self):
     from ophyd import get_cl
     o_ps = pytest.importorskip('ophyd._pyepics_shim')
     cl = get_cl()
     self.assertIn(cl.pv_form, ('native', 'time'))
     versions = ('3.2.3', '3.2.3rc1', '3.2.3-gABCD', 'unknown')
     for version in versions:
         self.assertIn(o_ps.get_pv_form(version), ('native', 'time'))
Esempio n. 6
0
 def test_pv_form(self):
     from ophyd import get_cl
     o_ps = pytest.importorskip('ophyd._pyepics_shim')
     cl = get_cl()
     self.assertIn(cl.pv_form, ('native', 'time'))
     versions = ('3.2.3', '3.2.3rc1', '3.2.3-gABCD', 'unknown')
     for version in versions:
         self.assertIn(o_ps.get_pv_form(version), ('native', 'time'))
Esempio n. 7
0
def test_pvpositioner_with_fake_motor(fake_motor_ioc):
    def callback(sub_type=None, timestamp=None, value=None, **kwargs):
        logger.info('[callback] [%s] (type=%s) value=%s', timestamp, sub_type,
                    value)

    def done_moving(value=0.0, **kwargs):
        logger.info('Done moving %s', kwargs)

    cl = get_cl()
    # ensure we start at 0 for this simple test
    cl.caput(fake_motor_ioc.pvs['setpoint'], 0)
    cl.caput(fake_motor_ioc.pvs['actuate'], 1)
    time.sleep(0.5)

    class MyPositioner(PVPositioner):
        '''Setpoint, readback, no put completion. No done pv.'''
        setpoint = Cpt(EpicsSignal, fake_motor_ioc.pvs['setpoint'])
        readback = Cpt(EpicsSignalRO, fake_motor_ioc.pvs['readback'])
        actuate = Cpt(EpicsSignal, fake_motor_ioc.pvs['actuate'])
        stop_signal = Cpt(EpicsSignal, fake_motor_ioc.pvs['stop'])
        done = Cpt(EpicsSignal, fake_motor_ioc.pvs['moving'])

        actuate_value = 1
        stop_value = 1
        done_value = 0

    pos = MyPositioner('', name='pv_pos_fake_mtr')
    print('fake mtr', pos.describe())
    pos.wait_for_connection()

    pos.subscribe(callback, event_type=pos.SUB_DONE)
    pos.subscribe(callback, event_type=pos.SUB_READBACK)

    logger.info('---- test #1 ----')
    logger.info('--> move to 1')
    pos.move(1, timeout=5)
    assert pos.position == 1
    logger.info('--> move to 0')
    pos.move(0, timeout=5)
    assert pos.position == 0

    logger.info('---- test #2 ----')
    logger.info('--> move to 1')
    pos.move(1, wait=False)
    time.sleep(0.5)
    logger.info('--> stop')
    pos.stop()
    logger.info('--> sleep')
    time.sleep(1)
    logger.info('--> move to 0')
    pos.move(0, wait=False, moved_cb=done_moving)
    logger.info('--> post-move request, moving=%s', pos.moving)
    time.sleep(2)

    pos.read()
    repr(pos)
    str(pos)
Esempio n. 8
0
def test_epicssignal_pv_reuse(cleanup, pvname, count):
    signals = [EpicsSignal(pvname, name='sig') for i in range(count)]

    for sig in signals:
        cleanup.add(sig)
        sig.wait_for_connection()
        assert sig.connected
        assert sig.get() is not None

    if get_cl().name == 'pyepics':
        assert len(set(id(sig._read_pv) for sig in signals)) == 1
Esempio n. 9
0
def test_many_connect(ad_prefix, cleanup):
    import ophyd
    pytest.skipif(
        ophyd.get_cl().name == 'pyepics',
        "This is exposing race conditions in pyepics which "
        "cause segfaults.")
    import gc
    fs = DummyFS()

    class FS_hdf(HDF5Plugin, FileStoreHDF5, FileStoreIterativeWrite):
        pass

    class MyDetector(SingleTrigger, SimDetector):
        hdf1 = Cpt(FS_hdf,
                   'HDF1:',
                   write_path_template='',
                   read_path_template='',
                   root='/',
                   reg=fs)

    try:
        from caproto.threading import client
    except ImportError:
        # caproto unavailable on python 3.5
        pass
    else:
        if client.SEARCH_MAX_DATAGRAM_BYTES > 1450:
            # old caproto compatibility - later versions lower to standardish
            # MTU-levels
            client.SEARCH_MAX_DATAGRAM_BYTES = 1450

    def tester():
        det = MyDetector(ad_prefix, name='det')
        print('made detector')
        try:
            print('*' * 25)
            print('about to murder socket')
            det.cam.acquire._read_pv._caproto_pv.circuit_manager._disconnected(
            )
            print('murdered socket')
            print('*' * 25)
        except AttributeError:
            # must be pyepics
            pass
        det.destroy()
        del det
        gc.collect()

    for j in range(5):
        print(j)
        tester()
Esempio n. 10
0
    def wrapped(*args, **kwargs):
        cl = get_cl()
        get_pv_backup = cl.get_pv

        def _fake_get_pv(pvname,
                         form='time',
                         connect=False,
                         context=False,
                         timout=5.0,
                         **kw):
            return FakeEpicsWaveform(pvname, form=form, **kw)

        cl.get_pv = _fake_get_pv
        try:
            return fcn(*args, **kwargs)
        finally:
            cl.get_pv = get_pv_backup
            _cleanup_fake_pvs()
Esempio n. 11
0
    def test_pvpositioner_with_fake_motor(self):
        def callback(sub_type=None, timestamp=None, value=None, **kwargs):
            logger.info('[callback] [%s] (type=%s) value=%s', timestamp,
                        sub_type, value)

        def done_moving(value=0.0, **kwargs):
            logger.info('Done moving %s', kwargs)
        cl = get_cl()
        # ensure we start at 0 for this simple test
        fm = self.fake_motor
        cl.caput(fm['setpoint'], 0.05)
        time.sleep(0.5)
        cl.caput(fm['actuate'], 1)
        time.sleep(0.5)
        cl.caput(fm['setpoint'], 0)
        time.sleep(0.5)
        cl.caput(fm['actuate'], 1)
        time.sleep(0.5)

        class MyPositioner(PVPositioner):
            '''Setpoint, readback, no put completion. No done pv.'''
            setpoint = C(EpicsSignal, fm['setpoint'])
            readback = C(EpicsSignalRO, fm['readback'])
            actuate = C(EpicsSignal, fm['actuate'])
            stop_signal = C(EpicsSignal, fm['stop'])
            done = C(EpicsSignal, fm['moving'])

            actuate_value = 1
            stop_value = 1
            done_value = 1

        pos = MyPositioner('', name='pv_pos_fake_mtr')
        print('fake mtr', pos.describe())
        pos.wait_for_connection()

        pos.subscribe(callback, event_type=pos.SUB_DONE)
        pos.subscribe(callback, event_type=pos.SUB_READBACK)

        logger.info('---- test #1 ----')
        logger.info('--> move to 1')
        pos.move(1, timeout=5)
        self.assertEqual(pos.position, 1)
        logger.info('--> move to 0')
        pos.move(0, timeout=5)
        self.assertEqual(pos.position, 0)

        logger.info('---- test #2 ----')
        logger.info('--> move to 1')
        pos.move(1, wait=False)
        time.sleep(0.5)
        logger.info('--> stop')
        pos.stop()
        logger.info('--> sleep')
        time.sleep(1)
        logger.info('--> move to 0')
        pos.move(0, wait=False, moved_cb=done_moving)
        logger.info('--> post-move request, moving=%s', pos.moving)
        time.sleep(2)

        pos.read()
        repr(pos)
        str(pos)
Esempio n. 12
0
 def get_dispatcher(self):
     return ophyd.get_cl().get_dispatcher()
Esempio n. 13
0
def get_dispatcher():
    """Get the ophyd-configured dispatcher (pyepics_shim, etc.)."""
    return ophyd.get_cl().get_dispatcher()