isar 1.33.3__tar.gz → 1.33.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.
Potentially problematic release.
This version of isar might be problematic. Click here for more details.
- {isar-1.33.3 → isar-1.33.4}/PKG-INFO +1 -1
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/mqtt_client.py +9 -9
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/uploader.py +15 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/PKG-INFO +1 -1
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/SOURCES.txt +1 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/storage/test_uploader.py +32 -1
- isar-1.33.4/tests/test_double/blob_storage.py +41 -0
- isar-1.33.4/tests/test_double/mqtt_client.py +37 -0
- isar-1.33.3/tests/test_double/blob_storage.py +0 -20
- {isar-1.33.3 → isar-1.33.4}/.dockerignore +0 -0
- {isar-1.33.3 → isar-1.33.4}/.env.test +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/release.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/workflows/compile_requirements.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/workflows/project_automations.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/workflows/pythonpackage.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/workflows/pythonpublish.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.github/workflows/stale.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/.gitignore +0 -0
- {isar-1.33.3 → isar-1.33.4}/.pre-commit-config.yaml +0 -0
- {isar-1.33.3 → isar-1.33.4}/LICENSE +0 -0
- {isar-1.33.3 → isar-1.33.4}/README.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/SECURITY.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/Makefile +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/full_state_machine_diagram.png +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/make.bat +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/mission_state_machine_diagram.png +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/robot_status_state_machine_diagram.png +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/rst_processing.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/source/conf.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/source/index.rst +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/source/readme_link.md +0 -0
- {isar-1.33.3 → isar-1.33.4}/docs/update_state_diagram.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/main.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/pyproject.toml +0 -0
- {isar-1.33.3 → isar-1.33.4}/radixconfig.yml +0 -0
- {isar-1.33.3 → isar-1.33.4}/requirements.txt +0 -0
- {isar-1.33.3 → isar-1.33.4}/setup.cfg +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/api.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/models/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/models/models.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/models/start_mission_definition.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/robot_control/robot_controller.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/schedule/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/schedule/scheduling_controller.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/security/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/apis/security/authentication.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/certs/ca-cert.pem +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/configuration_error.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/keyvault/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/keyvault/keyvault_error.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/keyvault/keyvault_service.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/log.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/logging.conf +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/default_map.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/klab_b.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/klab_compressor.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/klab_turtlebot.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/maps/turtleworld.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/open_telemetry.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_missions/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_missions/default.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/config/settings.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/eventhandlers/eventhandler.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/mission_planner/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/mission_planner/local_planner.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/mission_planner/mission_planner_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/mission_planner/sequential_task_selector.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/mission_planner/task_selector_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/models/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/models/events.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/modules.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/robot/robot.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/robot/robot_start_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/robot/robot_status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/robot/robot_stop_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/robot/robot_task_status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/script.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/auth/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/auth/azure_credentials.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/request_handler.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/utilities/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/utilities/robot_utilities.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/utilities/scheduling_utilities.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/services/utilities/threaded_request.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/state_machine.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/await_next_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/blocked_protective_stop.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/home.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/intervention_needed.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/monitor.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/offline.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/paused.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/recharging.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/return_home_paused.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/returning_home.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/stopping.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/stopping_return_home.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states/unknown_status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/states_enum.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/fail_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/finish_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/pause.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/resume.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/return_home.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/robot_status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/start_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/stop.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/functions/utils.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/return_home.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/transitions/robot_status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/state_machine/utils/common_event_handlers.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/blob_storage.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/local_storage.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/storage_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar/storage/utilities.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/dependency_links.txt +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/entry_points.txt +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/requires.txt +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/isar.egg-info/top_level.txt +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/exceptions/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/initialize/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/inspection/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/inspection/inspection.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/mission/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/mission/mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/mission/status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/mission/task.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/robots/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/robots/battery_state.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/robots/media.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/models/robots/robot_model.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/robot_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/telemetry/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/telemetry/mqtt_client.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/telemetry/payloads.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/test_robot_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/utilities/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/utilities/json_service.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/conftest.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/config/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/config/missions/default.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/integration/turtlebot/test_successful_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/models/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/models/example_mission_definition.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/scheduler/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/security/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/apis/security/test_authentication.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/mission/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/mission/test_mission.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/models/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/models/communication/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/models/communication/test_events.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/readers/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/readers/test_mission_reader.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/service_connections/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/service_connections/echo/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/utilities/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/state_machine/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/state_machine/states/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/state_machine/states/test_monitor.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/state_machine/test_state_machine.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/isar/storage/test_blob_storage.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_data/test_map_config/test_map_config.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_data/test_mission_not_working.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_data/test_mission_working.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_data/test_mission_working_no_tasks.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_data/test_thermal_image_mission.json +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/__init__.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/mission_definition.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/pose.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/request.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/robot_interface.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/status.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/task.py +0 -0
- {isar-1.33.3 → isar-1.33.4}/tests/test_double/token.py +0 -0
|
@@ -106,15 +106,15 @@ class MqttClient(MqttClientInterface):
|
|
|
106
106
|
)
|
|
107
107
|
|
|
108
108
|
def on_connect(self, client, userdata, flags, reason_code, properties):
|
|
109
|
-
self.logger.info(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
)
|
|
109
|
+
self.logger.info(f"Connected: {reason_code}")
|
|
110
|
+
|
|
111
|
+
def on_disconnect(self, client, userdata, *args):
|
|
112
|
+
if not args:
|
|
113
|
+
return
|
|
114
|
+
reason_code = args[0] if len(args) < 3 else args[1]
|
|
115
|
+
rc = getattr(reason_code, "value", reason_code)
|
|
116
|
+
if rc != 0:
|
|
117
|
+
self.logger.warning(f"Unexpected disconnect: {reason_code}.")
|
|
118
118
|
|
|
119
119
|
@backoff.on_exception(
|
|
120
120
|
backoff.expo,
|
|
@@ -29,6 +29,14 @@ from robot_interface.telemetry.payloads import (
|
|
|
29
29
|
from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
def has_empty_blob_storage_path(storage_paths: StoragePaths):
|
|
33
|
+
for path in (storage_paths.data_path, storage_paths.metadata_path):
|
|
34
|
+
for value in (path.storage_account, path.blob_container, path.blob_name):
|
|
35
|
+
if not (value and value.strip()):
|
|
36
|
+
return True
|
|
37
|
+
return False
|
|
38
|
+
|
|
39
|
+
|
|
32
40
|
@dataclass
|
|
33
41
|
class UploaderQueueItem:
|
|
34
42
|
inspection: Inspection
|
|
@@ -192,6 +200,13 @@ class Uploader:
|
|
|
192
200
|
inspection_paths = self._upload(item)
|
|
193
201
|
if isinstance(inspection_paths.data_path, LocalStoragePath):
|
|
194
202
|
self.logger.info("Skipping publishing when using local storage")
|
|
203
|
+
elif isinstance(
|
|
204
|
+
inspection_paths.data_path, BlobStoragePath
|
|
205
|
+
) and has_empty_blob_storage_path(inspection_paths):
|
|
206
|
+
self.logger.warning(
|
|
207
|
+
"Skipping publishing: Blob storage paths are empty for inspection %s",
|
|
208
|
+
str(item.inspection.id)[:8],
|
|
209
|
+
)
|
|
195
210
|
else:
|
|
196
211
|
self._publish_inspection_result(
|
|
197
212
|
inspection=item.inspection,
|
|
@@ -204,6 +204,7 @@ tests/test_data/test_map_config/test_map_config.json
|
|
|
204
204
|
tests/test_double/__init__.py
|
|
205
205
|
tests/test_double/blob_storage.py
|
|
206
206
|
tests/test_double/mission_definition.py
|
|
207
|
+
tests/test_double/mqtt_client.py
|
|
207
208
|
tests/test_double/pose.py
|
|
208
209
|
tests/test_double/request.py
|
|
209
210
|
tests/test_double/robot_interface.py
|
|
@@ -14,7 +14,8 @@ from robot_interface.models.inspection.inspection import (
|
|
|
14
14
|
from robot_interface.models.mission.mission import Mission
|
|
15
15
|
from robot_interface.models.mission.task import TakeImage
|
|
16
16
|
from tests.isar.state_machine.test_state_machine import UploaderThreadMock
|
|
17
|
-
from tests.test_double.blob_storage import StorageFake
|
|
17
|
+
from tests.test_double.blob_storage import StorageEmptyBlobPathsFake, StorageFake
|
|
18
|
+
from tests.test_double.mqtt_client import MqttPublisherFake
|
|
18
19
|
|
|
19
20
|
MISSION_ID = "some-mission-id"
|
|
20
21
|
ARBITRARY_IMAGE_METADATA = ImageMetadata(
|
|
@@ -85,3 +86,33 @@ def test_should_retry_failed_upload_from_queue(
|
|
|
85
86
|
|
|
86
87
|
# After some time, it should have retried and now it should be successful
|
|
87
88
|
assert storage_handler.blob_exists(inspection)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def test_should_not_publish_when_blob_paths_are_empty(
|
|
92
|
+
container: ApplicationContainer, uploader_thread: UploaderThreadMock
|
|
93
|
+
) -> None:
|
|
94
|
+
uploader_thread.start()
|
|
95
|
+
|
|
96
|
+
mission: Mission = Mission(name="Dummy mission")
|
|
97
|
+
inspection: Inspection = InspectionBlob(
|
|
98
|
+
metadata=ARBITRARY_IMAGE_METADATA, id="blob-empty"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
uploader: Uploader = container.uploader()
|
|
102
|
+
|
|
103
|
+
storage_handler: StorageEmptyBlobPathsFake() = StorageEmptyBlobPathsFake() # type: ignore
|
|
104
|
+
uploader.storage_handlers[0] = storage_handler
|
|
105
|
+
|
|
106
|
+
mqtt_fake = MqttPublisherFake()
|
|
107
|
+
uploader.mqtt_publisher = mqtt_fake
|
|
108
|
+
|
|
109
|
+
message: Tuple[Inspection, Mission] = (
|
|
110
|
+
inspection,
|
|
111
|
+
mission,
|
|
112
|
+
)
|
|
113
|
+
uploader.upload_queue.put(message)
|
|
114
|
+
time.sleep(1)
|
|
115
|
+
|
|
116
|
+
assert inspection in storage_handler.stored
|
|
117
|
+
|
|
118
|
+
assert len(mqtt_fake.published) == 0
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from isar.storage.storage_interface import (
|
|
4
|
+
BlobStoragePath,
|
|
5
|
+
StorageException,
|
|
6
|
+
StorageInterface,
|
|
7
|
+
StoragePaths,
|
|
8
|
+
)
|
|
9
|
+
from robot_interface.models.inspection.inspection import Inspection, InspectionBlob
|
|
10
|
+
from robot_interface.models.mission.mission import Mission
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class StorageFake(StorageInterface):
|
|
14
|
+
will_fail: bool = False
|
|
15
|
+
|
|
16
|
+
def __init__(self) -> None:
|
|
17
|
+
self.stored_inspections: List[Inspection] = []
|
|
18
|
+
|
|
19
|
+
def store(self, inspection: Inspection, mission: Mission):
|
|
20
|
+
if self.will_fail:
|
|
21
|
+
raise StorageException("Fake failed on purpose")
|
|
22
|
+
self.stored_inspections.append(inspection)
|
|
23
|
+
|
|
24
|
+
def blob_exists(self, inspection: Inspection) -> bool:
|
|
25
|
+
return inspection in self.stored_inspections
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class StorageEmptyBlobPathsFake(StorageInterface):
|
|
29
|
+
|
|
30
|
+
def __init__(self) -> None:
|
|
31
|
+
self.stored: List[Inspection] = []
|
|
32
|
+
self.fail: bool = False
|
|
33
|
+
|
|
34
|
+
def store(
|
|
35
|
+
self, inspection: InspectionBlob, mission: Mission
|
|
36
|
+
) -> StoragePaths[BlobStoragePath]:
|
|
37
|
+
if self.fail:
|
|
38
|
+
raise StorageException("fail on purpose")
|
|
39
|
+
self.stored.append(inspection)
|
|
40
|
+
empty = BlobStoragePath(storage_account="", blob_container="", blob_name="")
|
|
41
|
+
return StoragePaths(data_path=empty, metadata_path=empty)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from threading import Lock
|
|
2
|
+
from typing import Any, Dict, List, Optional
|
|
3
|
+
|
|
4
|
+
from robot_interface.telemetry.mqtt_client import MqttClientInterface
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class MqttPublisherFake(MqttClientInterface):
|
|
8
|
+
def __init__(self) -> None:
|
|
9
|
+
self._lock = Lock()
|
|
10
|
+
self.published: List[Dict[str, Any]] = []
|
|
11
|
+
|
|
12
|
+
def publish(
|
|
13
|
+
self,
|
|
14
|
+
topic: str,
|
|
15
|
+
payload: str,
|
|
16
|
+
qos: int = 0,
|
|
17
|
+
retain: bool = False,
|
|
18
|
+
properties: Optional[Any] = None,
|
|
19
|
+
) -> None:
|
|
20
|
+
with self._lock:
|
|
21
|
+
self.published.append(
|
|
22
|
+
{
|
|
23
|
+
"topic": topic,
|
|
24
|
+
"payload": payload,
|
|
25
|
+
"qos": qos,
|
|
26
|
+
"retain": retain,
|
|
27
|
+
"properties": properties,
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
def last(self) -> Optional[Dict[str, Any]]:
|
|
32
|
+
with self._lock:
|
|
33
|
+
return self.published[-1] if self.published else None
|
|
34
|
+
|
|
35
|
+
def count(self) -> int:
|
|
36
|
+
with self._lock:
|
|
37
|
+
return len(self.published)
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from isar.storage.storage_interface import StorageException, StorageInterface
|
|
4
|
-
from robot_interface.models.inspection.inspection import Inspection
|
|
5
|
-
from robot_interface.models.mission.mission import Mission
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class StorageFake(StorageInterface):
|
|
9
|
-
will_fail: bool = False
|
|
10
|
-
|
|
11
|
-
def __init__(self) -> None:
|
|
12
|
-
self.stored_inspections: List[Inspection] = []
|
|
13
|
-
|
|
14
|
-
def store(self, inspection: Inspection, mission: Mission):
|
|
15
|
-
if self.will_fail:
|
|
16
|
-
raise StorageException("Fake failed on purpose")
|
|
17
|
-
self.stored_inspections.append(inspection)
|
|
18
|
-
|
|
19
|
-
def blob_exists(self, inspection: Inspection) -> bool:
|
|
20
|
-
return inspection in self.stored_inspections
|
|
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
|
|
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
|
{isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/default_mission.json
RENAMED
|
File without changes
|
{isar-1.33.3 → isar-1.33.4}/src/isar/config/predefined_mission_definition/default_turtlebot.json
RENAMED
|
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
|
{isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py
RENAMED
|
File without changes
|
{isar-1.33.3 → isar-1.33.4}/src/isar/services/service_connections/mqtt/robot_info_publisher.py
RENAMED
|
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
|
|
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
|
|
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
|
|
File without changes
|
{isar-1.33.3 → isar-1.33.4}/tests/isar/services/service_connections/test_base_request_handler.py
RENAMED
|
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
|