From c399af7f7454f2268af363d77afcb04f5e9c8b91 Mon Sep 17 00:00:00 2001 From: Danny Staple Date: Sat, 25 Jan 2025 22:55:38 +0000 Subject: [PATCH 1/4] I broke them by renaming to main --- .editorconfig | 3 ++ .github/workflows/python-test.yml | 46 +++++++++++++++---------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/.editorconfig b/.editorconfig index 7148ed5..c0a189d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,3 +11,6 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 120 + +[*.yml, *.yaml] +indent_size = 2 diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 5ccdef9..7af1b18 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -1,13 +1,13 @@ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - +--- name: Python package on: push: - branches: [ master ] + branches: [ main ] pull_request: - branches: [ master ] + branches: [ main ] jobs: test: @@ -18,23 +18,23 @@ jobs: python-version: [3.7, 3.8, 3.9] steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install flake8 pytest - python -m pip install -e . -# if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics -# - name: Test with pytest -# run: | -# pytest + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install flake8 pytest + python -m pip install -e . + # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + # - name: Test with pytest + # run: | + # pytest From 8d7c932026696ba12ac2dc5edb6b6f77f0ae7322 Mon Sep 17 00:00:00 2001 From: Danny Staple Date: Sat, 25 Jan 2025 22:58:26 +0000 Subject: [PATCH 2/4] Those versions were a bit ancient --- .github/workflows/python-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 7af1b18..984769b 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9] + python-version: [3.9, 3.11, 3.14] steps: - uses: actions/checkout@v2 From 9af0ab30373e889496302b3b8700d02a097fe398 Mon Sep 17 00:00:00 2001 From: Danny Staple Date: Sat, 25 Jan 2025 23:04:19 +0000 Subject: [PATCH 3/4] Rename to something consistent and useful --- README.md | 2 +- demos/bluedot/led_only.py | 8 +++--- demos/bluedot/simple_grid.py | 28 +++++++++--------- demos/key_ctrl.py | 24 ++++++++-------- demos/web_arm/arm_hello.py | 6 ++-- demos/web_arm/arm_server.py | 32 ++++++++++----------- demos/web_arm/arm_server2.py | 32 ++++++++++----------- {usb_arm => owi_maplin_usb_arm}/__init__.py | 0 setup.py | 6 ++-- setup_arm.sh | 2 +- tests/test_usb_arm.py | 30 +++++++++---------- 11 files changed, 85 insertions(+), 85 deletions(-) rename {usb_arm => owi_maplin_usb_arm}/__init__.py (100%) diff --git a/README.md b/README.md index 18898aa..48cfce7 100755 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ This has previously been tested on Linux, OSX and Windows. OSX and Windows requi As a library: - >>> import usb_arm + >>> import owi_maplin_usb_arm as usb_arm To initialise libusb and the arm diff --git a/demos/bluedot/led_only.py b/demos/bluedot/led_only.py index 47af7aa..a4ec180 100644 --- a/demos/bluedot/led_only.py +++ b/demos/bluedot/led_only.py @@ -1,16 +1,16 @@ from bluedot import BlueDot from signal import pause -import usb_arm +import owi_maplin_robot_arm -arm = usb_arm.Arm() +arm = owi_maplin_robot_arm.Arm() def led_pressed(pos): - arm.tell(usb_arm.LedOn) + arm.tell(owi_maplin_robot_arm.LedOn) def stop(*args): - arm.tell(usb_arm.Stop) + arm.tell(owi_maplin_robot_arm.Stop) bd = BlueDot(cols=3, rows=2) diff --git a/demos/bluedot/simple_grid.py b/demos/bluedot/simple_grid.py index 8cb7c72..12281c7 100644 --- a/demos/bluedot/simple_grid.py +++ b/demos/bluedot/simple_grid.py @@ -1,51 +1,51 @@ from bluedot import BlueDot from signal import pause -import usb_arm +import owi_maplin_robot_arm -arm = usb_arm.Arm() +arm = owi_maplin_robot_arm.Arm() def led_pressed(pos): - arm.tell(usb_arm.LedOn) + arm.tell(owi_maplin_robot_arm.LedOn) def stop(*args): - arm.tell(usb_arm.Stop) + arm.tell(owi_maplin_robot_arm.Stop) def grip_pressed(pos): if pos.top: - arm.tell(usb_arm.GripsClose) + arm.tell(owi_maplin_robot_arm.GripsClose) if pos.bottom: - arm.tell(usb_arm.GripsOpen) + arm.tell(owi_maplin_robot_arm.GripsOpen) def wrist_pressed(pos): if pos.top: - arm.tell(usb_arm.WristUp) + arm.tell(owi_maplin_robot_arm.WristUp) if pos.bottom: - arm.tell(usb_arm.WristDown) + arm.tell(owi_maplin_robot_arm.WristDown) def elbow_pressed(pos): if pos.top: - arm.tell(usb_arm.ElbowUp) + arm.tell(owi_maplin_robot_arm.ElbowUp) if pos.bottom: - arm.tell(usb_arm.ElbowDown) + arm.tell(owi_maplin_robot_arm.ElbowDown) def shoulder_pressed(pos): if pos.top: - arm.tell(usb_arm.ShoulderUp) + arm.tell(owi_maplin_robot_arm.ShoulderUp) if pos.bottom: - arm.tell(usb_arm.ShoulderDown) + arm.tell(owi_maplin_robot_arm.ShoulderDown) def base_pressed(pos): if pos.left: - arm.tell(usb_arm.BaseCtrClockWise) + arm.tell(owi_maplin_robot_arm.BaseCtrClockWise) if pos.right: - arm.tell(usb_arm.BaseClockWise) + arm.tell(owi_maplin_robot_arm.BaseClockWise) bd = BlueDot(cols=3, rows=2) diff --git a/demos/key_ctrl.py b/demos/key_ctrl.py index fb69686..f7503a9 100644 --- a/demos/key_ctrl.py +++ b/demos/key_ctrl.py @@ -1,6 +1,6 @@ """key_ctrl - key based arm controller""" from functools import partial -import usb_arm +import owi_maplin_robot_arm import pygame from pygame.locals import * import sys @@ -18,22 +18,22 @@ def make_keymap(): """Bp - an initialised arm bitpattern. returns the keymap""" return { - K_z: usb_arm.BaseClockWise, - K_x: usb_arm.BaseCtrClockWise, - K_r: usb_arm.CloseGrips, - K_f: usb_arm.OpenGrips, - K_a: usb_arm.ShoulderDown, - K_q: usb_arm.ShoulderUp, - K_s: usb_arm.ElbowDown, - K_w: usb_arm.ElbowUp, - K_d: usb_arm.WristDown, - K_e: usb_arm.WristUp} + K_z: owi_maplin_robot_arm.BaseClockWise, + K_x: owi_maplin_robot_arm.BaseCtrClockWise, + K_r: owi_maplin_robot_arm.CloseGrips, + K_f: owi_maplin_robot_arm.OpenGrips, + K_a: owi_maplin_robot_arm.ShoulderDown, + K_q: owi_maplin_robot_arm.ShoulderUp, + K_s: owi_maplin_robot_arm.ElbowDown, + K_w: owi_maplin_robot_arm.ElbowUp, + K_d: owi_maplin_robot_arm.WristDown, + K_e: owi_maplin_robot_arm.WristUp} def key_loop(): km = make_keymap() try: - arm = usb_arm.Arm() + arm = owi_maplin_robot_arm.Arm() except AttributeError: print("Please make sure the arm is connected and turned on") sys.exit(1) diff --git a/demos/web_arm/arm_hello.py b/demos/web_arm/arm_hello.py index 85b8730..2217497 100644 --- a/demos/web_arm/arm_hello.py +++ b/demos/web_arm/arm_hello.py @@ -1,8 +1,8 @@ -import usb_arm +import owi_maplin_robot_arm from flask import Flask, Response -arm = usb_arm.Arm() +arm = owi_maplin_robot_arm.Arm() app = Flask(__name__) @@ -10,7 +10,7 @@ def flash(): def inner(): yield "starting
\n" - arm.move(usb_arm.LedOn) + arm.move(owi_maplin_robot_arm.LedOn) yield "completed\n" return Response(inner()) diff --git a/demos/web_arm/arm_server.py b/demos/web_arm/arm_server.py index 0a6b5da..b371ad2 100644 --- a/demos/web_arm/arm_server.py +++ b/demos/web_arm/arm_server.py @@ -1,25 +1,25 @@ -import usb_arm +import owi_maplin_robot_arm from flask import Flask, Response, request -arm = usb_arm.Arm() +arm = owi_maplin_robot_arm.Arm() app = Flask(__name__) movemap = { - "GripsClose": usb_arm.GripsClose, - "CloseGrips": usb_arm.CloseGrips, - "GripsOpen": usb_arm.GripsOpen, - "OpenGrips": usb_arm.OpenGrips, - "Stop": usb_arm.Stop, - "WristUp": usb_arm.WristUp, - "WristDown": usb_arm.WristDown, - "ElbowUp": usb_arm.ElbowUp, - "ElbowDown": usb_arm.ElbowDown, - "ShoulderUp": usb_arm.ShoulderUp, - "ShoulderDown": usb_arm.ShoulderDown, - "BaseClockWise": usb_arm.BaseClockWise, - "BaseCtrClockWise": usb_arm.BaseCtrClockWise, - "LedOn": usb_arm.LedOn + "GripsClose": owi_maplin_robot_arm.GripsClose, + "CloseGrips": owi_maplin_robot_arm.CloseGrips, + "GripsOpen": owi_maplin_robot_arm.GripsOpen, + "OpenGrips": owi_maplin_robot_arm.OpenGrips, + "Stop": owi_maplin_robot_arm.Stop, + "WristUp": owi_maplin_robot_arm.WristUp, + "WristDown": owi_maplin_robot_arm.WristDown, + "ElbowUp": owi_maplin_robot_arm.ElbowUp, + "ElbowDown": owi_maplin_robot_arm.ElbowDown, + "ShoulderUp": owi_maplin_robot_arm.ShoulderUp, + "ShoulderDown": owi_maplin_robot_arm.ShoulderDown, + "BaseClockWise": owi_maplin_robot_arm.BaseClockWise, + "BaseCtrClockWise": owi_maplin_robot_arm.BaseCtrClockWise, + "LedOn": owi_maplin_robot_arm.LedOn } diff --git a/demos/web_arm/arm_server2.py b/demos/web_arm/arm_server2.py index 051decc..6337c15 100644 --- a/demos/web_arm/arm_server2.py +++ b/demos/web_arm/arm_server2.py @@ -1,25 +1,25 @@ -import usb_arm +import owi_maplin_robot_arm from flask import Flask, Response, request, render_template -arm = usb_arm.Arm() +arm = owi_maplin_robot_arm.Arm() app = Flask(__name__) movemap = { - "GripsClose": usb_arm.GripsClose, - "CloseGrips": usb_arm.CloseGrips, - "GripsOpen": usb_arm.GripsOpen, - "OpenGrips": usb_arm.OpenGrips, - "Stop": usb_arm.Stop, - "WristUp": usb_arm.WristUp, - "WristDown": usb_arm.WristDown, - "ElbowUp": usb_arm.ElbowUp, - "ElbowDown": usb_arm.ElbowDown, - "ShoulderUp": usb_arm.ShoulderUp, - "ShoulderDown": usb_arm.ShoulderDown, - "BaseClockWise": usb_arm.BaseClockWise, - "BaseCtrClockWise": usb_arm.BaseCtrClockWise, - "LedOn": usb_arm.LedOn + "GripsClose": owi_maplin_robot_arm.GripsClose, + "CloseGrips": owi_maplin_robot_arm.CloseGrips, + "GripsOpen": owi_maplin_robot_arm.GripsOpen, + "OpenGrips": owi_maplin_robot_arm.OpenGrips, + "Stop": owi_maplin_robot_arm.Stop, + "WristUp": owi_maplin_robot_arm.WristUp, + "WristDown": owi_maplin_robot_arm.WristDown, + "ElbowUp": owi_maplin_robot_arm.ElbowUp, + "ElbowDown": owi_maplin_robot_arm.ElbowDown, + "ShoulderUp": owi_maplin_robot_arm.ShoulderUp, + "ShoulderDown": owi_maplin_robot_arm.ShoulderDown, + "BaseClockWise": owi_maplin_robot_arm.BaseClockWise, + "BaseCtrClockWise": owi_maplin_robot_arm.BaseCtrClockWise, + "LedOn": owi_maplin_robot_arm.LedOn } diff --git a/usb_arm/__init__.py b/owi_maplin_usb_arm/__init__.py similarity index 100% rename from usb_arm/__init__.py rename to owi_maplin_usb_arm/__init__.py diff --git a/setup.py b/setup.py index 964b529..5615419 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,9 @@ from distutils.core import setup setup( - name='usb_robot_arm', - version='0.2.0', - packages=['usb_robot_arm',], + name='owi_maplin_usb_arm', + version='0.4.0', + packages=['owi_maplin_usb_arm',], author="Danny Staple - Orionrobots", license='Creative Commons By Attribution Share-Alike v3.0', long_description=open('README.md').read(), diff --git a/setup_arm.sh b/setup_arm.sh index 626bc9e..9385f37 100644 --- a/setup_arm.sh +++ b/setup_arm.sh @@ -1,6 +1,6 @@ #!/bin/env bash -e # Raspbian setup -apt-get update -y +apt-get update -y apt-get install -y python3-libusb1 python3-pip git pip3 install git+https://github.com/orionrobots/python_usb_robot_arm cat </etc/udev/rules.d/42-usb-arm-permissions.rules diff --git a/tests/test_usb_arm.py b/tests/test_usb_arm.py index af66b6d..0849469 100644 --- a/tests/test_usb_arm.py +++ b/tests/test_usb_arm.py @@ -1,4 +1,4 @@ -import usb_arm +import owi_maplin_robot_arm import unittest import time @@ -28,7 +28,7 @@ def reset(self): self.ctrl_commands = [] -class TestableArm(usb_arm.Arm): +class TestableArm(owi_maplin_robot_arm.Arm): def __init__(self): self.dev = StubUsb() @@ -48,46 +48,46 @@ def setUp(self): self.arm = TestableArm() def test_move_includes_correct_verb(self): - self.arm.move(usb_arm.LedOn) + self.arm.move(owi_maplin_robot_arm.LedOn) cmd, time = self.arm.get_ctrl_cmd(0) - self.assertEqual(usb_arm.LedOn, cmd) + self.assertEqual(owi_maplin_robot_arm.LedOn, cmd) def test_move_adds_stop_verb(self): - self.arm.move(usb_arm.ShoulderDown) - self.assertEqual([usb_arm.ShoulderDown, usb_arm.Stop], self.arm.get_ctrl_cmd_list()) + self.arm.move(owi_maplin_robot_arm.ShoulderDown) + self.assertEqual([owi_maplin_robot_arm.ShoulderDown, owi_maplin_robot_arm.Stop], self.arm.get_ctrl_cmd_list()) def test_default_move_time_spaces_commands_as_expected(self): - self.arm.move(usb_arm.ElbowUp) + self.arm.move(owi_maplin_robot_arm.ElbowUp) cmd0, time0 = self.arm.get_ctrl_cmd(0) cmd1, time1 = self.arm.get_ctrl_cmd(1) self.assertIn(time1 - time0, range(990, 1010)) def test_specific_move_time_spaces_commands_as_expected(self): - self.arm.move(usb_arm.ElbowUp, 2) + self.arm.move(owi_maplin_robot_arm.ElbowUp, 2) cmd0, time0 = self.arm.get_ctrl_cmd(0) cmd1, time1 = self.arm.get_ctrl_cmd(1) self.assertIn(time1 - time0, range(1090, 2010)) def test_untimed_seq_of_commands_orders_as_expected(self): - cmds = [[usb_arm.ElbowUp], [usb_arm.ElbowDown], [usb_arm.ShoulderDown]] + cmds = [[owi_maplin_robot_arm.ElbowUp], [owi_maplin_robot_arm.ElbowDown], [owi_maplin_robot_arm.ShoulderDown]] self.arm.doActions(cmds) expected_cmds = [] for c in cmds: expected_cmds.append(c[0]) - expected_cmds.append(usb_arm.Stop) + expected_cmds.append(owi_maplin_robot_arm.Stop) self.assertEqual(expected_cmds, self.arm.get_ctrl_cmd_list()) def test_timed_seq_of_commands_orders_as_expected(self): - cmds = [[usb_arm.ElbowUp, 1], [usb_arm.ElbowDown, 2], [usb_arm.ShoulderDown, 3]] + cmds = [[owi_maplin_robot_arm.ElbowUp, 1], [owi_maplin_robot_arm.ElbowDown, 2], [owi_maplin_robot_arm.ShoulderDown, 3]] self.arm.doActions(cmds) expected_cmds = [] for c in cmds: expected_cmds.append(c[0]) - expected_cmds.append(usb_arm.Stop) + expected_cmds.append(owi_maplin_robot_arm.Stop) self.assertEqual(expected_cmds, self.arm.get_ctrl_cmd_list()) def test_timed_seq_of_commands_has_expected_times(self): - cmds = [[usb_arm.BaseCtrClockWise, 2], [usb_arm.ElbowUp, 4]] + cmds = [[owi_maplin_robot_arm.BaseCtrClockWise, 2], [owi_maplin_robot_arm.ElbowUp, 4]] self.arm.doActions(cmds) cmd0, time0 = self.arm.get_ctrl_cmd(0) cmd1, time1 = self.arm.get_ctrl_cmd(1) @@ -98,8 +98,8 @@ def test_timed_seq_of_commands_has_expected_times(self): self.assertIn(time3 - time2, range(3090, 4010)) def test_both_grips_action_names_exist(self): - self.assertEqual(usb_arm.GripsOpen, usb_arm.OpenGrips) - self.assertEqual(usb_arm.GripsClose, usb_arm.CloseGrips) + self.assertEqual(owi_maplin_robot_arm.GripsOpen, owi_maplin_robot_arm.OpenGrips) + self.assertEqual(owi_maplin_robot_arm.GripsClose, owi_maplin_robot_arm.CloseGrips) if __name__ == '__main__': From 3de2a20bb3eeb5ef4ad2b8c2126a173611939f62 Mon Sep 17 00:00:00 2001 From: Danny Staple Date: Sat, 25 Jan 2025 23:05:29 +0000 Subject: [PATCH 4/4] Nope 14 was too far ahead --- .github/workflows/python-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 984769b..b173595 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.9, 3.11, 3.14] + python-version: [3.9, 3.11, 3.13] steps: - uses: actions/checkout@v2