dsf-python 3.5.0rc2__tar.gz → 3.5.0.1rc2__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.
Files changed (191) hide show
  1. {dsf-python-3.5.0rc2/src/dsf_python.egg-info → dsf-python-3.5.0.1rc2}/PKG-INFO +4 -2
  2. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/setup.py +4 -2
  3. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/init_messages/client_init_messages.py +4 -4
  4. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/utils.py +5 -2
  5. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2/src/dsf_python.egg-info}/PKG-INFO +4 -2
  6. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_object_model.py +2 -2
  7. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/LICENSE +0 -0
  8. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/MANIFEST.in +0 -0
  9. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/README.md +0 -0
  10. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/pyproject.toml +0 -0
  11. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/setup.cfg +0 -0
  12. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/__init__.py +0 -0
  13. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/__init__.py +0 -0
  14. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/base_command.py +0 -0
  15. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code.py +0 -0
  16. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code_channel.py +0 -0
  17. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code_flags.py +0 -0
  18. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code_interception.py +0 -0
  19. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code_parameter.py +0 -0
  20. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/code_type.py +0 -0
  21. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/condition_type.py +0 -0
  22. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/files.py +0 -0
  23. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/generic.py +0 -0
  24. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/http_endpoints.py +0 -0
  25. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/model_subscription.py +0 -0
  26. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/object_model.py +0 -0
  27. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/packages.py +0 -0
  28. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/plugins.py +0 -0
  29. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/responses.py +0 -0
  30. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/commands/user_sessions.py +0 -0
  31. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/__init__.py +0 -0
  32. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/base_command_connection.py +0 -0
  33. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/base_connection.py +0 -0
  34. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/command_connection.py +0 -0
  35. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/exceptions.py +0 -0
  36. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/init_messages/__init__.py +0 -0
  37. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/init_messages/server_init_message.py +0 -0
  38. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/intercept_connection.py +0 -0
  39. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/connections/subscribe_connection.py +0 -0
  40. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/exceptions.py +0 -0
  41. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/http.py +0 -0
  42. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/__init__.py +0 -0
  43. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/__init__.py +0 -0
  44. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/accelerometer.py +0 -0
  45. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/board_closed_loop.py +0 -0
  46. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/boards.py +0 -0
  47. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/__init__.py +0 -0
  48. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/direct_display.py +0 -0
  49. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/direct_display_controller.py +0 -0
  50. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/direct_display_encoder.py +0 -0
  51. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/direct_display_screen.py +0 -0
  52. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/direct_display/direct_display_screen_st7567.py +0 -0
  53. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/driver.py +0 -0
  54. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/driver_closed_loop.py +0 -0
  55. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/boards/min_max_current.py +0 -0
  56. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/directories/__init__.py +0 -0
  57. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/directories/directories.py +0 -0
  58. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/fans/__init__.py +0 -0
  59. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/fans/fan_thermostatic_control.py +0 -0
  60. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/fans/fans.py +0 -0
  61. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/__init__.py +0 -0
  62. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/heat.py +0 -0
  63. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/heater.py +0 -0
  64. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/heater_model.py +0 -0
  65. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/heater_model_pid.py +0 -0
  66. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/heat/heater_monitor.py +0 -0
  67. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/__init__.py +0 -0
  68. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/compatibility.py +0 -0
  69. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/distance_unit.py +0 -0
  70. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/input_channel.py +0 -0
  71. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/input_channel_state.py +0 -0
  72. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/inputs/inputs.py +0 -0
  73. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/__init__.py +0 -0
  74. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/build.py +0 -0
  75. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/build_object.py +0 -0
  76. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/gcode_fileinfo.py +0 -0
  77. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/job.py +0 -0
  78. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/layer.py +0 -0
  79. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/thumbnail_info.py +0 -0
  80. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/job/times_left.py +0 -0
  81. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/led_strips/__init__.py +0 -0
  82. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/led_strips/led_strip.py +0 -0
  83. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/limits/__init__.py +0 -0
  84. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/limits/limits.py +0 -0
  85. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/messages/__init__.py +0 -0
  86. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/messages/messages.py +0 -0
  87. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/model_collection.py +0 -0
  88. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/model_dictionary.py +0 -0
  89. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/model_object.py +0 -0
  90. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/__init__.py +0 -0
  91. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/axis.py +0 -0
  92. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/current_move.py +0 -0
  93. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/driver_id.py +0 -0
  94. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/extruder.py +0 -0
  95. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/extruder_non_linear.py +0 -0
  96. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/input_shaping.py +0 -0
  97. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/keepout_zone.py +0 -0
  98. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/__init__.py +0 -0
  99. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/core_kinematics.py +0 -0
  100. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/delta_kinematics.py +0 -0
  101. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/delta_tower.py +0 -0
  102. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/hangprinter_kinematics.py +0 -0
  103. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/kinematics.py +0 -0
  104. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/kinematics_name.py +0 -0
  105. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/polar_kinematics.py +0 -0
  106. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/scara_kinematics.py +0 -0
  107. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/tilt_correction.py +0 -0
  108. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/kinematics/zleadscrew_kinematics.py +0 -0
  109. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/microstepping.py +0 -0
  110. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/motors_idle_control.py +0 -0
  111. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move.py +0 -0
  112. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_calibration.py +0 -0
  113. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_compensation.py +0 -0
  114. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_deviations.py +0 -0
  115. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_queue_item.py +0 -0
  116. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_rotation.py +0 -0
  117. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/move_segmentation.py +0 -0
  118. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/probe_grid.py +0 -0
  119. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/move/skew.py +0 -0
  120. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/__init__.py +0 -0
  121. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/network.py +0 -0
  122. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/network_interface.py +0 -0
  123. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/network_interface_type.py +0 -0
  124. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/network_protocol.py +0 -0
  125. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/network/network_state.py +0 -0
  126. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/object_model.py +0 -0
  127. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/plugins/__init__.py +0 -0
  128. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/plugins/plugin_manifest.py +0 -0
  129. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/plugins/plugins.py +0 -0
  130. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/plugins/sbc_permissions.py +0 -0
  131. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/__init__.py +0 -0
  132. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/cpu.py +0 -0
  133. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/__init__.py +0 -0
  134. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/dsf.py +0 -0
  135. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/http_endpoint.py +0 -0
  136. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/http_endpoint_type.py +0 -0
  137. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/user_sessions/__init__.py +0 -0
  138. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/user_sessions/access_level.py +0 -0
  139. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/user_sessions/session_type.py +0 -0
  140. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/dsf/user_sessions/user_sessions.py +0 -0
  141. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/memory.py +0 -0
  142. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sbc/sbc.py +0 -0
  143. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/__init__.py +0 -0
  144. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/analog_sensor.py +0 -0
  145. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/analog_sensor_type.py +0 -0
  146. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/endstop.py +0 -0
  147. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/endstop_type.py +0 -0
  148. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/Duet3DFilamentMonitor.py +0 -0
  149. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/__init__.py +0 -0
  150. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor.py +0 -0
  151. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_enable_type.py +0 -0
  152. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_status.py +0 -0
  153. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/filament_monitor_type.py +0 -0
  154. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/laser_filament_monitor.py +0 -0
  155. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/pulsed_filament_monitor.py +0 -0
  156. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/filament_monitors/rotating_magnet_filament_monitor.py +0 -0
  157. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/gp_input_port.py +0 -0
  158. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/probe.py +0 -0
  159. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/probe_type.py +0 -0
  160. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/sensors.py +0 -0
  161. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/sensors/temperature_error.py +0 -0
  162. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/spindles/__init__.py +0 -0
  163. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/spindles/spindle_state.py +0 -0
  164. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/spindles/spindles.py +0 -0
  165. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/__init__.py +0 -0
  166. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/beep_request.py +0 -0
  167. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/gp_output_port.py +0 -0
  168. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/log_level.py +0 -0
  169. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/machine_mode.py +0 -0
  170. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/machine_status.py +0 -0
  171. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/message_box.py +0 -0
  172. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/restore_point.py +0 -0
  173. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/startup_error.py +0 -0
  174. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/state/state.py +0 -0
  175. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/tools/__init__.py +0 -0
  176. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/tools/tool_retraction.py +0 -0
  177. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/tools/tool_state.py +0 -0
  178. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/tools/tools.py +0 -0
  179. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/utils.py +0 -0
  180. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/volumes/__init__.py +0 -0
  181. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/object_model/volumes/volumes.py +0 -0
  182. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf/utility/__init__.py +0 -0
  183. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf_python.egg-info/SOURCES.txt +0 -0
  184. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf_python.egg-info/dependency_links.txt +0 -0
  185. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf_python.egg-info/requires.txt +0 -0
  186. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/src/dsf_python.egg-info/top_level.txt +0 -0
  187. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_code.py +0 -0
  188. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_custom_http_endpoint.py +0 -0
  189. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_custom_m_codes.py +0 -0
  190. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_send_simple_code.py +0 -0
  191. {dsf-python-3.5.0rc2 → dsf-python-3.5.0.1rc2}/tests/test_subscribe_object_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dsf-python
3
- Version: 3.5.0rc2
3
+ Version: 3.5.0.1rc2
4
4
  Summary: Python interface to access DuetSoftwareFramework
5
5
  Home-page: https://github.com/Duet3D/dsf-python
6
6
  Author: Duet3D Ltd.
@@ -14,13 +14,15 @@ Classifier: Intended Audience :: Developers
14
14
  Classifier: Topic :: Software Development :: Libraries
15
15
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
16
16
  Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.7
18
+ Classifier: Programming Language :: Python :: 3.8
17
19
  Classifier: Programming Language :: Python :: 3.9
18
20
  Classifier: Programming Language :: Python :: 3.10
19
21
  Classifier: Programming Language :: Python :: 3.11
20
22
  Classifier: Programming Language :: Python :: 3.12
21
23
  Classifier: Programming Language :: Python :: 3.13
22
24
  Classifier: Programming Language :: Python :: 3 :: Only
23
- Requires-Python: >=3.9, <4
25
+ Requires-Python: >=3.7, <4
24
26
  Description-Content-Type: text/markdown
25
27
  License-File: LICENSE
26
28
  Requires-Dist: python-dateutil
@@ -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.5.0rc2",
9
+ version="3.5.0.1rc2",
10
10
  description="Python interface to access DuetSoftwareFramework",
11
11
  long_description=long_description,
12
12
  long_description_content_type="text/markdown",
@@ -19,6 +19,8 @@ setuptools.setup(
19
19
  "Topic :: Software Development :: Libraries",
20
20
  "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
21
21
  "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.7",
23
+ "Programming Language :: Python :: 3.8",
22
24
  "Programming Language :: Python :: 3.9",
23
25
  "Programming Language :: Python :: 3.10",
24
26
  "Programming Language :: Python :: 3.11",
@@ -32,7 +34,7 @@ setuptools.setup(
32
34
  keywords="Duet3D, DuetSoftwareFramework, DSF, dsf-python",
33
35
  package_dir={"": "src"},
34
36
  packages=setuptools.find_packages(where="src"),
35
- python_requires=">=3.9, <4",
37
+ python_requires=">=3.7, <4",
36
38
  extras_require={
37
39
  "dev": [
38
40
  "sphinx",
@@ -17,7 +17,7 @@ clientinitmessages holds all messages a client can send to the server to initiat
17
17
  You should have received a copy of the GNU Lesser General Public License
18
18
  along with this program. If not, see <https://www.gnu.org/licenses/>.
19
19
  """
20
- from __future__ import annotations
20
+ from typing import List
21
21
  from .server_init_message import ServerInitMessage
22
22
  from .. import ConnectionMode, InterceptionMode, SubscriptionMode
23
23
  from ...commands.code_channel import CodeChannel
@@ -38,8 +38,8 @@ class ClientInitMessage:
38
38
 
39
39
  def intercept_init_message(
40
40
  intercept_mode: InterceptionMode,
41
- channels: list[CodeChannel],
42
- filters: list[str],
41
+ channels: List[CodeChannel],
42
+ filters: List[str],
43
43
  priority_codes: bool,
44
44
  auto_flush: bool = True):
45
45
  """
@@ -70,7 +70,7 @@ def intercept_init_message(
70
70
  "Channels": channels,
71
71
  "AutoFlush": auto_flush,
72
72
  "Filters": filters,
73
- "PriortyCodes": priority_codes,
73
+ "PriorityCodes": priority_codes,
74
74
  },
75
75
  )
76
76
 
@@ -1,3 +1,4 @@
1
+ import inspect
1
2
  import re
2
3
  import warnings
3
4
 
@@ -25,8 +26,10 @@ def deprecated(instructions: str):
25
26
  """This is a decorator which can be used to mark functions as deprecated.
26
27
  It will result in a warning being emitted when the function is used."""
27
28
  def deprecated_func(*args, **kwargs):
28
- warnings.warn(f"Call to deprecated function {func.__name__}(). {instructions}",
29
- DeprecatedWarning, stacklevel=2)
29
+ # Do not show DeprecatedWarning on ObjectModel update (function called by update_from_json)
30
+ if inspect.currentframe().f_back.f_code.co_name not in ['_update_from_json', 'update_from_json']:
31
+ warnings.warn(f"Call to deprecated function {func.__name__}(). {instructions}",
32
+ DeprecatedWarning, stacklevel=2)
30
33
  return func(*args, **kwargs)
31
34
  return deprecated_func
32
35
  return decorator
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dsf-python
3
- Version: 3.5.0rc2
3
+ Version: 3.5.0.1rc2
4
4
  Summary: Python interface to access DuetSoftwareFramework
5
5
  Home-page: https://github.com/Duet3D/dsf-python
6
6
  Author: Duet3D Ltd.
@@ -14,13 +14,15 @@ Classifier: Intended Audience :: Developers
14
14
  Classifier: Topic :: Software Development :: Libraries
15
15
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
16
16
  Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.7
18
+ Classifier: Programming Language :: Python :: 3.8
17
19
  Classifier: Programming Language :: Python :: 3.9
18
20
  Classifier: Programming Language :: Python :: 3.10
19
21
  Classifier: Programming Language :: Python :: 3.11
20
22
  Classifier: Programming Language :: Python :: 3.12
21
23
  Classifier: Programming Language :: Python :: 3.13
22
24
  Classifier: Programming Language :: Python :: 3 :: Only
23
- Requires-Python: >=3.9, <4
25
+ Requires-Python: >=3.7, <4
24
26
  Description-Content-Type: text/markdown
25
27
  License-File: LICENSE
26
28
  Requires-Dist: python-dateutil
@@ -41,9 +41,9 @@ class Model(unittest.TestCase):
41
41
  self.assertEqual(len(model.sbc.dsf.http_endpoints), 2)
42
42
  self.assertEqual(model.sbc.dsf.http_endpoints[1].endpoint_type, HttpEndpointType.POST)
43
43
 
44
- def test_job(self):
44
+ @staticmethod
45
+ def test_job():
45
46
  model = ObjectModel()
46
-
47
47
  json_patch = '{"job":{"file":{"filament":[496.4],"fileName":"0:/gcodes/Veil_Token.gcode","generatedBy":"ideaMaker 4.2.1.5321, 2022-10-01 17:45:38 UTC\u002B0200","height":1.04,"lastModified":"2022-10-01T16:45:39+01:00","layerHeight":0.12,"numLayers":9,"printTime":798,"size":594195,"thumbnails":[{"data":"iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAUnklEQVR4nO3cfYwcZ30H8O/zzMy\u002B3d77nl\u002BuztmOA7bjGIOdBBJioDSEJkBLStOWCERTaKS2alWkqqioqpD6BxSVSlUFaktVggRUjdomBVIaikrA4Y9AYkhsY5vEdnz2\u002Bezz3u3e3b7OzPP8\u002BsfM7O5dfMmdb\u002B9s1O9HWu3u3e7s8/xmnmeefZ7fLEBERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERET0/5261gXoljuA7N5cbuADw8PDU8bc6Isa3eJ5W3MaY/NWxiyQ6Xy9o1D0gCPnguBwv8jzvzY5\u002BTMAZq3L\u002BdG\u002BvqFfHRjYXDVmm0Dv2p72bimFZswCfZ2vc4GL/a5TnPTDM0UTHBtynBe/cv78\u002BOPALABZyzI\u002BAKTev2XL1poxb96bzR4oGbPLCAqdr3GgZvIaxZrF\u002BIwJpozIsY1aTz5Vr8/86/R08SWguZZlXC8/bw1E/3ImM3ZTOl24v39ot6OlcNmYnSOOuzWj9Zhv7UBW62FHqfRKNhpYWw1FXihZ84ILPPfVmZmnD1UqZ14GGqsp7Ad7e3ftdDOFd/f37r0Qhrs3uu4tWmGbo9RmT6nMa2\u002Bho4wijcDKBJRMzBjzk4xS4yfqwZGvz5dOfKdeH19NObcBmXv7\u002B/f81tDQnlIY3j7ierc5Su1MKdW/ku0YEb8pMuMpVZwJzZmGmHP9jvPSdBiePV71L/1naer0c8AlAHY15V1P13MDcf9\u002B4\u002BgDe3PpA3PW7negtg05zphWylmPDw9FmpNheOT5pvmdv7h0/shy3vO5jRt/6U2Z7IMN4NYRx9ntKOWtdTkBwIgEZWtOOMDh5xuNRz5\u002B8eJTy3nfp0dGbtqTyf3TJs99i7vCTuVqWREzY8y4hfxUizo6EQTHHpqc\u002BBcA4Xp8/kq517oAS9kDFLbkMl/2Fby840IjGv9YCBwAapVtOxRBAKAR39cB1CBoCDAnghIkXYXcOuXhLQCW1UC2ZHMPV5X6jawCqgBcicqqASgV3etVlltE0ABQhyAQYD6qg1cS7J2B7J1PpXIAnlrOtvqy2V9sOM7bp0TgQpCOy\u002BcAXS\u002B3FUETQAA4Ruvt88D2WbHvuZzyghHgfy4DF1f1AWvkum0gBghqgPgAVDzkFgAi0c1CoBGdq6ObwALQEj03AHwAAQQmfh5K1BCa8d8CAUIIfCzdffnG9Cy3zGVryspxkZQ5OaQ6yy1xXRTaDd7Gz61Erw0A\u002BB3lDgD4EjWKMC53gKihLB6rNMKwvNzyVq3NDTiCGhS0ADXVjvXiciOJL64Q87jsFlHM/bicSYxriMrrx/FuoP1lTwA0oipel67bBnICmC4a89NhR7/RU\u002B3zhQPAU4AjUeG1UlFPF/d8RgFGJD4jALMiKCNuICra2dHWXv17btPaSSvybDkMv7ncMp8Kgie3KvX\u002BYa03uAAcpRZ8SudjF0AWQEopaChoCBwV1TIQgYFCFdFZbTbufTu3caX\u002BvGnMuZLvf3e55X252XxCtL4rB/XOfkcPZSQq81LnCgFajdbGdeiBQkZF\u002B8WN94UPgZXoW3pNAVURVACUICjLwjiE1k7NA9PLLfN6u\u002B6\u002BgxwAvAO5XOGegYH\u002BqtXbJ8Tcf3M285sbtO7zgNZBtFwighqAM2LxsrG1sshpUWjOh\u002BHlukgttPYylJpztJ4GcPbM/Pz4nO9PHWs2X7rKKqjtmczYrb29u/dlMjdWwvCmPq1vvzGVunVIqXQvFFIA1FXUowzBRSu4LNJ80fefvWzN0XwqdWSiWj014ftnj1YqJ3CVM1w3AKP7h4dvvjGdLvRovdUDsr6VMc/RhR7AS2t3REFcLbJjm\u002BPkB5RCdoV1AKLGXxZBSezseL35RI\u002BSxzamUse/MzNz\u002BUeVSum56\u002Bxsci0biP5gPr97fyY/ckdv9pZJP9zd7zqb\u002Bx29o2mlkFaq39N62cOb5QhFalVrjzTF/qDkm6c/O3n\u002B6R8Dl7u1/T1A6s6BgZvv7\u002B3fXxO7f4Pr7nCV2hHPWuW79TkA0BSpiMhkzdpTc8YeySh14ofV\u002Bol/n5k6fgQodetzHsrnR27v7d0/6qbuGXKdNztK7ct0uS6\u002BSCMUuewoTJVDe6Eu5uQG1z17rF4/81i5fOxMozF9Mvq6te7WvIE8DHj3jI7uKAP7tzjeLqtx0IXaup4zUktJZn\u002BKYfiZD54//7WVvv/RTZtGqlq/64ZU6h4ruKPguq9fi3KuVDEMT3gK3zvj\u002B9/7WbX635\u002BZnV1xg3l0dOxdQ57\u002BqyHXfdNalHElRMRMxzNfrqijE37wbI\u002BWo1\u002B\u002BcGH8G9FIes2sdQNRj90w9s\u002BjrvtAt88G3VASi6IITlv52Z\u002BdfXnnSt//lRtu\u002BPwOL/X76asYaqyHkrX2ULPx\u002BU9duPBHK33vf2y/8eSgUq/PAfCuw/oF1laPBsG3P3r\u002B3Aewhguna/4lfUphq6fQkxULr2MKUcU3Hb9OYeXj8oQVac2sJF8gQ8QzVALMQ1AXoBLfz8Tj\u002BdYMkFxdfC8DPSkRpOIp0lRcNzeup1rqdpX1FJFW/Vozc4jG9fMQ1AQoQ6L6Rd\u002B99LzIihb7EnPxdLKLaLo6paLHHgBn8VRw/J5u7c/F9UxmxxoiKMV1nRDpOWvtwFV9wAqsdQMRALUmgM7p2k4qntWIpjmjg9aJ3yhoTylK6z4Kni/tqcQQ0RRugKhRROsb0XRuGP9/LZZujbVVdGy/vey\u002BqJ6CBfNmItFkb3IwJfVLpj7b94IgXqdpN4aongGima1mXM8A3c2T6ayBRTQjFe3Dxf9d\u002BKYF84PS7oSS6WHE5Wzvz/Z0cT1\u002BfYB2Pf14Gr7WXkdpl0ut7fAKWIcziAAXjAhcqFZXI0vcTMe7kgCGglZDMPF/Og96A8BIcgBJ6\u002BzRebAsdX4wIjURGZ8Ngr\u002B5mrqVQ3my37W/3qvVBhfRYlpnp7m4fp0HSNLYk78paZfZR3JQLjwzBvFaQ4D2gfRqDd\u002BKzDZEnrqauh2u1z51UyrzibxWO3NaZVyJG/SiaWDpuL9SfTsbQVK/UBY3wPY\u002B9RGt\u002BST1TOp9pX3oiExi6d3bFWs\u002BuPxQobD59ZnM72aBd/c6zu6s1oMpAJl4ujM6dSt4aJ\u002Buk1tnkGvxesa0CBrxAZIsogFR0P24B/I7/t9asLK20rD2rIgUNXBo1pgTPY5z\u002BKnJyfFL0cL3Vflwf//2kVzu7hHPO\u002BiJ7MxovTOndX8a7d4nOVskS4QeoszJlFJIoz1USSR1DhD1qqV4LaQs7UXCEO0GlBxcgbWzDWvHHeCFWWO\u002BB2O\u002B//Vi8eTV1u2tQO8bN20aE\u002BC2Ta672wH2aqV29yldSDs676E9rExGAUl9BQpGBKJUqzNQAHoB5KGQUapV784GZeI61xEN8yoQXBDBXDxi8K2drxlzGMCTl\u002Br1r/1vuXz2auu3HGvaQA4A3tuGhzfcmU5vnbdq37Z06kBTyX0j2tmsV/F9Y0IEzwT\u002BibKVFw2AmjWXrUgQaF33gGLW8y7XwnDuzPz8eN3a2ulqdXwOmOlu7ZakCsCmsZ6ekd3Z7NimVHZsg6vu3KjUfdscd7AHK1/LSRgRXBLBuNj5s2H4jUlrf1D0/fGLtdrkbK127hQw1d2qLK0PGBpNpws78vmxbel0YcB1\u002B\u002BrGjAiQs9YOp5TyUsoZCWGRh9ryhpS3b1RpvZq6F62dTAv\u002BayoMn3PEPH\u002B60Rh/dGbm0lqunXS1gbwZ6Hvn0NCet\u002Bfzt9dE7dvkOfuMYDSr1Ei3p3RDkYuTgf/Xf3Du3BfORxkk14178/mRB3sHDuRd9Z4R1zvoKbWj2\u002BsgRqTZsPbEnLGHG7CP/\u002BW5c9//CbDsNJP18NG\u002BvqEHh4b\u002BNK/1RzylN3Vz21bENEWKSmFiJgyPOMDhI43Gc1\u002Bemnr\u002BGFDp1uesuIE8APQf3LCh8LpMZvOFwNxycyZ1c9nYPVmtd/U5zmi3CrZcgUhlKgwe88PwH57x/Rc\u002BWyyu64LSA\u002Bgbeu8v9Baswb4tae\u002BOQHDXJs\u002B9bT3LAAC\u002BtbU5Y486GofP\u002B/5TvSIvfHFycuJbwNx6luPhwcH\u002Bd\u002BRyB4Zc9z2DjvtwtzuG12JFTMmYs0m28LgfHO918OKpqpn8t/LFqedWuG7yqg3kvp6eTQezvbsOxivdoylvL4DNAApZrdd8im0lrIgJIadKoXlyyg8f\u002B8jFiaewBl/gfhvI3DC44cBbezNv9ZRzMK2wx9G6kFaqt9uftRqBtTUDTNStnAzEHDru\u002Bz/8\u002BMWLT2ON0sq/uGHLG0Yy\u002BmMbXfdeD2qrXqdU/\u002BUwIsa3tqyUnhJIsRSaIwOuPn6k0XjxC5OTP3y1zINWA3konx95b3//Dqv1XQPafbuI7Cx47uvWpwrd93LT/9svnh//xLe6cGXbh4Ge\u002BzZvuWc45dzf67j3p9e5V\u002ByWpkilFAZP1EJ8db42d\u002BihcnnVQ7J7gfTHbhj7zPZU6o\u002B7UcZroWzMORE8M2PDZ7S1T39zdvbUlyqVywCgPjcy8qa9ufwnc1rdntF6VF/HGb4rMWNt7dH5uYP/WCweXs12HkT/4MPbhh7vc5y3dats14M5a559ZGrqfY9Uq6u6DuOThcL\u002Bu3v7Dg1onetW2a4lC4QNay8YkR\u002BfrQefdm/L5w/ltXPdpYGsVF0ENQguWMEZsThvrb4osurGXs36\u002BWlgVzpeTV7thVrXmolTz58xduxH1qZWu72667qnxerh\u002BKL6rIqn7H9OY6UBN6f1GICxjVm5zT0vUtssticLhdR1mHNzJbMirfWBmTj9IE6taC\u002B8AalCOn1VaRaLzYlARJABkIUgHa/huD8n8ZqL4zMpFhPx44rtTm7B9lSqzwFSNURjWUcEHqKUlBQEXrzu4\u002BHnK15nrMXzYQi3Ya1f0hplCLREOUUu4guToOLLLV\u002BZO3W16xiJzvyp5JYs6vkiqMbpE1WJFglnEDWKOazDT49cqbyI0lf8jqvudHxJbZSf1M7BWpxr1o08rFY5pL0IKuiIGQRVARoQVASYE4uyANMdK9hrISlHolUmAZoq\u002BksrV0ukdWxpxBe8IYrb4uOs8wZ073hLshiCuJxVEdQRdRpFEUyLtFaNayJww45pL4v2gkK0uinxFXgLSVxZwcK8KWBhwDp3TAhBKFF\u002BUeelpBbR6rBBx6Ww8TaSlISw4z3LnZZqWnvyTLl8dJkvX1Idr0znaOWOoR1sif8TX526YGUZ6MhR6sg3S7aBjm0lj9sxlDjPbGH2QCjty4o7L3E1EqVu\u002BGgfDFeigBBa\u002BysIxRUdKhaP3VUYOTekZasDAK9yIAuSPLL28\u002Bg\u002Bjl5HLldnAuSrxa0zRakzncfGcVucVeHHcWtdvowkVenKl1477\u002Brr\u002B5VerW9cnGOzWGdOUCu1IU6YawCt\u002B7q0n1fjvzUQZdI247/XEe3YprRbchgXOAlIZ6Ozi54vWUaRWihyrBaGj5wulf7wB/X6hdd4y2s6FYZz\u002B3pytZyjb3cVeqIfMlje6LozVWZh3NrXlCex6oxbDVGMGgCqiIaOPhbGLdlOiKXz2paKmRWplcLwT75fKj298ogsdDwIKi/Ozn5pIJud11oPWaUKWsFpHeDLjBXwyv19pbglyYtJrJqS/M4AWpdZNxBdqpwM\u002BxqIGkYD7QZqlviszng1rP2u\u002BvPR0Z0DjvN3Gxz37nzHeaydebpwQ7Joo0nCXfL6zkS0zvV/v9XHtndq8trkBwCS1pskIobSfu\u002BVKiAiUjXmuKfU8Wnff8JT6vCpqamXXlhFbtVSPjQyctP2dPrBLPT9w67e3a9U2ot3vY6vdRcAUO2YXSl5r93LyYKzhpH24yQ\u002B0eOOJD8sjFv7\u002BvCFP0wh8fB0cRZzzZijxtqv1YPg248Xi891KzYdUr\u002B3efNeR\u002BQNo573bgXsH3Scm3Iq\u002BhEwpyOZU2FRzLAwbsArz6jJ8QZ0nDWk3evbjr8nI5XW8SYLE1zDeEvJGSTJb0u2VTfmmZlK5cFWg3jf8PBtr0ulDg647jt6tN6RgRrJajWgAc/rGGZ17ujWc5WcBheePtunK1mQeRpIu0EIol/ESM4incMvI9IIrZ0VpSqi1GQ1DMcNMO4AP51oNE6fKZWOn1\u002B/HKuWXmD4/Rs33jnqeXvSSr1lUDtbNWTAgxpOK/Q4SmkH0S\u002BsJGnenb15q9GoOCayuFG0h2wL47ZwqGkk6Q0lGffbhtiyAWpa62IlDE8KcHKm2Tx0qlY78VK9fn6tY7PYENC3t69v596enp2eUnuyWu/q17rgKFXwgMG0UjkPqtdRHUmbi\u002BKW/OrLgs4mPiCtLGwUUawUgrgBSEeMWo2j43hrAIFv7awAMzVrf\u002BIAh8/U6986VCq9ACy9kp69e3Bw5I09PQPlMNziAje6WhcKrru5bm1BATkLFFwRV5Te4Kjkug6B0npQK5WNfpoH4lsz2dm7ATIXiFQCEau0vqSUqqS1nq8bU5kNw/HAmFoITA6m00VrzPzp2dnZS/V65eXrLM9oEWdXb\u002B/A7nR6eGsqlZ81ZhTWjmQ9b6zfcQoudM634YhA9SlBj1LoVUr1JuNpA1Epx9mcNBYLII6btNL5xV4KAWOVqgowl9b6cihSK/n\u002BeN3asmg9vcF1X56oVksXwrB2tFot4trMZyzLRqBnWzY7ONrTk9ueTg8Vw7Cggc09WhdcIDfoeRsq1m50RWkL2egoaCXIi1J9UVJf1IV4UdxU0tEG1l60EBsPo5rW2ul4pbgIpWppxynONJvjVWOmoFR5IJ0\u002Beb5SmZ0ol2eu1XXvRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERNe3/wOxabcDNmswcQAAAABJRU5ErkJggg==","format":"png","height":200,"offset":483,"size":7144,"width":200}]},"build":{"currentObject":-1,"m486Names":false,"m486Numbers":false,"objects":[]},"duration":0,"pauseDuration":0,"rawExtrusion":0,"warmUpDuration":0,"layers":[],"lastDuration":null}}'
48
48
  model.update_from_json(json_patch)
49
49
 
File without changes
File without changes
File without changes