python-voiceio 0.9.0__tar.gz → 0.9.1__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 (130) hide show
  1. {python_voiceio-0.9.0/python_voiceio.egg-info → python_voiceio-0.9.1}/PKG-INFO +1 -1
  2. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/pyproject.toml +1 -1
  3. {python_voiceio-0.9.0 → python_voiceio-0.9.1/python_voiceio.egg-info}/PKG-INFO +1 -1
  4. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_correct_batch.py +19 -1
  5. python_voiceio-0.9.1/voiceio/__init__.py +1 -0
  6. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/service.py +8 -1
  7. python_voiceio-0.9.0/voiceio/__init__.py +0 -1
  8. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/LICENSE +0 -0
  9. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/README.md +0 -0
  10. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/python_voiceio.egg-info/SOURCES.txt +0 -0
  11. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/python_voiceio.egg-info/dependency_links.txt +0 -0
  12. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/python_voiceio.egg-info/entry_points.txt +0 -0
  13. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/python_voiceio.egg-info/requires.txt +0 -0
  14. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/python_voiceio.egg-info/top_level.txt +0 -0
  15. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/setup.cfg +0 -0
  16. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_adjudicate.py +0 -0
  17. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_app_wiring.py +0 -0
  18. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_audio_quality.py +0 -0
  19. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_audit.py +0 -0
  20. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_autocorrect.py +0 -0
  21. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_autocorrect_state.py +0 -0
  22. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_backend_probes.py +0 -0
  23. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_cli.py +0 -0
  24. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_clipboard_read.py +0 -0
  25. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_commands.py +0 -0
  26. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_concurrency_lockdown.py +0 -0
  27. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_config.py +0 -0
  28. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_corrections.py +0 -0
  29. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_evaluate.py +0 -0
  30. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_fallback.py +0 -0
  31. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_health.py +0 -0
  32. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_hints.py +0 -0
  33. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_history.py +0 -0
  34. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_ibus_pending.py +0 -0
  35. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_ibus_ping.py +0 -0
  36. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_ibus_typer.py +0 -0
  37. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_llm.py +0 -0
  38. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_llm_api.py +0 -0
  39. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_numbers.py +0 -0
  40. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_platform.py +0 -0
  41. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_postcorrect.py +0 -0
  42. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_postprocess.py +0 -0
  43. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_prebuffer.py +0 -0
  44. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_prompt.py +0 -0
  45. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_recorder_integration.py +0 -0
  46. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_retention.py +0 -0
  47. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_robustness.py +0 -0
  48. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_security_hardening.py +0 -0
  49. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_snapshots.py +0 -0
  50. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_streaming.py +0 -0
  51. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_tokens.py +0 -0
  52. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_transcriber.py +0 -0
  53. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_tts.py +0 -0
  54. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_vad.py +0 -0
  55. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_vocabulary.py +0 -0
  56. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_wizard.py +0 -0
  57. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/tests/test_wordfreq.py +0 -0
  58. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/__main__.py +0 -0
  59. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/app.py +0 -0
  60. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/audit.py +0 -0
  61. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/autocorrect.py +0 -0
  62. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/autocorrect_state.py +0 -0
  63. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/backends.py +0 -0
  64. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/cli.py +0 -0
  65. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/clipboard_read.py +0 -0
  66. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/commands.py +0 -0
  67. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/config.py +0 -0
  68. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/consent.py +0 -0
  69. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/corrections.py +0 -0
  70. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/demo.py +0 -0
  71. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/evaluate.py +0 -0
  72. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/feedback.py +0 -0
  73. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/health.py +0 -0
  74. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hints.py +0 -0
  75. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/history.py +0 -0
  76. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/__init__.py +0 -0
  77. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/base.py +0 -0
  78. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/chain.py +0 -0
  79. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/evdev.py +0 -0
  80. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/pynput_backend.py +0 -0
  81. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/hotkeys/socket_backend.py +0 -0
  82. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/ibus/__init__.py +0 -0
  83. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/ibus/engine.py +0 -0
  84. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/ibus/pending.py +0 -0
  85. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/llm.py +0 -0
  86. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/llm_api.py +0 -0
  87. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/models/__init__.py +0 -0
  88. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/models/silero_vad.onnx +0 -0
  89. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/numbers.py +0 -0
  90. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/pidlock.py +0 -0
  91. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/platform.py +0 -0
  92. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/postcorrect.py +0 -0
  93. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/postprocess.py +0 -0
  94. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/prompt.py +0 -0
  95. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/recorder.py +0 -0
  96. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/retention.py +0 -0
  97. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/snapshots.py +0 -0
  98. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/sounds/__init__.py +0 -0
  99. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/sounds/commit.wav +0 -0
  100. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/sounds/start.wav +0 -0
  101. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/sounds/stop.wav +0 -0
  102. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/streaming.py +0 -0
  103. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tokens.py +0 -0
  104. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/transcriber.py +0 -0
  105. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tray/__init__.py +0 -0
  106. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tray/_icons.py +0 -0
  107. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tray/_indicator.py +0 -0
  108. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tray/_pystray.py +0 -0
  109. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/__init__.py +0 -0
  110. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/base.py +0 -0
  111. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/chain.py +0 -0
  112. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/edge_engine.py +0 -0
  113. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/espeak.py +0 -0
  114. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/piper_engine.py +0 -0
  115. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/tts/player.py +0 -0
  116. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/__init__.py +0 -0
  117. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/base.py +0 -0
  118. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/chain.py +0 -0
  119. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/clipboard.py +0 -0
  120. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/ibus.py +0 -0
  121. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/pynput_type.py +0 -0
  122. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/wtype.py +0 -0
  123. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/xdotool.py +0 -0
  124. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/typers/ydotool.py +0 -0
  125. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/vad.py +0 -0
  126. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/vocab_stats.py +0 -0
  127. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/vocabulary.py +0 -0
  128. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/wizard.py +0 -0
  129. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/wordfreq.py +0 -0
  130. {python_voiceio-0.9.0 → python_voiceio-0.9.1}/voiceio/worker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-voiceio"
7
- version = "0.9.0"
7
+ version = "0.9.1"
8
8
  description = "Voice dictation for Linux. Speak → text, locally, instantly."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: Voice dictation for Linux. Speak → text, locally, instantly.
5
5
  Author: Hugo Montenegro
6
6
  License-Expression: MIT
@@ -8,7 +8,11 @@ from voiceio.autocorrect import AdjudicationResult, ReviewResult, SuspiciousWord
8
8
  from voiceio.autocorrect_state import load_state
9
9
  from voiceio.cli import _cmd_correct_auto
10
10
  from voiceio.corrections import CorrectionDict
11
- from voiceio.service import _correct_service_unit, _correct_timer_unit
11
+ from voiceio.service import (
12
+ _correct_service_unit,
13
+ _correct_timer_unit,
14
+ _service_unit,
15
+ )
12
16
 
13
17
 
14
18
  def _entries():
@@ -115,6 +119,20 @@ class TestBatchMode:
115
119
  assert "Grafana" in (tmp_path / "vocabulary.txt").read_text()
116
120
 
117
121
 
122
+ class TestServiceUnit:
123
+ def test_restarts_on_graphical_relogin(self):
124
+ """PartOf stops the service on logout; WantedBy must pull it back in on
125
+ the next login. Both must name graphical-session.target or the service
126
+ dies on logout and never returns until a full reboot (GNOME re-login
127
+ leaves the systemd --user manager — and default.target — untouched)."""
128
+ unit = _service_unit("/usr/bin/voiceio")
129
+ assert "PartOf=graphical-session.target" in unit
130
+ assert "WantedBy=graphical-session.target" in unit
131
+ # default.target is reached once at user-manager start and never
132
+ # re-entered on re-login, so it must NOT be the wake-up trigger.
133
+ assert "WantedBy=default.target" not in unit
134
+
135
+
118
136
  class TestTimerUnits:
119
137
  def test_service_unit_runs_batch(self):
120
138
  unit = _correct_service_unit("/usr/bin/voiceio")
@@ -0,0 +1 @@
1
+ __version__ = "0.9.1"
@@ -68,7 +68,7 @@ Environment=PYTHONUNBUFFERED=1
68
68
  PassEnvironment=DISPLAY WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_RUNTIME_DIR
69
69
 
70
70
  [Install]
71
- WantedBy=default.target
71
+ WantedBy=graphical-session.target
72
72
  """
73
73
 
74
74
 
@@ -190,6 +190,13 @@ def install_service() -> bool:
190
190
  ["systemctl", "--user", "daemon-reload"],
191
191
  capture_output=True, timeout=5,
192
192
  )
193
+ # disable before enable so a prior [Install] target (older versions
194
+ # wired WantedBy=default.target, which never restarts the service on a
195
+ # GNOME logout/login) is unlinked instead of left as a stale want.
196
+ subprocess.run(
197
+ ["systemctl", "--user", "disable", SERVICE_NAME],
198
+ capture_output=True, timeout=5,
199
+ )
193
200
  subprocess.run(
194
201
  ["systemctl", "--user", "enable", SERVICE_NAME],
195
202
  capture_output=True, timeout=5,
@@ -1 +0,0 @@
1
- __version__ = "0.9.0"
File without changes
File without changes
File without changes