-
Notifications
You must be signed in to change notification settings - Fork 19
Version 1.3.0 Changes
Joel Dixon edited this page Jan 11, 2024
·
3 revisions
- Simplified session management (#386 #389 #402 #426 #429 #432 #433 #436 #438 #440 #442 #446 #466 #469 #480 #481 #482)
- The
MeasurementContextclass now providesreserve_session(s)methods, eliminating the need to explicitly instantiate aSessionManagementClientand passmeasurement_service.context.pin_map_contextto it. Example:with measurement_service.context.reserve_sessions(pin_names) as reservation: ...
- The
reserve_session(s)methods now accept a single pin name in addition to a list of pin names. - The reservation classes now provide
initialize_${driver}_session(s)methods for initializing modular instrument sessions. These methods are designed to be used in awithblock. They yield one or multipleSessionInformationobjects, which now contain a reference to the session object. Example:with reservation.initialize_nidcpower_sessions() as session_infos: for session_info in session_infos: session_info.session.channels[session_info.channel_list].initiate()
- The reservation classes now provide
get_${driver}_connection(s)methods for querying connections between pins and instrument channels. These methods return one or multipleConnectionobjects, which also contain a reference to the instrument session object. Example:vdd_connection = reservation.get_nidcpower_connection("Vdd") measurement = vdd_connection.session.channels[vdd_connection.channel_name].measure_multiple()
- The reservation classes also provide:
-
create_nidaqmx_task(s)andget_nidaqmx_connection(s)methods for NI-DAQmx. - Generic
initialize_session(s)andget_connection(s)methods for custom session types, such as instrument drivers based on VISA.
-
- The new reservation methods have type hints, which enable LSP-enabled text editors such as VS Code and PyCharm to auto-complete references to driver-specific session objects. For example,
reservation.get_nidmm_connection(pin).session.should auto-complete by displaying the methods for thenidmm.Sessionclass. To support these type hints, the new methods use generic protocol classesTypedSessionInformation[TSession]andTypedConnection[TSession]. - The
reservation.session_infoproperty now includes the session object(s) in the returnedSessionInformationobjects, if they have been created. However, clients are encouraged to use the type-safeTypedSessionInformation[TSession]objects returned fromreservation.initialize_${driver}_session(s). - TestStand code modules can also use the new
initialize_${driver}_sessionsmethods. These methods accept an optionalinitialization_behaviorenum parameter, which hasINITIALIZE_SESSION_THEN_DETACHandATTACH_TO_SESSION_THEN_CLOSEenum values designed for this use case. - The example measurements and TestStand code modules have been updated to use the new session management API. As such, most of the examples now require
ni-measurementlink-serviceversion 1.3.0 or later. For example measurements that work with previous versions, use the examples zip file provided with that release on GitHub.
- The
- Configuration via
.envfiles (#421 #425 #441)- You can now configure
ni-measurementlink-servicesettings by setting environment variables or creating a.envfile.- A
.envfile is a text file containing environment variables in the formVAR=value. - The
.envmay be located in the measurement service's current working directory or one of its parent directories. For example, you can place a.envfile in the 'examples' directory of this GitHub repo, in theexamples/nidcpower_source_dc_voltagedirectory, or inC:\ProgramData\National Instruments\MeasurementLinkfor configuring statically registered services. - If the current working directory and its parents do not contain a
.envfile, the search falls back to the script/EXE path (if there is one) or the path of the Python module calling intoni-measurementlink-service(to support TestStand code modules). - Support for parsing the
.envfile is implemented by the 3rd partypython-decouplepackage.
- A
- The modular instrument
initialize_${driver}_sessions(s)methods allow you to use.envsettings to override the IVI option string and specify simulation options. Example:# Add this to your .env file to enable NI-DCPower simulation with PXIe-4141 instruments. MEASUREMENTLINK_NIDCPOWER_SIMULATE=1 MEASUREMENTLINK_NIDCPOWER_BOARD_TYPE=PXIe MEASUREMENTLINK_NIDCPOWER_MODEL=4141 - The example measurements no longer have a hardcoded
USE_SIMULATIONconstant that you must edit to enable/disable simulation. To enable simulation for all example measurements, copy.env.simulationto.envin the 'examples' directory of this Git repo. - The VISA example measurements use
python-decoupledirectly to readMEASUREMENTLINK_VISA_DMM_SIMULATEfrom the.envfile. - There are a few other
.envsettings for overriding the NI gRPC Device Server configuration and enabling feature toggles. For a complete reference, see.env.samplein the 'examples' directory of this Git repo.
- You can now configure
- Configuration settings
- Rename GRPC_DEVICE_SERVER_ADDRESS and change it to a URL (#522)
- Make gRPC extensions public (#545)
- The
GrpcChannelPoolclass is now provided by theni_measurementlink_service.grpc.channelpoolmodule. It is still aliased intoni_measurementlink_service.measurement.servicefor compatibility with existing code. - The
ClientLoggerandServerLoggerinterceptor classes are now provided by theni_measurementlink_service.grpc.loggersmodule.GrpcChannelPoolautomatically adds aClientLoggerandMeasurementServiceautomatically adds aServerLogger, but these helper classes may be useful to clients in other situations.
- The
- Python 3.12 support (#427)
-
ni-measurementlink-serviceis now tested with Python 3.12. - No code changes were required, so previous releases should work with Python 3.12 as well.
-
- Example improvements
- The VISA examples now have a
visa_dmminstrument driver rather than using VISA directly. (#439, #447) - The reservation timeout and instrument type ID parameters have been removed from the examples because the defaults are sufficient. (#393)
- The example TestStand code modules have been split into
teststand_pin_map.py,teststand_nidcpower.py,teststand_nidmm.pyetc. to faciliate reuse and make it easier to mix and match code modules in the same sequence. (#460 #461 #465) - Change DMM range to 10 V for output_voltage_measurement (#496)
- Make examples depend on newly released 1.3.0.dev0 (#497)
- Remove unused methods in _helpers.py.mako (#510)
- Update example TestStand sequences to use the new
Update Pin Mapcustom step (#538 #539 #540 #541 #547 #551 #550 #553)- MeasurementLink 2024Q1 introduces a new TestStand step,
Update Pin Map, which sets the active pin map for the sequence execution. - The
teststand_pin_map.pycode module and related code in_helpers.pyhave been deleted. - The example TestStand sequences now require MeasurementLink 2024 Q1 or later and will not work with older versions.
- Existing TestStand sequences should continue to work with MeasurementLink 2024 Q1 or later.
- MeasurementLink 2024Q1 introduces a new TestStand step,
- Add gRPC support to VISA examples (#525)
- Remove streaming-specific examples (#536)
- Remove
sample_streaming_measurementandui_progress_updatesbecause the Game of Life example demonstrates this feature. - Add cancellation to the Game of Life example.
- Remove
- Remove unused .py files (#562)
- Update readmes for VISA gRPC support and to clarify required software versions (#559)
- Remove GrpcChannelPoolHelper (#558)
- The VISA examples now have a
- Documentation improvements (#430)
- The API reference documentation now includes more accurate type information with hyperlinks.
- The API reference documentation now includes hyperlinks to the documentation for
nimi-python,nidaqmx-python, and the Python standard library.
Note These improvements will not be visible on https://ni.github.io/measurementlink-python/ until version 1.3 is officially released.
- Migrate documentation from GitHub pages to Read the Docs: https://measurementlink-python.readthedocs.io/ (#505 #513)
- Bug fixes
- Some cosmetic issues with example measurement UI panels have been fixed. (#420 #424 #435)
- Copying an example measurement into a separate Git repo no longer causes
ni-python-styleguideto reorder itsimportdirectives. (#374 #443) - ServerCallLogger no longer incorrectly logs OK when the call is canceled. (#370 #462)
- Fixed several APIs that leak internal types. (#375 #394 #396 #437)
- The
DiscoveryClientclass is now publicly available via theni_measurement_service.discoverysub-package. - The
DiscoveryClient.register_measurement_servicemethod has been deprecated in favor of a more generalregister_serviceAPI that supports other service types and registering multiple services. - In several public and internal classes, attributes and properties that should not be public have been deprecated and will be removed in a future release.
- Deprecated attributes, methods, and properties generate deprecation warnings, which are enabled by default for
pytesttests but not for standalone Python scripts.
- The
- In the examples and generator templates,
start.batnow assumes you are using an in-project virtualenv. (#416 #417) - The
DiscoveryClientclass now reads the MeasurementLink installation directories from the Windows registry instead of environment variables, eliminating the need to usepassenvwhen testing with Tox. (#483 ) - DeprecationWarning raised due to Pathlib.Path (#514)
- Fix deserialization of large messages (>= ~30 fields) (#554)
- Development workflow improvements
- We are now using Mend Renovate to update dependencies. (#444 #445 #470 #471)
- We now have a self-hosted GitHub runner for running system tests. (#479)
- The PR workflow now checks for out-of-date gRPC stubs (#546)
- Use full Python version in cache key (#561)
- Add security policy by (#577)
- Tests
- Add integration and acceptance tests for driver specific session management APIs (#490 #503 #506 #504)
- Move .env.simulation to .env in run_system_tests workflow (#499)
- The test-specific gRPC stubs and test measurements have been moved to
tests.utilities.stubs.*andtests.utilities.measurements.*(#548)
- Miscellaneous minor improvements and fixes
Full Changelog: https://github.com/ni/measurementlink-python/compare/1.2.0...1.3.0