def test_get_callback(self): write("Callback test: changing PV must be updated\n") global NEWVALS mypv = PV(pvnames.updating_pv1) NEWVALS = [] def onChanges(pvname=None, value=None, char_value=None, **kw): write('PV %s %s, %s Changed!\n' % (pvname, repr(value), char_value)) NEWVALS.append(repr(value)) mypv.add_callback(onChanges) write('Added a callback. Now wait for changes...\n') t0 = time.time() while time.time() - t0 < 3: time.sleep(1.e-4) write(' saw %i changes.\n' % len(NEWVALS)) assert len(NEWVALS) > 3 mypv.clear_callbacks()
def test_thread_pv(threading_broadcaster): from caproto.threading.client import Context, PV pv1 = "XF:31IDA-OP{Tbl-Ax:X1}Mtr.VAL" # pv2 = "XF:31IDA-OP{Tbl-Ax:X2}Mtr.VAL" # Some user function to call when subscriptions receive data. called = [] def user_callback(*, value, **kwargs): print() print('-- user callback', value) called.append(True) ctx = Context(threading_broadcaster, log_level='DEBUG') ctx.register() time_pv = PV(pv1, context=ctx, form='time') ctrl_pv = PV(pv1, context=ctx, form='ctrl') time_pv.wait_for_connection() time_pv.add_callback(user_callback) print('time read', time_pv.get()) print('ctrl read', ctrl_pv.get()) time_pv.put(3, wait=True) time_pv.put(6, wait=True) time.sleep(0.1) assert time_pv.get() == 6 assert called print('read', time_pv.get()) print('done') repr(time_pv) for k, v in PV.__dict__.items(): if isinstance(v, property): getattr(time_pv, k) getattr(ctrl_pv, k)
def test_waveform_callback_with_count_arg(self): values = [] wf = PV(pvnames.char_arr_pv, count=32) def onChanges(pvname=None, value=None, char_value=None, **kw): write( 'PV %s %s, %s Changed!\n' % (pvname, repr(value), char_value)) values.append( value) wf.add_callback(onChanges) write('Added a callback. Now wait for changes...\n') t0 = time.time() while time.time() - t0 < 3: time.sleep(1.e-4) if len(values)>0: break self.failUnless(len(values) > 0) self.assertEquals(len(values[0]),32) wf.clear_callbacks()