diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b2acc54..a54b722 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,9 @@ on: tags: - "v*" +permissions: + contents: write + jobs: # Publish Python package to PyPI. publish-to-pypi: diff --git a/.idea/ephys-link.iml b/.idea/ephys-link.iml index ca4bf72..52e1e20 100644 --- a/.idea/ephys-link.iml +++ b/.idea/ephys-link.iml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 83a5a49..31648a1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - + diff --git a/pyproject.toml b/pyproject.toml index 9862c4c..00c8ecb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,14 +7,13 @@ name = "ephys-link" dynamic = ["version"] description = "A Python Socket.IO server that allows any Socket.IO-compliant application to communicate with manipulators used in electrophysiology experiments." readme = "README.md" -requires-python = ">=3.13" +requires-python = ">=3.10" license = "GPL-3.0-only" keywords = ["socket-io", "manipulator", "electrophysiology", "ephys", "sensapex", "neuroscience", "neurotech", "virtualbrainlab", "new-scale"] authors = [{ name = "Kenneth Yang", email = "kjy5@uw.edu" }] maintainers = [{ name = "Kenneth Yang", email = "kjy5@uw.edu" }] classifiers = [ "Programming Language :: Python", - "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: 3", @@ -36,7 +35,7 @@ dependencies = [ "requests==2.32.5", "sensapex==1.400.4", "rich==14.2.0", - "vbl-aquarium==1.0.0" + "vbl-aquarium==1.0.1" ] [project.urls] @@ -57,14 +56,14 @@ exclude = ["/.github", "/.idea", "/docs"] [tool.hatch.envs.default] installer = "uv" -python = "3.13" +python = "3.14" dependencies = [ - "pyinstaller==6.15.0", - "basedpyright==1.31.4", + "pyinstaller==6.16.0", + "basedpyright==1.32.1", "pytest==8.4.2", - "pytest-cov==6.3.0", - "pytest-mock==3.15.0", - "pytest-asyncio==1.1.0" + "pytest-cov==7.0.0", + "pytest-mock==3.15.1", + "pytest-asyncio==1.2.0" ] [tool.hatch.envs.default.scripts] exe = "pyinstaller.exe ephys_link.spec -y -- -d && pyinstaller.exe ephys_link.spec -y" @@ -76,7 +75,7 @@ cov = "pytest --cov=ephys_link --cov-report=html --cov-report=term-missing" [tool.hatch.envs.docs] installer = "uv" -python = "3.13" +python = "3.14" skip-install = true dependencies = [ "mkdocs-material==9.6.19", diff --git a/tests/back_end/test_server.py b/tests/back_end/test_server.py index 639e91e..9e82c84 100644 --- a/tests/back_end/test_server.py +++ b/tests/back_end/test_server.py @@ -146,7 +146,7 @@ def run_coroutine(coroutine: Awaitable[None]) -> None: patched_get_event_loop.assert_called_once() spied_info_print.assert_any_call("PLATFORM", platform_handler.get_display_name()) spied_info_print.assert_any_call("MANIPULATORS", str(DUMMY_STRING_LIST)) - spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY) # pyright: ignore[reportAny] + spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY) patched_connect.assert_awaited_once() # pyright: ignore[reportUnusedCallResult] patched_wait.assert_awaited_once() # pyright: ignore[reportUnusedCallResult] @@ -194,7 +194,7 @@ def run_coroutine(coroutine: Awaitable[None]) -> None: patched_get_event_loop.assert_called_once() spied_info_print.assert_any_call("PLATFORM", platform_handler.get_display_name()) spied_info_print.assert_any_call("MANIPULATORS", str(DUMMY_STRING_LIST)) - spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY) # pyright: ignore[reportAny] + spied_info_print.assert_any_call("PINPOINT ID", mocker.ANY) assert init_error.value.args[0] == PROXY_CLIENT_NOT_INITIALIZED_ERROR patched_connect.assert_not_awaited() # pyright: ignore[reportUnusedCallResult] patched_wait.assert_not_awaited() # pyright: ignore[reportUnusedCallResult]