meeting-noter 0.6.1__tar.gz → 1.0.0__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.
Potentially problematic release.
This version of meeting-noter might be problematic. Click here for more details.
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/PKG-INFO +14 -3
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/README.md +12 -2
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/pyproject.toml +57 -1
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/audio/encoder.py +8 -3
- meeting_noter-1.0.0/src/meeting_noter/cli.py +980 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/daemon.py +100 -16
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/meeting_detector.py +97 -60
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/mic_monitor.py +77 -22
- meeting_noter-1.0.0/src/meeting_noter/transcription/live_transcription.py +250 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/PKG-INFO +14 -3
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/SOURCES.txt +8 -1
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/entry_points.txt +1 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/requires.txt +1 -0
- meeting_noter-1.0.0/tests/test_cli.py +804 -0
- meeting_noter-1.0.0/tests/test_config.py +297 -0
- meeting_noter-1.0.0/tests/test_daemon.py +917 -0
- meeting_noter-1.0.0/tests/test_meeting_detector.py +641 -0
- meeting_noter-1.0.0/tests/test_mic_monitor.py +596 -0
- meeting_noter-1.0.0/tests/test_output_writer.py +205 -0
- meeting_noter-0.6.1/src/meeting_noter/cli.py +0 -308
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/setup.cfg +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/__main__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/audio/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/audio/capture.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/audio/system_audio.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/config.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/__main__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/app.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/main_window.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/meetings_tab.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/recording_tab.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/gui/settings_tab.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/install/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/install/macos.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/menubar.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/output/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/output/writer.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon.icns +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_128.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_16.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_256.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_32.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_512.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/resources/icon_64.png +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/transcription/__init__.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter/transcription/engine.py +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/dependency_links.txt +0 -0
- {meeting_noter-0.6.1 → meeting_noter-1.0.0}/src/meeting_noter.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meeting-noter
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Offline meeting transcription for macOS with automatic meeting detection
|
|
5
5
|
Author: Victor
|
|
6
6
|
License: MIT
|
|
@@ -40,6 +40,7 @@ Requires-Dist: meeting-noter-models>=0.1.0; extra == "offline"
|
|
|
40
40
|
Provides-Extra: dev
|
|
41
41
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
42
42
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
43
44
|
Requires-Dist: black; extra == "dev"
|
|
44
45
|
Requires-Dist: ruff; extra == "dev"
|
|
45
46
|
Requires-Dist: mypy; extra == "dev"
|
|
@@ -63,9 +64,19 @@ Offline meeting transcription tool for macOS. Captures both your voice and meeti
|
|
|
63
64
|
pipx install meeting-noter
|
|
64
65
|
```
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
**For corporate/offline environments** (bundles Whisper model, no download needed):
|
|
67
68
|
```bash
|
|
68
|
-
|
|
69
|
+
pipx install "meeting-noter[offline]"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Upgrading
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Standard
|
|
76
|
+
pipx upgrade meeting-noter
|
|
77
|
+
|
|
78
|
+
# With offline model
|
|
79
|
+
pipx reinstall "meeting-noter[offline]"
|
|
69
80
|
```
|
|
70
81
|
|
|
71
82
|
No system dependencies required - ffmpeg is bundled automatically.
|
|
@@ -17,9 +17,19 @@ Offline meeting transcription tool for macOS. Captures both your voice and meeti
|
|
|
17
17
|
pipx install meeting-noter
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
**For corporate/offline environments** (bundles Whisper model, no download needed):
|
|
21
21
|
```bash
|
|
22
|
-
|
|
22
|
+
pipx install "meeting-noter[offline]"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Upgrading
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Standard
|
|
29
|
+
pipx upgrade meeting-noter
|
|
30
|
+
|
|
31
|
+
# With offline model
|
|
32
|
+
pipx reinstall "meeting-noter[offline]"
|
|
23
33
|
```
|
|
24
34
|
|
|
25
35
|
No system dependencies required - ffmpeg is bundled automatically.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "meeting-noter"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "1.0.0"
|
|
8
8
|
description = "Offline meeting transcription for macOS with automatic meeting detection"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -51,6 +51,7 @@ offline = [
|
|
|
51
51
|
dev = [
|
|
52
52
|
"pytest>=7.0",
|
|
53
53
|
"pytest-cov",
|
|
54
|
+
"pytest-mock",
|
|
54
55
|
"black",
|
|
55
56
|
"ruff",
|
|
56
57
|
"mypy",
|
|
@@ -58,6 +59,7 @@ dev = [
|
|
|
58
59
|
|
|
59
60
|
[project.scripts]
|
|
60
61
|
meeting-noter = "meeting_noter.cli:cli"
|
|
62
|
+
mn = "meeting_noter.cli:cli"
|
|
61
63
|
|
|
62
64
|
[project.urls]
|
|
63
65
|
Homepage = "https://github.com/tech4vision/meeting-noter"
|
|
@@ -77,3 +79,57 @@ target-version = ["py39", "py310", "py311", "py312"]
|
|
|
77
79
|
[tool.ruff]
|
|
78
80
|
line-length = 100
|
|
79
81
|
select = ["E", "F", "I", "N", "W"]
|
|
82
|
+
|
|
83
|
+
[tool.pytest.ini_options]
|
|
84
|
+
testpaths = ["tests"]
|
|
85
|
+
python_files = ["test_*.py"]
|
|
86
|
+
python_functions = ["test_*"]
|
|
87
|
+
addopts = [
|
|
88
|
+
"--cov=meeting_noter",
|
|
89
|
+
"--cov-report=term-missing",
|
|
90
|
+
"--cov-report=html",
|
|
91
|
+
"-v",
|
|
92
|
+
]
|
|
93
|
+
filterwarnings = [
|
|
94
|
+
"ignore::DeprecationWarning",
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
[tool.coverage.run]
|
|
98
|
+
source = ["src/meeting_noter"]
|
|
99
|
+
branch = true
|
|
100
|
+
omit = [
|
|
101
|
+
"*/gui/*",
|
|
102
|
+
"*/menubar.py",
|
|
103
|
+
"*/__main__.py",
|
|
104
|
+
"*/audio/system_audio.py", # ScreenCaptureKit-based, requires macOS runtime
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
[tool.coverage.report]
|
|
108
|
+
exclude_lines = [
|
|
109
|
+
"pragma: no cover",
|
|
110
|
+
"def __repr__",
|
|
111
|
+
"raise NotImplementedError",
|
|
112
|
+
"if TYPE_CHECKING:",
|
|
113
|
+
"if __name__ == .__main__.:",
|
|
114
|
+
# Exclude macOS-specific framework code that can't be unit tested
|
|
115
|
+
"import ScreenCaptureKit",
|
|
116
|
+
"import CoreMedia",
|
|
117
|
+
"import AppKit",
|
|
118
|
+
"from AppKit import",
|
|
119
|
+
"from EventKit import",
|
|
120
|
+
"from Foundation import NSObject",
|
|
121
|
+
"from libdispatch import",
|
|
122
|
+
"from dispatch import",
|
|
123
|
+
"class StreamOutput",
|
|
124
|
+
"def stream_didOutputSampleBuffer_ofType_",
|
|
125
|
+
"def stream_didStopWithError_",
|
|
126
|
+
"except ImportError:",
|
|
127
|
+
# Exclude daemon fork code (requires OS process fork)
|
|
128
|
+
"def daemonize",
|
|
129
|
+
"os.fork()",
|
|
130
|
+
"os.setsid()",
|
|
131
|
+
"os.chdir",
|
|
132
|
+
"os.dup2",
|
|
133
|
+
"sys.exit(0)",
|
|
134
|
+
"sys.exit(1)",
|
|
135
|
+
]
|
|
@@ -105,12 +105,17 @@ class MP3Encoder:
|
|
|
105
105
|
|
|
106
106
|
def finalize(self) -> bytes:
|
|
107
107
|
"""Finalize encoding."""
|
|
108
|
-
if self._process is not None
|
|
108
|
+
if self._process is not None:
|
|
109
109
|
try:
|
|
110
|
-
self._process.stdin
|
|
110
|
+
if self._process.stdin is not None:
|
|
111
|
+
self._process.stdin.close()
|
|
111
112
|
except Exception:
|
|
112
113
|
pass
|
|
113
|
-
|
|
114
|
+
try:
|
|
115
|
+
self._process.wait(timeout=5.0)
|
|
116
|
+
except subprocess.TimeoutExpired:
|
|
117
|
+
self._process.kill()
|
|
118
|
+
self._process.wait()
|
|
114
119
|
self._process = None
|
|
115
120
|
return b""
|
|
116
121
|
|