GithubHelp home page GithubHelp logo

Comments (7)

marcoskirsch avatar marcoskirsch commented on September 4, 2024 1

I see, I misread the code.

However bool (as documented) is right.
Returning int is wrong, we don't use magic int values in the Python API. A property like this would be bool if possible, its own enum type if not.

from nimi-python.

Arkh42 avatar Arkh42 commented on September 4, 2024 1

It happens.
Thanks for considering it again. :)

from nimi-python.

Arkh42 avatar Arkh42 commented on September 4, 2024 1

Here is a list of the properties that are documented as bool but are in fact int in Python:

  • autorange
  • current_limit_autorange
  • current_level_autorange
  • voltage_limit_autorange
  • voltage_level_autorange

EDIT: I tested all of them in a similar fashion as the above test script provided when I opened the issue.

from nimi-python.

marcoskirsch avatar marcoskirsch commented on September 4, 2024

Hello,

In the code documentation, most of the "autorange"-related parameter are described as bool, which is wrong.
The correct type is int.

Looking at the nidcpower.Session code, I see that the type of property autorange is bool, which matches documentation.

You may be thinking bool is wrong because the NI-DCPower C API defines the attribute as ViInt32. But while our Python and C APIs are very close matches, they do deviate in small specific ways enabled by the nature of the Python language. This is an example of that. Please check our Python API Design Guidelines for more detail.

Thanks for the feedback!

from nimi-python.

Arkh42 avatar Arkh42 commented on September 4, 2024

Hello,

I do not think that bool is wrong because of the C API, but because Python tells me so. (See the pytest code example.)

The first link that you provided, which refers to nidcpower._SessionBase in the session module, proves that the documentation is wrong, as Python sees the returned type as an int.

from nimi-python.

marcoskirsch avatar marcoskirsch commented on September 4, 2024

most of the "autorange"-related parameter are described as bool, which is wrong.

Were there other properties in the API that seem wrong?

from nimi-python.

ni-jfitzger avatar ni-jfitzger commented on September 4, 2024

Based on what @marcoskirsch has told me, we should have done something like this with an enum for each of these properties:

    'IsolationState': {
        'codegen_method': 'private',
        'converted_value_to_enum_function_name': 'convert_to_isolation_state_enum',
        'enum_to_converted_value_function_name': 'convert_from_isolation_state_enum',
        'values': [
            {
                'converts_to_value': True,
                'documentation': {
                    'description': 'The channel is disconnected from chassis ground.'
                },
                'name': 'NIDCPOWER_VAL_ISOLATED',
                'value': 1128
            },
            {
                'converts_to_value': False,
                'documentation': {
                    'description': 'The channel is connected to chassis ground.'
                },
                'name': 'NIDCPOWER_VAL_NON_ISOLATED',
                'value': 1129
            }
        ]
    },

Key points:

  • Have a private enum that we convert to/from (in some or all cases that enum doesn't exist, even privately, for the Python API, I think, but does for the C API)
  • For that enum:
    • define converted_value_to_enum_function_name
    • define enum_to_converted_value_function_name
    • define converts_to_value for each value

Before we make a change like this, we need to think through the implications and do some testing to confirm it's not a breaking change.

from nimi-python.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.