dsf-python 3.5.1rc1__py3-none-any.whl → 3.6.0b2__py3-none-any.whl

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/commands/code.py CHANGED
@@ -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.flags & CodeFlags.EnforceAbsolutePosition != 0 else ""
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", **{"Type": rtype, "Content": content})
31
+ return BaseCommand("Resolve", **{"type": rtype, "content": content})
dsf/commands/files.py CHANGED
@@ -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", **{"FileName": file_name, "ReadThumbnailContent": read_thumbnail_content})
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", **{"Path": path})
24
+ return BaseCommand("ResolvePath", **{"path": path, "baseDirectory": base_directory})
dsf/commands/generic.py CHANGED
@@ -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", **{"Password": password})
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", **{"Channel": channel, "Expression": expression})
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
- **{"Channel": channel, "SyncFileStreams": sync_file_streams, "IfExecuting": if_executing})
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", **{"Channel": channel})
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", **{"Updating": updating})
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", **{"Code": code, "Channel": channel, "ExecuteAsynchronously": async_exec})
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
- "Type": message_type,
133
- "Content": content,
134
- "OutputMessage": output_message,
135
- "LogLevel": log_level,
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
- "EndpointType": endpoint_type,
29
- "Namespace": namespace,
30
- "Path": path,
31
- "IsUploadRequest": is_upload_request,
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
- **{"EndpointType": endpoint_type, "Namespace": namespace, "Path": path},
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", **{"Key": key, "Patch": patch})
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", **{"NetworkProtocol": protocol, "Enabled": enabled})
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", **{"PropertyPath": property_path, "Value": value})
56
+ return BaseCommand("SetObjectModel", **{"propertyPath": property_path, "value": value})
57
57
 
58
58
 
59
59
  def sync_object_model():
dsf/commands/packages.py CHANGED
@@ -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", **{"PackageFile": package_file})
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", **{"Package": package})
19
+ return BaseCommand("UninstallSystemPackage", **{"package": package})
dsf/commands/plugins.py CHANGED
@@ -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", **{"PluginFile": plugin_file})
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", **{"Plugin": plugin})
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, "Key": key, "Value": value}
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", **{"Plugin": plugin, "SaveState": save_state})
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", **{"Plugin": plugin, "SaveState": save_state})
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", **{"Plugin": plugin})
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
- "AccessLevel": access_level,
23
- "SessionType": session_type,
24
- "Origin": origin,
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", **{"Id": session_id})
36
+ return BaseCommand("RemoveUserSession", **{"id": session_id})
@@ -70,12 +70,12 @@ def intercept_init_message(
70
70
  return ClientInitMessage(
71
71
  ConnectionMode.INTERCEPT,
72
72
  **{
73
- "InterceptionMode": intercept_mode,
74
- "Channels": channels,
75
- "AutoFlush": auto_flush,
76
- "AutoEvaluateExpressions": auto_evaluate_expression,
77
- "Filters": filters,
78
- "PriorityCodes": priority_codes,
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
- "SubscriptionMode": subscription_mode,
94
- "Filter": filter_string,
95
- "Filters": filter_list,
93
+ "subscriptionMode": subscription_mode,
94
+ "filter": filter_string,
95
+ "filters": filter_list,
96
96
  },
97
97
  )
@@ -23,10 +23,10 @@ class InputShapingType(str, Enum):
23
23
  zvddd = "zvddd"
24
24
 
25
25
  # EI2 (2-hump)
26
- ei2 = "ei2"
26
+ ei2 = "eI2"
27
27
 
28
28
  # EI3 (3-hump)
29
- ei3 = "ei3"
29
+ ei3 = "eI3"
30
30
 
31
31
  # Custom
32
32
  custom = "custom"
@@ -36,3 +36,6 @@ class ProbeType(IntEnum):
36
36
 
37
37
  # Z motor stall detection
38
38
  ZMotorStall = 10
39
+
40
+ # Scanning Z Probe
41
+ ScanningZProbe = 11
@@ -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.5.1rc1
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.
@@ -27,8 +27,8 @@ Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
28
  Requires-Dist: python-dateutil
29
29
  Provides-Extra: dev
30
- Requires-Dist: sphinx ; extra == 'dev'
31
- Requires-Dist: tox ; extra == 'dev'
30
+ Requires-Dist: sphinx; extra == "dev"
31
+ Requires-Dist: tox; extra == "dev"
32
32
 
33
33
  # Duet Software Framework Python Bindings
34
34
 
@@ -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
- Find out more about [Duet Software Framework Python Bindings](https://github.com/Duet3D/dsf-python).
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,22 +4,22 @@ dsf/http.py,sha256=ZOz0dRGWyxgWDoS-1c3DqQkNmyAZuhPi9y6vtano-mU,5829
4
4
  dsf/utils.py,sha256=9GfGUu0sbeoJBJ6RuRIpI-BZ-1PKIMWaemWliknt1v0,2571
5
5
  dsf/commands/__init__.py,sha256=O4_mLIDnLnN3zLxvH8_3mx3Yx2rU4f2Ha3cm9PmFaS4,198
6
6
  dsf/commands/base_command.py,sha256=rwjaXeZ38yayAH7gYBm9Nf1xpYsg38Ul6oMexSkuCIo,378
7
- dsf/commands/code.py,sha256=UHIBBtJDVR0QJkiYpuo3TA57cvtfIMWzE8m2Z0YY-uE,5795
7
+ dsf/commands/code.py,sha256=4hP4vySeL_TQ8dbBIT-Xjbmn8amxpvW2IYEuLclzlgs,5877
8
8
  dsf/commands/code_channel.py,sha256=RiwN-eDKpFdvus7h8vxbpGRKigleDXUIbI1MZkjF4_8,1399
9
9
  dsf/commands/code_flags.py,sha256=dE7B5LrSdY2VBPquR2kF8PacjsR8ELC0BKOaPJMjPCM,2134
10
- dsf/commands/code_interception.py,sha256=sWWYVDMeOUojq8-4ElKyWlzaJj5L9_BfvfnogsdYByE,1076
10
+ dsf/commands/code_interception.py,sha256=0MD71Wq4c0Mss2VOgyKxjbj49f-DOkKOZDQ-Tz3K928,1076
11
11
  dsf/commands/code_parameter.py,sha256=7vjxgQI5LxaRRzXxEOYK_mk71fng7MKiTYBh-nZ-6h0,8145
12
12
  dsf/commands/code_type.py,sha256=NU8GNaN2AAdNRVc964yQCnlqo82E8QqJ-g31hsdOT80,456
13
13
  dsf/commands/condition_type.py,sha256=bml4YGcPdpk_TZ_aB7RHuS4o0XazpgNkuKMRcqW8XNU,563
14
- dsf/commands/files.py,sha256=feBbNtGkn_VAQuN3N6KhmCxT2OvworzYibLRgE-b9Hk,918
15
- dsf/commands/generic.py,sha256=Fvg1GUrDMKEr4iT-PLr3h27YneI9capymygqVOOIJ-g,5752
16
- dsf/commands/http_endpoints.py,sha256=TMqhtcvmyG92NQAZdziYRtWPtZUK1PjwuL7Onu6PPNM,2341
14
+ dsf/commands/files.py,sha256=wMFY3cbhfmyNh85cpBIgtqlxE7xhCk3QpawXgimBVd8,1062
15
+ dsf/commands/generic.py,sha256=hjTzFJVVjzxFSMgc3ou7AevwnQmNBrJ9WFjTXIq_8y0,5752
16
+ dsf/commands/http_endpoints.py,sha256=CevsLjAh_9GG6MQkAL7aFZKsuyRvYgNkiSCc5-jGv7g,2341
17
17
  dsf/commands/model_subscription.py,sha256=Dq4M7EfRjkHUcIbTrLjJRAxhAhMiawowLbEFS11NMEc,224
18
- dsf/commands/object_model.py,sha256=umDS0QBYke6kA_rjJzTghMUL0FZpW7m7FpgDd81AhCE,2522
19
- dsf/commands/packages.py,sha256=oAERVIeKdbFpkBiN30_yxz6R7npwnPuuhCg-YMeCH6g,712
20
- dsf/commands/plugins.py,sha256=xm5ZVF7fDEFNVLd2Q2v14EGLK6_qgcmjwkxKdrw5CcU,3020
18
+ dsf/commands/object_model.py,sha256=QDtxBbkJA7AozjicUtMAhBq9uGkB9_OHcZQIr8koJG4,2522
19
+ dsf/commands/packages.py,sha256=e7LObfz7xNygMPGi2A5o_F6OG1yFhN5fYO--U0tf5WM,712
20
+ dsf/commands/plugins.py,sha256=w_7YlIxj95w046vO89qGbAXyVzOBw_o-dlMuaqFE-JA,3020
21
21
  dsf/commands/responses.py,sha256=Q6jZwEKbmKkph96EepUdgD6LfY2VAX41MAaj6aJ1-XQ,1755
22
- dsf/commands/user_sessions.py,sha256=BKq8--kh_eoFWDJCL1byiJ4NV3HZ7h3C4jxDI8j2kWo,1312
22
+ dsf/commands/user_sessions.py,sha256=qFN_NfS8n2gVXqfdN0_kA3--kvtrX0ELYKtkxT1U7-E,1312
23
23
  dsf/connections/__init__.py,sha256=83E9M8yOZfdQqm196fnOaR7Wy4_IDYVhFwIl9BltsxI,1898
24
24
  dsf/connections/base_command_connection.py,sha256=kF-qhT_MJYey7wH2Rh1tA5LqauiFA_qNGS609in8FVA,9968
25
25
  dsf/connections/base_connection.py,sha256=U9UcGElF_68sK_7UCENpECvTgtBI2nbh1GTFWjRUrQg,5495
@@ -28,7 +28,7 @@ dsf/connections/exceptions.py,sha256=53NNjIs6fB6UtdcP0aGnIUQsH7fr5HwVM_21TDXjuZM
28
28
  dsf/connections/intercept_connection.py,sha256=sv3cPS8OT1w4wRlCrvpoIUgsu6f_cJ7to0GBQPflQBQ,3480
29
29
  dsf/connections/subscribe_connection.py,sha256=gxJ32Ojvp30d2UIgCG1udTZJTtVNHqJjAYOpr1fWwH0,2444
30
30
  dsf/connections/init_messages/__init__.py,sha256=EzPfwszMfvxl3lwrgq9HUDgqLPjRlkWgoBKme-DZMO8,56
31
- dsf/connections/init_messages/client_init_messages.py,sha256=g30SCx2WOypLD4BekoXeqmmfc0l9gEAHn_ptZRjGMw0,4090
31
+ dsf/connections/init_messages/client_init_messages.py,sha256=3sdL07FXIEHegqhNedvGyHIEBImyReAYpA8wc91TpLs,4090
32
32
  dsf/connections/init_messages/server_init_message.py,sha256=87aMgtYa9n_XHa9ZKKoMYPxo1bJd41D_PEa2CR49YBE,1610
33
33
  dsf/object_model/__init__.py,sha256=UrzocKhApHnYUO8MQ3gyDNwuaEoXmwgUEe2vbx4o2RY,967
34
34
  dsf/object_model/model_collection.py,sha256=7K8C7bb5Sz_cVqlbKdGtgJi8fElJcrYjWFvizvlF9LQ,2008
@@ -87,7 +87,7 @@ dsf/object_model/move/current_move.py,sha256=Qlt7-d7SrsPbYkHKAz7_SeOsrrboKvPxbd1
87
87
  dsf/object_model/move/driver_id.py,sha256=5iMNYRgViw5IcSYxrG2LNurA7ytDSXfBC8v4meAdO-k,2202
88
88
  dsf/object_model/move/extruder.py,sha256=fFr9XRG-ePTg4lTsNcgrdjeyJoduwgCSLOYTzMt9SUQ,5164
89
89
  dsf/object_model/move/extruder_non_linear.py,sha256=C8UUZuyvA32EmgtpZu2yNYVcuLg8guamgKgfg9mvqok,976
90
- dsf/object_model/move/input_shaping.py,sha256=84KOJgJDngN4EAHxyvjOT7n8ODJvO1R1PY0qz7ETW38,2593
90
+ dsf/object_model/move/input_shaping.py,sha256=kwOar7Bfi7RC1pB_OwQCntw7iYvvQw0cTM2ben5wdJ4,2593
91
91
  dsf/object_model/move/keepout_zone.py,sha256=eMP1ramG6cB-a1IJ89Y8BG3VVYIkfh_945jP4D9IAkA,1416
92
92
  dsf/object_model/move/microstepping.py,sha256=-9qWeoLihWPYQqJrAKz4CqvnaNj-zYAtYFVDVxJ0iaE,762
93
93
  dsf/object_model/move/motors_idle_control.py,sha256=ihKMYCm7yTiIkqsA9KCLZpU6FgdkcS5h_6JmcTH1AvU,844
@@ -140,7 +140,7 @@ dsf/object_model/sensors/endstop.py,sha256=QqL4WJ-bmmvAYTf6keS_wlL7w3nkCXEs59UBq
140
140
  dsf/object_model/sensors/endstop_type.py,sha256=XvdO-aJtUGuqtJzOx7DStnzjT-WbbJWdbexDJHoxdJw,474
141
141
  dsf/object_model/sensors/gp_input_port.py,sha256=xNtBsEs8m7ws6nAAKqH_Wan9CNMY3RdeZ_jpBRNvcK8,413
142
142
  dsf/object_model/sensors/probe.py,sha256=mjkKcPRLxoPASn_D1oHkT8Hnk8O3iC99Xb-mQ8Lkuz8,7258
143
- dsf/object_model/sensors/probe_type.py,sha256=MzGQnB-Nm35J2bYJbUuRkEosdgTYYhN5Vu_f1LYyqZI,978
143
+ dsf/object_model/sensors/probe_type.py,sha256=eE4ImrNCQ41iz_dza7hbLcfkoUdTIBD8Kei9wm2jEfA,1026
144
144
  dsf/object_model/sensors/sensors.py,sha256=W3lU-89QESx2jbg6_CRD6U8uw6UN136tPozSNpNCjCw,1333
145
145
  dsf/object_model/sensors/temperature_error.py,sha256=ahqOv7iRzLy88HvXMMRigZCbf3mkbbwYWdiZNnQ5rXI,1232
146
146
  dsf/object_model/sensors/filament_monitors/Duet3DFilamentMonitor.py,sha256=mYm_CWuKJeD63bOoO5npXQyHgCN-Xt6F0E8sTw8upPI,2301
@@ -154,7 +154,7 @@ dsf/object_model/sensors/filament_monitors/pulsed_filament_monitor.py,sha256=hu_
154
154
  dsf/object_model/sensors/filament_monitors/rotating_magnet_filament_monitor.py,sha256=TreikhdkGpyCZXYns0zXVnQLgPArmkvY-75maIEZx_g,3811
155
155
  dsf/object_model/spindles/__init__.py,sha256=YpC_jGR6TrfF3MPo4CeiUuu52AHz9vmYPcZhBAriNEM,109
156
156
  dsf/object_model/spindles/spindle_state.py,sha256=J76S84U9h-mICoFqp58KSPcfuVxoHuSsibtpeOMqnhw,334
157
- dsf/object_model/spindles/spindles.py,sha256=VnJ0LIaweeR7lrZ5oEDq9EP-4bqdiX796KzEC2fAFYA,3291
157
+ dsf/object_model/spindles/spindles.py,sha256=BNqwHG41DFdG2cSnHpMZvFwiUUimUdQ_Nm9CNE7fDWA,3794
158
158
  dsf/object_model/state/__init__.py,sha256=aPuQU1fvoaWUJxCkUkSREh8J3JqbzYSIdyGnSnmgW5U,310
159
159
  dsf/object_model/state/beep_request.py,sha256=-Ah0obdAmVvXLsqTQMPHFCT18_gBI_MesxMSkzSPTkQ,679
160
160
  dsf/object_model/state/gp_output_port.py,sha256=Dhr8We-HIJPqPTcDPzSItIb8w656ET5lO-knmHm_h5E,710
@@ -172,8 +172,8 @@ dsf/object_model/tools/tools.py,sha256=2wOEZlXswUnVBa0cuhyGYHz1z2R-mF25fi0a7WY3W
172
172
  dsf/object_model/volumes/__init__.py,sha256=XuRDty30gqn8jshASvclpxVTachXeAeJyo2-iHKEsKc,50
173
173
  dsf/object_model/volumes/volumes.py,sha256=gqbo5kUQo037A7Wv49vxnnaBhGlNjilJydjW8V2sKZ4,3073
174
174
  dsf/utility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
- dsf_python-3.5.1rc1.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
176
- dsf_python-3.5.1rc1.dist-info/METADATA,sha256=RHM6QcSrpT7B298I-ZVKN930f46FFSyrKYwSexz11rk,2042
177
- dsf_python-3.5.1rc1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
178
- dsf_python-3.5.1rc1.dist-info/top_level.txt,sha256=hrm-wnKtms7vAmVuHX6jIj3C6G5p3uKCiXZH4HwJ4LA,4
179
- dsf_python-3.5.1rc1.dist-info/RECORD,,
175
+ dsf_python-3.6.0b2.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
176
+ dsf_python-3.6.0b2.dist-info/METADATA,sha256=BwSRQmLS4RsuytQ4UH9CUUZYgfHcE4uByQaxIGXKdDU,2054
177
+ dsf_python-3.6.0b2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
178
+ dsf_python-3.6.0b2.dist-info/top_level.txt,sha256=hrm-wnKtms7vAmVuHX6jIj3C6G5p3uKCiXZH4HwJ4LA,4
179
+ dsf_python-3.6.0b2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5