wandelbots-nova 3.3.2__tar.gz → 3.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/PKG-INFO +1 -1
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/auth/auth_config.py +2 -4
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/cell/controllers.py +2 -2
- wandelbots_nova-3.3.4/nova/config.py +103 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/gateway.py +11 -14
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/logging.py +3 -4
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/motion_group.py +2 -2
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/nova.py +19 -29
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/events/__init__.py +4 -4
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/extentions/opcua/client.py +2 -2
- wandelbots_nova-3.3.4/nova/logging/__init__.py +14 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/nats/client.py +4 -47
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/runner.py +2 -4
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/pyproject.toml +1 -1
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/api/test_program_registry.py +0 -16
- wandelbots_nova-3.3.2/nova/config.py +0 -23
- wandelbots_nova-3.3.2/nova/logging/__init__.py +0 -19
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/.gitignore +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/LICENSE +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/base.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/container.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/io.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/mock.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/motions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/actions/trajectory_builder.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/api.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/api.pyi +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/auth/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/auth/authorization.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/cell/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/cell/cell.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/cell/robot_cell.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/cell/simulation.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/controller.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/env_handler.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/exceptions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/io.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/movement_controller.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/core/tuner.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/extentions/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/extentions/opcua/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/extentions/opcua/functions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/nats/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/nats/message.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/exceptions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/function.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/store.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/program/utils.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/collision_scene.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/motion_settings.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/pose.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/state.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/types/vector3d.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/utils/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/utils/timestamp.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/version.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/base.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/manager.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/protocol.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/rerun.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova/viewers/utils.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/LICENSE +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/benchmark_base.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/dataset/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/dataset/demo_set.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/dataset/mb_set.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/dataset/mpinets_set.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/datasets.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/log_successful_planning.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/robometrics_helper.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/run_collision_free_benchmark.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/run_collision_free_magma.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/benchmark/run_ptp_benchmark.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/blueprint.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/collision_scene.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/colors.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/consts.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/conversion_helpers.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/dh_robot.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/Welding_Benchmark_USA_01.stl +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/bin_everything_05.ply +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/colliders.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/source.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/tool.stl +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/example_data/yaskawa_ar1440_rif_with_safety_zones.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/collison_world.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/import_ply.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/reachability_check.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/robocore.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/stream_robot.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/use_nova_rerun_bridge.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/visualize_tool.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/wait_action.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/welding_example.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/yaskawa-ar1440-16-mounting.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/examples/yaskawa-ar1440-with-external-axis.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/helper_scripts/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/helper_scripts/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/helper_scripts/code_server_helpers.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/helper_scripts/download_models.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/helper_scripts/plan_with_collisions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/hull_visualizer.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/.gitignore +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/main.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/poetry.toml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/pyproject.toml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/ruff.toml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/minimal_example/uv.lock +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/motion_recorder.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/motion_storage.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/.dockerignore +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/.nova +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/Dockerfile +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/app.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/build.sh +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/data/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/k8s/deployment.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/k8s/ingress.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/k8s/kustomization.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/k8s/namespace.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/nginx.conf +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/nginx.http.conf.template +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/skaffold.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/start.sh +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/nova_rerun_bridge_app/static/app_icon.png +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/polling/populate.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/.dockerignore +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/.nova +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/Dockerfile +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/app.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/build.sh +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/k8s/deployment.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/k8s/ingress.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/k8s/kustomization.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/k8s/namespace.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/nginx.conf +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/nginx.http.conf.template +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/skaffold.yaml +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/start.sh +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/rerun_app/static/app_icon.png +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/robot_visualizer.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/safety_zones.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/stream_state.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/nova_rerun_bridge/trajectory.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/api/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/api/dependencies.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/api/programs.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/config.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/novax.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/novax/program_manager.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/nova_rerun_bridge/test_blueprint.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/nova_rerun_bridge/test_log_motion.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/nova_rerun_bridge/test_nova_rerun_bridge.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/nova_rerun_bridge/test_trajectory.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/api/test_nats.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/api/test_program_cycle.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/api/test_program_run.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/api/test_programs.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/conftest.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/serve.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/tests/novax/test_program_manager.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/vscode-ext/src/nova/readRobotPose.ts +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/vscode-ext/src/nova/selection.ts +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/CHANGELOG.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/README.md +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/__main__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/antlrvisitor.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/array.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/assoc.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/controller.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/fetch.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/fs.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/math.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/pose.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/string.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins/wait.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/builtins.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/cli.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/datatypes.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/and_or.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/and_or.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/array.config +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/array.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/array.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/assignment.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/assignment.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/async_write.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/async_write.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/blending.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/blending.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/bool_negation.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/bool_negation.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/builtins.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/builtins.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/comments.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/comments.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/context.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/context.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/controller.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/controller.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/controller.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/coordinate_systems.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/coordinate_systems.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/default.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/default.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/default.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern_line.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern_line.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern_manhattan.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/edge_pattern_manhattan.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/empty.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/empty.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/expressions.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/expressions.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/fetch.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/fetch.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/find_edge_from_4_poses.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/find_edge_from_4_poses.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame2.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame2.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame3.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame3.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/frame3.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/function.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/function.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/functional_pose.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/functional_pose.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/get_pose.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/get_pose.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/ifelse.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/ifelse.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/interpolation.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/interpolation.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/interrupt.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/interrupt.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/io.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/io.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/loops.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/loops.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move_via_expression.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move_via_expression.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move_with_velocity.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/move_with_velocity.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots2.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots2.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots2.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots3.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots3.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/multiple_robots3.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/not.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/not.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/operator_precedence.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/operator_precedence.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/pose.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/pose.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/poses2.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/poses2.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/print.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/print.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/record.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/record.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/scope.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/scope.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/spline.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/spline.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/switch.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/switch.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tcps.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tcps.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tcps.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tower_of_hanoi.cell.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tower_of_hanoi.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/tower_of_hanoi.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/try.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/try.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/vision_move.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/vision_move.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wait.config +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wait.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wait.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wandelchat2.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wandelchat2.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wandelchat3.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wandelchat3.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/whitespaces.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/whitespaces.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wp393.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wp393.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wp469.json +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples/wp469.ws +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/examples.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/exception.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/ffi.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/ffi_loader.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/frames.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/WandelscriptLexerBase.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptLexer.g4 +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptLexer.interp +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptLexer.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptLexer.tokens +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParser.g4 +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParser.interp +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParser.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParser.tokens +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParserListener.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/grammar/wandelscriptParserVisitor.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/metamodel.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/migration.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/models.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/motions.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/operators.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/runner.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/runtime.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/scripts/generate_parser.sh +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_builtins.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_examples.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_executor.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_ffi.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_migration.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_motion.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_move.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_multirobot.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_parser.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_programs.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_run_twice.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_runner.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_runtime.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_simulation.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_stepwise.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_store.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_two_step_execution.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/tests/test_types.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/utils/__init__.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/utils/pose.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/utils/runtime.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/utils/serializer.py +0 -0
- {wandelbots_nova-3.3.2 → wandelbots_nova-3.3.4}/wandelscript/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wandelbots-nova
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.4
|
|
4
4
|
Summary: Official Python SDK for the Wandelbots Nova
|
|
5
5
|
Author: Wandelbots GmbH
|
|
6
6
|
Author-email: Christoph Biering <christoph.biering@wandelbots.com>, Mahsum Demir <mahsum.demir@wandelbots.com>, Dirk Sonnemann <dirk.sonnemann@wandelbots.com>, Andreas Langenhagen <andreas.langenhagen@wandelbots.com>, Stefan Wagner <stefan.wagner@wandelbots.com>, André Kühnert <andre.kuhnert@wandelbots.com>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from nova.config import NOVA_AUTH0_AUDIENCE, NOVA_AUTH0_CLIENT_ID, NOVA_AUTH0_DOMAIN
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
@dataclass
|
|
@@ -15,9 +15,7 @@ class Auth0Config:
|
|
|
15
15
|
def from_env(cls) -> "Auth0Config":
|
|
16
16
|
"""Create Auth0Config from environment variables"""
|
|
17
17
|
return cls(
|
|
18
|
-
domain=
|
|
19
|
-
client_id=config("NOVA_AUTH0_CLIENT_ID", default="J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2"),
|
|
20
|
-
audience=config("NOVA_AUTH0_AUDIENCE", default="nova-api"),
|
|
18
|
+
domain=NOVA_AUTH0_DOMAIN, client_id=NOVA_AUTH0_CLIENT_ID, audience=NOVA_AUTH0_AUDIENCE
|
|
21
19
|
)
|
|
22
20
|
|
|
23
21
|
def is_complete(self) -> bool:
|
|
@@ -10,10 +10,10 @@ from wandelbots_api_client.models.yaskawa_controller import YaskawaController
|
|
|
10
10
|
from nova import api
|
|
11
11
|
|
|
12
12
|
MANUFACTURER_HOME_POSITIONS = {
|
|
13
|
-
api.models.Manufacturer.ABB: [0.0, 0.0, 0.0, 0.0, pi / 2,
|
|
13
|
+
api.models.Manufacturer.ABB: [0.0, 0.0, 0.0, 0.0, pi / 2, pi, 0.0],
|
|
14
14
|
api.models.Manufacturer.FANUC: [0.0, 0.0, 0.0, 0.0, -pi / 2, 0.0, 0.0],
|
|
15
15
|
api.models.Manufacturer.YASKAWA: [0.0, 0.0, 0.0, 0.0, -pi / 2, 0.0, 0.0],
|
|
16
|
-
api.models.Manufacturer.KUKA: [0.0, -pi / 2, pi / 2, 0.0, pi / 2,
|
|
16
|
+
api.models.Manufacturer.KUKA: [0.0, -pi / 2, pi / 2, 0.0, pi / 2, pi, 0.0],
|
|
17
17
|
api.models.Manufacturer.UNIVERSALROBOTS: [0.0, -pi / 2, -pi / 2, -pi / 2, pi / 2, -pi / 2, 0.0],
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
from urllib.parse import urlparse
|
|
2
|
+
|
|
3
|
+
from decouple import config
|
|
4
|
+
from pydantic import BaseModel, Field, model_validator
|
|
5
|
+
|
|
6
|
+
# Configuration for accessing the Nova platform
|
|
7
|
+
INTERNAL_CLUSTER_NOVA_API = "http://api-gateway.wandelbots.svc.cluster.local:8080"
|
|
8
|
+
NOVA_API = config("NOVA_API", default=INTERNAL_CLUSTER_NOVA_API)
|
|
9
|
+
NOVA_ACCESS_TOKEN = config("NOVA_ACCESS_TOKEN", default=None)
|
|
10
|
+
NOVA_USERNAME = config("NOVA_USERNAME", default=None)
|
|
11
|
+
NOVA_PASSWORD = config("NOVA_PASSWORD", default=None)
|
|
12
|
+
|
|
13
|
+
# Auth0 config
|
|
14
|
+
NOVA_AUTH0_DOMAIN = config("NOVA_AUTH0_DOMAIN", default="#{NOVA_AUTH0_DOMAIN}#")
|
|
15
|
+
NOVA_AUTH0_CLIENT_ID = config("NOVA_AUTH0_CLIENT_ID", default="#{NOVA_AUTH0_CLIENT_ID}#")
|
|
16
|
+
NOVA_AUTH0_AUDIENCE = config("NOVA_AUTH0_AUDIENCE", default="#{NOVA_AUTH0_AUDIENCE}#")
|
|
17
|
+
|
|
18
|
+
# Runtime configuration provided by the environment
|
|
19
|
+
NATS_BROKER = config("NATS_BROKER", default=None)
|
|
20
|
+
CELL_NAME = config("CELL_NAME", default="cell", cast=str)
|
|
21
|
+
BASE_PATH = config("BASE_PATH", default=None)
|
|
22
|
+
K8S_NAMESPACE = config("K8S_NAMESPACE", default="cell")
|
|
23
|
+
|
|
24
|
+
# Log configuration
|
|
25
|
+
LOG_LEVEL: str = config("LOG_LEVEL", default="INFO").upper()
|
|
26
|
+
LOG_FORMAT: str = config("LOG_FORMAT", default="%(asctime)s [%(levelname)s] %(name)s: %(message)s")
|
|
27
|
+
LOG_DATETIME_FORMAT: str = config("LOG_DATETIME_FORMAT", default="%Y-%m-%d %H:%M:%S")
|
|
28
|
+
LOGGER_NAME: str = config("LOGGER_NAME", default="wandelbots-nova")
|
|
29
|
+
|
|
30
|
+
# Feature flags
|
|
31
|
+
ENABLE_TRAJECTORY_TUNING = config("ENABLE_TRAJECTORY_TUNING", cast=bool, default=False)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class NovaConfig(BaseModel):
|
|
35
|
+
"""
|
|
36
|
+
Configuration for connecting to the Nova API.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
host (str | None): The Nova API host.
|
|
40
|
+
access_token (str | None): An access token for the Nova API.
|
|
41
|
+
username (str | None): [Deprecated] Username to authenticate with the Nova API.
|
|
42
|
+
password (str | None): [Deprecated] Password to authenticate with the Nova API.
|
|
43
|
+
version (str): The API version to use (default: "v1").
|
|
44
|
+
verify_ssl (bool): Whether or not to verify SSL certificates (default: True).
|
|
45
|
+
nats_client_config (dict | None): Configuration dictionary for NATS client.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
host: str | None = Field(default=None, description="Nova API host.")
|
|
49
|
+
access_token: str | None = Field(default=None, description="Access token for Nova API.")
|
|
50
|
+
username: str | None = Field(default=None, deprecated=True)
|
|
51
|
+
password: str | None = Field(default=None, deprecated=True)
|
|
52
|
+
verify_ssl: bool = Field(default=True)
|
|
53
|
+
nats_client_config: dict | None = Field(
|
|
54
|
+
default=None,
|
|
55
|
+
description="Client configuration to pass to the nats library. See: https://nats-io.github.io/nats.py/modules.html#nats.aio.client.Client.connect",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
@model_validator(mode="after")
|
|
59
|
+
def _derive_nats_connection_string(self) -> "NovaConfig":
|
|
60
|
+
"""
|
|
61
|
+
Automatically derive the NATS client configuration if not explicitly set.
|
|
62
|
+
"""
|
|
63
|
+
# user has explicitly set the servers
|
|
64
|
+
if self.nats_client_config is not None and "servers" in self.nats_client_config:
|
|
65
|
+
return self
|
|
66
|
+
|
|
67
|
+
self.nats_client_config = self.nats_client_config or {}
|
|
68
|
+
|
|
69
|
+
# there is an environment variable NATS_BROKER set, use that
|
|
70
|
+
if NATS_BROKER:
|
|
71
|
+
self.nats_client_config["servers"] = NATS_BROKER
|
|
72
|
+
return self
|
|
73
|
+
|
|
74
|
+
# there is no host set, cannot derive NATS config
|
|
75
|
+
if not self.host:
|
|
76
|
+
return self
|
|
77
|
+
|
|
78
|
+
parsed_host = urlparse(self.host)
|
|
79
|
+
if parsed_host.scheme == "http":
|
|
80
|
+
self.nats_client_config["servers"] = (
|
|
81
|
+
f"ws://{parsed_host.hostname}:{parsed_host.port or 80}/api/nats"
|
|
82
|
+
)
|
|
83
|
+
return self
|
|
84
|
+
|
|
85
|
+
if parsed_host.scheme == "https" and self.access_token:
|
|
86
|
+
self.nats_client_config["servers"] = (
|
|
87
|
+
f"wss://{self.access_token}@{parsed_host.hostname}:{parsed_host.port or 443}/api/nats"
|
|
88
|
+
)
|
|
89
|
+
return self
|
|
90
|
+
|
|
91
|
+
# for backward compatiblity
|
|
92
|
+
if self.host and self.access_token and not parsed_host.scheme:
|
|
93
|
+
self.nats_client_config["servers"] = (
|
|
94
|
+
f"wss://{self.access_token}@{self.host}:{443}/api/nats"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return self
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# default config to be used by the SDK if no other explict config is provided
|
|
101
|
+
default_config = NovaConfig(
|
|
102
|
+
host=NOVA_API, access_token=NOVA_ACCESS_TOKEN, username=NOVA_USERNAME, password=NOVA_PASSWORD
|
|
103
|
+
)
|
|
@@ -10,11 +10,17 @@ from urllib.parse import quote as original_quote
|
|
|
10
10
|
|
|
11
11
|
import wandelbots_api_client as wb
|
|
12
12
|
import wandelbots_api_client.v2 as v2
|
|
13
|
-
from decouple import config
|
|
14
13
|
|
|
15
14
|
from nova.auth.auth_config import Auth0Config
|
|
16
15
|
from nova.auth.authorization import Auth0DeviceAuthorization
|
|
17
16
|
from nova.cell.robot_cell import ConfigurablePeriphery, Device
|
|
17
|
+
from nova.config import ( # add to the module for backward compatibility
|
|
18
|
+
INTERNAL_CLUSTER_NOVA_API, # noqa: F401
|
|
19
|
+
NOVA_ACCESS_TOKEN,
|
|
20
|
+
NOVA_API,
|
|
21
|
+
NOVA_PASSWORD,
|
|
22
|
+
NOVA_USERNAME,
|
|
23
|
+
)
|
|
18
24
|
from nova.core import logger
|
|
19
25
|
from nova.core.env_handler import set_key
|
|
20
26
|
from nova.core.exceptions import LoadPlanFailed, PlanTrajectoryFailed
|
|
@@ -31,8 +37,6 @@ def _custom_quote_for_ios(param, safe=""):
|
|
|
31
37
|
|
|
32
38
|
T = TypeVar("T")
|
|
33
39
|
|
|
34
|
-
INTERNAL_CLUSTER_NOVA_API = "http://api-gateway.wandelbots.svc.cluster.local:8080"
|
|
35
|
-
|
|
36
40
|
|
|
37
41
|
class ComparisonType(Enum):
|
|
38
42
|
COMPARISON_TYPE_EQUAL = "COMPARISON_TYPE_EQUAL"
|
|
@@ -111,17 +115,10 @@ class ApiGateway:
|
|
|
111
115
|
verify_ssl: bool = True,
|
|
112
116
|
auth0_config: Auth0Config | None = None,
|
|
113
117
|
):
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
username = config("NOVA_USERNAME", default=None)
|
|
119
|
-
|
|
120
|
-
if password is None:
|
|
121
|
-
password = config("NOVA_PASSWORD", default=None)
|
|
122
|
-
|
|
123
|
-
if access_token is None:
|
|
124
|
-
access_token = config("NOVA_ACCESS_TOKEN", default=None)
|
|
118
|
+
host = host or NOVA_API
|
|
119
|
+
access_token = access_token or NOVA_ACCESS_TOKEN
|
|
120
|
+
username = username or NOVA_USERNAME
|
|
121
|
+
password = password or NOVA_PASSWORD
|
|
125
122
|
|
|
126
123
|
self._version = version
|
|
127
124
|
self._verify_ssl = verify_ssl
|
|
@@ -8,16 +8,15 @@ from warnings import warn
|
|
|
8
8
|
|
|
9
9
|
import nova.logging as _new_logging_module
|
|
10
10
|
|
|
11
|
+
# backward compatibility
|
|
12
|
+
from nova.config import LOG_DATETIME_FORMAT, LOG_FORMAT, LOG_LEVEL, LOGGER_NAME # noqa: F401
|
|
13
|
+
|
|
11
14
|
warn(
|
|
12
15
|
"`nova.core.logging` is deprecated and will be removed in a future release; import from `nova.logging` instead.",
|
|
13
16
|
FutureWarning,
|
|
14
17
|
stacklevel=2,
|
|
15
18
|
)
|
|
16
19
|
|
|
17
|
-
LOG_LEVEL = _new_logging_module._LOG_LEVEL
|
|
18
|
-
LOG_FORMAT = _new_logging_module._LOG_FORMAT
|
|
19
|
-
LOG_DATETIME_FORMAT = _new_logging_module._LOG_DATETIME_FORMAT
|
|
20
|
-
LOGGER_NAME = _new_logging_module._LOGGER_NAME
|
|
21
20
|
formatter = _new_logging_module._formatter
|
|
22
21
|
handler = _new_logging_module._handler
|
|
23
22
|
logger = _new_logging_module.logger
|
|
@@ -3,13 +3,13 @@ from functools import partial
|
|
|
3
3
|
from typing import AsyncIterable, cast
|
|
4
4
|
|
|
5
5
|
import wandelbots_api_client as wb
|
|
6
|
-
from decouple import config
|
|
7
6
|
|
|
8
7
|
from nova.actions import Action, CombinedActions, MovementController, MovementControllerContext
|
|
9
8
|
from nova.actions.mock import WaitAction
|
|
10
9
|
from nova.actions.motions import CollisionFreeMotion, Motion
|
|
11
10
|
from nova.api import models
|
|
12
11
|
from nova.cell.robot_cell import AbstractRobot
|
|
12
|
+
from nova.config import ENABLE_TRAJECTORY_TUNING
|
|
13
13
|
from nova.core import logger
|
|
14
14
|
from nova.core.exceptions import InconsistentCollisionScenes
|
|
15
15
|
from nova.core.gateway import ApiGateway
|
|
@@ -374,7 +374,7 @@ class MotionGroup(AbstractRobot):
|
|
|
374
374
|
start_on_io: wb.models.StartOnIO | None = None,
|
|
375
375
|
) -> AsyncIterable[MovementResponse]:
|
|
376
376
|
# This is the entrypoint for the trajectory tuning mode
|
|
377
|
-
if
|
|
377
|
+
if ENABLE_TRAJECTORY_TUNING:
|
|
378
378
|
logger.info("Entering trajectory tuning mode...")
|
|
379
379
|
async for execute_response in self._tune_trajectory(joint_trajectory, tcp, actions):
|
|
380
380
|
yield execute_response
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from decouple import config as env_config
|
|
4
|
-
|
|
5
3
|
from nova.cell.cell import Cell
|
|
6
|
-
|
|
4
|
+
|
|
5
|
+
# backward compatibility
|
|
6
|
+
from nova.config import ( # noqa: F401
|
|
7
|
+
CELL_NAME,
|
|
8
|
+
LOG_LEVEL,
|
|
9
|
+
NOVA_ACCESS_TOKEN,
|
|
10
|
+
NOVA_API,
|
|
11
|
+
NOVA_PASSWORD,
|
|
12
|
+
NOVA_USERNAME,
|
|
13
|
+
NovaConfig,
|
|
14
|
+
default_config,
|
|
15
|
+
)
|
|
7
16
|
from nova.core.gateway import ApiGateway
|
|
8
17
|
from nova.nats import NatsClient
|
|
9
18
|
|
|
10
|
-
LOG_LEVEL = env_config("LOG_LEVEL", default="INFO")
|
|
11
|
-
CELL_NAME = env_config("CELL_NAME", default="cell", cast=str)
|
|
12
|
-
NOVA_API = env_config("NOVA_API", default=None)
|
|
13
|
-
NOVA_ACCESS_TOKEN = env_config("NOVA_ACCESS_TOKEN", default=None)
|
|
14
|
-
NOVA_USERNAME = env_config("NOVA_USERNAME", default=None)
|
|
15
|
-
NOVA_PASSWORD = env_config("NOVA_PASSWORD", default=None)
|
|
16
|
-
|
|
17
19
|
|
|
18
20
|
class Nova:
|
|
19
21
|
"""A high-level Nova client for interacting with robot cells and controllers."""
|
|
@@ -26,27 +28,15 @@ class Nova:
|
|
|
26
28
|
config (NovaConfig | None): The Nova configuration.
|
|
27
29
|
"""
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
host=NOVA_API,
|
|
31
|
-
access_token=NOVA_ACCESS_TOKEN,
|
|
32
|
-
username=NOVA_USERNAME,
|
|
33
|
-
password=NOVA_PASSWORD,
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
self._config = config
|
|
31
|
+
self._config = config or default_config
|
|
37
32
|
self._api_client = ApiGateway(
|
|
38
|
-
host=
|
|
39
|
-
access_token=
|
|
40
|
-
username=
|
|
41
|
-
password=
|
|
42
|
-
verify_ssl=
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
self.nats = NatsClient(
|
|
46
|
-
host=config.host,
|
|
47
|
-
access_token=config.access_token,
|
|
48
|
-
nats_client_config=config.nats_client_config,
|
|
33
|
+
host=self._config.host,
|
|
34
|
+
access_token=self._config.access_token,
|
|
35
|
+
username=self._config.username,
|
|
36
|
+
password=self._config.password,
|
|
37
|
+
verify_ssl=self._config.verify_ssl,
|
|
49
38
|
)
|
|
39
|
+
self.nats = NatsClient(nats_client_config=self._config.nats_client_config)
|
|
50
40
|
|
|
51
41
|
@property
|
|
52
42
|
def config(self) -> NovaConfig:
|
|
@@ -3,19 +3,19 @@ from datetime import datetime, timedelta
|
|
|
3
3
|
from typing import Any, Literal
|
|
4
4
|
from uuid import UUID, uuid4
|
|
5
5
|
|
|
6
|
-
from decouple import config
|
|
7
6
|
from pydantic import BaseModel, Field
|
|
8
7
|
|
|
9
8
|
from nova.cell.cell import Cell
|
|
10
9
|
from nova.cell.robot_cell import Device, OutputDevice
|
|
10
|
+
from nova.config import BASE_PATH
|
|
11
11
|
from nova.logging import logger
|
|
12
12
|
from nova.nats import Message as NatsMessage
|
|
13
13
|
|
|
14
14
|
# Read BASE_PATH environment variable and extract app name
|
|
15
15
|
# TODO: make a util and move the logic there
|
|
16
|
-
|
|
17
|
-
if
|
|
18
|
-
_APP_NAME =
|
|
16
|
+
|
|
17
|
+
if BASE_PATH:
|
|
18
|
+
_APP_NAME = BASE_PATH.split("/")[-1] if "/" in BASE_PATH else None
|
|
19
19
|
else:
|
|
20
20
|
_APP_NAME = None
|
|
21
21
|
|
|
@@ -13,9 +13,9 @@ from asyncua.common import Node
|
|
|
13
13
|
from asyncua.common.subscription import DataChangeNotif, DataChangeNotificationHandlerAsync
|
|
14
14
|
from asyncua.crypto import security_policies
|
|
15
15
|
from asyncua.ua import CreateSubscriptionParameters, DataValue, Variant, VariantType
|
|
16
|
-
from decouple import config
|
|
17
16
|
|
|
18
17
|
from nova import logger
|
|
18
|
+
from nova.config import K8S_NAMESPACE
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class DataChangeSubscription(DataChangeNotificationHandlerAsync):
|
|
@@ -73,7 +73,7 @@ class SubscriptionConfig(pydantic.BaseModel):
|
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
async def fetch_certificate(certificate_path: str, private_key_path: str) -> tuple[bytes, bytes]:
|
|
76
|
-
cell =
|
|
76
|
+
cell = K8S_NAMESPACE
|
|
77
77
|
|
|
78
78
|
cert_url = f"http://api-gateway:8080/api/v1/cells/{cell}/store/objects/{certificate_path}"
|
|
79
79
|
private_key_url = (
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from nova.config import LOG_DATETIME_FORMAT, LOG_FORMAT, LOG_LEVEL, LOGGER_NAME
|
|
5
|
+
|
|
6
|
+
# Setting up the underlying logger
|
|
7
|
+
_formatter: logging.Formatter = logging.Formatter(LOG_FORMAT, datefmt=LOG_DATETIME_FORMAT)
|
|
8
|
+
_handler: logging.StreamHandler = logging.StreamHandler(sys.stdout)
|
|
9
|
+
_handler.setLevel(LOG_LEVEL)
|
|
10
|
+
_handler.setFormatter(_formatter)
|
|
11
|
+
|
|
12
|
+
logger: logging.Logger = logging.getLogger(LOGGER_NAME)
|
|
13
|
+
logger.setLevel(LOG_LEVEL)
|
|
14
|
+
logger.addHandler(_handler)
|
|
@@ -6,7 +6,6 @@ import asyncio
|
|
|
6
6
|
from typing import Awaitable, Callable
|
|
7
7
|
|
|
8
8
|
import nats
|
|
9
|
-
from decouple import config
|
|
10
9
|
from nats.aio.msg import Msg as NatsLibMessage
|
|
11
10
|
|
|
12
11
|
from nova.logging import logger
|
|
@@ -16,70 +15,30 @@ from nova.nats.message import Message
|
|
|
16
15
|
class NatsClient:
|
|
17
16
|
"""NATS client for Nova with connection management and publishing capabilities."""
|
|
18
17
|
|
|
19
|
-
def __init__(
|
|
20
|
-
self,
|
|
21
|
-
host: str | None = None,
|
|
22
|
-
access_token: str | None = None,
|
|
23
|
-
# TODO: accept "broker" parameter so the user can override the connection string
|
|
24
|
-
nats_client_config: dict | None = None,
|
|
25
|
-
):
|
|
18
|
+
def __init__(self, nats_client_config: dict | None = None):
|
|
26
19
|
"""
|
|
27
20
|
Initialize the NATS client.
|
|
28
21
|
|
|
29
22
|
Args:
|
|
30
|
-
host (str | None): The Nova API host.
|
|
31
|
-
access_token (str | None): An access token for authentication.
|
|
32
23
|
nats_client_config (dict | None): Configuration dictionary for NATS client.
|
|
33
24
|
"""
|
|
34
|
-
self._host = host
|
|
35
|
-
self._access_token = access_token
|
|
36
25
|
self._nats_config = nats_client_config or {}
|
|
37
26
|
self._nats_client: nats.NATS | None = None
|
|
38
|
-
self._nats_connection_string: str = ""
|
|
39
27
|
self._connect_lock = asyncio.Lock()
|
|
40
|
-
self._init_nats_client()
|
|
41
|
-
|
|
42
|
-
# TODO: nats connection string is not built correctly when being accessed like below
|
|
43
|
-
# nova.nats -> here we are still dependent on NATS_BROKER env variable
|
|
44
|
-
def _init_nats_client(self) -> None:
|
|
45
|
-
host = self._host
|
|
46
|
-
token = self._access_token
|
|
47
|
-
|
|
48
|
-
self._nats_connection_string = config("NATS_BROKER", default=None)
|
|
49
|
-
|
|
50
|
-
if not self._nats_connection_string and host and token:
|
|
51
|
-
host = host.strip()
|
|
52
|
-
is_http = host.startswith("http://")
|
|
53
|
-
# Remove protocol and trailing slashes
|
|
54
|
-
clean_host = host.replace("https://", "").replace("http://", "").rstrip("/")
|
|
55
|
-
|
|
56
|
-
scheme, port = ("ws", 80) if is_http else ("wss", 443)
|
|
57
|
-
auth = f"{token}@"
|
|
58
|
-
|
|
59
|
-
self._nats_connection_string = f"{scheme}://{auth}{clean_host}:{port}/api/nats"
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
logger.debug("Host and token not both set; reading NATS connection from env var")
|
|
63
|
-
|
|
64
|
-
if not self._nats_connection_string:
|
|
65
|
-
logger.warning("NATS connection string is not set. NATS client will be disabled.")
|
|
66
28
|
|
|
67
29
|
async def connect(self):
|
|
68
30
|
"""Connect to NATS server.
|
|
69
31
|
|
|
70
32
|
Subsequent calls are no-ops while connected.
|
|
71
33
|
"""
|
|
72
|
-
if not self.
|
|
73
|
-
|
|
74
|
-
return
|
|
34
|
+
if "servers" not in self._nats_config:
|
|
35
|
+
raise ValueError("NATS connection is missing.")
|
|
75
36
|
|
|
76
37
|
async with self._connect_lock:
|
|
77
38
|
if self._nats_client is not None:
|
|
78
39
|
return
|
|
79
40
|
|
|
80
|
-
self._nats_client = await nats.connect(
|
|
81
|
-
self._nats_connection_string, **self._nats_config
|
|
82
|
-
)
|
|
41
|
+
self._nats_client = await nats.connect(**self._nats_config)
|
|
83
42
|
logger.debug("NATS client connected successfully")
|
|
84
43
|
|
|
85
44
|
async def close(self):
|
|
@@ -105,8 +64,6 @@ class NatsClient:
|
|
|
105
64
|
Returns:
|
|
106
65
|
bool: True if the NATS client is connected, False otherwise.
|
|
107
66
|
"""
|
|
108
|
-
if not self._nats_connection_string:
|
|
109
|
-
return False
|
|
110
67
|
return self._nats_client is not None and self._nats_client.is_connected
|
|
111
68
|
|
|
112
69
|
async def publish_message(self, message: Message) -> None:
|
|
@@ -16,7 +16,6 @@ from typing import Any, Coroutine, Optional
|
|
|
16
16
|
import anyio
|
|
17
17
|
from anyio import from_thread, to_thread
|
|
18
18
|
from anyio.abc import TaskStatus
|
|
19
|
-
from decouple import config
|
|
20
19
|
from exceptiongroup import ExceptionGroup
|
|
21
20
|
from loguru import logger
|
|
22
21
|
from pydantic import BaseModel, Field, StrictStr
|
|
@@ -25,6 +24,7 @@ from wandelbots_api_client.v2.models import ProgramRunState
|
|
|
25
24
|
|
|
26
25
|
from nova import Nova, NovaConfig, api
|
|
27
26
|
from nova.cell.robot_cell import RobotCell
|
|
27
|
+
from nova.config import CELL_NAME
|
|
28
28
|
from nova.core.exceptions import PlanTrajectoryFailed
|
|
29
29
|
from nova.nats import Message
|
|
30
30
|
from nova.program.exceptions import NotPlannableError
|
|
@@ -33,8 +33,6 @@ from nova.program.utils import Tee, stoppable_run
|
|
|
33
33
|
from nova.types import MotionState
|
|
34
34
|
from nova.utils import timestamp
|
|
35
35
|
|
|
36
|
-
_CELL_NAME = config("CELL_NAME", default="")
|
|
37
|
-
|
|
38
36
|
current_execution_context_var: contextvars.ContextVar = contextvars.ContextVar(
|
|
39
37
|
"current_execution_context_var"
|
|
40
38
|
)
|
|
@@ -112,7 +110,7 @@ class ProgramRunner(ABC):
|
|
|
112
110
|
self._preconditions = program.preconditions
|
|
113
111
|
self._parameters = parameters
|
|
114
112
|
self._robot_cell_override = robot_cell_override
|
|
115
|
-
self._cell_id = cell_id or
|
|
113
|
+
self._cell_id = cell_id or CELL_NAME
|
|
116
114
|
self._app_name = app_name
|
|
117
115
|
self._nova_config = nova_config
|
|
118
116
|
self._program_run: ProgramRun = ProgramRun(
|
|
@@ -132,22 +132,6 @@ async def verify_program_definition_all_sources(
|
|
|
132
132
|
found_program = await get_from_novax(client, decorated_program.program_id)
|
|
133
133
|
assert_program_definition_matches(decorated_program, found_program)
|
|
134
134
|
|
|
135
|
-
# NATS
|
|
136
|
-
all_programs = await get_all_from_nats()
|
|
137
|
-
found_program = filter_programs_by_name(all_programs, decorated_program.program_id, "novax")
|
|
138
|
-
assert_program_definition_matches(decorated_program, found_program)
|
|
139
|
-
|
|
140
|
-
found_program = await get_from_nats(decorated_program.program_id)
|
|
141
|
-
assert_program_definition_matches(decorated_program, found_program)
|
|
142
|
-
|
|
143
|
-
# Discovery Service
|
|
144
|
-
all_programs = await get_all_from_discovery_service()
|
|
145
|
-
found_program = filter_programs_by_name(all_programs, decorated_program.program_id, "novax")
|
|
146
|
-
assert_program_definition_matches(decorated_program, found_program)
|
|
147
|
-
|
|
148
|
-
found_program = await get_from_discovery_service(decorated_program.program_id)
|
|
149
|
-
assert_program_definition_matches(decorated_program, found_program)
|
|
150
|
-
|
|
151
135
|
|
|
152
136
|
@pytest.mark.integration
|
|
153
137
|
@pytest.mark.asyncio
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from pydantic import BaseModel, Field
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class NovaConfig(BaseModel):
|
|
5
|
-
"""
|
|
6
|
-
Configuration for connecting to the Nova API.
|
|
7
|
-
|
|
8
|
-
Args:
|
|
9
|
-
host (str | None): The Nova API host.
|
|
10
|
-
access_token (str | None): An access token for the Nova API.
|
|
11
|
-
username (str | None): [Deprecated] Username to authenticate with the Nova API.
|
|
12
|
-
password (str | None): [Deprecated] Password to authenticate with the Nova API.
|
|
13
|
-
version (str): The API version to use (default: "v1").
|
|
14
|
-
verify_ssl (bool): Whether or not to verify SSL certificates (default: True).
|
|
15
|
-
nats_client_config (dict | None): Configuration dictionary for NATS client.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
host: str | None = Field(default=None, description="Nova API host.")
|
|
19
|
-
access_token: str | None = None
|
|
20
|
-
username: str | None = Field(default=None, deprecated=True)
|
|
21
|
-
password: str | None = Field(default=None, deprecated=True)
|
|
22
|
-
verify_ssl: bool = Field(default=True)
|
|
23
|
-
nats_client_config: dict | None = None
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import sys
|
|
3
|
-
|
|
4
|
-
from decouple import config
|
|
5
|
-
|
|
6
|
-
_LOG_LEVEL: str = config("LOG_LEVEL", default="INFO").upper()
|
|
7
|
-
_LOG_FORMAT: str = config("LOG_FORMAT", default="%(asctime)s [%(levelname)s] %(name)s: %(message)s")
|
|
8
|
-
_LOG_DATETIME_FORMAT: str = config("LOG_DATETIME_FORMAT", default="%Y-%m-%d %H:%M:%S")
|
|
9
|
-
_LOGGER_NAME: str = config("LOGGER_NAME", default="wandelbots-nova")
|
|
10
|
-
|
|
11
|
-
# Setting up the underlying logger
|
|
12
|
-
_formatter: logging.Formatter = logging.Formatter(_LOG_FORMAT, datefmt=_LOG_DATETIME_FORMAT)
|
|
13
|
-
_handler: logging.StreamHandler = logging.StreamHandler(sys.stdout)
|
|
14
|
-
_handler.setLevel(_LOG_LEVEL)
|
|
15
|
-
_handler.setFormatter(_formatter)
|
|
16
|
-
|
|
17
|
-
logger: logging.Logger = logging.getLogger(_LOGGER_NAME)
|
|
18
|
-
logger.setLevel(_LOG_LEVEL)
|
|
19
|
-
logger.addHandler(_handler)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|