From 6860aa6ef37dd9cefaf5549875923f8b9c0a5d45 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 23 Feb 2026 14:16:09 -0800 Subject: [PATCH 1/3] Update pyproject.toml --- pyproject.toml | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ce7b121..ef2f2df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,18 +25,9 @@ homepage = "https://github.com/synodic/synodic-client" repository = "https://github.com/synodic/synodic-client" [dependency-groups] -build = [ - "pyinstaller>=6.19.0", -] -lint = [ - "ruff>=0.15.2", - "pyrefly>=0.53.0", -] -test = [ - "pytest>=9.0.2", - "pytest-cov>=7.0.0", - "pytest-mock>=3.15.1", -] +build = ["pyinstaller>=6.19.0"] +lint = ["ruff>=0.15.2", "pyrefly>=0.53.0"] +test = ["pytest>=9.0.2", "pytest-cov>=7.0.0", "pytest-mock>=3.15.1"] [project.scripts] synodic-c = "synodic_client.cli:app" @@ -105,9 +96,7 @@ data = [{ path = "data/**/*", relative-to = "data/" }] [tool.pdm.dev-dependencies] -dev = [ - "-e file:///d:/Projects/Synodic/porringer#egg=porringer", -] +dev = ["-e file:///d:/Projects/Synodic/porringer#egg=porringer"] [build-system] build-backend = "pdm.backend" requires = ["pdm.backend"] From ccd66416927759511fb5ef375f463f9495b5570d Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 23 Feb 2026 14:22:35 -0800 Subject: [PATCH 2/3] Lint Fixes --- synodic_client/startup.py | 10 +++++----- synodic_client/updater.py | 3 +-- tests/unit/windows/test_startup.py | 16 +++++++++------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/synodic_client/startup.py b/synodic_client/startup.py index 26a8176..b935f55 100644 --- a/synodic_client/startup.py +++ b/synodic_client/startup.py @@ -15,14 +15,14 @@ STARTUP_VALUE_NAME = 'SynodicClient' """Registry value name used in the ``Run`` key.""" -_RUN_KEY_PATH = r'Software\Microsoft\Windows\CurrentVersion\Run' +RUN_KEY_PATH = r'Software\Microsoft\Windows\CurrentVersion\Run' if sys.platform == 'win32': import winreg def register_startup(exe_path: str) -> None: - """Register the application to start automatically on login. + r"""Register the application to start automatically on login. Writes a value to ``HKCU\Software\Microsoft\Windows\CurrentVersion\Run`` pointing to *exe_path*. Calling this repeatedly is safe and will @@ -32,7 +32,7 @@ def register_startup(exe_path: str) -> None: exe_path: Absolute path to the application executable. """ try: - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key: winreg.SetValueEx(key, STARTUP_VALUE_NAME, 0, winreg.REG_SZ, f'"{exe_path}"') logger.info('Registered auto-startup -> %s', exe_path) except OSError: @@ -44,7 +44,7 @@ def remove_startup() -> None: Silently succeeds if the value does not exist. """ try: - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key: winreg.DeleteValue(key, STARTUP_VALUE_NAME) logger.info('Removed auto-startup registration') except FileNotFoundError: @@ -59,7 +59,7 @@ def is_startup_registered() -> bool: ``True`` if the ``Run`` key contains the startup value. """ try: - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: winreg.QueryValueEx(key, STARTUP_VALUE_NAME) return True except FileNotFoundError: diff --git a/synodic_client/updater.py b/synodic_client/updater.py index 0c19626..59d4fda 100644 --- a/synodic_client/updater.py +++ b/synodic_client/updater.py @@ -18,6 +18,7 @@ from packaging.version import Version from synodic_client.protocol import remove_protocol +from synodic_client.startup import remove_startup logger = logging.getLogger(__name__) @@ -380,8 +381,6 @@ def _on_before_uninstall(version: str) -> None: Args: version: The current version string (provided by Velopack). """ - from synodic_client.startup import remove_startup - logger.info('Velopack uninstall hook fired for version %s', version) try: remove_protocol() diff --git a/tests/unit/windows/test_startup.py b/tests/unit/windows/test_startup.py index 4e3bc95..c2300dc 100644 --- a/tests/unit/windows/test_startup.py +++ b/tests/unit/windows/test_startup.py @@ -6,7 +6,7 @@ import pytest from synodic_client.startup import ( - _RUN_KEY_PATH, + RUN_KEY_PATH, STARTUP_VALUE_NAME, is_startup_registered, register_startup, @@ -35,7 +35,7 @@ def test_writes_registry_value() -> None: mock_open.assert_called_once_with( winreg.HKEY_CURRENT_USER, - _RUN_KEY_PATH, + RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE, ) @@ -137,7 +137,7 @@ def test_register_creates_valid_entry() -> None: with patch('synodic_client.startup.STARTUP_VALUE_NAME', _TEST_VALUE_NAME): register_startup(test_exe) - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: value, reg_type = winreg.QueryValueEx(key, _TEST_VALUE_NAME) assert reg_type == winreg.REG_SZ assert test_exe in value @@ -153,9 +153,11 @@ def test_remove_deletes_entry() -> None: register_startup(r'C:\test\synodic_test.exe') remove_startup() - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: - with pytest.raises(FileNotFoundError): - winreg.QueryValueEx(key, _TEST_VALUE_NAME) + with ( + winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key, + pytest.raises(FileNotFoundError), + ): + winreg.QueryValueEx(key, _TEST_VALUE_NAME) @staticmethod def test_register_is_idempotent() -> None: @@ -168,7 +170,7 @@ def test_register_is_idempotent() -> None: register_startup(exe_v1) register_startup(exe_v2) - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key: value, _ = winreg.QueryValueEx(key, _TEST_VALUE_NAME) assert exe_v2 in value assert exe_v1 not in value From b41f51f2191b9e42c043a923ffbe626fd1f71f75 Mon Sep 17 00:00:00 2001 From: Asher Norland Date: Mon, 23 Feb 2026 14:24:14 -0800 Subject: [PATCH 3/3] Remove Local Dev Dep --- pdm.lock | 94 ++++++++++++++++++++++++++------------------------ pyproject.toml | 8 ++--- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/pdm.lock b/pdm.lock index f2a07d0..45b8fe0 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "build", "dev", "lint", "test"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:322b631cbaf8628fb9710d64c42c7a88ca7dcf0aa97639790947246c3aeb9ff6" +content_hash = "sha256:f07f57cb6c2748e33a2352195ca8fdf838b74c3bcabb338a75519eeff09874e1" [[metadata.targets]] requires_python = ">=3.14,<3.15" @@ -25,7 +25,7 @@ name = "annotated-doc" version = "0.0.4" requires_python = ">=3.8" summary = "Document parameters, class attributes, return types, and variables inline, with Annotated." -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, @@ -36,7 +36,7 @@ name = "annotated-types" version = "0.7.0" requires_python = ">=3.8" summary = "Reusable constraint types to use with typing.Annotated" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "typing-extensions>=4.0.0; python_version < \"3.9\"", ] @@ -50,7 +50,7 @@ name = "anyio" version = "4.12.1" requires_python = ">=3.9" summary = "High-level concurrency and networking framework on top of asyncio or Trio" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "exceptiongroup>=1.0.2; python_version < \"3.11\"", "idna>=2.8", @@ -66,7 +66,7 @@ name = "certifi" version = "2026.1.4" requires_python = ">=3.7" summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"}, {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"}, @@ -77,7 +77,7 @@ name = "click" version = "8.3.1" requires_python = ">=3.10" summary = "Composable command line interface toolkit" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "colorama; platform_system == \"Windows\"", ] @@ -91,7 +91,7 @@ name = "colorama" version = "0.4.6" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" summary = "Cross-platform colored terminal text." -groups = ["default", "dev", "test"] +groups = ["default", "test"] marker = "sys_platform == \"win32\" or platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, @@ -190,7 +190,7 @@ name = "h11" version = "0.16.0" requires_python = ">=3.8" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -201,7 +201,7 @@ name = "httpcore" version = "1.0.9" requires_python = ">=3.8" summary = "A minimal low-level HTTP client." -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "certifi", "h11>=0.16", @@ -216,7 +216,7 @@ name = "httpx" version = "0.28.1" requires_python = ">=3.8" summary = "The next generation HTTP client." -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "anyio", "certifi", @@ -233,7 +233,7 @@ name = "idna" version = "3.11" requires_python = ">=3.8" summary = "Internationalized Domain Names in Applications (IDNA)" -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, @@ -269,7 +269,7 @@ name = "markdown-it-py" version = "4.0.0" requires_python = ">=3.10" summary = "Python port of markdown-it. Markdown parsing, done right!" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "mdurl~=0.1", ] @@ -283,7 +283,7 @@ name = "mdurl" version = "0.1.2" requires_python = ">=3.7" summary = "Markdown URL utilities" -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -294,7 +294,7 @@ name = "packaging" version = "26.0" requires_python = ">=3.8" summary = "Core utilities for Python packages" -groups = ["default", "build", "dev", "test"] +groups = ["default", "build", "test"] files = [ {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, @@ -317,7 +317,7 @@ name = "platformdirs" version = "4.9.2" requires_python = ">=3.10" summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "platformdirs-4.9.2-py3-none-any.whl", hash = "sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd"}, {file = "platformdirs-4.9.2.tar.gz", hash = "sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291"}, @@ -336,12 +336,10 @@ files = [ [[package]] name = "porringer" -version = "0.2.1.dev49" +version = "0.2.1.dev48" requires_python = ">=3.14" -editable = true -path = "d:/Projects/Synodic/porringer" summary = "" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "httpx<1.0,>=0.28.1", "packaging>=26.0", @@ -350,13 +348,17 @@ dependencies = [ "typer[all]>=0.24.0", "userpath>=1.9.2", ] +files = [ + {file = "porringer-0.2.1.dev48-py3-none-any.whl", hash = "sha256:fb8faa9d5a4e45c93a024eb5e5311368cb80423df33d117d96751dd80096eb0d"}, + {file = "porringer-0.2.1.dev48.tar.gz", hash = "sha256:30e93bf4c404165700c5436c9e7ee7d4def51171d49ba8a03449d5fa06f90618"}, +] [[package]] name = "pydantic" version = "2.12.5" requires_python = ">=3.9" summary = "Data validation using Python type hints" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "annotated-types>=0.6.0", "pydantic-core==2.41.5", @@ -373,7 +375,7 @@ name = "pydantic-core" version = "2.41.5" requires_python = ">=3.9" summary = "Core functionality for Pydantic validation and serialization" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "typing-extensions>=4.14.1", ] @@ -414,7 +416,7 @@ name = "pygments" version = "2.19.2" requires_python = ">=3.8" summary = "Pygments is a syntax highlighting package written in Python." -groups = ["default", "dev", "test"] +groups = ["default", "test"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -469,20 +471,20 @@ files = [ [[package]] name = "pyrefly" -version = "0.53.0" +version = "0.54.0" requires_python = ">=3.8" summary = "A fast type checker and language server for Python with powerful IDE features" groups = ["lint"] files = [ - {file = "pyrefly-0.53.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:79d7fb35dff0988b3943c26f74cc752fad54357a0bc33f7db665f02d1c9a5bcc"}, - {file = "pyrefly-0.53.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1d98b1e86f3c38db44860695b7986e731238e1b19c3cad7a3050476a8f6f84d"}, - {file = "pyrefly-0.53.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb9f2440f7e0c70aa18400f44aed994c326a1ab00f2b01cf7253a63fc62d7c6b"}, - {file = "pyrefly-0.53.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4e826a5ff2aba2c41e02e6094580751c512db7916e60728cd8612dbcf178d7b"}, - {file = "pyrefly-0.53.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4c69410c7a96b417a390a0e3d340f4370fdab02f9d3eaa222c4bd42e3ce24a"}, - {file = "pyrefly-0.53.0-py3-none-win32.whl", hash = "sha256:00687bb6be6e366b8c0137a89625da40ced3b9212a65e561857ff888fe88e6e8"}, - {file = "pyrefly-0.53.0-py3-none-win_amd64.whl", hash = "sha256:e0512e6f7af44ae01cfddba096ff7740e15cbd1d0497a3d34a7afcb504e2b300"}, - {file = "pyrefly-0.53.0-py3-none-win_arm64.whl", hash = "sha256:5066e2102769683749102421b8b8667cae26abe1827617f04e8df4317e0a94af"}, - {file = "pyrefly-0.53.0.tar.gz", hash = "sha256:aef117e8abb9aa4cf17fc64fbf450d825d3c65fc9de3c02ed20129ebdd57aa74"}, + {file = "pyrefly-0.54.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:58a3f092b6dc25ef79b2dc6c69a40f36784ca157c312bfc0baea463926a9db6d"}, + {file = "pyrefly-0.54.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:615081414106dd95873bc39c3a4bed68754c6cc24a8177ac51d22f88f88d3eb3"}, + {file = "pyrefly-0.54.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbcaf20f5fe585079079a95205c1f3cd4542d17228cdf1df560288880623b70"}, + {file = "pyrefly-0.54.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d5da116c0d34acfbd66663addd3ca8aa78a636f6692a66e078126d3620a883"}, + {file = "pyrefly-0.54.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef3ac27f1a4baaf67aead64287d3163350844794aca6315ad1a9650b16ec26a"}, + {file = "pyrefly-0.54.0-py3-none-win32.whl", hash = "sha256:7d607d72200a8afbd2db10bfefb40160a7a5d709d207161c21649cedd5cfc09a"}, + {file = "pyrefly-0.54.0-py3-none-win_amd64.whl", hash = "sha256:fd416f04f89309385696f685bd5c9141011f18c8072f84d31ca20c748546e791"}, + {file = "pyrefly-0.54.0-py3-none-win_arm64.whl", hash = "sha256:f06ab371356c7b1925e0bffe193b738797e71e5dbbff7fb5a13f90ee7521211d"}, + {file = "pyrefly-0.54.0.tar.gz", hash = "sha256:c6663be64d492f0d2f2a411ada9f28a6792163d34133639378b7f3dd9a8dca94"}, ] [[package]] @@ -617,7 +619,7 @@ name = "rich" version = "14.3.3" requires_python = ">=3.8.0" summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "markdown-it-py>=2.2.0", "pygments<3.0.0,>=2.13.0", @@ -670,7 +672,7 @@ name = "shellingham" version = "1.5.4" requires_python = ">=3.7" summary = "Tool to Detect Surrounding Shell" -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, @@ -692,10 +694,10 @@ files = [ [[package]] name = "typer" -version = "0.24.0" +version = "0.24.1" requires_python = ">=3.10" summary = "Typer, build great CLIs. Easy to code. Based on Python type hints." -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "annotated-doc>=0.0.2", "click>=8.2.1", @@ -703,23 +705,23 @@ dependencies = [ "shellingham>=1.3.0", ] files = [ - {file = "typer-0.24.0-py3-none-any.whl", hash = "sha256:5fc435a9c8356f6160ed6e85a6301fdd6e3d8b2851da502050d1f92c5e9eddc8"}, - {file = "typer-0.24.0.tar.gz", hash = "sha256:f9373dc4eff901350694f519f783c29b6d7a110fc0dcc11b1d7e353b85ca6504"}, + {file = "typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e"}, + {file = "typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45"}, ] [[package]] name = "typer" -version = "0.24.0" +version = "0.24.1" extras = ["all"] requires_python = ">=3.10" summary = "Typer, build great CLIs. Easy to code. Based on Python type hints." -groups = ["default", "dev"] +groups = ["default"] dependencies = [ - "typer==0.24.0", + "typer==0.24.1", ] files = [ - {file = "typer-0.24.0-py3-none-any.whl", hash = "sha256:5fc435a9c8356f6160ed6e85a6301fdd6e3d8b2851da502050d1f92c5e9eddc8"}, - {file = "typer-0.24.0.tar.gz", hash = "sha256:f9373dc4eff901350694f519f783c29b6d7a110fc0dcc11b1d7e353b85ca6504"}, + {file = "typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e"}, + {file = "typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45"}, ] [[package]] @@ -727,7 +729,7 @@ name = "typing-extensions" version = "4.15.0" requires_python = ">=3.9" summary = "Backported and Experimental Type Hints for Python 3.9+" -groups = ["default", "dev"] +groups = ["default"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -738,7 +740,7 @@ name = "typing-inspection" version = "0.4.2" requires_python = ">=3.9" summary = "Runtime typing introspection tools" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "typing-extensions>=4.12.0", ] @@ -752,7 +754,7 @@ name = "userpath" version = "1.9.2" requires_python = ">=3.7" summary = "Cross-platform tool for adding locations to the user PATH" -groups = ["default", "dev"] +groups = ["default"] dependencies = [ "click", ] diff --git a/pyproject.toml b/pyproject.toml index ef2f2df..164fa80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,10 +14,10 @@ requires-python = ">=3.14, <3.15" dependencies = [ "pyside6>=6.10.2", "packaging>=26.0", - "porringer>=0.2.1.dev49", + "porringer>=0.2.1.dev48", "qasync>=0.28.0", "velopack>=0.0.1369.dev7516", - "typer>=0.24.0", + "typer>=0.24.1", ] [project.urls] @@ -26,7 +26,7 @@ repository = "https://github.com/synodic/synodic-client" [dependency-groups] build = ["pyinstaller>=6.19.0"] -lint = ["ruff>=0.15.2", "pyrefly>=0.53.0"] +lint = ["ruff>=0.15.2", "pyrefly>=0.54.0"] test = ["pytest>=9.0.2", "pytest-cov>=7.0.0", "pytest-mock>=3.15.1"] [project.scripts] @@ -95,8 +95,6 @@ serve = "zensical serve" data = [{ path = "data/**/*", relative-to = "data/" }] -[tool.pdm.dev-dependencies] -dev = ["-e file:///d:/Projects/Synodic/porringer#egg=porringer"] [build-system] build-backend = "pdm.backend" requires = ["pdm.backend"]