def __init__(self, *, fs): self._fs = fs # this assumes a sub-class creates self.zclient and then calls # super() self.frametime_channel = ChannelGeRMFrameTime( value=1, zclient=self.zclient) # limited length, but works! self.filepath_channel = ca.ChannelString( value=b'/tmp/test', string_encoding='latin-1') self.last_file_channel = ca.ChannelString( value=b'null', string_encoding='latin-1') self.count_channel = ca.ChannelInteger(value=0) self.overfill_channel = ca.ChannelInteger(value=0) self.last_frame_channel = ca.ChannelInteger(value=0) self.uid_chip_channel = ca.ChannelString( value=b'null', string_encoding='latin-1') self.uid_chan_channel = ca.ChannelString( value=b'null', string_encoding='latin-1') self.uid_td_channel = ca.ChannelString( value=b'null', string_encoding='latin-1') self.uid_pd_channel = ca.ChannelString( value=b'null', string_encoding='latin-1') self.uid_ts_channel = ca.ChannelString( value=b'null', string_encoding='latin-1')
def curio_server(): caget_pvdb = { 'pi': ca.ChannelDouble(value=3.14, lower_disp_limit=3.13, upper_disp_limit=3.15, lower_alarm_limit=3.12, upper_alarm_limit=3.16, lower_warning_limit=3.11, upper_warning_limit=3.17, lower_ctrl_limit=3.10, upper_ctrl_limit=3.18, precision=5, units='doodles', ), 'enum': ca.ChannelEnum(value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'int': ca.ChannelInteger(value=33, units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'char': ca.ChannelChar(value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'str': ca.ChannelString(value='hello', alarm=str_alarm_status, reported_record_type='caproto'), } async def run_server(): port = find_next_tcp_port(host=SERVER_HOST) print('Server will be on', (SERVER_HOST, port)) ctx = server.Context(SERVER_HOST, port, caget_pvdb, log_level='DEBUG') try: await ctx.run() except Exception as ex: print('Server failed', ex) raise finally: print('Server exiting') return run_server, caget_pvdb
upper_ctrl_limit=3.18, precision=5, units='doodles', ), 'enum': ca.ChannelEnum( value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'int': ca.ChannelInteger( value=33, units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'char': ca.ChannelChar( value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37,
def curio_server(prefix): str_alarm_status = ca.ChannelAlarm( status=ca.AlarmStatus.READ, severity=ca.AlarmSeverity.MINOR_ALARM, alarm_string='alarm string', ) caget_pvdb = { 'pi': ca.ChannelDouble( value=3.14, lower_disp_limit=3.13, upper_disp_limit=3.15, lower_alarm_limit=3.12, upper_alarm_limit=3.16, lower_warning_limit=3.11, upper_warning_limit=3.17, lower_ctrl_limit=3.10, upper_ctrl_limit=3.18, precision=5, units='doodles', ), 'enum': ca.ChannelEnum( value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'int': ca.ChannelInteger( value=33, units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'char': ca.ChannelByte( value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'str': ca.ChannelString(value='hello', alarm=str_alarm_status, reported_record_type='caproto'), } # tack on a unique prefix caget_pvdb = {prefix + key: value for key, value in caget_pvdb.items()} # Hide these imports so that the other fixtures are usable by other # libraries (e.g. ophyd) without the experimental dependencies. import curio import caproto.curio async def _server(pvdb): ctx = caproto.curio.server.Context(pvdb) try: await ctx.run() except caproto.curio.server.ServerExit: logger.info('ServerExit caught; exiting') except Exception as ex: logger.error('Server failed: %s %s', type(ex), ex) raise async def run_server(client, *, pvdb=caget_pvdb): server_task = await curio.spawn(_server, pvdb, daemon=True) try: await client() except caproto.curio.server.ServerExit: ... finally: await server_task.cancel() return run_server, prefix, caget_pvdb
def pvdb_from_server_example(): alarm = ca.ChannelAlarm( status=ca.AlarmStatus.READ, severity=ca.AlarmSeverity.MINOR_ALARM, alarm_string='alarm string', ) pvdb = { 'pi': ca.ChannelDouble( value=3.14, lower_disp_limit=3.13, upper_disp_limit=3.15, lower_alarm_limit=3.12, upper_alarm_limit=3.16, lower_warning_limit=3.11, upper_warning_limit=3.17, lower_ctrl_limit=3.10, upper_ctrl_limit=3.18, precision=5, units='doodles', alarm=alarm, ), 'enum': ca.ChannelEnum( value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'enum2': ca.ChannelEnum( value='bb', enum_strings=['aa', 'bb', 'cc', 'dd'], ), 'int': ca.ChannelInteger( value=96, units='doodles', ), 'char': ca.ChannelByte( value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'bytearray': ca.ChannelByte(value=b'1234567890' * 2), 'chararray': ca.ChannelChar(value=b'1234567890' * 2), 'str': ca.ChannelString(value='hello', string_encoding='latin-1', alarm=alarm), 'str2': ca.ChannelString(value='hello', string_encoding='latin-1', alarm=alarm), 'stra': ca.ChannelString(value=['hello', 'how is it', 'going'], string_encoding='latin-1'), } return pvdb
def test_timestamp_raw_access(): intval = ca.ChannelInteger(value=5) # Try the datetime interface: intval.epics_timestamp.secondsSinceEpoch intval.epics_timestamp.nanoSeconds
def test_timestamp_basic(): intval = ca.ChannelInteger(value=5) # Try the datetime interface: from_dt = intval.epics_timestamp.as_datetime().timestamp() assert abs(from_dt - intval.timestamp) < 1.
def curio_server(prefix): str_alarm_status = ca.ChannelAlarm( status=ca.AlarmStatus.READ, severity=ca.AlarmSeverity.MINOR_ALARM, alarm_string='alarm string', ) caget_pvdb = { 'pi': ca.ChannelDouble( value=3.14, lower_disp_limit=3.13, upper_disp_limit=3.15, lower_alarm_limit=3.12, upper_alarm_limit=3.16, lower_warning_limit=3.11, upper_warning_limit=3.17, lower_ctrl_limit=3.10, upper_ctrl_limit=3.18, precision=5, units='doodles', ), 'enum': ca.ChannelEnum( value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'int': ca.ChannelInteger( value=33, units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'char': ca.ChannelByte( value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37, lower_ctrl_limit=30, upper_ctrl_limit=38, ), 'str': ca.ChannelString(value='hello', alarm=str_alarm_status, reported_record_type='caproto'), } # tack on a unique prefix caget_pvdb = {prefix + key: value for key, value in caget_pvdb.items()} async def _server(pvdb): ctx = caproto.curio.server.Context(pvdb) try: await ctx.run() except caproto.curio.server.ServerExit: logger.info('ServerExit caught; exiting') except Exception as ex: logger.exception('Server failed') raise async def run_server(client, *, pvdb=caget_pvdb): server_task = await curio.spawn(_server, pvdb, daemon=True) try: if hasattr(client, 'wait'): # NOTE: wrapped by threaded_in_curio_wrapper await curio.run_in_thread(client) await client.wait() else: await client() except caproto.curio.server.ServerExit: ... finally: await server_task.cancel() return run_server, prefix, caget_pvdb
lower_warning_limit=3.11, upper_warning_limit=3.17, lower_ctrl_limit=3.10, upper_ctrl_limit=3.18, precision=5, units='doodles', alarm=alarm, ), 'enum': ca.ChannelEnum(value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'enum2': ca.ChannelEnum(value='bb', enum_strings=['aa', 'bb', 'cc', 'dd'], ), 'int': ca.ChannelInteger(value=96, units='doodles', ), 'int2': ca.ChannelInteger(value=96, units='doodles', ), 'int3': ca.ChannelInteger(value=96, units='doodles', ), 'char': ca.ChannelByte(value=b'3', units='poodles', lower_disp_limit=33, upper_disp_limit=35, lower_alarm_limit=32, upper_alarm_limit=36, lower_warning_limit=31, upper_warning_limit=37,
units="doodles", alarm=alarm, ), "enum": ca.ChannelEnum( value="b", enum_strings=["a", "b", "c", "d"], ), "enum2": ca.ChannelEnum( value="bb", enum_strings=["aa", "bb", "cc", "dd"], ), "int": ca.ChannelInteger( value=96, units="doodles", ), "int2": ca.ChannelInteger( value=96, units="doodles", ), "int3": ca.ChannelInteger( value=96, units="doodles", ), "char": ca.ChannelByte( value=b"3", units="poodles",
units='doodles', alarm=alarm, ), 'enum': ca.ChannelEnum( value='b', enum_strings=['a', 'b', 'c', 'd'], ), 'enum2': ca.ChannelEnum( value='bb', enum_strings=['aa', 'bb', 'cc', 'dd'], ), 'int': ca.ChannelInteger( value=96, units='doodles', ), 'int2': ca.ChannelInteger( value=96, units='doodles', ), 'int3': ca.ChannelInteger( value=96, units='doodles', ), 'char': ca.ChannelByte( value=b'3', units='poodles',