nimi-python icon indicating copy to clipboard operation
nimi-python copied to clipboard

Repeated capability accessors return internal `_SessionBase` type

Open bkeryan opened this issue 2 years ago • 2 comments

Description of issue

Repeated capability accessors like Session.channels and Session.instruments return a _SessionBase object. Clients that pass channel objects around may need to refer to this type in PEP 484 type hints.

Example: https://github.com/ni/measurementlink-python/blob/9bffe48c1c2da4777eeca0ca159b74bde724ead6/examples/output_voltage_measurement/measurement.py#L177

def _wait_for_source_complete_event(
    measurement_service: nims.MeasurementService,
    channels: nidcpower._SessionBase,
    cancellation_event: threading.Event,
) -> None: ...

The convention recommended in PEP8 and used by most Python code is that names with a single leading underscore are for internal use.

In general, public APIs ought to use public types.

System report

Not applicable.

Steps to reproduce issue

  1. Write a function that accepts a channel object (such as the linked example).
  2. Write PEP 484 type hints for this function.

bkeryan avatar Sep 22 '23 21:09 bkeryan

BTW, providing public type aliases for Channel, Instrument, Pin, Site, etc. would be a relatively easy solution.

Channel = _SessionBase
Instrument = _SessionBase
...

bkeryan avatar Sep 22 '23 21:09 bkeryan

Note that _SessionBase is in nidcpower.session and not aliased into nidcpower, so the example code above is incorrect.

bkeryan avatar Sep 22 '23 21:09 bkeryan