Migration Guide V1.2.0
Changes to the Python module structure
With the growing number of classes and methods added to ifm3dpy, putting everything into the main module was beginning to get confusing and might be overwhelming to new users, therefore the Python module was split up into submodules akin to the C++ structure.
The existing classes have been moved according to the following table:
Old Location |
New Location |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The old locations are now deprecated and will be fully removed in the future.
Users should update their code to use the new locations.
A future version of ifm3dpy will remove the deprecated locations.
Naming changes to SWUpdater Python bindings
For our Python bindings we generally use snake_case for method names, however the bindings for the SWUpdater used PascalCase. To align the SWUpdater with the rest of ifm3dpy the methods have been renamed to be snake_case too.
User will need to update their code accordingly, please see the following table for a list of changed names.
Old Name |
New Name |
|---|---|
|
|
|
|
|
|
|
|
|
|
Changes to ifm3d::json
Note: The following only applies to the C++ interface, for Python no changes are needed.
We have been delivering a copy of nlohmann::json with ifm3d as part of the device module, this allowed users to easily and conveniently access the JSON formatted data without having to worry about parsing the output manually.
However this approach lead to problems when users already were using nlohmann::json in their codebases and tried to integrate ifm3d.
To solve this problem we completely moved the implementation to the ifm3d namespace so our version doesn’t interfere with any user supplied JSON library.
Migration should be fairly easy, just fully qualify the namespace, e.g.:
json j = o3r->Get();
becomes:
ifm3d::json j = o3r->Get();
Additionally to use the user-defined string literals operator""_json and operator""_json_pointer they have to be imported from the namespace
using namespace ifm3d::literals;
ifm3d::json j = "[1,2,3]"_json;
Note: By default nlohmann::json currently places it’s operator""_json and operator""_json_pointer into the global namespace, so this would lead to ambiguity errors, to solve this nlohmann can be configured to place them into the nlohmann namespace by defining #define JSON_USE_GLOBAL_UDLS 0 before including it (see the nlohmann::json doc for more details).
For details on using ifm3d::json and nlohmann::json together please take a look at the C++ documentation for ifm3d::json.