dsf-python 3.5.1rc1__tar.gz → 3.6.0b2__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.
- {dsf_python-3.5.1rc1/src/dsf_python.egg-info → dsf_python-3.6.0b2}/PKG-INFO +2 -2
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/README.md +1 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/setup.py +1 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code.py +4 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code_interception.py +1 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/files.py +4 -3
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/generic.py +10 -10
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/http_endpoints.py +5 -5
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/object_model.py +3 -3
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/packages.py +2 -2
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/plugins.py +6 -6
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/user_sessions.py +4 -4
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/init_messages/client_init_messages.py +9 -9
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/input_shaping.py +2 -2
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/probe_type.py +3 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/spindles/spindles.py +29 -27
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2/src/dsf_python.egg-info}/PKG-INFO +2 -2
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_custom_m_codes.py +6 -6
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_object_model.py +1 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_subscribe_object_model.py +1 -1
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/LICENSE +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/MANIFEST.in +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/pyproject.toml +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/setup.cfg +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/base_command.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code_channel.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code_flags.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code_parameter.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/code_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/condition_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/model_subscription.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/commands/responses.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/base_command_connection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/base_connection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/command_connection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/exceptions.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/init_messages/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/init_messages/server_init_message.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/intercept_connection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/subscribe_connection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/exceptions.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/http.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/accelerometer.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/board_closed_loop.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/boards.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/direct_display.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/direct_display_controller.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/direct_display_encoder.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/direct_display_screen.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/direct_display_screen_st7567.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/driver.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/driver_closed_loop.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/inductive_sensor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/min_max_current.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/directories/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/directories/directories.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/fans/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/fans/fan_thermostatic_control.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/fans/fans.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/heat.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/heater.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/heater_model.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/heater_model_pid.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/heat/heater_monitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/compatibility.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/distance_unit.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/input_channel.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/input_channel_state.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/inputs/inputs.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/build.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/build_object.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/gcode_fileinfo.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/job.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/layer.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/thumbnail_info.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/job/times_left.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/led_strips/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/led_strips/led_strip.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/limits/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/limits/limits.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/messages/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/messages/messages.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/model_collection.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/model_dictionary.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/model_object.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/axis.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/current_move.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/driver_id.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/extruder.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/extruder_non_linear.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/keepout_zone.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/core_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/delta_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/delta_tower.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/hangprinter_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/kinematics_name.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/polar_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/scara_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/tilt_correction.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/kinematics/zleadscrew_kinematics.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/microstepping.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/motors_idle_control.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_calibration.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_compensation.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_deviations.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_queue_item.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_rotation.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/move_segmentation.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/probe_grid.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/move/skew.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/network.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/network_interface.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/network_interface_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/network_protocol.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/network/network_state.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/object_model.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/plugins/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/plugins/plugin_manifest.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/plugins/plugins.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/plugins/sbc_permissions.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/cpu.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/dsf.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/http_endpoint.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/http_endpoint_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/user_sessions/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/user_sessions/access_level.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/user_sessions/session_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/dsf/user_sessions/user_sessions.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/memory.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sbc/sbc.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/analog_sensor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/analog_sensor_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/endstop.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/endstop_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/Duet3DFilamentMonitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_enable_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_status.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_type.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/laser_filament_monitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/pulsed_filament_monitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/filament_monitors/rotating_magnet_filament_monitor.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/gp_input_port.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/probe.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/sensors.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/sensors/temperature_error.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/spindles/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/spindles/spindle_state.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/beep_request.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/gp_output_port.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/log_level.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/machine_mode.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/machine_status.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/message_box.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/restore_point.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/startup_error.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/state/state.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/tools/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/tools/tool_retraction.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/tools/tool_state.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/tools/tools.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/utils.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/volumes/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/volumes/volumes.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/utility/__init__.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/utils.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf_python.egg-info/SOURCES.txt +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf_python.egg-info/dependency_links.txt +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf_python.egg-info/requires.txt +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf_python.egg-info/top_level.txt +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_code.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_custom_http_endpoint.py +0 -0
- {dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/tests/test_send_simple_code.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dsf-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.6.0b2
|
|
4
4
|
Summary: Python interface to access DuetSoftwareFramework
|
|
5
5
|
Home-page: https://github.com/Duet3D/dsf-python
|
|
6
6
|
Author: Duet3D Ltd.
|
|
@@ -36,7 +36,7 @@ This is also availabe as a [pip package on pypi](https://pypi.org/project/dsf-py
|
|
|
36
36
|
|
|
37
37
|
Find out more about [Duet Software Framework](https://github.com/Duet3D/DuetSoftwareFramework).
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Examples of the [Duet Software Framework Python Bindings](https://github.com/Duet3D/dsf-python/tree/main/examples).
|
|
40
40
|
|
|
41
41
|
Get in touch with the community at [Duet Software Framework Forum](https://forum.duet3d.com/category/31/dsf-development) for bug reports, discussion and any kind of exchange.
|
|
42
42
|
|
|
@@ -4,7 +4,7 @@ This is also availabe as a [pip package on pypi](https://pypi.org/project/dsf-py
|
|
|
4
4
|
|
|
5
5
|
Find out more about [Duet Software Framework](https://github.com/Duet3D/DuetSoftwareFramework).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Examples of the [Duet Software Framework Python Bindings](https://github.com/Duet3D/dsf-python/tree/main/examples).
|
|
8
8
|
|
|
9
9
|
Get in touch with the community at [Duet Software Framework Forum](https://forum.duet3d.com/category/31/dsf-development) for bug reports, discussion and any kind of exchange.
|
|
10
10
|
|
|
@@ -6,7 +6,7 @@ long_description = open("README.md", encoding="utf-8").read()
|
|
|
6
6
|
|
|
7
7
|
setuptools.setup(
|
|
8
8
|
name="dsf-python",
|
|
9
|
-
version="3.
|
|
9
|
+
version="3.6.0-b2",
|
|
10
10
|
description="Python interface to access DuetSoftwareFramework",
|
|
11
11
|
long_description=long_description,
|
|
12
12
|
long_description_content_type="text/markdown",
|
|
@@ -134,7 +134,7 @@ class Code(BaseCommand):
|
|
|
134
134
|
if self.type == CodeType.Comment:
|
|
135
135
|
return "(comment)"
|
|
136
136
|
|
|
137
|
-
prefix = "G53 " if self.
|
|
137
|
+
prefix = "G53 " if self.is_flag_set(CodeFlags.EnforceAbsolutePosition) else ""
|
|
138
138
|
if self.majorNumber is not None:
|
|
139
139
|
if self.minorNumber is not None:
|
|
140
140
|
return f"{prefix}{self.type}{self.majorNumber}.{self.minorNumber}"
|
|
@@ -158,3 +158,6 @@ class Code(BaseCommand):
|
|
|
158
158
|
KeywordType.Echo: "echo",
|
|
159
159
|
KeywordType.Global: "global",
|
|
160
160
|
}.get(self.keyword)
|
|
161
|
+
|
|
162
|
+
def is_flag_set(self, flag: CodeFlags):
|
|
163
|
+
return self.flags & flag != 0
|
|
@@ -28,4 +28,4 @@ def resolve_code(rtype: MessageType, content: Optional[str]):
|
|
|
28
28
|
raise TypeError("rtype must be a MessageType")
|
|
29
29
|
if content is not None and not isinstance(content, str):
|
|
30
30
|
raise TypeError("content must be None or a string")
|
|
31
|
-
return BaseCommand("Resolve", **{"
|
|
31
|
+
return BaseCommand("Resolve", **{"type": rtype, "content": content})
|
|
@@ -9,15 +9,16 @@ def get_file_info(file_name: str, read_thumbnail_content: bool = False):
|
|
|
9
9
|
"""
|
|
10
10
|
if not isinstance(file_name, str) or not file_name:
|
|
11
11
|
raise TypeError("file_name must be a string")
|
|
12
|
-
return BaseCommand("GetFileInfo", **{"
|
|
12
|
+
return BaseCommand("GetFileInfo", **{"fileName": file_name, "readThumbnailContent": read_thumbnail_content})
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def resolve_path(path: str):
|
|
15
|
+
def resolve_path(path: str, base_directory: str = None):
|
|
16
16
|
"""
|
|
17
17
|
Resolve a RepRapFirmware-style path to an actual file path
|
|
18
18
|
:param path: Path that is RepRapFirmware-compatible
|
|
19
|
+
:param base_directory: Optional base directory to resolve the path relative to
|
|
19
20
|
:returns: The resolved path
|
|
20
21
|
"""
|
|
21
22
|
if not isinstance(path, str) or not path:
|
|
22
23
|
raise TypeError("path must be a string")
|
|
23
|
-
return BaseCommand("ResolvePath", **{"
|
|
24
|
+
return BaseCommand("ResolvePath", **{"path": path, "baseDirectory": base_directory})
|
|
@@ -17,7 +17,7 @@ def check_password(password: str):
|
|
|
17
17
|
"""
|
|
18
18
|
if not isinstance(password, str) or not password:
|
|
19
19
|
raise TypeError("password must be a string")
|
|
20
|
-
return BaseCommand("CheckPassword", **{"
|
|
20
|
+
return BaseCommand("CheckPassword", **{"password": password})
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def evaluate_expression(channel: CodeChannel, expression: str):
|
|
@@ -33,7 +33,7 @@ def evaluate_expression(channel: CodeChannel, expression: str):
|
|
|
33
33
|
raise TypeError("channel must be a CodeChannel")
|
|
34
34
|
if not isinstance(expression, str) or not expression:
|
|
35
35
|
raise TypeError("expression must be a string")
|
|
36
|
-
return BaseCommand("EvaluateExpression", **{"
|
|
36
|
+
return BaseCommand("EvaluateExpression", **{"channel": channel, "expression": expression})
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def flush(channel: CodeChannel, sync_file_streams: bool = False, if_executing: bool = True):
|
|
@@ -57,7 +57,7 @@ def flush(channel: CodeChannel, sync_file_streams: bool = False, if_executing: b
|
|
|
57
57
|
if not isinstance(if_executing, bool):
|
|
58
58
|
raise TypeError("if_executing must be a boolean")
|
|
59
59
|
return BaseCommand("Flush",
|
|
60
|
-
**{"
|
|
60
|
+
**{"channel": channel, "syncFileStreams": sync_file_streams, "ifExecuting": if_executing})
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
def invalidate_channel(channel: CodeChannel):
|
|
@@ -70,7 +70,7 @@ def invalidate_channel(channel: CodeChannel):
|
|
|
70
70
|
"""
|
|
71
71
|
if not isinstance(channel, CodeChannel):
|
|
72
72
|
raise TypeError("channel must be a CodeChannel")
|
|
73
|
-
return BaseCommand("InvalidateChannel", **{"
|
|
73
|
+
return BaseCommand("InvalidateChannel", **{"channel": channel})
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
def set_update_status(updating: bool):
|
|
@@ -81,7 +81,7 @@ def set_update_status(updating: bool):
|
|
|
81
81
|
"""
|
|
82
82
|
if not isinstance(updating, bool):
|
|
83
83
|
raise TypeError("updating must be a boolean")
|
|
84
|
-
return BaseCommand("SetUpdateStatus", **{"
|
|
84
|
+
return BaseCommand("SetUpdateStatus", **{"updating": updating})
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
def simple_code(code: str, channel: CodeChannel = CodeChannel.DEFAULT_CHANNEL, async_exec: bool = False):
|
|
@@ -101,7 +101,7 @@ def simple_code(code: str, channel: CodeChannel = CodeChannel.DEFAULT_CHANNEL, a
|
|
|
101
101
|
raise TypeError("code must be a string")
|
|
102
102
|
if not isinstance(channel, CodeChannel):
|
|
103
103
|
raise TypeError("channel must be a CodeChannel")
|
|
104
|
-
return BaseCommand("SimpleCode", **{"
|
|
104
|
+
return BaseCommand("SimpleCode", **{"code": code, "channel": channel, "executeAsynchronously": async_exec})
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
def write_message(
|
|
@@ -129,9 +129,9 @@ def write_message(
|
|
|
129
129
|
return BaseCommand(
|
|
130
130
|
"WriteMessage",
|
|
131
131
|
**{
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
132
|
+
"type": message_type,
|
|
133
|
+
"content": content,
|
|
134
|
+
"outputMessage": output_message,
|
|
135
|
+
"logLevel": log_level,
|
|
136
136
|
},
|
|
137
137
|
)
|
|
@@ -25,10 +25,10 @@ def add_http_endpoint(endpoint_type: HttpEndpointType, namespace: str, path: str
|
|
|
25
25
|
return BaseCommand(
|
|
26
26
|
"AddHttpEndpoint",
|
|
27
27
|
**{
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
28
|
+
"endpointType": endpoint_type,
|
|
29
|
+
"namespace": namespace,
|
|
30
|
+
"path": path,
|
|
31
|
+
"isUploadRequest": is_upload_request,
|
|
32
32
|
},
|
|
33
33
|
)
|
|
34
34
|
|
|
@@ -49,5 +49,5 @@ def remove_http_endpoint(endpoint_type: HttpEndpointType, namespace: str, path:
|
|
|
49
49
|
raise TypeError("path must be a string")
|
|
50
50
|
return BaseCommand(
|
|
51
51
|
"RemoveHttpEndpoint",
|
|
52
|
-
**{"
|
|
52
|
+
**{"endpointType": endpoint_type, "namespace": namespace, "path": path},
|
|
53
53
|
)
|
|
@@ -24,7 +24,7 @@ def patch_object_model(key: str, patch: str):
|
|
|
24
24
|
raise TypeError("key must be a string")
|
|
25
25
|
if not isinstance(patch, str) or not patch:
|
|
26
26
|
raise TypeError("patch must be a string")
|
|
27
|
-
return BaseCommand("PatchObjectModel", **{"
|
|
27
|
+
return BaseCommand("PatchObjectModel", **{"key": key, "patch": patch})
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def set_network_protocol(protocol: str, enabled: bool):
|
|
@@ -38,7 +38,7 @@ def set_network_protocol(protocol: str, enabled: bool):
|
|
|
38
38
|
raise TypeError("protocol must be a string")
|
|
39
39
|
if not isinstance(enabled, bool):
|
|
40
40
|
raise TypeError("enabled must be a boolean")
|
|
41
|
-
return BaseCommand("SetNetworkProtocol", **{"
|
|
41
|
+
return BaseCommand("SetNetworkProtocol", **{"networkProtocol": protocol, "enabled": enabled})
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def set_object_model(property_path: str, value: str):
|
|
@@ -53,7 +53,7 @@ def set_object_model(property_path: str, value: str):
|
|
|
53
53
|
raise TypeError("property_path must be a string")
|
|
54
54
|
if not isinstance(value, str):
|
|
55
55
|
raise TypeError("value must be a string")
|
|
56
|
-
return BaseCommand("SetObjectModel", **{"
|
|
56
|
+
return BaseCommand("SetObjectModel", **{"propertyPath": property_path, "value": value})
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
def sync_object_model():
|
|
@@ -7,7 +7,7 @@ def install_system_package(package_file: str):
|
|
|
7
7
|
"""
|
|
8
8
|
if not isinstance(package_file, str) or not package_file:
|
|
9
9
|
raise TypeError("package_file must be a string")
|
|
10
|
-
return BaseCommand("InstallSystemPackage", **{"
|
|
10
|
+
return BaseCommand("InstallSystemPackage", **{"packageFile": package_file})
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def uninstall_system_package(package: str):
|
|
@@ -16,4 +16,4 @@ def uninstall_system_package(package: str):
|
|
|
16
16
|
"""
|
|
17
17
|
if not isinstance(package, str) or not package:
|
|
18
18
|
raise TypeError("package must be a string")
|
|
19
|
-
return BaseCommand("UninstallSystemPackage", **{"
|
|
19
|
+
return BaseCommand("UninstallSystemPackage", **{"package": package})
|
|
@@ -8,7 +8,7 @@ def install_plugin(plugin_file: str):
|
|
|
8
8
|
"""
|
|
9
9
|
if not isinstance(plugin_file, str) or not plugin_file:
|
|
10
10
|
raise TypeError("plugin_file must be a string")
|
|
11
|
-
return BaseCommand("InstallPlugin", **{"
|
|
11
|
+
return BaseCommand("InstallPlugin", **{"pluginFile": plugin_file})
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def reload_plugin(plugin: str):
|
|
@@ -18,7 +18,7 @@ def reload_plugin(plugin: str):
|
|
|
18
18
|
"""
|
|
19
19
|
if not isinstance(plugin, str) or not plugin:
|
|
20
20
|
raise TypeError("plugin must be a string")
|
|
21
|
-
return BaseCommand("ReloadPlugin", **{"
|
|
21
|
+
return BaseCommand("ReloadPlugin", **{"plugin": plugin})
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def set_plugin_data(plugin: str, key: str, value: str):
|
|
@@ -37,7 +37,7 @@ def set_plugin_data(plugin: str, key: str, value: str):
|
|
|
37
37
|
if not isinstance(value, str):
|
|
38
38
|
raise TypeError("value must be a string")
|
|
39
39
|
return BaseCommand(
|
|
40
|
-
"SetPluginData", **{"Plugin": plugin, "
|
|
40
|
+
"SetPluginData", **{"Plugin": plugin, "key": key, "value": value}
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
|
|
@@ -49,7 +49,7 @@ def start_plugin(plugin: str, save_state: bool = True):
|
|
|
49
49
|
"""
|
|
50
50
|
if not isinstance(plugin, str) or not plugin:
|
|
51
51
|
raise TypeError("plugin must be a string")
|
|
52
|
-
return BaseCommand("StartPlugin", **{"
|
|
52
|
+
return BaseCommand("StartPlugin", **{"plugin": plugin, "saveState": save_state})
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
def start_plugins():
|
|
@@ -65,7 +65,7 @@ def stop_plugin(plugin: str, save_state: bool = True):
|
|
|
65
65
|
"""
|
|
66
66
|
if not isinstance(plugin, str) or not plugin:
|
|
67
67
|
raise TypeError("plugin must be a string")
|
|
68
|
-
return BaseCommand("StopPlugin", **{"
|
|
68
|
+
return BaseCommand("StopPlugin", **{"plugin": plugin, "saveState": save_state})
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
def stop_plugins():
|
|
@@ -81,4 +81,4 @@ def uninstall_plugin(plugin: str):
|
|
|
81
81
|
"""
|
|
82
82
|
if not isinstance(plugin, str) or not plugin:
|
|
83
83
|
raise TypeError("plugin must be a string")
|
|
84
|
-
return BaseCommand("UninstallPlugin", **{"
|
|
84
|
+
return BaseCommand("UninstallPlugin", **{"plugin": plugin})
|
|
@@ -19,9 +19,9 @@ def add_user_session(access_level: AccessLevel, session_type: SessionType, origi
|
|
|
19
19
|
return BaseCommand(
|
|
20
20
|
"AddUserSession",
|
|
21
21
|
**{
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
22
|
+
"accessLevel": access_level,
|
|
23
|
+
"sessionType": session_type,
|
|
24
|
+
"origin": origin,
|
|
25
25
|
},
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -33,4 +33,4 @@ def remove_user_session(session_id: int):
|
|
|
33
33
|
"""
|
|
34
34
|
if not isinstance(session_id, int):
|
|
35
35
|
raise TypeError("session_id must be an integer")
|
|
36
|
-
return BaseCommand("RemoveUserSession", **{"
|
|
36
|
+
return BaseCommand("RemoveUserSession", **{"id": session_id})
|
{dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/init_messages/client_init_messages.py
RENAMED
|
@@ -70,12 +70,12 @@ def intercept_init_message(
|
|
|
70
70
|
return ClientInitMessage(
|
|
71
71
|
ConnectionMode.INTERCEPT,
|
|
72
72
|
**{
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
73
|
+
"interceptionMode": intercept_mode,
|
|
74
|
+
"channels": channels,
|
|
75
|
+
"autoFlush": auto_flush,
|
|
76
|
+
"autoEvaluateExpressions": auto_evaluate_expression,
|
|
77
|
+
"filters": filters,
|
|
78
|
+
"priorityCodes": priority_codes,
|
|
79
79
|
},
|
|
80
80
|
)
|
|
81
81
|
|
|
@@ -90,8 +90,8 @@ def subscribe_init_message(subscription_mode: SubscriptionMode, filter_string: s
|
|
|
90
90
|
return ClientInitMessage(
|
|
91
91
|
ConnectionMode.SUBSCRIBE,
|
|
92
92
|
**{
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
93
|
+
"subscriptionMode": subscription_mode,
|
|
94
|
+
"filter": filter_string,
|
|
95
|
+
"filters": filter_list,
|
|
96
96
|
},
|
|
97
97
|
)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from .spindle_state import SpindleState
|
|
2
2
|
from ..model_object import ModelObject
|
|
3
3
|
|
|
4
|
+
from typing import Union
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
class Spindle(ModelObject):
|
|
6
8
|
"""Information about a CNC spindles"""
|
|
@@ -29,85 +31,85 @@ class Spindle(ModelObject):
|
|
|
29
31
|
self._state = SpindleState.unconfigured
|
|
30
32
|
|
|
31
33
|
@property
|
|
32
|
-
def active(self) -> int:
|
|
34
|
+
def active(self) -> Union[int, None]:
|
|
33
35
|
"""Active RPM"""
|
|
34
36
|
return self._active
|
|
35
37
|
|
|
36
38
|
@active.setter
|
|
37
|
-
def active(self, value: int):
|
|
38
|
-
self._active = int(value)
|
|
39
|
+
def active(self, value: Union[int, None]):
|
|
40
|
+
self._active = None if value is None else int(value)
|
|
39
41
|
|
|
40
42
|
@property
|
|
41
|
-
def can_reverse(self) -> bool:
|
|
43
|
+
def can_reverse(self) -> Union[bool, None]:
|
|
42
44
|
"""Flags whether the spindles may spin in reverse direction"""
|
|
43
45
|
return self._can_reverse
|
|
44
46
|
|
|
45
47
|
@can_reverse.setter
|
|
46
|
-
def can_reverse(self, value: bool):
|
|
47
|
-
self._can_reverse = bool(value)
|
|
48
|
+
def can_reverse(self, value: Union[bool, None]):
|
|
49
|
+
self._can_reverse = None if value is None else bool(value)
|
|
48
50
|
|
|
49
51
|
@property
|
|
50
|
-
def current(self) -> int:
|
|
52
|
+
def current(self) -> Union[int, None]:
|
|
51
53
|
"""Current RPM, negative if anticlockwise direction"""
|
|
52
54
|
return self._current
|
|
53
55
|
|
|
54
56
|
@current.setter
|
|
55
|
-
def current(self, value: int):
|
|
56
|
-
self._current = int(value)
|
|
57
|
+
def current(self, value: Union[int, None]):
|
|
58
|
+
self._current = None if value is None else int(value)
|
|
57
59
|
|
|
58
60
|
@property
|
|
59
|
-
def frequency(self) -> int:
|
|
61
|
+
def frequency(self) -> Union[int, None]:
|
|
60
62
|
"""Frequency (in Hz)"""
|
|
61
63
|
return self._frequency
|
|
62
64
|
|
|
63
65
|
@frequency.setter
|
|
64
|
-
def frequency(self, value: int):
|
|
65
|
-
self._frequency = int(value)
|
|
66
|
+
def frequency(self, value: Union[int, None]):
|
|
67
|
+
self._frequency = None if value is None else int(value)
|
|
66
68
|
|
|
67
69
|
@property
|
|
68
|
-
def idle_pwm(self) -> float:
|
|
70
|
+
def idle_pwm(self) -> Union[float, None]:
|
|
69
71
|
"""Idle PWM value (0..1)"""
|
|
70
72
|
return self._idle_pwm
|
|
71
73
|
|
|
72
74
|
@idle_pwm.setter
|
|
73
|
-
def idle_pwm(self, value: float):
|
|
74
|
-
self._idle_pwm = float(value)
|
|
75
|
+
def idle_pwm(self, value: Union[float, None]):
|
|
76
|
+
self._idle_pwm = None if value is None else float(value)
|
|
75
77
|
|
|
76
78
|
@property
|
|
77
|
-
def max(self) -> int:
|
|
79
|
+
def max(self) -> Union[int, None]:
|
|
78
80
|
"""Maximum RPM"""
|
|
79
81
|
return self._max
|
|
80
82
|
|
|
81
83
|
@max.setter
|
|
82
|
-
def max(self, value: int):
|
|
83
|
-
self._max = int(value)
|
|
84
|
+
def max(self, value: Union[int, None]):
|
|
85
|
+
self._max = None if value is None else int(value)
|
|
84
86
|
|
|
85
87
|
@property
|
|
86
|
-
def max_pwm(self) -> float:
|
|
88
|
+
def max_pwm(self) -> Union[float, None]:
|
|
87
89
|
"""Maximum PWM value when turned on (0..1)"""
|
|
88
90
|
return self._max_pwm
|
|
89
91
|
|
|
90
92
|
@max_pwm.setter
|
|
91
|
-
def max_pwm(self, value: float):
|
|
92
|
-
self._max_pwm = float(value)
|
|
93
|
+
def max_pwm(self, value: Union[float, None]):
|
|
94
|
+
self._max_pwm = None if value is None else float(value)
|
|
93
95
|
|
|
94
96
|
@property
|
|
95
|
-
def min(self) -> int:
|
|
97
|
+
def min(self) -> Union[int, None]:
|
|
96
98
|
"""Minimum RPM when turned on"""
|
|
97
99
|
return self._min
|
|
98
100
|
|
|
99
101
|
@min.setter
|
|
100
|
-
def min(self, value: int):
|
|
101
|
-
self._min = int(value)
|
|
102
|
+
def min(self, value: Union[int, None]):
|
|
103
|
+
self._min = None if value is None else int(value)
|
|
102
104
|
|
|
103
105
|
@property
|
|
104
|
-
def min_pwm(self) -> float:
|
|
106
|
+
def min_pwm(self) -> Union[float, None]:
|
|
105
107
|
"""Minimum PWM value when turned on (0..1)"""
|
|
106
108
|
return self._min_pwm
|
|
107
109
|
|
|
108
110
|
@min_pwm.setter
|
|
109
|
-
def min_pwm(self, value: float):
|
|
110
|
-
self._min_pwm = float(value)
|
|
111
|
+
def min_pwm(self, value: Union[float, None]):
|
|
112
|
+
self._min_pwm = None if value is None else float(value)
|
|
111
113
|
|
|
112
114
|
@property
|
|
113
115
|
def state(self) -> SpindleState:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dsf-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.6.0b2
|
|
4
4
|
Summary: Python interface to access DuetSoftwareFramework
|
|
5
5
|
Home-page: https://github.com/Duet3D/dsf-python
|
|
6
6
|
Author: Duet3D Ltd.
|
|
@@ -36,7 +36,7 @@ This is also availabe as a [pip package on pypi](https://pypi.org/project/dsf-py
|
|
|
36
36
|
|
|
37
37
|
Find out more about [Duet Software Framework](https://github.com/Duet3D/DuetSoftwareFramework).
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Examples of the [Duet Software Framework Python Bindings](https://github.com/Duet3D/dsf-python/tree/main/examples).
|
|
40
40
|
|
|
41
41
|
Get in touch with the community at [Duet Software Framework Forum](https://forum.duet3d.com/category/31/dsf-development) for bug reports, discussion and any kind of exchange.
|
|
42
42
|
|
|
@@ -27,18 +27,18 @@ def test_custom_m_codes(monkeypatch, tmp_path):
|
|
|
27
27
|
server.listen(1)
|
|
28
28
|
conn, _ = server.accept()
|
|
29
29
|
print("send all")
|
|
30
|
-
conn.sendall(b'{"version":
|
|
30
|
+
conn.sendall(b'{"version":12, "id":"foobar"}')
|
|
31
31
|
assert (
|
|
32
32
|
conn.recv(1024) == b"{"
|
|
33
|
-
b'"mode":"Intercept","version":
|
|
34
|
-
b'"File","USB","Aux","Trigger","Queue","LCD","SBC","Daemon","Aux2","
|
|
35
|
-
b'"
|
|
33
|
+
b'"mode":"Intercept","version":12,"interceptionMode":"Pre","channels":["HTTP","Telnet",'
|
|
34
|
+
b'"File","USB","Aux","Trigger","Queue","LCD","SBC","Daemon","Aux2","Autopause","Unknown"],'
|
|
35
|
+
b'"filters":null,"priorityCodes":false'
|
|
36
36
|
b"}"
|
|
37
37
|
)
|
|
38
38
|
conn.sendall(b'{"success":true}')
|
|
39
39
|
conn.sendall(
|
|
40
40
|
b"{"
|
|
41
|
-
b'"connection":{"id":12,"apiVersion":
|
|
41
|
+
b'"connection":{"id":12,"apiVersion":12,"isConnected":true},"sourceConnection":12,'
|
|
42
42
|
b'"result":null,"type":"M","channel":"HTTP","lineNumber":null,"indent":0,"keyword":0,'
|
|
43
43
|
b'"keywordArgument":null,"majorNumber":1234,"minorNumber":null,"flags":2048,"comment":null,'
|
|
44
44
|
b'"filePosition":null,"length":6,"parameters":[],"command":"Code"'
|
|
@@ -49,7 +49,7 @@ def test_custom_m_codes(monkeypatch, tmp_path):
|
|
|
49
49
|
assert conn.recv(1024) == b'{"command":"Resolve","Type":0,"Content":null}'
|
|
50
50
|
conn.sendall(
|
|
51
51
|
b"{"
|
|
52
|
-
b'"connection":{"id":12,"apiVersion":
|
|
52
|
+
b'"connection":{"id":12,"apiVersion":12,"isConnected":true},"sourceConnection":12,'
|
|
53
53
|
b'"result":null,"type":"M","channel":"HTTP","lineNumber":null,"indent":0,"keyword":0,'
|
|
54
54
|
b'"keywordArgument":null,"majorNumber":5678,"minorNumber":null,"flags":2048,"comment":null,'
|
|
55
55
|
b'"filePosition":null,"length":6,"parameters":[],"command":"Code"'
|
|
@@ -50,7 +50,7 @@ class Model(unittest.TestCase):
|
|
|
50
50
|
def test_json_serialization(self):
|
|
51
51
|
# Hint: To get the object model, execute the command get_object_model() from any connection in debug mode
|
|
52
52
|
# and take the JSON returned from debug (after "recv:")
|
|
53
|
-
with open('object_model/model_geminiv2.json') as fp:
|
|
53
|
+
with open('tests/object_model/model_geminiv2.json') as fp:
|
|
54
54
|
json_data = json.load(fp)
|
|
55
55
|
model = ObjectModel.from_json(json_data)
|
|
56
56
|
json_text = json.dumps(json_data, sort_keys=True)
|
|
@@ -26,7 +26,7 @@ def test_subscribe_object_model(monkeypatch, tmp_path):
|
|
|
26
26
|
server.bind(mock_dcs_socket_file)
|
|
27
27
|
server.listen(1)
|
|
28
28
|
conn, _ = server.accept()
|
|
29
|
-
conn.sendall('{"version":
|
|
29
|
+
conn.sendall('{"version":12, "id":"foobar"}'.encode())
|
|
30
30
|
assert (
|
|
31
31
|
conn.recv(1024)
|
|
32
32
|
== b'{"mode":"Subscribe","version":11,"SubscriptionMode":"Patch","Filter":"","Filters":null}'
|
|
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
|
{dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/connections/init_messages/server_init_message.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
|
{dsf_python-3.5.1rc1 → dsf_python-3.6.0b2}/src/dsf/object_model/boards/direct_display/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|