SpecLog 0.0.7__tar.gz → 0.0.9__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 (39) hide show
  1. speclog-0.0.9/LICENSE +148 -0
  2. {speclog-0.0.7 → speclog-0.0.9}/PKG-INFO +14 -10
  3. {speclog-0.0.7 → speclog-0.0.9}/README.md +12 -6
  4. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/SpecLogger.py +9 -25
  5. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/debugLog.py +1 -1
  6. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/loggerConfig.py +1 -1
  7. speclog-0.0.9/SpecLog/version.py +1 -0
  8. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/PKG-INFO +14 -10
  9. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/requires.txt +0 -2
  10. {speclog-0.0.7 → speclog-0.0.9}/pyproject.toml +1 -3
  11. {speclog-0.0.7 → speclog-0.0.9}/tests/test_core.py +18 -2
  12. speclog-0.0.7/LICENSE +0 -21
  13. speclog-0.0.7/SpecLog/version.py +0 -1
  14. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/SpecLog.py +0 -0
  15. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/SpecMonitor.py +0 -0
  16. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/__init__.py +0 -0
  17. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/config/__init__.py +0 -0
  18. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/config/config.cfg +0 -0
  19. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/config/config.py +0 -0
  20. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/config/monitor_config.cfg +0 -0
  21. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/config_editor.py +0 -0
  22. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/device.py +0 -0
  23. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/history.py +0 -0
  24. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/logger_status.py +0 -0
  25. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/monitor.py +0 -0
  26. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/monitor_style.py +0 -0
  27. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/run_logger.pyw +0 -0
  28. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/run_monitor.pyw +0 -0
  29. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/startup_task.py +0 -0
  30. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/ui/__init__.py +0 -0
  31. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/ui/config_editor.py +0 -0
  32. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/ui/historical_data.py +0 -0
  33. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/ui/plotting.py +0 -0
  34. {speclog-0.0.7 → speclog-0.0.9}/SpecLog/ui/plotting.ui +0 -0
  35. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/SOURCES.txt +0 -0
  36. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/dependency_links.txt +0 -0
  37. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/entry_points.txt +0 -0
  38. {speclog-0.0.7 → speclog-0.0.9}/SpecLog.egg-info/top_level.txt +0 -0
  39. {speclog-0.0.7 → speclog-0.0.9}/setup.cfg +0 -0
speclog-0.0.9/LICENSE ADDED
@@ -0,0 +1,148 @@
1
+ # Bruker Software License Notice
2
+
3
+ Copyright © 2026 Bruker. All rights reserved.
4
+
5
+ Required Notice: Copyright © 2026 Bruker. All rights reserved.
6
+
7
+ This software is made available under the PolyForm Noncommercial License 1.0.0 below.
8
+
9
+ Commercial use is not permitted under the PolyForm Noncommercial License 1.0.0.
10
+ Any commercial use, including incorporation into, distribution with, or use in connection
11
+ with a commercial product or service, requires separate written permission or a separate
12
+ commercial license from Bruker.
13
+
14
+ For commercial licensing inquiries, please contact Bruker.
15
+
16
+ ---
17
+
18
+ # PolyForm Noncommercial License 1.0.0
19
+
20
+ <https://polyformproject.org/licenses/noncommercial/1.0.0>
21
+
22
+ ## Acceptance
23
+
24
+ In order to get any license under these terms, you must agree
25
+ to them as both strict obligations and conditions to all
26
+ your licenses.
27
+
28
+ ## Copyright License
29
+
30
+ The licensor grants you a copyright license for the
31
+ software to do everything you might do with the software
32
+ that would otherwise infringe the licensor's copyright
33
+ in it for any permitted purpose. However, you may
34
+ only distribute the software according to [Distribution
35
+ License](#distribution-license) and make changes or new works
36
+ based on the software according to [Changes and New Works
37
+ License](#changes-and-new-works-license).
38
+
39
+ ## Distribution License
40
+
41
+ The licensor grants you an additional copyright license
42
+ to distribute copies of the software. Your license
43
+ to distribute covers distributing the software with
44
+ changes and new works permitted by [Changes and New Works
45
+ License](#changes-and-new-works-license).
46
+
47
+ ## Notices
48
+
49
+ You must ensure that anyone who gets a copy of any part of
50
+ the software from you also gets a copy of these terms or the
51
+ URL for them above, as well as copies of any plain-text lines
52
+ beginning with `Required Notice:` that the licensor provided
53
+ with the software. For example:
54
+
55
+ > Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
56
+
57
+ ## Changes and New Works License
58
+
59
+ The licensor grants you an additional copyright license to
60
+ make changes and new works based on the software for any
61
+ permitted purpose.
62
+
63
+ ## Patent License
64
+
65
+ The licensor grants you a patent license for the software that
66
+ covers patent claims the licensor can license, or becomes able
67
+ to license, that you would infringe by using the software.
68
+
69
+ ## Noncommercial Purposes
70
+
71
+ Any noncommercial purpose is a permitted purpose.
72
+
73
+ ## Personal Uses
74
+
75
+ Personal use for research, experiment, and testing for
76
+ the benefit of public knowledge, personal study, private
77
+ entertainment, hobby projects, amateur pursuits, or religious
78
+ observance, without any anticipated commercial application,
79
+ is use for a permitted purpose.
80
+
81
+ ## Noncommercial Organizations
82
+
83
+ Use by any charitable organization, educational institution,
84
+ public research organization, public safety or health
85
+ organization, environmental protection organization,
86
+ or government institution is use for a permitted purpose
87
+ regardless of the source of funding or obligations resulting
88
+ from the funding.
89
+
90
+ ## Fair Use
91
+
92
+ You may have "fair use" rights for the software under the
93
+ law. These terms do not limit them.
94
+
95
+ ## No Other Rights
96
+
97
+ These terms do not allow you to sublicense or transfer any of
98
+ your licenses to anyone else, or prevent the licensor from
99
+ granting licenses to anyone else. These terms do not imply
100
+ any other licenses.
101
+
102
+ ## Patent Defense
103
+
104
+ If you make any written claim that the software infringes or
105
+ contributes to infringement of any patent, your patent license
106
+ for the software granted under these terms ends immediately. If
107
+ your company makes such a claim, your patent license ends
108
+ immediately for work on behalf of your company.
109
+
110
+ ## Violations
111
+
112
+ The first time you are notified in writing that you have
113
+ violated any of these terms, or done anything with the software
114
+ not covered by your licenses, your licenses can nonetheless
115
+ continue if you come into full compliance with these terms,
116
+ and take practical steps to correct past violations, within
117
+ 32 days of receiving notice. Otherwise, all your licenses
118
+ end immediately.
119
+
120
+ ## No Liability
121
+
122
+ ***As far as the law allows, the software comes as is, without
123
+ any warranty or condition, and the licensor will not be liable
124
+ to you for any damages arising out of these terms or the use
125
+ or nature of the software, under any kind of legal claim.***
126
+
127
+ ## Definitions
128
+
129
+ The **licensor** is the individual or entity offering these
130
+ terms, and the **software** is the software the licensor makes
131
+ available under these terms.
132
+
133
+ **You** refers to the individual or entity agreeing to these
134
+ terms.
135
+
136
+ **Your company** is any legal entity, sole proprietorship,
137
+ or other kind of organization that you work for, plus all
138
+ organizations that have control over, are under the control of,
139
+ or are under common control with that organization. **Control**
140
+ means ownership of substantially all the assets of an entity,
141
+ or the power to direct its management and policies by vote,
142
+ contract, or otherwise. Control can be direct or indirect.
143
+
144
+ **Your licenses** are all the licenses granted to you for the
145
+ software under these terms.
146
+
147
+ **Use** means anything you do with the software requiring one
148
+ of your licenses.
@@ -1,19 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SpecLog
3
- Version: 0.0.7
3
+ Version: 0.0.9
4
4
  Summary: A Python Package for logging data from instrumentations
5
5
  Author-email: Yen-Chun Huang <yen-chun.huang@bruker.com>
6
- License-Expression: MIT
6
+ License-Expression: PolyForm-Noncommercial-1.0.0
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Operating System :: Microsoft :: Windows
9
9
  Requires-Python: >=3.10
10
10
  Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
- Requires-Dist: matplotlib>=3.7.1
13
12
  Requires-Dist: numpy>=1.24.3
14
13
  Requires-Dist: PySide6>=6.9.0
15
14
  Requires-Dist: pyqtgraph>=0.13.3
16
- Requires-Dist: spinlab>=1.1.3
17
15
  Requires-Dist: pyserial>=3.5
18
16
  Dynamic: license-file
19
17
 
@@ -101,16 +99,14 @@ SpecLogger start
101
99
  SpecLogger stop
102
100
  ```
103
101
 
102
+ These commands control the installed **SpecLogger** scheduled task; they do not
103
+ start a separate logger process. Enable the startup task first if it is not yet
104
+ installed.
105
+
104
106
  You can also use **Start** and **Stop** at the bottom of the configuration
105
107
  editor. Current status is shown as **Running**, **Stopped**, or **Status
106
108
  unavailable**. Operation results and errors appear in the **Messages** area.
107
109
 
108
- For troubleshooting, start the logger with a visible debug console:
109
-
110
- ```text
111
- SpecLogger -debug True
112
- ```
113
-
114
110
  ## Start logging automatically without login
115
111
 
116
112
  Open a terminal as Administrator and enable system startup:
@@ -198,6 +194,14 @@ Plot legends are displayed below the curves rather than over them. Legend and
198
194
  axis text use larger fonts, and long legends automatically use additional
199
195
  columns.
200
196
 
197
+ ## License
198
+
199
+ Copyright © 2026 Bruker. All rights reserved.
200
+
201
+ SpecLog is available under the [PolyForm Noncommercial License 1.0.0](LICENSE).
202
+ Commercial use requires separate written permission or a commercial license
203
+ from Bruker.
204
+
201
205
  ## Common status messages
202
206
 
203
207
  - **Running**: The logger is active and directly detectable.
@@ -82,16 +82,14 @@ SpecLogger start
82
82
  SpecLogger stop
83
83
  ```
84
84
 
85
+ These commands control the installed **SpecLogger** scheduled task; they do not
86
+ start a separate logger process. Enable the startup task first if it is not yet
87
+ installed.
88
+
85
89
  You can also use **Start** and **Stop** at the bottom of the configuration
86
90
  editor. Current status is shown as **Running**, **Stopped**, or **Status
87
91
  unavailable**. Operation results and errors appear in the **Messages** area.
88
92
 
89
- For troubleshooting, start the logger with a visible debug console:
90
-
91
- ```text
92
- SpecLogger -debug True
93
- ```
94
-
95
93
  ## Start logging automatically without login
96
94
 
97
95
  Open a terminal as Administrator and enable system startup:
@@ -179,6 +177,14 @@ Plot legends are displayed below the curves rather than over them. Legend and
179
177
  axis text use larger fonts, and long legends automatically use additional
180
178
  columns.
181
179
 
180
+ ## License
181
+
182
+ Copyright © 2026 Bruker. All rights reserved.
183
+
184
+ SpecLog is available under the [PolyForm Noncommercial License 1.0.0](LICENSE).
185
+ Commercial use requires separate written permission or a commercial license
186
+ from Bruker.
187
+
182
188
  ## Common status messages
183
189
 
184
190
  - **Running**: The logger is active and directly detectable.
@@ -8,7 +8,6 @@ import argparse
8
8
  import shutil
9
9
  import subprocess
10
10
  from .SpecLog import *
11
- from .logger_status import is_logger_running
12
11
  from .startup_task import (
13
12
  TASK_SCHEDULER,
14
13
  control_arguments,
@@ -71,12 +70,17 @@ def configure_startup(enabled, executable=None, runner=None):
71
70
 
72
71
 
73
72
  def control_scheduled_logger(action, runner=None):
74
- """Start/stop the startup task, or return None when it is not installed."""
73
+ """Start or stop SpecLogger exclusively through Windows Task Scheduler."""
75
74
  query = _run_task_scheduler(
76
75
  query_arguments(), runner
77
76
  )
78
77
  if query.returncode:
79
- return None
78
+ details = (query.stderr or query.stdout).strip()
79
+ raise RuntimeError(
80
+ details
81
+ or "The SpecLogger scheduled task is not installed or is unavailable. "
82
+ "Enable startup first with 'SpecLogger -startup True'."
83
+ )
80
84
  result = _run_task_scheduler(
81
85
  control_arguments(action), runner
82
86
  )
@@ -171,28 +175,8 @@ def main_func(argv=None):
171
175
  except RuntimeError as error:
172
176
  print(f"Could not control SpecLogger scheduled task: {error}", file=sys.stderr)
173
177
  return 1
174
- if task_message is not None:
175
- print(task_message)
176
- return 0
177
-
178
- if args.status == "start":
179
- if is_logger_running():
180
- print("SpecLogger has started already.")
181
- return
182
- if args.debug == "False":
183
- subprocess.Popen(
184
- "SpecLogger_running.exe", creationflags=subprocess.CREATE_NO_WINDOW
185
- )
186
- print("SpecLogger started")
187
- elif args.debug == "True":
188
- os.startfile("SpecLogger_running.exe")
189
- print("SpecLogger debug mode started")
190
-
191
- elif args.status == "stop":
192
- os.system("taskkill /im SpecLogger_running.exe /F /t")
193
- print("SpecLogger stopped")
194
- else: # ignore
195
- return
178
+ print(task_message)
179
+ return 0
196
180
 
197
181
 
198
182
  if __name__ == "__main__":
@@ -3,7 +3,7 @@ This is debug log class for logger
3
3
 
4
4
  Author: Yen-Chun Huang
5
5
 
6
- Company: Bridge 12 Technologies. Inc
6
+ Company: Bruker BioSpin
7
7
  """
8
8
 
9
9
  import logging
@@ -9,7 +9,7 @@ Logger will use the three dictionaries.
9
9
 
10
10
  Author: Yen-Chun Huang
11
11
 
12
- Company: Bridge 12 Technologies. Inc
12
+ Company: Bruker BioSpin
13
13
  """
14
14
 
15
15
  import ast
@@ -0,0 +1 @@
1
+ __version__ = "0.0.9"
@@ -1,19 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SpecLog
3
- Version: 0.0.7
3
+ Version: 0.0.9
4
4
  Summary: A Python Package for logging data from instrumentations
5
5
  Author-email: Yen-Chun Huang <yen-chun.huang@bruker.com>
6
- License-Expression: MIT
6
+ License-Expression: PolyForm-Noncommercial-1.0.0
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Operating System :: Microsoft :: Windows
9
9
  Requires-Python: >=3.10
10
10
  Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
- Requires-Dist: matplotlib>=3.7.1
13
12
  Requires-Dist: numpy>=1.24.3
14
13
  Requires-Dist: PySide6>=6.9.0
15
14
  Requires-Dist: pyqtgraph>=0.13.3
16
- Requires-Dist: spinlab>=1.1.3
17
15
  Requires-Dist: pyserial>=3.5
18
16
  Dynamic: license-file
19
17
 
@@ -101,16 +99,14 @@ SpecLogger start
101
99
  SpecLogger stop
102
100
  ```
103
101
 
102
+ These commands control the installed **SpecLogger** scheduled task; they do not
103
+ start a separate logger process. Enable the startup task first if it is not yet
104
+ installed.
105
+
104
106
  You can also use **Start** and **Stop** at the bottom of the configuration
105
107
  editor. Current status is shown as **Running**, **Stopped**, or **Status
106
108
  unavailable**. Operation results and errors appear in the **Messages** area.
107
109
 
108
- For troubleshooting, start the logger with a visible debug console:
109
-
110
- ```text
111
- SpecLogger -debug True
112
- ```
113
-
114
110
  ## Start logging automatically without login
115
111
 
116
112
  Open a terminal as Administrator and enable system startup:
@@ -198,6 +194,14 @@ Plot legends are displayed below the curves rather than over them. Legend and
198
194
  axis text use larger fonts, and long legends automatically use additional
199
195
  columns.
200
196
 
197
+ ## License
198
+
199
+ Copyright © 2026 Bruker. All rights reserved.
200
+
201
+ SpecLog is available under the [PolyForm Noncommercial License 1.0.0](LICENSE).
202
+ Commercial use requires separate written permission or a commercial license
203
+ from Bruker.
204
+
201
205
  ## Common status messages
202
206
 
203
207
  - **Running**: The logger is active and directly detectable.
@@ -1,6 +1,4 @@
1
- matplotlib>=3.7.1
2
1
  numpy>=1.24.3
3
2
  PySide6>=6.9.0
4
3
  pyqtgraph>=0.13.3
5
- spinlab>=1.1.3
6
4
  pyserial>=3.5
@@ -11,18 +11,16 @@ requires-python = ">=3.10"
11
11
  authors = [
12
12
  { name = "Yen-Chun Huang", email = "yen-chun.huang@bruker.com" }
13
13
  ]
14
- license = "MIT"
14
+ license = "PolyForm-Noncommercial-1.0.0"
15
15
  license-files = ["LICENSE"]
16
16
  classifiers = [
17
17
  "Programming Language :: Python :: 3",
18
18
  "Operating System :: Microsoft :: Windows",
19
19
  ]
20
20
  dependencies = [
21
- "matplotlib >= 3.7.1",
22
21
  "numpy >= 1.24.3",
23
22
  "PySide6 >= 6.9.0",
24
23
  "pyqtgraph >= 0.13.3",
25
- "spinlab >= 1.1.3",
26
24
  "pyserial >= 3.5",
27
25
  ]
28
26
 
@@ -17,6 +17,7 @@ from SpecLog.SpecLogger import (
17
17
  _build_parser as build_logger_parser,
18
18
  configure_startup,
19
19
  control_scheduled_logger,
20
+ main_func as logger_main,
20
21
  )
21
22
  from SpecLog.loggerConfig import loggerConfig
22
23
 
@@ -114,13 +115,28 @@ class SpecLoggerCliTests(unittest.TestCase):
114
115
  self.assertIn("/End", runner.call_args_list[1].args[0])
115
116
  self.assertIn("stopped", message)
116
117
 
117
- def test_process_control_falls_back_when_task_is_missing(self):
118
+ def test_process_control_fails_when_task_is_missing(self):
118
119
  missing = SimpleNamespace(returncode=1, stdout="", stderr="")
119
120
  runner = Mock(return_value=missing)
120
121
 
121
- self.assertIsNone(control_scheduled_logger("start", runner))
122
+ with self.assertRaisesRegex(RuntimeError, "scheduled task"):
123
+ control_scheduled_logger("start", runner)
122
124
  self.assertEqual(runner.call_count, 1)
123
125
 
126
+ def test_default_command_only_requests_scheduled_task(self):
127
+ with (
128
+ patch(
129
+ "SpecLog.SpecLogger.control_scheduled_logger",
130
+ return_value="SpecLogger scheduled task start requested.",
131
+ ) as control,
132
+ patch("SpecLog.SpecLogger.subprocess.Popen") as popen,
133
+ ):
134
+ result = logger_main([])
135
+
136
+ self.assertEqual(result, 0)
137
+ control.assert_called_once_with("start")
138
+ popen.assert_not_called()
139
+
124
140
 
125
141
  class ConfigEditorTests(unittest.TestCase):
126
142
  def test_required_settings_validation(self):
speclog-0.0.7/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Yen-Chun Huang
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- __version__ = "0.0.7"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes