CI: update test report and coverage files

This commit is contained in:
ci-bot
2025-08-12 21:08:17 +00:00
parent 12b39428c1
commit 9c06b95f32
3 changed files with 239 additions and 92 deletions
+13 -91
View File
@@ -1,35 +1,34 @@
# 🧪 Test Report
*Generated on 2025-08-12 23:02:56 CEST*
*Generated on 2025-08-12 23:08:17 CEST*
## 🧾 General Info
- **duration**: 5.1819562911987305
- **duration**: 5.000359773635864
- **root**: /workspace/tligui_y/slic
- **environment**: {}
## 📋 Summary
- **Failed**: 1
- **Passed**: 1
- **Passed**: 2
- **Total**: 2
- **Collected**: 2
## 🔎 Tests
<details>
<summary>❌ Failed (1)</summary>
<summary>✅ Passed (2)</summary>
- <details>
<summary>📄 <span style="color: #00695C; font-weight: bold">test_utils_sendmail.py</span></summary>
↳ <span style="color: #009688; font-weight: bold">Function: </span> test_sendmail_local_delivery
- <details>
<summary> Test 1</summary>
<summary> Test 1</summary>
**_*📌 Setup phase*_**
**duration:**
```python
0.000384362880140543
0.00038446392863988876
```
**outcome:**
@@ -43,80 +42,13 @@
**duration:**
```python
0.1514358688145876
0.14400978619232774
```
**outcome:**
```python
failed
```
**crash:**
```python
path: /workspace/tligui_y/slic/tests/test_utils_sendmail.py
lineno: 56
message: NameError: name 'from_addr' is not defined
```
**traceback:**
```python
- path: tests/test_utils_sendmail.py
lineno: 56
message: NameError
```
**longrepr:**
```python
def test_sendmail_local_delivery():
# Get the current system user
user = getpass.getuser()
# Define the recipient and email content
to_addr = f"{user}@localhost"
subject = "Local sendmail test"
body = "Hello from pytest/local!"
# Send the email using the function under test
msg = sendmail(to_addr, from_addr=f"{user}@localhost", subject=subject, body=body)
# Path to the Maildir 'new' folder for this user
maildir_new = os.path.expanduser("~/Maildir/new")
# Clean up the mail
for f in glob.glob(os.path.join(maildir_new, "*")):
os.remove(f)
# Wait a short time for delivery
files = []
for _ in range(50): # Try for ~5 seconds
time.sleep(0.1)
files = sorted(glob.glob(os.path.join(maildir_new, "*")))
if files:
break
# Assert that at least one mail file was delivered
assert files, f"No email was delivered to {maildir_new}"
# Read the most recent mail file
with open(files[-1], "r", encoding="utf-8", errors="replace") as f:
content = f.read()
# Assert that both the subject and body appear in the delivered email
assert subject in content, "Email subject not found in delivered message"
assert body in content, "Email body not found in delivered message"
repr_str = repr(msg)
assert isinstance(repr_str, str), "__repr__() must return str"
assert f"To: {to_addr}" in repr_str, "To header missing from __repr__()"
> assert f"From: {from_addr}" in repr_str, "From header missing from __repr__()"
E NameError: name 'from_addr' is not defined
tests/test_utils_sendmail.py:56: NameError
passed
```
**_*📌 Teardown phase*_**
@@ -124,7 +56,7 @@
**duration:**
```python
0.0004034559242427349
0.00038974499329924583
```
**outcome:**
@@ -133,16 +65,6 @@
passed
```
</details>
</details>
</details>
<details>
<summary>✅ Passed (1)</summary>
- <details>
<summary>📄 <span style="color: #00695C; font-weight: bold">test_utils_sendmail.py</span></summary>
↳ <span style="color: #009688; font-weight: bold">Function: </span> test_sendmail_raises_on_sendmail_failure
- <details>
<summary>✅ Test 2</summary>
@@ -152,7 +74,7 @@
**duration:**
```python
0.0004614712670445442
0.0005245627835392952
```
**outcome:**
@@ -166,7 +88,7 @@
**duration:**
```python
0.000995422713458538
0.0009062779136002064
```
**outcome:**
@@ -180,7 +102,7 @@
**duration:**
```python
0.00017912406474351883
0.00016784807667136192
```
**outcome:**
@@ -226,7 +148,7 @@
lineno: 13
- nodeid: tests/test_utils_sendmail.py::test_sendmail_raises_on_sendmail_failure
type: Function
lineno: 59
lineno: 60
```
</details>
</details>
+225
View File
@@ -16455,3 +16455,228 @@
| slic/utils/utils.py | 17 | 8 | 53% |
| slic/utils/xrange.py | 33 | 30 | 9% |
| **TOTAL** | **9529** | **6952** | **27%** |
| Name | Stmts | Miss | Cover |
|----------------------------------------------- | -------: | -------: | ------: |
| slic/\_\_init\_\_.py | 20 | 2 | 90% |
| slic/core/\_\_init\_\_.py | 5 | 0 | 100% |
| slic/core/acquisition/\_\_init\_\_.py | 7 | 0 | 100% |
| slic/core/acquisition/acquisition.py | 56 | 42 | 25% |
| slic/core/acquisition/baseacquisition.py | 5 | 1 | 80% |
| slic/core/acquisition/broker/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/core/acquisition/broker/brokerclient.py | 104 | 80 | 23% |
| slic/core/acquisition/broker/brokerconfig.py | 102 | 87 | 15% |
| slic/core/acquisition/broker/pedestal.py | 66 | 57 | 14% |
| slic/core/acquisition/broker/pids.py | 17 | 12 | 29% |
| slic/core/acquisition/broker/post\_retrieve.py | 120 | 120 | 0% |
| slic/core/acquisition/broker/requeststatus.py | 77 | 73 | 5% |
| slic/core/acquisition/broker/restapi.py | 147 | 107 | 27% |
| slic/core/acquisition/broker/tools.py | 52 | 18 | 65% |
| slic/core/acquisition/bsacquisition.py | 10 | 3 | 70% |
| slic/core/acquisition/bschannels.py | 30 | 19 | 37% |
| slic/core/acquisition/channels.py | 51 | 30 | 41% |
| slic/core/acquisition/dbacquisition.py | 19 | 12 | 37% |
| slic/core/acquisition/detcfg.py | 82 | 35 | 57% |
| slic/core/acquisition/diaacquisition.py | 111 | 111 | 0% |
| slic/core/acquisition/diaconfig.py | 36 | 36 | 0% |
| slic/core/acquisition/dummyacquisition.py | 12 | 12 | 0% |
| slic/core/acquisition/fakeacquisition.py | 76 | 53 | 30% |
| slic/core/acquisition/pedestals.py | 69 | 69 | 0% |
| slic/core/acquisition/pvacquisition.py | 60 | 47 | 22% |
| slic/core/acquisition/pvchannels.py | 13 | 7 | 46% |
| slic/core/acquisition/sfacquisition.py | 159 | 129 | 19% |
| slic/core/acquisition/sfpaths.py | 23 | 19 | 17% |
| slic/core/acquisition/spreadsheet.py | 45 | 45 | 0% |
| slic/core/adjustable/\_\_init\_\_.py | 11 | 0 | 100% |
| slic/core/adjustable/adjustable.py | 50 | 30 | 40% |
| slic/core/adjustable/baseadjustable.py | 28 | 18 | 36% |
| slic/core/adjustable/collection.py | 22 | 14 | 36% |
| slic/core/adjustable/combined.py | 15 | 8 | 47% |
| slic/core/adjustable/convenience.py | 35 | 20 | 43% |
| slic/core/adjustable/converted.py | 16 | 10 | 38% |
| slic/core/adjustable/dummyadjustable.py | 41 | 30 | 27% |
| slic/core/adjustable/error.py | 2 | 0 | 100% |
| slic/core/adjustable/genericadjustable.py | 32 | 24 | 25% |
| slic/core/adjustable/limited.py | 29 | 18 | 38% |
| slic/core/adjustable/linked.py | 22 | 15 | 32% |
| slic/core/adjustable/pvadjustable.py | 119 | 91 | 24% |
| slic/core/adjustable/pvchangemon.py | 77 | 56 | 27% |
| slic/core/adjustable/pvenumadjustable.py | 38 | 22 | 42% |
| slic/core/adjustable/scaler.py | 22 | 16 | 27% |
| slic/core/condition/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/core/condition/basecondition.py | 8 | 2 | 75% |
| slic/core/condition/condition.py | 107 | 79 | 26% |
| slic/core/condition/pvcondition.py | 21 | 12 | 43% |
| slic/core/condition/valuecondition.py | 22 | 15 | 32% |
| slic/core/device/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/core/device/auto.py | 12 | 12 | 0% |
| slic/core/device/basedevice.py | 2 | 0 | 100% |
| slic/core/device/device.py | 46 | 35 | 24% |
| slic/core/device/filtered.py | 23 | 23 | 0% |
| slic/core/device/simpledevice.py | 6 | 2 | 67% |
| slic/core/scanner/\_\_init\_\_.py | 1 | 0 | 100% |
| slic/core/scanner/runname.py | 36 | 23 | 36% |
| slic/core/scanner/scanbackend.py | 232 | 197 | 15% |
| slic/core/scanner/scaninfo.py | 45 | 35 | 22% |
| slic/core/scanner/scanner.py | 136 | 89 | 35% |
| slic/core/sensor/\_\_init\_\_.py | 8 | 0 | 100% |
| slic/core/sensor/basesensor.py | 12 | 3 | 75% |
| slic/core/sensor/bscombined.py | 9 | 5 | 44% |
| slic/core/sensor/bsmonitor.py | 102 | 73 | 28% |
| slic/core/sensor/bsnorm.py | 12 | 7 | 42% |
| slic/core/sensor/bssensor.py | 6 | 2 | 67% |
| slic/core/sensor/combined.py | 31 | 20 | 35% |
| slic/core/sensor/monitor.py | 62 | 51 | 18% |
| slic/core/sensor/norm.py | 9 | 5 | 44% |
| slic/core/sensor/pvsensor.py | 32 | 20 | 38% |
| slic/core/sensor/remoteplot.py | 15 | 10 | 33% |
| slic/core/sensor/sensor.py | 60 | 42 | 30% |
| slic/core/task/\_\_init\_\_.py | 4 | 0 | 100% |
| slic/core/task/basetask.py | 11 | 3 | 73% |
| slic/core/task/daqtask.py | 23 | 16 | 30% |
| slic/core/task/loop.py | 57 | 40 | 30% |
| slic/core/task/producer.py | 25 | 18 | 28% |
| slic/core/task/task.py | 62 | 46 | 26% |
| slic/devices/\_\_init\_\_.py | 7 | 0 | 100% |
| slic/devices/cameras/\_\_init\_\_.py | 4 | 0 | 100% |
| slic/devices/cameras/basler.py | 8 | 4 | 50% |
| slic/devices/cameras/camera\_bs.py | 13 | 8 | 38% |
| slic/devices/cameras/camera\_ca.py | 34 | 19 | 44% |
| slic/devices/cameras/camerabase.py | 17 | 12 | 29% |
| slic/devices/cameras/screenpanel.py | 31 | 21 | 32% |
| slic/devices/endstations/\_\_init\_\_.py | 3 | 0 | 100% |
| slic/devices/endstations/alvra\_flex.py | 10 | 5 | 50% |
| slic/devices/endstations/alvra\_huber.py | 8 | 4 | 50% |
| slic/devices/endstations/alvra\_prime.py | 48 | 34 | 29% |
| slic/devices/endstations/alvra\_xtg.py | 8 | 8 | 0% |
| slic/devices/endstations/bernina\_cameras.py | 33 | 33 | 0% |
| slic/devices/endstations/bernina\_platform.py | 46 | 46 | 0% |
| slic/devices/general/\_\_init\_\_.py | 4 | 0 | 100% |
| slic/devices/general/delay\_compensation.py | 13 | 13 | 0% |
| slic/devices/general/delay\_stage.py | 57 | 30 | 47% |
| slic/devices/general/detectors/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/devices/general/detectors/buffer.py | 66 | 35 | 47% |
| slic/devices/general/detectors/digitizer.py | 13 | 7 | 46% |
| slic/devices/general/detectors/pvdatastream.py | 33 | 24 | 27% |
| slic/devices/general/detectors/timer.py | 15 | 9 | 40% |
| slic/devices/general/micosstage.py | 7 | 7 | 0% |
| slic/devices/general/motor.py | 128 | 88 | 31% |
| slic/devices/general/shutter.py | 22 | 12 | 45% |
| slic/devices/general/shutterctx.py | 18 | 7 | 61% |
| slic/devices/general/smaract.py | 169 | 125 | 26% |
| slic/devices/loptics/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/devices/loptics/alvra\_explaser.py | 29 | 21 | 28% |
| slic/devices/loptics/bernina\_explaser.py | 28 | 28 | 0% |
| slic/devices/loptics/lasershutter.py | 22 | 14 | 36% |
| slic/devices/timing/\_\_init\_\_.py | 0 | 0 | 100% |
| slic/devices/timing/events/\_\_init\_\_.py | 3 | 3 | 0% |
| slic/devices/timing/events/codes.py | 5 | 5 | 0% |
| slic/devices/timing/events/ctaseq.py | 190 | 190 | 0% |
| slic/devices/timing/events/evr.py | 37 | 37 | 0% |
| slic/devices/timing/events/tma.py | 40 | 40 | 0% |
| slic/devices/timing/lasertiming.py | 253 | 184 | 27% |
| slic/devices/xdiagnostics/\_\_init\_\_.py | 2 | 0 | 100% |
| slic/devices/xdiagnostics/intensitymonitor.py | 124 | 92 | 26% |
| slic/devices/xdiagnostics/profilemonitor.py | 19 | 9 | 53% |
| slic/devices/xdiagnostics/timetools.py | 48 | 48 | 0% |
| slic/devices/xoptics/\_\_init\_\_.py | 7 | 0 | 100% |
| slic/devices/xoptics/aramis\_attenuator.py | 96 | 66 | 31% |
| slic/devices/xoptics/aramis\_reflaser.py | 23 | 15 | 35% |
| slic/devices/xoptics/dcm.py | 211 | 162 | 23% |
| slic/devices/xoptics/kb.py | 30 | 18 | 40% |
| slic/devices/xoptics/offsetmirrors.py | 9 | 5 | 44% |
| slic/devices/xoptics/pulsepicker.py | 56 | 34 | 39% |
| slic/devices/xoptics/slits/\_\_init\_\_.py | 5 | 0 | 100% |
| slic/devices/xoptics/slits/slitblades.py | 66 | 48 | 27% |
| slic/devices/xoptics/slits/slittwinunit.py | 12 | 6 | 50% |
| slic/devices/xoptics/slits/slitunit.py | 14 | 8 | 43% |
| slic/devices/xoptics/slits/slitunitcw.py | 7 | 3 | 57% |
| slic/devices/xoptics/slits/slitunitjj.py | 8 | 5 | 38% |
| slic/gui/\_\_init\_\_.py | 1 | 0 | 100% |
| slic/gui/daqframe.py | 75 | 54 | 28% |
| slic/gui/daqpanels/\_\_init\_\_.py | 6 | 0 | 100% |
| slic/gui/daqpanels/config.py | 98 | 80 | 18% |
| slic/gui/daqpanels/goto.py | 92 | 76 | 17% |
| slic/gui/daqpanels/run.py | 56 | 46 | 18% |
| slic/gui/daqpanels/scan2d.py | 77 | 66 | 14% |
| slic/gui/daqpanels/scan.py | 63 | 54 | 14% |
| slic/gui/daqpanels/sfx.py | 77 | 60 | 22% |
| slic/gui/daqpanels/special.py | 63 | 54 | 14% |
| slic/gui/daqpanels/static.py | 46 | 37 | 20% |
| slic/gui/daqpanels/tools.py | 140 | 114 | 19% |
| slic/gui/daqpanels/tweak.py | 149 | 127 | 15% |
| slic/gui/gui.py | 16 | 10 | 38% |
| slic/gui/icon.py | 8 | 4 | 50% |
| slic/gui/persist.py | 68 | 48 | 29% |
| slic/gui/widgets/\_\_init\_\_.py | 11 | 0 | 100% |
| slic/gui/widgets/alarm.py | 21 | 9 | 57% |
| slic/gui/widgets/alternative.py | 51 | 40 | 22% |
| slic/gui/widgets/boxes.py | 33 | 26 | 21% |
| slic/gui/widgets/checkbox.py | 8 | 4 | 50% |
| slic/gui/widgets/completers.py | 27 | 19 | 30% |
| slic/gui/widgets/dyncombo.py | 49 | 49 | 0% |
| slic/gui/widgets/entries.py | 253 | 195 | 23% |
| slic/gui/widgets/exc2warn.py | 15 | 13 | 13% |
| slic/gui/widgets/fname.py | 60 | 47 | 22% |
| slic/gui/widgets/jfcfg.py | 290 | 230 | 21% |
| slic/gui/widgets/jfmodcoords.py | 88 | 70 | 20% |
| slic/gui/widgets/labeled.py | 19 | 7 | 63% |
| slic/gui/widgets/lists.py | 96 | 73 | 24% |
| slic/gui/widgets/mods.py | 25 | 17 | 32% |
| slic/gui/widgets/nope.py | 26 | 19 | 27% |
| slic/gui/widgets/plotting.py | 68 | 47 | 31% |
| slic/gui/widgets/tools.py | 11 | 7 | 36% |
| slic/gui/widgets/twobuttons.py | 43 | 30 | 30% |
| slic/gui/wxdebug.py | 15 | 7 | 53% |
| slic/utils/\_\_init\_\_.py | 24 | 0 | 100% |
| slic/utils/argfwd.py | 53 | 14 | 74% |
| slic/utils/ask\_yes\_no.py | 27 | 20 | 26% |
| slic/utils/channels.py | 17 | 12 | 29% |
| slic/utils/config.py | 5 | 2 | 60% |
| slic/utils/cprint.py | 41 | 16 | 61% |
| slic/utils/dbusnotify.py | 40 | 25 | 38% |
| slic/utils/debug.py | 16 | 12 | 25% |
| slic/utils/dictext.py | 30 | 19 | 37% |
| slic/utils/dotdir.py | 10 | 1 | 90% |
| slic/utils/duo.py | 77 | 45 | 42% |
| slic/utils/elog.py | 31 | 21 | 32% |
| slic/utils/eval.py | 49 | 37 | 24% |
| slic/utils/exceptions.py | 22 | 14 | 36% |
| slic/utils/get\_adj.py | 17 | 11 | 35% |
| slic/utils/hastyepics.py | 37 | 25 | 32% |
| slic/utils/ioc/\_\_init\_\_.py | 1 | 1 | 0% |
| slic/utils/ioc/adjdrv.py | 31 | 31 | 0% |
| slic/utils/ioc/ioc.py | 63 | 63 | 0% |
| slic/utils/ipy.py | 22 | 15 | 32% |
| slic/utils/jsonext.py | 24 | 16 | 33% |
| slic/utils/lazypv.py | 12 | 12 | 0% |
| slic/utils/logcfg.py | 52 | 2 | 96% |
| slic/utils/logign.py | 22 | 14 | 36% |
| slic/utils/marker.py | 48 | 31 | 35% |
| slic/utils/metaclasses.py | 8 | 0 | 100% |
| slic/utils/namespace.py | 5 | 1 | 80% |
| slic/utils/npy.py | 71 | 56 | 21% |
| slic/utils/opmsg.py | 122 | 122 | 0% |
| slic/utils/path.py | 32 | 24 | 25% |
| slic/utils/picklio.py | 7 | 3 | 57% |
| slic/utils/printing.py | 77 | 61 | 21% |
| slic/utils/pv.py | 30 | 20 | 33% |
| slic/utils/pvpreload.py | 50 | 19 | 62% |
| slic/utils/pyepics.py | 64 | 39 | 39% |
| slic/utils/rangebar.py | 92 | 61 | 34% |
| slic/utils/readable.py | 12 | 9 | 25% |
| slic/utils/registry.py | 33 | 19 | 42% |
| slic/utils/reprate.py | 55 | 42 | 24% |
| slic/utils/richcfg.py | 21 | 11 | 48% |
| slic/utils/run\_later.py | 64 | 64 | 0% |
| slic/utils/screenshot.py | 30 | 21 | 30% |
| slic/utils/sendmail.py | 49 | 2 | 96% |
| slic/utils/sendsms.py | 5 | 5 | 0% |
| slic/utils/shortcut.py | 38 | 20 | 47% |
| slic/utils/snapshot.py | 6 | 3 | 50% |
| slic/utils/termtitle.py | 3 | 0 | 100% |
| slic/utils/tqdm\_mod.py | 28 | 18 | 36% |
| slic/utils/trinary.py | 4 | 2 | 50% |
| slic/utils/typecast.py | 19 | 19 | 0% |
| slic/utils/utils.py | 17 | 8 | 53% |
| slic/utils/xrange.py | 33 | 30 | 9% |
| **TOTAL** | **9529** | **6952** | **27%** |
+1 -1
View File
@@ -1 +1 @@
{"created": 1755032574.5494723, "duration": 5.1819562911987305, "exitcode": 1, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"failed": 1, "passed": 1, "total": 2, "collected": 2}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_sendmail.py", "type": "Module"}]}, {"nodeid": "tests/test_utils_sendmail.py", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_sendmail.py::test_sendmail_local_delivery", "type": "Function", "lineno": 13}, {"nodeid": "tests/test_utils_sendmail.py::test_sendmail_raises_on_sendmail_failure", "type": "Function", "lineno": 59}]}], "tests": [{"nodeid": "tests/test_utils_sendmail.py::test_sendmail_local_delivery", "lineno": 13, "outcome": "failed", "keywords": ["test_sendmail_local_delivery", "test_utils_sendmail.py", "tests", "slic", ""], "setup": {"duration": 0.000384362880140543, "outcome": "passed"}, "call": {"duration": 0.1514358688145876, "outcome": "failed", "crash": {"path": "/workspace/tligui_y/slic/tests/test_utils_sendmail.py", "lineno": 56, "message": "NameError: name 'from_addr' is not defined"}, "traceback": [{"path": "tests/test_utils_sendmail.py", "lineno": 56, "message": "NameError"}], "longrepr": "def test_sendmail_local_delivery():\n \n # Get the current system user\n user = getpass.getuser()\n \n # Define the recipient and email content\n to_addr = f\"{user}@localhost\"\n subject = \"Local sendmail test\"\n body = \"Hello from pytest/local!\"\n \n # Send the email using the function under test\n msg = sendmail(to_addr, from_addr=f\"{user}@localhost\", subject=subject, body=body)\n \n # Path to the Maildir 'new' folder for this user\n maildir_new = os.path.expanduser(\"~/Maildir/new\")\n \n # Clean up the mail\n for f in glob.glob(os.path.join(maildir_new, \"*\")):\n os.remove(f)\n \n # Wait a short time for delivery\n files = []\n for _ in range(50): # Try for ~5 seconds\n time.sleep(0.1)\n files = sorted(glob.glob(os.path.join(maildir_new, \"*\")))\n if files:\n break\n \n # Assert that at least one mail file was delivered\n assert files, f\"No email was delivered to {maildir_new}\"\n \n # Read the most recent mail file\n with open(files[-1], \"r\", encoding=\"utf-8\", errors=\"replace\") as f:\n content = f.read()\n \n # Assert that both the subject and body appear in the delivered email\n assert subject in content, \"Email subject not found in delivered message\"\n assert body in content, \"Email body not found in delivered message\"\n \n repr_str = repr(msg)\n assert isinstance(repr_str, str), \"__repr__() must return str\"\n assert f\"To: {to_addr}\" in repr_str, \"To header missing from __repr__()\"\n> assert f\"From: {from_addr}\" in repr_str, \"From header missing from __repr__()\"\nE NameError: name 'from_addr' is not defined\n\ntests/test_utils_sendmail.py:56: NameError"}, "teardown": {"duration": 0.0004034559242427349, "outcome": "passed"}}, {"nodeid": "tests/test_utils_sendmail.py::test_sendmail_raises_on_sendmail_failure", "lineno": 59, "outcome": "passed", "keywords": ["test_sendmail_raises_on_sendmail_failure", "test_utils_sendmail.py", "tests", "slic", ""], "setup": {"duration": 0.0004614712670445442, "outcome": "passed"}, "call": {"duration": 0.000995422713458538, "outcome": "passed"}, "teardown": {"duration": 0.00017912406474351883, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\-", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/bsread/h5.py", "lineno": 207}, {"message": "The module numpy.dual is deprecated. Instead of using dual, use the functions directly from numpy or scipy.", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/scipy/fft/__init__.py", "lineno": 97}]}
{"created": 1755032895.197409, "duration": 5.000359773635864, "exitcode": 0, "root": "/workspace/tligui_y/slic", "environment": {}, "summary": {"passed": 2, "total": 2, "collected": 2}, "collectors": [{"nodeid": "", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_sendmail.py", "type": "Module"}]}, {"nodeid": "tests/test_utils_sendmail.py", "outcome": "passed", "result": [{"nodeid": "tests/test_utils_sendmail.py::test_sendmail_local_delivery", "type": "Function", "lineno": 13}, {"nodeid": "tests/test_utils_sendmail.py::test_sendmail_raises_on_sendmail_failure", "type": "Function", "lineno": 60}]}], "tests": [{"nodeid": "tests/test_utils_sendmail.py::test_sendmail_local_delivery", "lineno": 13, "outcome": "passed", "keywords": ["test_sendmail_local_delivery", "test_utils_sendmail.py", "tests", "slic", ""], "setup": {"duration": 0.00038446392863988876, "outcome": "passed"}, "call": {"duration": 0.14400978619232774, "outcome": "passed"}, "teardown": {"duration": 0.00038974499329924583, "outcome": "passed"}}, {"nodeid": "tests/test_utils_sendmail.py::test_sendmail_raises_on_sendmail_failure", "lineno": 60, "outcome": "passed", "keywords": ["test_sendmail_raises_on_sendmail_failure", "test_utils_sendmail.py", "tests", "slic", ""], "setup": {"duration": 0.0005245627835392952, "outcome": "passed"}, "call": {"duration": 0.0009062779136002064, "outcome": "passed"}, "teardown": {"duration": 0.00016784807667136192, "outcome": "passed"}}], "warnings": [{"message": "invalid escape sequence \\-", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/bsread/h5.py", "lineno": 207}, {"message": "The module numpy.dual is deprecated. Instead of using dual, use the functions directly from numpy or scipy.", "category": "DeprecationWarning", "when": "collect", "filename": "/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/scipy/fft/__init__.py", "lineno": 97}]}