Skip to content

Commit be8b202

Browse files
committed
Clarify Coder API examples
1 parent fd858ef commit be8b202

7 files changed

Lines changed: 73 additions & 41 deletions

File tree

docs/coder-api.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ steps.
2828
## Basic Script
2929

3030
This script lowers the moving assembly by 10 mm, waits 5 seconds, then raises it by 10 mm.
31+
The examples use keyword arguments so the distance, speed, and acceleration units stay clear.
3132

3233
```python
3334
self.enable_motor()
3435

35-
self.move_down(10, 5)
36-
self.sleep(5)
37-
self.move_up(10, 2)
36+
self.move_down(distance_mm=10, speed_mm_s=5)
37+
self.sleep(seconds=5)
38+
self.move_up(distance_mm=10, speed_mm_s=2)
3839

3940
self.disable_motor()
4041
```
@@ -66,8 +67,8 @@ self.move_down(distance_mm, speed_mm_s, acceleration_mm_s2=None)
6667
Examples:
6768

6869
```python
69-
self.move_down(10, 5)
70-
self.move_down(10, 5, 10)
70+
self.move_down(distance_mm=10, speed_mm_s=5)
71+
self.move_down(distance_mm=10, speed_mm_s=5, acceleration_mm_s2=10)
7172
```
7273

7374
The first example lowers the moving assembly by 10 mm at 5 mm/s. The second also sets acceleration to 10 mm/s^2.
@@ -81,8 +82,8 @@ self.move_up(distance_mm, speed_mm_s, acceleration_mm_s2=None)
8182
Examples:
8283

8384
```python
84-
self.move_up(10, 5)
85-
self.move_up(10, 5, 10)
85+
self.move_up(distance_mm=10, speed_mm_s=5)
86+
self.move_up(distance_mm=10, speed_mm_s=5, acceleration_mm_s2=10)
8687
```
8788

8889
### Home the Motor
@@ -109,9 +110,9 @@ self.move_to_position(position_mm, speed_mm_s=None, acceleration_mm_s2=None)
109110
Examples:
110111

111112
```python
112-
self.move_to_position(10)
113-
self.move_to_position(10, 5)
114-
self.move_to_position(10, 5, 10)
113+
self.move_to_position(position_mm=10)
114+
self.move_to_position(position_mm=10, speed_mm_s=5)
115+
self.move_to_position(position_mm=10, speed_mm_s=5, acceleration_mm_s2=10)
115116
```
116117

117118
### Wait
@@ -123,7 +124,7 @@ self.sleep(seconds)
123124
Example:
124125

125126
```python
126-
self.sleep(5)
127+
self.sleep(seconds=5)
127128
```
128129

129130
## Example: Simple Dip Cycle
@@ -132,13 +133,13 @@ self.sleep(5)
132133
self.enable_motor()
133134

134135
# Move into the liquid.
135-
self.move_down(20, 4)
136+
self.move_down(distance_mm=20, speed_mm_s=4)
136137

137138
# Wait while submerged.
138-
self.sleep(10)
139+
self.sleep(seconds=10)
139140

140141
# Withdraw slowly.
141-
self.move_up(20, 1)
142+
self.move_up(distance_mm=20, speed_mm_s=1)
142143

143144
self.disable_motor()
144145
```
@@ -149,10 +150,10 @@ self.disable_motor()
149150
self.enable_motor()
150151

151152
for cycle in range(3):
152-
self.move_down(15, 4)
153-
self.sleep(5)
154-
self.move_up(15, 2)
155-
self.sleep(10)
153+
self.move_down(distance_mm=15, speed_mm_s=4)
154+
self.sleep(seconds=5)
155+
self.move_up(distance_mm=15, speed_mm_s=2)
156+
self.sleep(seconds=10)
156157

157158
self.disable_motor()
158159
```

src/dip_coater/code_editor_init_content.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
self.enable_motor()
2020

2121
# == MOVE DOWN ==
22-
self.move_down(distance_down, speed_down)
22+
self.move_down(distance_mm=distance_down, speed_mm_s=speed_down)
2323

2424
# == WAIT ==
25-
self.sleep(wait_time)
25+
self.sleep(seconds=wait_time)
2626

2727
# == MOVE UP ==
28-
self.move_up(distance_up, speed_up)
28+
self.move_up(distance_mm=distance_up, speed_mm_s=speed_up)
2929

3030
self.disable_motor()

src/dip_coater/coder_API.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ self.disable_motor() # Disarm the motor
55
# Move the motor down by distance_mm at speed_mm_s speed and (optional) acceleration_mm_s acceleration
66
self.move_down(distance_mm, speed_mm_s, acceleration_mm_s2=None)
77
### Examples:
8-
self.move_down(10, 5) # Move the coater down by 10 mm at 5 mm/s
9-
self.move_down(10, 5, 10) # Move the coater down by 10 mm at 5 mm/s and 10 mm/s^2 acceleration
8+
self.move_down(distance_mm=10, speed_mm_s=5)
9+
self.move_down(distance_mm=10, speed_mm_s=5, acceleration_mm_s2=10)
1010

1111
# Move the motor up by distance_mm at <speed_mm_s> speed and (optional) <acceleration_mm_s> acceleration
12-
self.move_down(distance_mm, speed_mm_s, acceleration_mm_s2=None)
12+
self.move_up(distance_mm, speed_mm_s, acceleration_mm_s2=None)
1313
### Examples:
14-
self.move_up(10, 5) # Move the coater up by 10 mm at 5 mm/s
15-
self.move_up(10, 5, 10) # Move the coater up by 10 mm at 5 mm/s and 10 mm/s^2 acceleration
14+
self.move_up(distance_mm=10, speed_mm_s=5)
15+
self.move_up(distance_mm=10, speed_mm_s=5, acceleration_mm_s2=10)
1616

1717
# Home the motor (needed to move to motor to absolute positions)
1818
self.home_motor(home_up=True) # Home the motor. If home_up is True, the motor will move up until the top limit switch is triggered. If home_up is False, the motor will move down until the bottom limit switch is triggered.
1919

2020
# Move the motor to an absolute position (in mm)
21-
self.move_to_position(self, position_mm, speed_mm_s=None, acceleration_mm_s2=None, home_up=True)
21+
self.move_to_position(position_mm, speed_mm_s=None, acceleration_mm_s2=None)
2222
### Examples:
23-
self.move_to_position(10) # Move the coater to 10 mm, using the last set speed and acceleration
24-
self.move_to_position(10, 5) # Move the coater to 10 mm at 5 mm/s
23+
self.move_to_position(position_mm=10)
24+
self.move_to_position(position_mm=10, speed_mm_s=5)
2525

26-
self.sleep(5) # Sleep for 5 seconds
27-
```
26+
self.sleep(seconds=5) # Sleep for 5 seconds
27+
```

src/dip_coater/help.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,20 @@ You can create custom control routines using the coder in the `Coder` tab. To do
6262
following functions (the so-called 'Coder API'):
6363
- `self.enable_motor()`: arm the motor
6464
- `self.disable_motor()`: disarm the motor
65-
- `self.move_down(distance_mm, speed_mm_s, acceleration_mm_s=None)`: move the motor down by supplying the following parameters:
65+
- `self.move_down(distance_mm, speed_mm_s, acceleration_mm_s2=None)`: move the motor down by supplying the following parameters:
6666
- `distance_mm`: the distance in mm to move down
6767
- `speed_mm_s`: the speed in mm/s to move down
68-
- `acceleration_mm_s`: (optional) the acceleration in mm/s^2 to move down (leave empty for default acceleration)
69-
- `self.move_up(distance_mm, speed_mm_s, acceleration_mm_s=None)`: move the motor up by supplying the following parameters:
68+
- `acceleration_mm_s2`: (optional) the acceleration in mm/s^2 to move down (leave empty for default acceleration)
69+
- `self.move_up(distance_mm, speed_mm_s, acceleration_mm_s2=None)`: move the motor up by supplying the following parameters:
7070
- `distance_mm`: the distance in mm to move up
7171
- `speed_mm_s`: the speed in mm/s to move up
72-
- `acceleration_mm_s`: (optional) the acceleration in mm/s^2 to move up (leave empty for default acceleration)
72+
- `acceleration_mm_s2`: (optional) the acceleration in mm/s^2 to move up (leave empty for default acceleration)
7373
- `self.home_motor(home_up=True)`: home the motor, necessary for moving to absolute positions
7474
- `home_up` (optional) if the motor was homed at the top limit switch, set to `True`, if homed using the bottom limit switch, set `False`
75-
- `self.move_to_position(self, position_mm, speed_mm_s=None, acceleration_mm_s2=None, home_up=True)`: move the motor to an absolute position in mm
75+
- `self.move_to_position(position_mm, speed_mm_s=None, acceleration_mm_s2=None)`: move the motor to an absolute position in mm
7676
- `position_mm`: the absolute position in mm to move to
7777
- `speed_mm_s`: (optional) the speed in mm/s to move to the absolute position (leave empty to use the last set speed)
7878
- `acceleration_mm_s2`: (optional) the acceleration in mm/s^2 to move to the absolute position (leave empty to use the last set acceleration)
79-
- `home_up`: (optional) if the motor was homed at the top limit switch, set to `True`, if homed using the bottom limit switch, set `False`
8079
- `self.sleep(seconds)`: wait for a number of seconds
8180

8281
For example, to move the motor down by 10 mm at a speed of 5 mm/s, then wait 5 seconds, and then move up by 10 mm at 2 mm/s,
@@ -87,13 +86,13 @@ you can write the following code in the `Coder` tab:
8786
self.enable_motor()
8887

8988
# Move down
90-
self.move_down(10, 5)
89+
self.move_down(distance_mm=10, speed_mm_s=5)
9190

9291
# Wait for 5 seconds
93-
self.sleep(5)
92+
self.sleep(seconds=5)
9493

9594
# Move up
96-
self.move_up(10, 2)
95+
self.move_up(distance_mm=10, speed_mm_s=2)
9796

9897
# Disarm the motor
9998
self.disable_motor()

src/dip_coater/widgets/coder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def home_motor(self, home_up: bool = None):
288288
def move_to_position(
289289
self,
290290
position_mm: float,
291-
speed_mm_s: float,
291+
speed_mm_s: float = None,
292292
acceleration_mm_s2: float = None,
293293
home_up: bool = None,
294294
):

src/test/test_coder.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import inspect
23
from types import SimpleNamespace
34

45
import pytest
@@ -51,6 +52,12 @@ def test_coder_api_refuses_new_commands_after_stop_request():
5152
assert motor_controls.moves == []
5253

5354

55+
def test_coder_move_to_position_allows_default_speed():
56+
signature = inspect.signature(Coder.move_to_position)
57+
58+
assert signature.parameters["speed_mm_s"].default is None
59+
60+
5461
def test_coder_builds_python_highlighted_editor():
5562
editor = Coder.build_code_editor('def coat():\n print("Hello, World!")\n')
5663

src/test/test_docs_content.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,31 @@ def test_coder_docs_explain_trusted_scripts_and_stop_button():
3535
assert "between Coder API calls" in coder_docs
3636

3737

38+
def test_coder_examples_use_explicit_keyword_arguments():
39+
root = Path(__file__).parents[2]
40+
docs_coder = (root / "docs" / "coder-api.md").read_text()
41+
bundled_coder = (root / "src" / "dip_coater" / "coder_API.md").read_text()
42+
help_docs = (root / "src" / "dip_coater" / "help.md").read_text()
43+
initial_code = (
44+
root / "src" / "dip_coater" / "code_editor_init_content.py"
45+
).read_text()
46+
47+
assert "self.move_down(distance_mm=10, speed_mm_s=5)" in docs_coder
48+
assert (
49+
"self.move_down(distance_mm=10, speed_mm_s=5, acceleration_mm_s2=10)"
50+
in docs_coder
51+
)
52+
assert "self.move_up(distance_mm=10, speed_mm_s=5)" in bundled_coder
53+
assert "self.move_to_position(position_mm=10, speed_mm_s=5)" in bundled_coder
54+
assert "self.move_down(distance_mm=10, speed_mm_s=5)" in help_docs
55+
assert (
56+
"self.move_down(distance_mm=distance_down, speed_mm_s=speed_down)"
57+
in initial_code
58+
)
59+
assert "self.move_down(10, 5)" not in docs_coder
60+
assert "self.move_up(10, 2)" not in help_docs
61+
62+
3863
def test_run_docs_explain_session_log_file():
3964
run_docs = (Path(__file__).parents[2] / "docs" / "run-the-app.md").read_text()
4065

0 commit comments

Comments
 (0)