synodic-client 0.0.1.dev27__tar.gz → 0.0.1.dev28__tar.gz

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.
Files changed (54) hide show
  1. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/PKG-INFO +3 -3
  2. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/pyproject.toml +4 -9
  3. synodic_client-0.0.1.dev28/synodic_client/_version.py +1 -0
  4. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/startup.py +5 -5
  5. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/updater.py +1 -2
  6. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/windows/test_startup.py +9 -7
  7. synodic_client-0.0.1.dev27/synodic_client/_version.py +0 -1
  8. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/LICENSE.md +0 -0
  9. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/README.md +0 -0
  10. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/__init__.py +0 -0
  11. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/__main__.py +0 -0
  12. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/__init__.py +0 -0
  13. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/bootstrap.py +0 -0
  14. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/icon.py +0 -0
  15. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/instance.py +0 -0
  16. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/qt.py +0 -0
  17. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/__init__.py +0 -0
  18. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/action_card.py +0 -0
  19. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/card.py +0 -0
  20. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/install.py +0 -0
  21. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/log_panel.py +0 -0
  22. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/screen.py +0 -0
  23. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/spinner.py +0 -0
  24. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/tray.py +0 -0
  25. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/theme.py +0 -0
  26. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/application/uri.py +0 -0
  27. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/cli.py +0 -0
  28. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/client.py +0 -0
  29. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/config.py +0 -0
  30. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/logging.py +0 -0
  31. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/protocol.py +0 -0
  32. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/py.typed +0 -0
  33. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/synodic_client/resolution.py +0 -0
  34. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/__init__.py +0 -0
  35. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/conftest.py +0 -0
  36. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/__init__.py +0 -0
  37. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/__init__.py +0 -0
  38. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/conftest.py +0 -0
  39. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_action_card.py +0 -0
  40. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_install_preview.py +0 -0
  41. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_log_panel.py +0 -0
  42. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_logging.py +0 -0
  43. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_cli.py +0 -0
  44. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_client_updater.py +0 -0
  45. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_client_version.py +0 -0
  46. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_config.py +0 -0
  47. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_examples.py +0 -0
  48. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_install.py +0 -0
  49. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_resolution.py +0 -0
  50. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_updater.py +0 -0
  51. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/test_uri.py +0 -0
  52. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/windows/__init__.py +0 -0
  53. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/windows/conftest.py +0 -0
  54. {synodic_client-0.0.1.dev27 → synodic_client-0.0.1.dev28}/tests/unit/windows/test_protocol.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: synodic_client
3
- Version: 0.0.1.dev27
3
+ Version: 0.0.1.dev28
4
4
  Author-Email: Synodic Software <contact@synodic.software>
5
5
  License: LGPL-3.0-or-later
6
6
  Project-URL: homepage, https://github.com/synodic/synodic-client
@@ -8,10 +8,10 @@ Project-URL: repository, https://github.com/synodic/synodic-client
8
8
  Requires-Python: <3.15,>=3.14
9
9
  Requires-Dist: pyside6>=6.10.2
10
10
  Requires-Dist: packaging>=26.0
11
- Requires-Dist: porringer>=0.2.1.dev49
11
+ Requires-Dist: porringer>=0.2.1.dev48
12
12
  Requires-Dist: qasync>=0.28.0
13
13
  Requires-Dist: velopack>=0.0.1369.dev7516
14
- Requires-Dist: typer>=0.24.0
14
+ Requires-Dist: typer>=0.24.1
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Synodic Client
@@ -10,12 +10,12 @@ requires-python = ">=3.14, <3.15"
10
10
  dependencies = [
11
11
  "pyside6>=6.10.2",
12
12
  "packaging>=26.0",
13
- "porringer>=0.2.1.dev49",
13
+ "porringer>=0.2.1.dev48",
14
14
  "qasync>=0.28.0",
15
15
  "velopack>=0.0.1369.dev7516",
16
- "typer>=0.24.0",
16
+ "typer>=0.24.1",
17
17
  ]
18
- version = "0.0.1.dev27"
18
+ version = "0.0.1.dev28"
19
19
 
20
20
  [project.license]
21
21
  text = "LGPL-3.0-or-later"
@@ -36,7 +36,7 @@ build = [
36
36
  ]
37
37
  lint = [
38
38
  "ruff>=0.15.2",
39
- "pyrefly>=0.53.0",
39
+ "pyrefly>=0.54.0",
40
40
  ]
41
41
  test = [
42
42
  "pytest>=9.0.2",
@@ -128,11 +128,6 @@ data = [
128
128
  { path = "data/**/*", relative-to = "data/" },
129
129
  ]
130
130
 
131
- [tool.pdm.dev-dependencies]
132
- dev = [
133
- "-e file:///d:/Projects/Synodic/porringer#egg=porringer",
134
- ]
135
-
136
131
  [build-system]
137
132
  build-backend = "pdm.backend"
138
133
  requires = [
@@ -0,0 +1 @@
1
+ __version__ = '0.0.1.dev28'
@@ -15,14 +15,14 @@ logger = logging.getLogger(__name__)
15
15
  STARTUP_VALUE_NAME = 'SynodicClient'
16
16
  """Registry value name used in the ``Run`` key."""
17
17
 
18
- _RUN_KEY_PATH = r'Software\Microsoft\Windows\CurrentVersion\Run'
18
+ RUN_KEY_PATH = r'Software\Microsoft\Windows\CurrentVersion\Run'
19
19
 
20
20
 
21
21
  if sys.platform == 'win32':
22
22
  import winreg
23
23
 
24
24
  def register_startup(exe_path: str) -> None:
25
- """Register the application to start automatically on login.
25
+ r"""Register the application to start automatically on login.
26
26
 
27
27
  Writes a value to ``HKCU\Software\Microsoft\Windows\CurrentVersion\Run``
28
28
  pointing to *exe_path*. Calling this repeatedly is safe and will
@@ -32,7 +32,7 @@ if sys.platform == 'win32':
32
32
  exe_path: Absolute path to the application executable.
33
33
  """
34
34
  try:
35
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key:
35
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key:
36
36
  winreg.SetValueEx(key, STARTUP_VALUE_NAME, 0, winreg.REG_SZ, f'"{exe_path}"')
37
37
  logger.info('Registered auto-startup -> %s', exe_path)
38
38
  except OSError:
@@ -44,7 +44,7 @@ if sys.platform == 'win32':
44
44
  Silently succeeds if the value does not exist.
45
45
  """
46
46
  try:
47
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key:
47
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_SET_VALUE) as key:
48
48
  winreg.DeleteValue(key, STARTUP_VALUE_NAME)
49
49
  logger.info('Removed auto-startup registration')
50
50
  except FileNotFoundError:
@@ -59,7 +59,7 @@ if sys.platform == 'win32':
59
59
  ``True`` if the ``Run`` key contains the startup value.
60
60
  """
61
61
  try:
62
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
62
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
63
63
  winreg.QueryValueEx(key, STARTUP_VALUE_NAME)
64
64
  return True
65
65
  except FileNotFoundError:
@@ -18,6 +18,7 @@ import velopack
18
18
  from packaging.version import Version
19
19
 
20
20
  from synodic_client.protocol import remove_protocol
21
+ from synodic_client.startup import remove_startup
21
22
 
22
23
  logger = logging.getLogger(__name__)
23
24
 
@@ -380,8 +381,6 @@ def _on_before_uninstall(version: str) -> None:
380
381
  Args:
381
382
  version: The current version string (provided by Velopack).
382
383
  """
383
- from synodic_client.startup import remove_startup
384
-
385
384
  logger.info('Velopack uninstall hook fired for version %s', version)
386
385
  try:
387
386
  remove_protocol()
@@ -6,7 +6,7 @@ from unittest.mock import MagicMock, patch
6
6
  import pytest
7
7
 
8
8
  from synodic_client.startup import (
9
- _RUN_KEY_PATH,
9
+ RUN_KEY_PATH,
10
10
  STARTUP_VALUE_NAME,
11
11
  is_startup_registered,
12
12
  register_startup,
@@ -35,7 +35,7 @@ class TestRegisterStartup:
35
35
 
36
36
  mock_open.assert_called_once_with(
37
37
  winreg.HKEY_CURRENT_USER,
38
- _RUN_KEY_PATH,
38
+ RUN_KEY_PATH,
39
39
  0,
40
40
  winreg.KEY_SET_VALUE,
41
41
  )
@@ -137,7 +137,7 @@ class TestStartupIntegration:
137
137
  with patch('synodic_client.startup.STARTUP_VALUE_NAME', _TEST_VALUE_NAME):
138
138
  register_startup(test_exe)
139
139
 
140
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
140
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
141
141
  value, reg_type = winreg.QueryValueEx(key, _TEST_VALUE_NAME)
142
142
  assert reg_type == winreg.REG_SZ
143
143
  assert test_exe in value
@@ -153,9 +153,11 @@ class TestStartupIntegration:
153
153
  register_startup(r'C:\test\synodic_test.exe')
154
154
  remove_startup()
155
155
 
156
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
157
- with pytest.raises(FileNotFoundError):
158
- winreg.QueryValueEx(key, _TEST_VALUE_NAME)
156
+ with (
157
+ winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key,
158
+ pytest.raises(FileNotFoundError),
159
+ ):
160
+ winreg.QueryValueEx(key, _TEST_VALUE_NAME)
159
161
 
160
162
  @staticmethod
161
163
  def test_register_is_idempotent() -> None:
@@ -168,7 +170,7 @@ class TestStartupIntegration:
168
170
  register_startup(exe_v1)
169
171
  register_startup(exe_v2)
170
172
 
171
- with winreg.OpenKey(winreg.HKEY_CURRENT_USER, _RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
173
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, RUN_KEY_PATH, 0, winreg.KEY_QUERY_VALUE) as key:
172
174
  value, _ = winreg.QueryValueEx(key, _TEST_VALUE_NAME)
173
175
  assert exe_v2 in value
174
176
  assert exe_v1 not in value
@@ -1 +0,0 @@
1
- __version__ = '0.0.1.dev27'