Table of Contents
Test Report
View CI Run 2040 | Commit 794111a
🧪 Test Report
Generated on 2025-08-11 13:18:15 CEST
🧾 General Info
- duration: 16.89507508277893
- root: /workspace/tligui_y/slic
- environment: {}
📋 Summary
- Passed: 527
- Failed: 14
- Total: 541
- Collected: 541
🔎 Tests
✅ Passed (527)
-
📄 morbidissimo/morbidissimo/morioc/test_infer_type.py
↳ Function: test_it_type_str
-
✅ Test 1
📌 Setup phase
duration:
0.0008005728013813496outcome:
passed📌 Call phase
duration:
0.00025482894852757454outcome:
passed📌 Teardown phase
duration:
0.00022452417761087418outcome:
passed
↳ Function: test_it_type_float
-
✅ Test 2
📌 Setup phase
duration:
0.0001245560124516487outcome:
passed📌 Call phase
duration:
0.00015253666788339615outcome:
passed📌 Teardown phase
duration:
0.00010567763820290565outcome:
passed
↳ Function: test_it_type_int
-
✅ Test 3
📌 Setup phase
duration:
0.00011167814955115318outcome:
passed📌 Call phase
duration:
0.00015213899314403534outcome:
passed📌 Teardown phase
duration:
0.0001046089455485344outcome:
passed
↳ Function: test_it_value_str
-
✅ Test 4
📌 Setup phase
duration:
0.00011159386485815048outcome:
passed📌 Call phase
duration:
0.00014200713485479355outcome:
passed📌 Teardown phase
duration:
9.915605187416077e-05outcome:
passed
↳ Function: test_it_value_long_str
-
✅ Test 5
📌 Setup phase
duration:
0.00011698203161358833outcome:
passed📌 Call phase
duration:
0.00014346139505505562outcome:
passed📌 Teardown phase
duration:
0.00010162172839045525outcome:
passed
↳ Function: test_it_value_float
-
✅ Test 6
📌 Setup phase
duration:
0.0001081470400094986outcome:
passed📌 Call phase
duration:
0.0001617148518562317outcome:
passed📌 Teardown phase
duration:
0.00010736612603068352outcome:
passed
↳ Function: test_it_value_int
-
✅ Test 7
📌 Setup phase
duration:
0.00010730605572462082outcome:
passed📌 Call phase
duration:
0.00015962496399879456outcome:
passed📌 Teardown phase
duration:
0.00010485388338565826outcome:
passed
↳ Function: test_it_empty_value_str
-
✅ Test 8
📌 Setup phase
duration:
0.00011052191257476807outcome:
passed📌 Call phase
duration:
0.00015173479914665222outcome:
passed📌 Teardown phase
duration:
0.0001022210344672203outcome:
passed
↳ Function: test_it_empty_value_float
-
✅ Test 9
📌 Setup phase
duration:
0.00010919710621237755outcome:
passed📌 Call phase
duration:
0.00014921696856617928outcome:
passed📌 Teardown phase
duration:
0.00010388670489192009outcome:
passed
↳ Function: test_it_empty_value_int
-
✅ Test 10
📌 Setup phase
duration:
0.00011100713163614273outcome:
passed📌 Call phase
duration:
0.00013645226135849953outcome:
passed📌 Teardown phase
duration:
9.775673970580101e-05outcome:
passed
↳ Function: test_pstrue_str
-
✅ Test 11
📌 Setup phase
duration:
0.00010583782568573952outcome:
passed📌 Call phase
duration:
0.00014284532517194748outcome:
passed📌 Teardown phase
duration:
0.0001011318527162075outcome:
passed
↳ Function: test_pstrue_float
-
✅ Test 12
📌 Setup phase
duration:
0.00010740896686911583outcome:
passed📌 Call phase
duration:
0.000137286726385355outcome:
passed📌 Teardown phase
duration:
0.00011393288150429726outcome:
passed
↳ Function: test_pstrue_int
-
✅ Test 13
📌 Setup phase
duration:
0.00011449400335550308outcome:
passed📌 Call phase
duration:
0.0001382441259920597outcome:
passed📌 Teardown phase
duration:
9.75816510617733e-05outcome:
passed
↳ Function: test_psfalse_str
-
✅ Test 14
📌 Setup phase
duration:
0.00010596821084618568outcome:
passed📌 Call phase
duration:
0.00013708416372537613outcome:
passed📌 Teardown phase
duration:
9.783077985048294e-05outcome:
passed
↳ Function: test_psfalse_float
-
✅ Test 15
📌 Setup phase
duration:
0.00010715518146753311outcome:
passed📌 Call phase
duration:
0.00013337284326553345outcome:
passed📌 Teardown phase
duration:
9.40919853746891e-05outcome:
passed
↳ Function: test_psfalse_int
-
✅ Test 16
📌 Setup phase
duration:
0.0001099701039493084outcome:
passed📌 Call phase
duration:
0.00013627298176288605outcome:
passed📌 Teardown phase
duration:
9.777024388313293e-05outcome:
passed
↳ Function: test_it_None
-
✅ Test 17
📌 Setup phase
duration:
0.00011434592306613922outcome:
passed📌 Call phase
duration:
0.00016007106751203537outcome:
passed📌 Teardown phase
duration:
9.971484541893005e-05outcome:
passed
↳ Function: test_it_True
-
✅ Test 18
📌 Setup phase
duration:
0.00010772561654448509outcome:
passed📌 Call phase
duration:
0.00014376873150467873outcome:
passed📌 Teardown phase
duration:
9.810039773583412e-05outcome:
passed
↳ Function: test_it_False
-
✅ Test 19
📌 Setup phase
duration:
0.0001056981272995472outcome:
passed📌 Call phase
duration:
0.0003054398111999035outcome:
passed📌 Teardown phase
duration:
0.0001248749904334545outcome:
passed
↳ Function: test_it_nan
-
✅ Test 20
📌 Setup phase
duration:
0.00015024002641439438outcome:
passed📌 Call phase
duration:
0.0001501450315117836outcome:
passed📌 Teardown phase
duration:
0.00010354910045862198outcome:
passed
↳ Function: test_it_np_nan
-
✅ Test 21
📌 Setup phase
duration:
0.0001292061060667038outcome:
passed📌 Call phase
duration:
0.00015462283045053482outcome:
passed📌 Teardown phase
duration:
0.00010749185457825661outcome:
passed
↳ Function: test_it_np1D_int
-
✅ Test 22
📌 Setup phase
duration:
0.00011940998956561089outcome:
passed📌 Call phase
duration:
0.00022749602794647217outcome:
passed📌 Teardown phase
duration:
0.00010756589472293854outcome:
passed
↳ Function: test_it_np2D_int
-
✅ Test 23
📌 Setup phase
duration:
0.0001243269070982933outcome:
passed📌 Call phase
duration:
0.00018865196034312248outcome:
passed📌 Teardown phase
duration:
9.982381016016006e-05outcome:
passed
↳ Function: test_it_np1D_float
-
✅ Test 24
📌 Setup phase
duration:
0.00011811079457402229outcome:
passed📌 Call phase
duration:
0.00027577904984354973outcome:
passed📌 Teardown phase
duration:
0.00011286977678537369outcome:
passed
↳ Function: test_it_np2D_float
-
✅ Test 25
📌 Setup phase
duration:
0.0001226961612701416outcome:
passed📌 Call phase
duration:
0.00021157274022698402outcome:
passed📌 Teardown phase
duration:
0.00010390998795628548outcome:
passed
↳ Function: test_it_np1D_bool
-
✅ Test 26
📌 Setup phase
duration:
0.00011372007429599762outcome:
passed📌 Call phase
duration:
0.00016404595226049423outcome:
passed📌 Teardown phase
duration:
0.00010413490235805511outcome:
passed
↳ Function: test_it_np1D_object
-
✅ Test 27
📌 Setup phase
duration:
0.00011284789070487022outcome:
passed📌 Call phase
duration:
0.00016294419765472412outcome:
passed📌 Teardown phase
duration:
0.0001028887927532196outcome:
passed
↳ Function: test_it_np_scalar_int
-
✅ Test 28
📌 Setup phase
duration:
0.00010991469025611877outcome:
passed📌 Call phase
duration:
0.0001768907532095909outcome:
passed📌 Teardown phase
duration:
9.955186396837234e-05outcome:
passed
↳ Function: test_it_np_scalar_float
-
✅ Test 29
📌 Setup phase
duration:
0.0001245131716132164outcome:
passed📌 Call phase
duration:
0.0001733643002808094outcome:
passed📌 Teardown phase
duration:
0.00010039983317255974outcome:
passed
↳ Function: test_it_np_scalar_bool
-
✅ Test 30
📌 Setup phase
duration:
0.00011650240048766136outcome:
passed📌 Call phase
duration:
0.00016966089606285095outcome:
passed📌 Teardown phase
duration:
9.940005838871002e-05outcome:
passed
↳ Function: test_it_list
-
✅ Test 31
📌 Setup phase
duration:
0.00012199487537145615outcome:
passed📌 Call phase
duration:
0.00015345076099038124outcome:
passed📌 Teardown phase
duration:
9.999610483646393e-05outcome:
passed
↳ Function: test_it_tuple
-
✅ Test 32
📌 Setup phase
duration:
0.00010550674051046371outcome:
passed📌 Call phase
duration:
0.00014868611469864845outcome:
passed📌 Teardown phase
duration:
0.00010485481470823288outcome:
passed
-
-
📄 test_utils_argfwd.py
↳ Function: test_split_at
-
✅ Test 33
params: lst=["a", "b", "c", "d"], index=2, expected="a", "b"], ["c", "d"📌 Runtime Parameters
params: lst: - a - b - c - d index: 2 expected: - - a - b - - c - d id: lst0-2-expected0📌 Setup phase
duration:
0.0004626610316336155outcome:
passed📌 Call phase
duration:
0.0001596091315150261outcome:
passed📌 Teardown phase
duration:
0.00017817411571741104outcome:
passed -
✅ Test 34
params: lst=["x", "y"], index=1, expected="x"], ["y"📌 Runtime Parameters
params: lst: - x - y index: 1 expected: - - x - - y id: lst1-1-expected1📌 Setup phase
duration:
0.0003007100895047188outcome:
passed📌 Call phase
duration:
0.00014612404629588127outcome:
passed📌 Teardown phase
duration:
0.00015743495896458626outcome:
passed -
✅ Test 35
params: lst=[], index=0, expected=], [📌 Runtime Parameters
params: lst: [] index: 0 expected: - (vide) - (vide) id: lst2-0-expected2📌 Setup phase
duration:
0.0002658609300851822outcome:
passed📌 Call phase
duration:
0.0001545250415802002outcome:
passed📌 Teardown phase
duration:
0.00016083894297480583outcome:
passed
↳ Function: test_merge_lists_unique
-
✅ Test 36
params: a=["a", "b"], b=["b", "c"], expected=["a", "b", "c"]📌 Runtime Parameters
params: a: - a - b b: - b - c expected: - a - b - c id: a0-b0-expected0📌 Setup phase
duration:
0.0002880869433283806outcome:
passed📌 Call phase
duration:
0.0001460048370063305outcome:
passed📌 Teardown phase
duration:
0.0001538749784231186outcome:
passed -
✅ Test 37
params: a=[], b=["x"], expected=["x"]📌 Runtime Parameters
params: a: [] b: - x expected: - x id: a1-b1-expected1📌 Setup phase
duration:
0.0002826051786541939outcome:
passed📌 Call phase
duration:
0.00014286302030086517outcome:
passed📌 Teardown phase
duration:
0.00015402399003505707outcome:
passed -
✅ Test 38
params: a=["x", "y"], b=["x", "y"], expected=["x", "y"]📌 Runtime Parameters
params: a: - x - y b: - x - y expected: - x - y id: a2-b2-expected2📌 Setup phase
duration:
0.0002584671601653099outcome:
passed📌 Call phase
duration:
0.00013895565643906593outcome:
passed📌 Teardown phase
duration:
0.0001702527515590191outcome:
passed
↳ Function: test_merge_dicts_unique
-
✅ Test 39
params: a={"a": 1}, b={"b": 2}, expected={"a": 1, "b": 2}📌 Runtime Parameters
params: a: a: 1 b: b: 2 expected: a: 1 b: 2 id: a0-b0-expected0📌 Setup phase
duration:
0.0002679852768778801outcome:
passed📌 Call phase
duration:
0.00014133984223008156outcome:
passed📌 Teardown phase
duration:
0.0001596692018210888outcome:
passed -
✅ Test 40
params: a={"x": 1}, b={"x": 9, "y": 3}, expected={"x": 1, "y": 3}📌 Runtime Parameters
params: a: x: 1 b: x: 9 y: 3 expected: x: 1 y: 3 id: a1-b1-expected1📌 Setup phase
duration:
0.00035080360248684883outcome:
passed📌 Call phase
duration:
0.00015104468911886215outcome:
passed📌 Teardown phase
duration:
0.00016480730846524239outcome:
passed -
✅ Test 41
params: a={}, b={"k": 4}, expected={"k": 4}📌 Runtime Parameters
params: a: {} b: k: 4 expected: k: 4 id: a2-b2-expected2📌 Setup phase
duration:
0.0002730167470872402outcome:
passed📌 Call phase
duration:
0.00013878988102078438outcome:
passed📌 Teardown phase
duration:
0.0001620040275156498outcome:
passed
↳ Function: test_make_params_pos_basic
-
✅ Test 42
params: pos=["a", "b"], expected_names=["a", "b"]📌 Runtime Parameters
params: pos: - a - b expected_names: - a - b id: pos0-expected_names0📌 Setup phase
duration:
0.00024332990869879723outcome:
passed📌 Call phase
duration:
0.00017616618424654007outcome:
passed📌 Teardown phase
duration:
0.0001464439556002617outcome:
passed -
✅ Test 43
params: pos=["param1", "value_2", "Z"], expected_names=["param1", "value_2", "Z"]📌 Runtime Parameters
params: pos: - param1 - value_2 - Z expected_names: - param1 - value_2 - Z id: pos1-expected_names1📌 Setup phase
duration:
0.00022633560001850128outcome:
passed📌 Call phase
duration:
0.0001621190458536148outcome:
passed📌 Teardown phase
duration:
0.00015080906450748444outcome:
passed -
✅ Test 44
params: pos=[], expected_names=[]📌 Runtime Parameters
params: pos: [] expected_names: [] id: pos2-expected_names2📌 Setup phase
duration:
0.00022072717547416687outcome:
passed📌 Call phase
duration:
0.00014092307537794113outcome:
passed📌 Teardown phase
duration:
0.00014106277376413345outcome:
passed
↳ Function: test_make_params_kw_basic
-
✅ Test 45
params: kw={"a": 1, "b": 2}, expected_keys=["a", "b"], expected_defaults=[1, 2]📌 Runtime Parameters
params: kw: a: 1 b: 2 expected_keys: - a - b expected_defaults: - 1 - 2 id: kw0-expected_keys0-expected_defaults0📌 Setup phase
duration:
0.00026531098410487175outcome:
passed📌 Call phase
duration:
0.0001801038160920143outcome:
passed📌 Teardown phase
duration:
0.00016833189874887466outcome:
passed -
✅ Test 46
params: kw={"param_x": 0}, expected_keys=["param_x"], expected_defaults=[0]📌 Runtime Parameters
params: kw: param_x: 0 expected_keys: - param_x expected_defaults: - (vide) id: kw1-expected_keys1-expected_defaults1📌 Setup phase
duration:
0.0002728942781686783outcome:
passed📌 Call phase
duration:
0.00015494506806135178outcome:
passed📌 Teardown phase
duration:
0.00015222188085317612outcome:
passed -
✅ Test 47
params: kw={}, expected_keys=[], expected_defaults=[]📌 Runtime Parameters
params: kw: {} expected_keys: [] expected_defaults: [] id: kw2-expected_keys2-expected_defaults2📌 Setup phase
duration:
0.0002903849817812443outcome:
passed📌 Call phase
duration:
0.00015388010069727898outcome:
passed📌 Teardown phase
duration:
0.00016805995255708694outcome:
passed
↳ Function: test_make_signature_parametrized
-
✅ Test 48
params: pos=["x", "y"], kw={"z": 3}, expected_signature="(x, y, z=3)"📌 Runtime Parameters
params: pos: - x - y kw: z: 3 expected_signature: (x, y, z=3) id: pos0-kw0-(x, y, z=3)📌 Setup phase
duration:
0.0002867388539016247outcome:
passed📌 Call phase
duration:
0.00019690720364451408outcome:
passed📌 Teardown phase
duration:
0.00017813919112086296outcome:
passed -
✅ Test 49
params: pos=["a"], kw={"b": 1, "c": 2}, expected_signature="(a, b=1, c=2)"📌 Runtime Parameters
params: pos: - a kw: b: 1 c: 2 expected_signature: (a, b=1, c=2) id: pos1-kw1-(a, b=1, c=2)📌 Setup phase
duration:
0.0002752239815890789outcome:
passed📌 Call phase
duration:
0.00019828882068395615outcome:
passed📌 Teardown phase
duration:
0.00017225882038474083outcome:
passed -
✅ Test 50
params: pos=[], kw={"flag": false}, expected_signature="(flag=False)"📌 Runtime Parameters
params: pos: [] kw: flag: False expected_signature: (flag=False) id: pos2-kw2-(flag=False)📌 Setup phase
duration:
0.00027352431789040565outcome:
passed📌 Call phase
duration:
0.00016841106116771698outcome:
passed📌 Teardown phase
duration:
0.00015210499987006187outcome:
passed
↳ Function: test_get_args_parametrized
-
✅ Test 51
params: func=" at 0x7f1eff3590d0>", expected_pos=["a", "b"], expected_kw={"c": 3, "d": 4}📌 Runtime Parameters
params: func: <function <lambda> at 0x7f1eff3590d0> expected_pos: - a - b expected_kw: c: 3 d: 4 id: <lambda>-expected_pos0-expected_kw0📌 Setup phase
duration:
0.00028671231120824814outcome:
passed📌 Call phase
duration:
0.0002097361721098423outcome:
passed📌 Teardown phase
duration:
0.00015798723325133324outcome:
passed -
✅ Test 52
params: func=" at 0x7f1eff369040>", expected_pos=[], expected_kw="{'x': 1, 'y': , 'z': 0}"📌 Runtime Parameters
params: func: <function <lambda> at 0x7f1eff369040> expected_pos: [] expected_kw: {'x': 1, 'y': <class 'inspect._empty'>, 'z': 0} id: <lambda>-expected_pos1-expected_kw1📌 Setup phase
duration:
0.0002673291601240635outcome:
passed📌 Call phase
duration:
0.0002002599649131298outcome:
passed📌 Teardown phase
duration:
0.00016337912529706955outcome:
passed -
✅ Test 53
params: func=" at 0x7f1eff369160>", expected_pos=[], expected_kw={}📌 Runtime Parameters
params: func: <function <lambda> at 0x7f1eff369160> expected_pos: [] expected_kw: {} id: <lambda>-expected_pos2-expected_kw2📌 Setup phase
duration:
0.0002596531994640827outcome:
passed📌 Call phase
duration:
0.00019148271530866623outcome:
passed📌 Teardown phase
duration:
0.00016369670629501343outcome:
passed
↳ Function: test_signature_visible
-
✅ Test 54
params: func="", expected_sig="(a, b, d=30, c=10)"📌 Runtime Parameters
params: func: <function wrap_all at 0x7f1eff3693a0> expected_sig: (a, b, d=30, c=10) id: wrap_all-(a, b, d=30, c=10)📌 Setup phase
duration:
0.00023153424263000488outcome:
passed📌 Call phase
duration:
0.00016078492626547813outcome:
passed📌 Teardown phase
duration:
0.00014110514894127846outcome:
passed -
✅ Test 55
params: func="", expected_sig="(a, b, c=10, d=20)"📌 Runtime Parameters
params: func: <function wrap_skip at 0x7f1eff369430> expected_sig: (a, b, c=10, d=20) id: wrap_skip-(a, b, c=10, d=20)📌 Setup phase
duration:
0.0002493499778211117outcome:
passed📌 Call phase
duration:
0.000161048024892807outcome:
passed📌 Teardown phase
duration:
0.00013830885291099548outcome:
passed -
✅ Test 56
params: func="", expected_sig="(x, y, c=10, d=20)"📌 Runtime Parameters
params: func: <function wrap_ignore_all at 0x7f1eff3694c0> expected_sig: (x, y, c=10, d=20) id: wrap_ignore_all-(x, y, c=10, d=20)📌 Setup phase
duration:
0.0002324311062693596outcome:
passed📌 Call phase
duration:
0.00015949178487062454outcome:
passed📌 Teardown phase
duration:
0.0001408192329108715outcome:
passed
↳ Function: test_wrapper_behavior
-
✅ Test 57
params: func="", args=[1, 2, 3], kwargs={}, expected_result=36📌 Runtime Parameters
params: func: <function wrap_all at 0x7f1eff3693a0> args: - 1 - 2 - 3 kwargs: {} expected_result: 36 id: wrap_all-args0-kwargs0-36📌 Setup phase
duration:
0.000310549046844244outcome:
passed📌 Call phase
duration:
0.000141034834086895outcome:
passed📌 Teardown phase
duration:
0.00019234465435147285outcome:
passed -
✅ Test 58
params: func="", args=[1, 2, 3], kwargs={"d": 5}, expected_result=11📌 Runtime Parameters
params: func: <function wrap_all at 0x7f1eff3693a0> args: - 1 - 2 - 3 kwargs: d: 5 expected_result: 11 id: wrap_all-args1-kwargs1-11📌 Setup phase
duration:
0.00030939606949687004outcome:
passed📌 Call phase
duration:
0.00013450486585497856outcome:
passed📌 Teardown phase
duration:
0.00017461786046624184outcome:
passed -
✅ Test 59
params: func="", args=[0, 0], kwargs={"c": 3, "d": 4}, expected_result=10📌 Runtime Parameters
params: func: <function wrap_skip at 0x7f1eff369430> args: - (vide) - (vide) kwargs: c: 3 d: 4 expected_result: 10 id: wrap_skip-args2-kwargs2-10📌 Setup phase
duration:
0.00031043728813529015outcome:
passed📌 Call phase
duration:
0.0001381230540573597outcome:
passed📌 Teardown phase
duration:
0.00017565395683050156outcome:
passed -
✅ Test 60
params: func="", args=[0, 0], kwargs={}, expected_result=10📌 Runtime Parameters
params: func: <function wrap_ignore_all at 0x7f1eff3694c0> args: - (vide) - (vide) kwargs: {} expected_result: 10 id: wrap_ignore_all-args3-kwargs3-10📌 Setup phase
duration:
0.00032198894768953323outcome:
passed📌 Call phase
duration:
0.00014855805784463882outcome:
passed📌 Teardown phase
duration:
0.00017068395391106606outcome:
passed
-
-
📄 test_utils_ask_yes_no.py
↳ Function: test_ask_yes_no
-
✅ Test 61
params: default=null, user_input="y", expected_output=true, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: y expected_output: True expected_prompt: Question? [y/n] id: None-y-True-Question? [y/n]📌 Setup phase
duration:
0.00032002199441194534outcome:
passed📌 Call phase
duration:
0.0010034278966486454outcome:
passed📌 Teardown phase
duration:
0.0002088160254061222outcome:
passed -
✅ Test 62
params: default=null, user_input="yes", expected_output=true, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: yes expected_output: True expected_prompt: Question? [y/n] id: None-yes-True-Question? [y/n]📌 Setup phase
duration:
0.0003303578123450279outcome:
passed📌 Call phase
duration:
0.0005964557640254498outcome:
passed📌 Teardown phase
duration:
0.00018508872017264366outcome:
passed -
✅ Test 63
params: default=null, user_input="n", expected_output=false, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: n expected_output: False expected_prompt: Question? [y/n] id: None-n-False-Question? [y/n]📌 Setup phase
duration:
0.0003286660648882389outcome:
passed📌 Call phase
duration:
0.0005509289912879467outcome:
passed📌 Teardown phase
duration:
0.00018927594646811485outcome:
passed -
✅ Test 64
params: default=null, user_input="no", expected_output=false, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: no expected_output: False expected_prompt: Question? [y/n] id: None-no-False-Question? [y/n]📌 Setup phase
duration:
0.0003322870470583439outcome:
passed📌 Call phase
duration:
0.0006142281927168369outcome:
passed📌 Teardown phase
duration:
0.00019792281091213226outcome:
passed -
✅ Test 65
params: default=null, user_input=["maybe", "y"], expected_output=true, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: - maybe - y expected_output: True expected_prompt: Question? [y/n] id: None-user_input4-True-Question? [y/n]📌 Setup phase
duration:
0.0003396891988813877outcome:
passed📌 Call phase
duration:
0.0005319877527654171outcome:
passed📌 Teardown phase
duration:
0.00018510036170482635outcome:
passed -
✅ Test 66
params: default=null, user_input=["", "no"], expected_output=false, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: - (vide) - no expected_output: False expected_prompt: Question? [y/n] id: None-user_input5-False-Question? [y/n]📌 Setup phase
duration:
0.00031976867467164993outcome:
passed📌 Call phase
duration:
0.0005697831511497498outcome:
passed📌 Teardown phase
duration:
0.00018587708473205566outcome:
passed -
✅ Test 67
params: default=null, user_input=["invalid", "", "invalid", "yes"], expected_output=true, expected_prompt="Question? [y/n] "📌 Runtime Parameters
params: default: None user_input: - invalid - (vide) - invalid - yes expected_output: True expected_prompt: Question? [y/n] id: None-user_input6-True-Question? [y/n]📌 Setup phase
duration:
0.0003198739141225815outcome:
passed📌 Call phase
duration:
0.00056128716096282outcome:
passed📌 Teardown phase
duration:
0.00018456531688570976outcome:
passed -
✅ Test 68
params: default="y", user_input="y", expected_output=true, expected_prompt="Question? [Y/n] "📌 Runtime Parameters
params: default: y user_input: y expected_output: True expected_prompt: Question? [Y/n] id: y-y-True-Question? [Y/n]📌 Setup phase
duration:
0.00033921003341674805outcome:
passed📌 Call phase
duration:
0.0006204447709023952outcome:
passed📌 Teardown phase
duration:
0.00018083490431308746outcome:
passed -
✅ Test 69
params: default="y", user_input="n", expected_output=false, expected_prompt="Question? [Y/n] "📌 Runtime Parameters
params: default: y user_input: n expected_output: False expected_prompt: Question? [Y/n] id: y-n-False-Question? [Y/n]📌 Setup phase
duration:
0.0003284718841314316outcome:
passed📌 Call phase
duration:
0.0005029202438890934outcome:
passed📌 Teardown phase
duration:
0.00019456865265965462outcome:
passed -
✅ Test 70
params: default="y", user_input="", expected_output=true, expected_prompt="Question? [Y/n] "📌 Runtime Parameters
params: default: y user_input: None expected_output: True expected_prompt: Question? [Y/n] id: y--True-Question? [Y/n]📌 Setup phase
duration:
0.0003183768130838871outcome:
passed📌 Call phase
duration:
0.0005261721089482307outcome:
passed📌 Teardown phase
duration:
0.00018123863264918327outcome:
passed -
✅ Test 71
params: default="n", user_input="y", expected_output=true, expected_prompt="Question? [y/N] "📌 Runtime Parameters
params: default: n user_input: y expected_output: True expected_prompt: Question? [y/N] id: n-y-True-Question? [y/N]📌 Setup phase
duration:
0.0003194538876414299outcome:
passed📌 Call phase
duration:
0.0006131920963525772outcome:
passed📌 Teardown phase
duration:
0.0001925099641084671outcome:
passed -
✅ Test 72
params: default="n", user_input="n", expected_output=false, expected_prompt="Question? [y/N] "📌 Runtime Parameters
params: default: n user_input: n expected_output: False expected_prompt: Question? [y/N] id: n-n-False-Question? [y/N]📌 Setup phase
duration:
0.0003289137966930866outcome:
passed📌 Call phase
duration:
0.0005047819577157497outcome:
passed📌 Teardown phase
duration:
0.00018905196338891983outcome:
passed -
✅ Test 73
params: default="n", user_input="", expected_output=false, expected_prompt="Question? [y/N] "📌 Runtime Parameters
params: default: n user_input: None expected_output: False expected_prompt: Question? [y/N] id: n--False-Question? [y/N]📌 Setup phase
duration:
0.0003199586644768715outcome:
passed📌 Call phase
duration:
0.0004965909756720066outcome:
passed📌 Teardown phase
duration:
0.00019078096374869347outcome:
passed
↳ Function: test_ask_yes_no_ctrl_c
-
✅ Test 74
params: default=null, user_input="", expected_output=false, ctrl_c="n"📌 Runtime Parameters
params: default: None user_input: <class 'KeyboardInterrupt'> expected_output: False ctrl_c: n id: None-KeyboardInterrupt-False-n📌 Setup phase
duration:
0.00032916199415922165outcome:
passed📌 Call phase
duration:
0.0005252929404377937outcome:
passed📌 Teardown phase
duration:
0.00018898071721196175outcome:
passed -
✅ Test 75
params: default=null, user_input="", expected_output=true, ctrl_c="y"📌 Runtime Parameters
params: default: None user_input: <class 'KeyboardInterrupt'> expected_output: True ctrl_c: y id: None-KeyboardInterrupt-True-y📌 Setup phase
duration:
0.00033511314541101456outcome:
passed📌 Call phase
duration:
0.0006259349174797535outcome:
passed📌 Teardown phase
duration:
0.00018894299864768982outcome:
passed -
✅ Test 76
params: default="y", user_input="", expected_output=false, ctrl_c="n"📌 Runtime Parameters
params: default: y user_input: <class 'KeyboardInterrupt'> expected_output: False ctrl_c: n id: y-KeyboardInterrupt-False-n📌 Setup phase
duration:
0.0003304951824247837outcome:
passed📌 Call phase
duration:
0.0005126995965838432outcome:
passed📌 Teardown phase
duration:
0.00018345005810260773outcome:
passed -
✅ Test 77
params: default="y", user_input="", expected_output=true, ctrl_c="y"📌 Runtime Parameters
params: default: y user_input: <class 'KeyboardInterrupt'> expected_output: True ctrl_c: y id: y-KeyboardInterrupt-True-y📌 Setup phase
duration:
0.00032984698191285133outcome:
passed📌 Call phase
duration:
0.0005064499564468861outcome:
passed📌 Teardown phase
duration:
0.0001856619492173195outcome:
passed -
✅ Test 78
params: default="n", user_input="", expected_output=false, ctrl_c="n"📌 Runtime Parameters
params: default: n user_input: <class 'KeyboardInterrupt'> expected_output: False ctrl_c: n id: n-KeyboardInterrupt-False-n📌 Setup phase
duration:
0.0003288639709353447outcome:
passed📌 Call phase
duration:
0.0005351807922124863outcome:
passed📌 Teardown phase
duration:
0.00018204981461167336outcome:
passed -
✅ Test 79
params: default=null, user_input="['invalid', '', 'invalid', ]", expected_output=false, ctrl_c="n"📌 Runtime Parameters
params: default: None user_input: ['invalid', '', 'invalid', <class 'KeyboardInterrupt'>] expected_output: False ctrl_c: n id: None-user_input5-False-n📌 Setup phase
duration:
0.00033506378531455994outcome:
passed📌 Call phase
duration:
0.0006601931527256966outcome:
passed📌 Teardown phase
duration:
0.0001900242641568184outcome:
passed -
✅ Test 80
params: default=null, user_input="['invalid', '', 'invalid', ]", expected_output=true, ctrl_c="y"📌 Runtime Parameters
params: default: None user_input: ['invalid', '', 'invalid', <class 'KeyboardInterrupt'>] expected_output: True ctrl_c: y id: None-user_input6-True-y📌 Setup phase
duration:
0.00033491989597678185outcome:
passed📌 Call phase
duration:
0.0005364627577364445outcome:
passed📌 Teardown phase
duration:
0.00018801726400852203outcome:
passed -
✅ Test 81
params: default=null, user_input="['foo', '', , '', 'invalid', , 'no']", expected_output=false, ctrl_c=null📌 Runtime Parameters
params: default: None user_input: ['foo', '', <class 'KeyboardInterrupt'>, '', 'invalid', <class 'KeyboardInterrupt'>, 'no'] expected_output: False ctrl_c: None id: None-user_input7-False-None📌 Setup phase
duration:
0.0003209882415831089outcome:
passed📌 Call phase
duration:
0.0005835327319800854outcome:
passed📌 Teardown phase
duration:
0.00020791217684745789outcome:
passed -
✅ Test 82
params: default="n", user_input="[, , , '']", expected_output=false, ctrl_c=null📌 Runtime Parameters
params: default: n user_input: [<class 'KeyboardInterrupt'>, <class 'KeyboardInterrupt'>, <class 'KeyboardInterrupt'>, ''] expected_output: False ctrl_c: None id: n-user_input8-False-None📌 Setup phase
duration:
0.00033126212656497955outcome:
passed📌 Call phase
duration:
0.0006540012545883656outcome:
passed📌 Teardown phase
duration:
0.0001890077255666256outcome:
passed -
✅ Test 83
params: default="n", user_input="[, , , '']", expected_output=false, ctrl_c="Invalid"📌 Runtime Parameters
params: default: n user_input: [<class 'KeyboardInterrupt'>, <class 'KeyboardInterrupt'>, <class 'KeyboardInterrupt'>, ''] expected_output: False ctrl_c: Invalid id: n-user_input9-False-Invalid📌 Setup phase
duration:
0.00032597780227661133outcome:
passed📌 Call phase
duration:
0.0005598943680524826outcome:
passed📌 Teardown phase
duration:
0.00018751202151179314outcome:
passed
↳ Function: test_ask_yes_no_ctrl_d
-
✅ Test 84
params: default=null, user_input="", expected_output=false, ctrl_d="n"📌 Runtime Parameters
params: default: None user_input: <class 'EOFError'> expected_output: False ctrl_d: n id: None-EOFError-False-n📌 Setup phase
duration:
0.00033661630004644394outcome:
passed📌 Call phase
duration:
0.0005024471320211887outcome:
passed📌 Teardown phase
duration:
0.00018852436915040016outcome:
passed -
✅ Test 85
params: default=null, user_input="", expected_output=true, ctrl_d="y"📌 Runtime Parameters
params: default: None user_input: <class 'EOFError'> expected_output: True ctrl_d: y id: None-EOFError-True-y📌 Setup phase
duration:
0.00033845705911517143outcome:
passed📌 Call phase
duration:
0.0005119722336530685outcome:
passed📌 Teardown phase
duration:
0.00021377857774496078outcome:
passed -
✅ Test 86
params: default="y", user_input="", expected_output=true, ctrl_d="y"📌 Runtime Parameters
params: default: y user_input: <class 'EOFError'> expected_output: True ctrl_d: y id: y-EOFError-True-y📌 Setup phase
duration:
0.00032343994826078415outcome:
passed📌 Call phase
duration:
0.0006183446384966373outcome:
passed📌 Teardown phase
duration:
0.00018897000700235367outcome:
passed -
✅ Test 87
params: default="n", user_input="", expected_output=true, ctrl_d="y"📌 Runtime Parameters
params: default: n user_input: <class 'EOFError'> expected_output: True ctrl_d: y id: n-EOFError-True-y📌 Setup phase
duration:
0.00032706232741475105outcome:
passed📌 Call phase
duration:
0.0005114180967211723outcome:
passed📌 Teardown phase
duration:
0.00018345285207033157outcome:
passed -
✅ Test 88
params: default="n", user_input="", expected_output=false, ctrl_d="n"📌 Runtime Parameters
params: default: n user_input: <class 'EOFError'> expected_output: False ctrl_d: n id: n-EOFError-False-n📌 Setup phase
duration:
0.0003341292031109333outcome:
passed📌 Call phase
duration:
0.0005077156238257885outcome:
passed📌 Teardown phase
duration:
0.00018413318321108818outcome:
passed -
✅ Test 89
params: default=null, user_input="['foo', ]", expected_output=true, ctrl_d="y"📌 Runtime Parameters
params: default: None user_input: ['foo', <class 'EOFError'>] expected_output: True ctrl_d: y id: None-user_input5-True-y📌 Setup phase
duration:
0.00034267501905560493outcome:
passed📌 Call phase
duration:
0.0005256440490484238outcome:
passed📌 Teardown phase
duration:
0.0001956680789589882outcome:
passed -
✅ Test 90
params: default=null, user_input="['foo', ]", expected_output=false, ctrl_d="n"📌 Runtime Parameters
params: default: None user_input: ['foo', <class 'EOFError'>] expected_output: False ctrl_d: n id: None-user_input6-False-n📌 Setup phase
duration:
0.00032070092856884outcome:
passed📌 Call phase
duration:
0.0006238627247512341outcome:
passed📌 Teardown phase
duration:
0.00018085073679685593outcome:
passed -
✅ Test 91
params: default="y", user_input="", expected_output=true, ctrl_d=null📌 Runtime Parameters
params: default: y user_input: <class 'EOFError'> expected_output: True ctrl_d: None id: y-EOFError-True-None📌 Setup phase
duration:
0.00032160570845007896outcome:
passed📌 Call phase
duration:
0.0005189431831240654outcome:
passed📌 Teardown phase
duration:
0.00018563400954008102outcome:
passed -
✅ Test 92
params: default="n", user_input="", expected_output=false, ctrl_d=null📌 Runtime Parameters
params: default: n user_input: <class 'EOFError'> expected_output: False ctrl_d: None id: n-EOFError-False-None📌 Setup phase
duration:
0.0003556269221007824outcome:
passed📌 Call phase
duration:
0.0005175219848752022outcome:
passed📌 Teardown phase
duration:
0.00019314000383019447outcome:
passed -
✅ Test 93
params: default=null, user_input="['invalid', 'ok', '', , 'ok', 'y']", expected_output=true, ctrl_d=null📌 Runtime Parameters
params: default: None user_input: ['invalid', 'ok', '', <class 'EOFError'>, 'ok', 'y'] expected_output: True ctrl_d: None id: None-user_input9-True-None📌 Setup phase
duration:
0.00032057566568255424outcome:
passed📌 Call phase
duration:
0.0012866207398474216outcome:
passed📌 Teardown phase
duration:
0.00019063428044319153outcome:
passed -
✅ Test 94
params: default="n", user_input="['no', ]", expected_output=false, ctrl_d=null📌 Runtime Parameters
params: default: n user_input: ['no', <class 'EOFError'>] expected_output: False ctrl_d: None id: n-user_input10-False-None📌 Setup phase
duration:
0.0003252536989748478outcome:
passed📌 Call phase
duration:
0.0005225888453423977outcome:
passed📌 Teardown phase
duration:
0.0001816311851143837outcome:
passed -
✅ Test 95
params: default=null, user_input="[, , , 'y']", expected_output=true, ctrl_d=null📌 Runtime Parameters
params: default: None user_input: [<class 'EOFError'>, <class 'EOFError'>, <class 'EOFError'>, 'y'] expected_output: True ctrl_d: None id: None-user_input11-True-None📌 Setup phase
duration:
0.0003356938250362873outcome:
passed📌 Call phase
duration:
0.0005443701520562172outcome:
passed📌 Teardown phase
duration:
0.00018573086708784103outcome:
passed -
✅ Test 96
params: default=null, user_input="['invalid', '', 'nope', ]", expected_output=false, ctrl_d="n"📌 Runtime Parameters
params: default: None user_input: ['invalid', '', 'nope', <class 'EOFError'>] expected_output: False ctrl_d: n id: None-user_input12-False-n📌 Setup phase
duration:
0.0003174310550093651outcome:
passed📌 Call phase
duration:
0.0005350802093744278outcome:
passed📌 Teardown phase
duration:
0.00019861478358507156outcome:
passed -
✅ Test 97
params: default=null, user_input="['nope', 'nope', ]", expected_output=true, ctrl_d="y"📌 Runtime Parameters
params: default: None user_input: ['nope', 'nope', <class 'EOFError'>] expected_output: True ctrl_d: y id: None-user_input13-True-y📌 Setup phase
duration:
0.00030787475407123566outcome:
passed📌 Call phase
duration:
0.0006420528516173363outcome:
passed📌 Teardown phase
duration:
0.0001816791482269764outcome:
passed
↳ Function: test_ask_yes_no_mixed_sequences
-
✅ Test 98
params: default=null, ctrl_c="invalid", ctrl_d=null, user_input="['what', '', 'nope', , 'ok', , 'no']", expected_output=false📌 Runtime Parameters
params: default: None ctrl_c: invalid ctrl_d: None user_input: ['what', '', 'nope', <class 'KeyboardInterrupt'>, 'ok', <class 'EOFError'>, 'no'] expected_output: False id: None-invalid-None-user_input0-False📌 Setup phase
duration:
0.0003706635907292366outcome:
passed📌 Call phase
duration:
0.0005968348123133183outcome:
passed📌 Teardown phase
duration:
0.00020596804097294807outcome:
passed -
✅ Test 99
params: default=null, ctrl_c=null, ctrl_d="notananswer", user_input="['maybe', , 'nop', 'yep', , 'yes']", expected_output=true📌 Runtime Parameters
params: default: None ctrl_c: None ctrl_d: notananswer user_input: ['maybe', <class 'KeyboardInterrupt'>, 'nop', 'yep', <class 'EOFError'>, 'yes'] expected_output: True id: None-None-notananswer-user_input1-True📌 Setup phase
duration:
0.00036504585295915604outcome:
passed📌 Call phase
duration:
0.0005791187286376953outcome:
passed📌 Teardown phase
duration:
0.0001942971721291542outcome:
passed -
✅ Test 100
params: default=null, ctrl_c="n", ctrl_d="nop", user_input="['ok', , , 'maybe', , 'nah', ]", expected_output=false📌 Runtime Parameters
params: default: None ctrl_c: n ctrl_d: nop user_input: ['ok', <class 'EOFError'>, <class 'EOFError'>, 'maybe', <class 'EOFError'>, 'nah', <class 'KeyboardInterrupt'>] expected_output: False id: None-n-nop-user_input2-False📌 Setup phase
duration:
0.0003740270622074604outcome:
passed📌 Call phase
duration:
0.0006779232062399387outcome:
passed📌 Teardown phase
duration:
0.00020803604274988174outcome:
passed
-
-
📄 test_utils_channels.py
↳ Function: test_load_channels_and_channels_class_with_professional_names
-
✅ Test 101
📌 Setup phase
duration:
0.00012448802590370178outcome:
passed📌 Call phase
duration:
0.001085973810404539outcome:
passed📌 Teardown phase
duration:
0.00012462912127375603outcome:
passed
-
-
📄 test_utils_config.py
↳ Function: test_config_with_nested_and_list_data
-
✅ Test 102
📌 Setup phase
duration:
0.0001408969983458519outcome:
passed📌 Call phase
duration:
0.0005886177532374859outcome:
passed📌 Teardown phase
duration:
0.00012422306463122368outcome:
passed
↳ Function: test_config_with_strange_and_edge_keys
-
✅ Test 103
📌 Setup phase
duration:
0.00011952314525842667outcome:
passed📌 Call phase
duration:
0.0008254880085587502outcome:
passed📌 Teardown phase
duration:
0.0001225089654326439outcome:
passed
-
-
📄 test_utils_cpint.py
↳ Function: test_load_color_variants_all_keys_and_types
-
✅ Test 104
params: base_color="red"📌 Runtime Parameters
params: base_color: red id: red📌 Setup phase
duration:
0.00020527606830000877outcome:
passed📌 Call phase
duration:
0.0001725279726088047outcome:
passed📌 Teardown phase
duration:
0.00013346504420042038outcome:
passed -
✅ Test 105
params: base_color="blue"📌 Runtime Parameters
params: base_color: blue id: blue📌 Setup phase
duration:
0.0001858910545706749outcome:
passed📌 Call phase
duration:
0.00016295816749334335outcome:
passed📌 Teardown phase
duration:
0.00012806197628378868outcome:
passed -
✅ Test 106
params: base_color="yellow"📌 Runtime Parameters
params: base_color: yellow id: yellow📌 Setup phase
duration:
0.00017777783796191216outcome:
passed📌 Call phase
duration:
0.0001689409837126732outcome:
passed📌 Teardown phase
duration:
0.00012629712000489235outcome:
passed -
✅ Test 107
params: base_color="green"📌 Runtime Parameters
params: base_color: green id: green📌 Setup phase
duration:
0.00017197197303175926outcome:
passed📌 Call phase
duration:
0.0001593269407749176outcome:
passed📌 Teardown phase
duration:
0.00011968612670898438outcome:
passed -
✅ Test 108
params: base_color="cyan"📌 Runtime Parameters
params: base_color: cyan id: cyan📌 Setup phase
duration:
0.00017859367653727531outcome:
passed📌 Call phase
duration:
0.00018127821385860443outcome:
passed📌 Teardown phase
duration:
0.0001297900453209877outcome:
passed -
✅ Test 109
params: base_color="magenta"📌 Runtime Parameters
params: base_color: magenta id: magenta📌 Setup phase
duration:
0.00017026998102664948outcome:
passed📌 Call phase
duration:
0.00014751683920621872outcome:
passed📌 Teardown phase
duration:
0.00012056902050971985outcome:
passed -
✅ Test 110
params: base_color="white"📌 Runtime Parameters
params: base_color: white id: white📌 Setup phase
duration:
0.00017558131366968155outcome:
passed📌 Call phase
duration:
0.00015212735161185265outcome:
passed📌 Teardown phase
duration:
0.00012423889711499214outcome:
passed -
✅ Test 111
params: base_color="black"📌 Runtime Parameters
params: base_color: black id: black📌 Setup phase
duration:
0.00016880081966519356outcome:
passed📌 Call phase
duration:
0.0001489841379225254outcome:
passed📌 Teardown phase
duration:
0.00012661190703511238outcome:
passed
↳ Function: test_cprint_all_cases_fancy
-
✅ Test 112
params: objects=[["Fancy", "list"], {"a": 7}, null], color_spec=["red", "+"], sep=" | ", expected_flatten="['Fancy', 'list'] | {'a': 7} | None", expected_error=null📌 Runtime Parameters
params: objects: - - Fancy - list - a: 7 - (vide) color_spec: - red - + sep: | expected_flatten: ['Fancy', 'list'] | {'a': 7} | None expected_error: None id: objects0-color_spec0- | -['Fancy', 'list'] | {'a': 7} | None-None📌 Setup phase
duration:
0.0006751627661287785outcome:
passed📌 Call phase
duration:
0.00025522103533148766outcome:
passed📌 Teardown phase
duration:
0.0002584550529718399outcome:
passed -
✅ Test 113
params: objects=[{"k": [1, 2]}, 99, ["X", ["Y"]]], color_spec=["blue", "++"], sep=" - ", expected_flatten="{'k': [1, 2]} - 99 - ['X', ['Y']]", expected_error=null📌 Runtime Parameters
params: objects: - k: - 1 - 2 - 99 - - X - - Y color_spec: - blue - ++ sep: - expected_flatten: {'k': [1, 2]} - 99 - ['X', ['Y']] expected_error: None id: objects1-color_spec1- - -{'k': [1, 2]} - 99 - ['X', ['Y']]-None📌 Setup phase
duration:
0.00048411590978503227outcome:
passed📌 Call phase
duration:
0.00023932987824082375outcome:
passed📌 Teardown phase
duration:
0.0002589067444205284outcome:
passed -
✅ Test 114
params: objects=[[], {}, "End"], color_spec=["magenta", "--"], sep=" / ", expected_flatten="[] / {} / End", expected_error=null📌 Runtime Parameters
params: objects: - (vide) - (vide) - End color_spec: - magenta - -- sep: / expected_flatten: [] / {} / End expected_error: None id: objects2-color_spec2- / -[] / {} / End-None📌 Setup phase
duration:
0.0004864460788667202outcome:
passed📌 Call phase
duration:
0.0002518417313694954outcome:
passed📌 Teardown phase
duration:
0.00024391105398535728outcome:
passed -
✅ Test 115
params: objects="", [3, 4, "done", 0], color_spec=["green", ""], sep=";", expected_flatten="['', [3, 4]];done;0", expected_error=null📌 Runtime Parameters
params: objects: - - (vide) - - 3 - 4 - done - (vide) color_spec: - green - (vide) sep: ; expected_flatten: ['', [3, 4]];done;0 expected_error: None id: objects3-color_spec3-;-['', [3, 4]];done;0-None📌 Setup phase
duration:
0.00047960272058844566outcome:
passed📌 Call phase
duration:
0.00021940981969237328outcome:
passed📌 Teardown phase
duration:
0.00024393992498517036outcome:
passed -
✅ Test 116
params: objects=[["alpha", null], ["beta", {}], "stop"], color_spec=["yellow", ""], sep="::", expected_flatten="['alpha', None]::['beta', {}]::stop", expected_error=null📌 Runtime Parameters
params: objects: - - alpha - (vide) - - beta - (vide) - stop color_spec: - yellow - (vide) sep: :: expected_flatten: ['alpha', None]::['beta', {}]::stop expected_error: None id: objects4-color_spec4-::-['alpha', None]::['beta', {}]::stop-None📌 Setup phase
duration:
0.000464641023427248outcome:
passed📌 Call phase
duration:
0.00023011071607470512outcome:
passed📌 Teardown phase
duration:
0.00024256715551018715outcome:
passed -
✅ Test 117
params: objects="deep", ["deeper", ["deepest"], "X"], color_spec=["cyan", "+"], sep=" ... ", expected_flatten="['deep', ['deeper', ['deepest']]] ... X", expected_error=null📌 Runtime Parameters
params: objects: - - deep - - deeper - - deepest - X color_spec: - cyan - + sep: ... expected_flatten: ['deep', ['deeper', ['deepest']]] ... X expected_error: None id: objects5-color_spec5- ... -['deep', ['deeper', ['deepest']]] ... X-None📌 Setup phase
duration:
0.0004564747214317322outcome:
passed📌 Call phase
duration:
0.0002332869917154312outcome:
passed📌 Teardown phase
duration:
0.0002478351816534996outcome:
passed -
✅ Test 118
params: objects=[{"dict": {"nested": [4, 5]}}, [true, false], 6.28], color_spec=["white", "++"], sep=" // ", expected_flatten="{'dict': {'nested': [4, 5]}} // [True, False] // 6.28", expected_error=null📌 Runtime Parameters
params: objects: - dict: nested: - 4 - 5 - - True - (vide) - 6.28 color_spec: - white - ++ sep: // expected_flatten: {'dict': {'nested': [4, 5]}} // [True, False] // 6.28 expected_error: None id: objects6-color_spec6- // -{'dict': {'nested': [4, 5]}} // [True, False] // 6.28-None📌 Setup phase
duration:
0.0004758993163704872outcome:
passed📌 Call phase
duration:
0.00022767484188079834outcome:
passed📌 Teardown phase
duration:
0.0002559940330684185outcome:
passed -
✅ Test 119
params: objects="A", ["B", "string", "C"], color_spec=["red", "--"], sep="==", expected_flatten="['A', ['B']]==string==C", expected_error=null📌 Runtime Parameters
params: objects: - - A - - B - string - C color_spec: - red - -- sep: == expected_flatten: ['A', ['B']]==string==C expected_error: None id: objects7-color_spec7-==-['A', ['B']]==string==C-None📌 Setup phase
duration:
0.0004600491374731064outcome:
passed📌 Call phase
duration:
0.00033212127164006233outcome:
passed📌 Teardown phase
duration:
0.00024481117725372314outcome:
passed -
✅ Test 120
params: objects="Test", null, [, {"v": 0}], color_spec=["green", "++"], sep=" ++ ", expected_flatten="['Test', None, []] ++ {'v': 0}", expected_error=null📌 Runtime Parameters
params: objects: - - Test - (vide) - (vide) - v: 0 color_spec: - green - ++ sep: ++ expected_flatten: ['Test', None, []] ++ {'v': 0} expected_error: None id: objects8-color_spec8- ++ -['Test', None, []] ++ {'v': 0}-None📌 Setup phase
duration:
0.0004555550403892994outcome:
passed📌 Call phase
duration:
0.00022048503160476685outcome:
passed📌 Teardown phase
duration:
0.00024295831099152565outcome:
passed -
✅ Test 121
params: objects=[["no", "color"], "plain"], color_spec=null, sep=";", expected_flatten="['no', 'color'];plain", expected_error=null📌 Runtime Parameters
params: objects: - - no - color - plain color_spec: None sep: ; expected_flatten: ['no', 'color'];plain expected_error: None id: objects9-None-;-['no', 'color'];plain-None📌 Setup phase
duration:
0.0004653437063097954outcome:
passed📌 Call phase
duration:
0.0002098018303513527outcome:
passed📌 Teardown phase
duration:
0.0002428898587822914outcome:
passed -
✅ Test 122
params: objects=[["simple"], "", 12], color_spec=null, sep=" | ", expected_flatten="['simple'] | | 12", expected_error=null📌 Runtime Parameters
params: objects: - - simple - (vide) - 12 color_spec: None sep: | expected_flatten: ['simple'] | | 12 expected_error: None id: objects10-None- | -['simple'] | | 12-None📌 Setup phase
duration:
0.00046250317245721817outcome:
passed📌 Call phase
duration:
0.0002339240163564682outcome:
passed📌 Teardown phase
duration:
0.0002416740171611309outcome:
passed -
✅ Test 123
params: objects=["very", "deep", {"ok": true}], color_spec=null, sep=" : ", expected_flatten="'very', 'deep' : {'ok': True}", expected_error=null📌 Runtime Parameters
params: objects: - - - very - deep - ok: True color_spec: None sep: : expected_flatten: [['very', 'deep']] : {'ok': True} expected_error: None id: objects11-None- : -[['very', 'deep']] : {'ok': True}-None📌 Setup phase
duration:
0.00047277892008423805outcome:
passed📌 Call phase
duration:
0.00021649198606610298outcome:
passed📌 Teardown phase
duration:
0.00026291515678167343outcome:
passed -
✅ Test 124
params: objects=[["fail", "color"], 123], color_spec=["green", "!!"], sep="|", expected_flatten="['fail', 'color']|123", expected_error=""📌 Runtime Parameters
params: objects: - - fail - color - 123 color_spec: - green - !! sep: | expected_flatten: ['fail', 'color']|123 expected_error: <class 'ValueError'> id: objects12-color_spec12-|-['fail', 'color']|123-ValueError📌 Setup phase
duration:
0.0004591247998178005outcome:
passed📌 Call phase
duration:
0.00025103287771344185outcome:
passed📌 Teardown phase
duration:
0.00023986119776964188outcome:
passed -
✅ Test 125
params: objects=[["error"], {}], color_spec=["cyan", "xxx"], sep=" * ", expected_flatten="['error'] * {}", expected_error=""📌 Runtime Parameters
params: objects: - - error - (vide) color_spec: - cyan - xxx sep: * expected_flatten: ['error'] * {} expected_error: <class 'ValueError'> id: objects13-color_spec13- * -['error'] * {}-ValueError📌 Setup phase
duration:
0.0004688589833676815outcome:
passed📌 Call phase
duration:
0.00023580621927976608outcome:
passed📌 Teardown phase
duration:
0.0002448749728500843outcome:
passed -
✅ Test 126
params: objects="nope"], ["bad", color_spec=["magenta", "invalid"], sep="//", expected_flatten="['nope']//['bad']", expected_error=""📌 Runtime Parameters
params: objects: - - nope - - bad color_spec: - magenta - invalid sep: // expected_flatten: ['nope']//['bad'] expected_error: <class 'ValueError'> id: objects14-color_spec14-//-['nope']//['bad']-ValueError📌 Setup phase
duration:
0.0004820181056857109outcome:
passed📌 Call phase
duration:
0.00024491967633366585outcome:
passed📌 Teardown phase
duration:
0.0002542859874665737outcome:
passed -
✅ Test 127
params: objects=["wrong", "base"], color_spec=["notacolor", ""], sep="--", expected_flatten="wrong--base", expected_error=""📌 Runtime Parameters
params: objects: - wrong - base color_spec: - notacolor - (vide) sep: -- expected_flatten: wrong--base expected_error: <class 'ValueError'> id: objects15-color_spec15----wrong--base-ValueError📌 Setup phase
duration:
0.00045459577813744545outcome:
passed📌 Call phase
duration:
0.00024696486070752144outcome:
passed📌 Teardown phase
duration:
0.00025177188217639923outcome:
passed
-
-
📄 test_utils_debug.py
↳ Function: test_traceable
-
✅ Test 128
params: cls="", entry=[[10, 20], {}], expected="creating: A(10, 20)"📌 Runtime Parameters
params: cls: <class 'test_utils_debug.A'> entry: - - 10 - 20 - (vide) expected: creating: A(10, 20) id: A-entry0-creating: A(10, 20)📌 Setup phase
duration:
0.00028731394559144974outcome:
passed📌 Call phase
duration:
0.0009573190473020077outcome:
passed📌 Teardown phase
duration:
0.00017297780141234398outcome:
passed -
✅ Test 129
params: cls="", entry=[[10, 20], {"e": 100}], expected="creating: A(10, 20, e=100)"📌 Runtime Parameters
params: cls: <class 'test_utils_debug.A'> entry: - - 10 - 20 - e: 100 expected: creating: A(10, 20, e=100) id: A-entry1-creating: A(10, 20, e=100)📌 Setup phase
duration:
0.0002919142134487629outcome:
passed📌 Call phase
duration:
0.0009153140708804131outcome:
passed📌 Teardown phase
duration:
0.00017607491463422775outcome:
passed -
✅ Test 130
params: cls="", entry="foo", [1, 2, 3, {"flag": true, "data": {"x": 9}}], expected="creating: A('foo', [1, 2, 3], flag=True, data={'x': 9})"📌 Runtime Parameters
params: cls: <class 'test_utils_debug.A'> entry: - - foo - - 1 - 2 - 3 - flag: True data: x: 9 expected: creating: A('foo', [1, 2, 3], flag=True, data={'x': 9}) id: A-entry2-creating: A('foo', [1, 2, 3], flag=True, data={'x': 9})📌 Setup phase
duration:
0.0002822629176080227outcome:
passed📌 Call phase
duration:
0.000819873996078968outcome:
passed📌 Teardown phase
duration:
0.00017919205129146576outcome:
passed -
✅ Test 131
params: cls="", entry="([CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], {'name': 'test', 'meta': 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'})", expected="creating: A(CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], name='test', meta='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy...)"📌 Runtime Parameters
params: cls: <class 'test_utils_debug.A'> entry: ([CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], {'name': 'test', 'meta': 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'}) expected: creating: A(CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], name='test', meta='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy...) id: A-entry3-creating: A(CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], name='test', meta='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy...)📌 Setup phase
duration:
0.0002854568883776665outcome:
passed📌 Call phase
duration:
0.0008761761710047722outcome:
passed📌 Teardown phase
duration:
0.00020080478861927986outcome:
passed -
✅ Test 132
params: cls="", entry="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", [0, 0, 0, 0, 0, {}], expected="creating: A('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..., [0, 0, 0, 0, 0])"📌 Runtime Parameters
params: cls: <class 'test_utils_debug.A'> entry: - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) expected: creating: A('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..., [0, 0, 0, 0, 0]) id: A-entry4-creating: A('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..., [0, 0, 0, 0, 0])📌 Setup phase
duration:
0.0003218362107872963outcome:
passed📌 Call phase
duration:
0.0007804860360920429outcome:
passed📌 Teardown phase
duration:
0.00017448095604777336outcome:
passed
↳ Function: test_short_repr
-
✅ Test 133
params: value="abc", cutoff=10, expected="'abc'"📌 Runtime Parameters
params: value: abc cutoff: 10 expected: 'abc' id: abc-10-'abc'📌 Setup phase
duration:
0.0002971552312374115outcome:
passed📌 Call phase
duration:
0.0001462092623114586outcome:
passed📌 Teardown phase
duration:
0.00015929294750094414outcome:
passed -
✅ Test 135
params: value=12345, cutoff=10, expected="12345"📌 Runtime Parameters
params: value: 12345 cutoff: 10 expected: 12345 id: 12345-10-12345📌 Setup phase
duration:
0.0004127919673919678outcome:
passed📌 Call phase
duration:
0.00018572481349110603outcome:
passed📌 Teardown phase
duration:
0.00018776999786496162outcome:
passed -
✅ Test 136
params: value=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], cutoff=15, expected="[0, 0, 0, 0, 0,..."📌 Runtime Parameters
params: value: - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) - (vide) cutoff: 15 expected: [0, 0, 0, 0, 0,... id: value3-15-[0, 0, 0, 0, 0,...📌 Setup phase
duration:
0.0003093159757554531outcome:
passed📌 Call phase
duration:
0.0001657162792980671outcome:
passed📌 Teardown phase
duration:
0.00016197189688682556outcome:
passed -
✅ Test 137
params: value=null, cutoff=10, expected="None"📌 Runtime Parameters
params: value: None cutoff: 10 expected: None id: None-10-None📌 Setup phase
duration:
0.0003052176907658577outcome:
passed📌 Call phase
duration:
0.0001452411524951458outcome:
passed📌 Teardown phase
duration:
0.0001549641601741314outcome:
passed
-
-
📄 test_utils_dictext.py
↳ Function: test_attrdict_getattr
-
✅ Test 139
params: data={"x": 1, "y": 2}, attr="x", expected=1📌 Runtime Parameters
params: data: x: 1 y: 2 attr: x expected: 1 id: data0-x-1📌 Setup phase
duration:
0.00031922198832035065outcome:
passed📌 Call phase
duration:
0.0001644711010158062outcome:
passed📌 Teardown phase
duration:
0.00016199517995119095outcome:
passed -
✅ Test 140
params: data={"world": "ok"}, attr="world", expected="ok"📌 Runtime Parameters
params: data: world: ok attr: world expected: ok id: data1-world-ok📌 Setup phase
duration:
0.00027576787397265434outcome:
passed📌 Call phase
duration:
0.0001513659954071045outcome:
passed📌 Teardown phase
duration:
0.00015582097694277763outcome:
passed -
✅ Test 141
params: data={"outer": {"inner": 42}}, attr="outer", expected={"inner": 42}📌 Runtime Parameters
params: data: outer: inner: 42 attr: outer expected: inner: 42 id: data2-outer-expected2📌 Setup phase
duration:
0.00028374185785651207outcome:
passed📌 Call phase
duration:
0.00013894494622945786outcome:
passed📌 Teardown phase
duration:
0.00015204213559627533outcome:
passed
↳ Function: test_attrdict_setattr
-
✅ Test 142
params: initial={}, attr="nouveau", value=123📌 Runtime Parameters
params: initial: {} attr: nouveau value: 123 id: initial0-nouveau-123📌 Setup phase
duration:
0.00032566627487540245outcome:
passed📌 Call phase
duration:
0.00016609672456979752outcome:
passed📌 Teardown phase
duration:
0.00018471432849764824outcome:
passed -
✅ Test 143
params: initial={"a": 1}, attr="b", value="valeur"📌 Runtime Parameters
params: initial: a: 1 attr: b value: valeur id: initial1-b-valeur📌 Setup phase
duration:
0.00030434923246502876outcome:
passed📌 Call phase
duration:
0.00015397882089018822outcome:
passed📌 Teardown phase
duration:
0.00015914114192128181outcome:
passed
↳ Function: test_attrdict_delattr
-
✅ Test 144
params: initial={"a": 1, "b": 2}, to_del="a", expected_keys=["b"]📌 Runtime Parameters
params: initial: a: 1 b: 2 to_del: a expected_keys: - b id: initial0-a-expected_keys0📌 Setup phase
duration:
0.00027128076180815697outcome:
passed📌 Call phase
duration:
0.00019399495795369148outcome:
passed📌 Teardown phase
duration:
0.00015171803534030914outcome:
passed -
✅ Test 145
params: initial={"k": "v"}, to_del="k", expected_keys=[]📌 Runtime Parameters
params: initial: k: v to_del: k expected_keys: [] id: initial1-k-expected_keys1📌 Setup phase
duration:
0.00028701405972242355outcome:
passed📌 Call phase
duration:
0.0001789960078895092outcome:
passed📌 Teardown phase
duration:
0.00016071321442723274outcome:
passed
↳ Function: test_attrdict_dir
-
✅ Test 146
params: data={"alpha": 1, "beta": 2}, expected_keys="{'beta', 'alpha'}"📌 Runtime Parameters
params: data: alpha: 1 beta: 2 expected_keys: {'beta', 'alpha'} id: data0-expected_keys0📌 Setup phase
duration:
0.00022743409499526024outcome:
passed📌 Call phase
duration:
0.00014196941629052162outcome:
passed📌 Teardown phase
duration:
0.00013688486069440842outcome:
passed -
✅ Test 147
params: data={}, expected_keys="set()"📌 Runtime Parameters
params: data: {} expected_keys: set() id: data1-expected_keys1📌 Setup phase
duration:
0.00022005988284945488outcome:
passed📌 Call phase
duration:
0.00017370004206895828outcome:
passed📌 Teardown phase
duration:
0.00015339301899075508outcome:
passed
↳ Function: test_attrdict_getattr_and_missing
-
✅ Test 148
params: data={"x": 1, "y": 2}, attr="x", expect_value=1, expect_error=null📌 Runtime Parameters
params: data: x: 1 y: 2 attr: x expect_value: 1 expect_error: None id: data0-x-1-None📌 Setup phase
duration:
0.00031486712396144867outcome:
passed📌 Call phase
duration:
0.00013926299288868904outcome:
passed📌 Teardown phase
duration:
0.00017325393855571747outcome:
passed -
✅ Test 149
params: data={"number": 42}, attr="missing", expect_value=null, expect_error="'MyDict' object has no attribute 'missing'"📌 Runtime Parameters
params: data: number: 42 attr: missing expect_value: None expect_error: 'MyDict' object has no attribute 'missing' id: data1-missing-None-'MyDict' object has no attribute 'missing'📌 Setup phase
duration:
0.0003088507801294327outcome:
passed📌 Call phase
duration:
0.00017143413424491882outcome:
passed📌 Teardown phase
duration:
0.00016665691509842873outcome:
passed
↳ Function: test_dictupdatemixin_init_and_update
-
✅ Test 150
params: init_kwargs={"a": 1, "b": 2}, other=null, kwargs={}, expected={"a": 1, "b": 2}📌 Runtime Parameters
params: init_kwargs: a: 1 b: 2 other: None kwargs: {} expected: a: 1 b: 2 id: init_kwargs0-None-kwargs0-expected0📌 Setup phase
duration:
0.0003522457554936409outcome:
passed📌 Call phase
duration:
0.00015702005475759506outcome:
passed📌 Teardown phase
duration:
0.00017029931768774986outcome:
passed -
✅ Test 151
params: init_kwargs={}, other={"x": 10, "y": 20}, kwargs={}, expected={"x": 10, "y": 20}📌 Runtime Parameters
params: init_kwargs: {} other: x: 10 y: 20 kwargs: {} expected: x: 10 y: 20 id: init_kwargs1-other1-kwargs1-expected1📌 Setup phase
duration:
0.0003007287159562111outcome:
passed📌 Call phase
duration:
0.00016479939222335815outcome:
passed📌 Teardown phase
duration:
0.00019434001296758652outcome:
passed -
✅ Test 152
params: init_kwargs={"world": "ok"}, other={"number": 42}, kwargs={"num2": 100}, expected={"world": "ok", "number": 42, "num2": 100}📌 Runtime Parameters
params: init_kwargs: world: ok other: number: 42 kwargs: num2: 100 expected: world: ok number: 42 num2: 100 id: init_kwargs2-other2-kwargs2-expected2📌 Setup phase
duration:
0.0003106510266661644outcome:
passed📌 Call phase
duration:
0.00015807291492819786outcome:
passed📌 Teardown phase
duration:
0.0001656198874115944outcome:
passed -
✅ Test 153
params: init_kwargs={}, other=null, kwargs={"alpha": "beta"}, expected={"alpha": "beta"}📌 Runtime Parameters
params: init_kwargs: {} other: None kwargs: alpha: beta expected: alpha: beta id: init_kwargs3-None-kwargs3-expected3📌 Setup phase
duration:
0.0003076726570725441outcome:
passed📌 Call phase
duration:
0.00014847330749034882outcome:
passed📌 Teardown phase
duration:
0.00017520831897854805outcome:
passed -
✅ Test 154
params: init_kwargs={}, other={"key": "value"}, kwargs={"extra": 1}, expected={"key": "value", "extra": 1}📌 Runtime Parameters
params: init_kwargs: {} other: key: value kwargs: extra: 1 expected: key: value extra: 1 id: init_kwargs4-other4-kwargs4-expected4📌 Setup phase
duration:
0.00030910782516002655outcome:
passed📌 Call phase
duration:
0.00014153821393847466outcome:
passed📌 Teardown phase
duration:
0.0001687677577137947outcome:
passed -
✅ Test 155
params: init_kwargs={}, other="key", "value"], ["list", [5, 6], kwargs={"extra": {"subkey": 123}}, expected={"key": "value", "list": [5, 6], "extra": {"subkey": 123}}📌 Runtime Parameters
params: init_kwargs: {} other: - - key - value - - list - - 5 - 6 kwargs: extra: subkey: 123 expected: key: value list: - 5 - 6 extra: subkey: 123 id: init_kwargs5-other5-kwargs5-expected5📌 Setup phase
duration:
0.00030833110213279724outcome:
passed📌 Call phase
duration:
0.0003007417544722557outcome:
passed📌 Teardown phase
duration:
0.00017668912187218666outcome:
passed
-
-
📄 test_utils_dotdir.py
↳ Function: test_dotdir_creation_and_base_exists
-
✅ Test 156
📌 Setup phase
duration:
0.001748356968164444outcome:
passed📌 Call phase
duration:
0.0002639316953718662outcome:
passed📌 Teardown phase
duration:
0.00022637192159891129outcome:
passed
↳ Function: test_dotdir_repr_returns_path_str
-
✅ Test 157
📌 Setup phase
duration:
0.0006416789256036282outcome:
passed📌 Call phase
duration:
0.00023142341524362564outcome:
passed📌 Teardown phase
duration:
0.00023321714252233505outcome:
passed
↳ Function: test_dotdir_call
-
✅ Test 158
📌 Setup phase
duration:
0.0006488841027021408outcome:
passed📌 Call phase
duration:
0.00024008192121982574outcome:
passed📌 Teardown phase
duration:
0.0002069077454507351outcome:
passed
-
-
📄 test_utils_eval.py
↳ Function: test_arithmetic_eval_valid
-
✅ Test 165
params: expr="1 + 2", expected=3📌 Runtime Parameters
params: expr: 1 + 2 expected: 3 id: 1 + 2-3📌 Setup phase
duration:
0.0003976728767156601outcome:
passed📌 Call phase
duration:
0.00022770091891288757outcome:
passed📌 Teardown phase
duration:
0.00017781415954232216outcome:
passed -
✅ Test 166
params: expr="4 - 2", expected=2📌 Runtime Parameters
params: expr: 4 - 2 expected: 2 id: 4 - 2-2📌 Setup phase
duration:
0.0002453201450407505outcome:
passed📌 Call phase
duration:
0.000164765864610672outcome:
passed📌 Teardown phase
duration:
0.00014590518549084663outcome:
passed -
✅ Test 167
params: expr="3 * 5", expected=15📌 Runtime Parameters
params: expr: 3 * 5 expected: 15 id: 3 * 5-15📌 Setup phase
duration:
0.00022105081006884575outcome:
passed📌 Call phase
duration:
0.00016691535711288452outcome:
passed📌 Teardown phase
duration:
0.00015291711315512657outcome:
passed -
✅ Test 168
params: expr="10 / 2", expected=5.0📌 Runtime Parameters
params: expr: 10 / 2 expected: 5.0 id: 10 / 2-5.0📌 Setup phase
duration:
0.00022749975323677063outcome:
passed📌 Call phase
duration:
0.00016047107055783272outcome:
passed📌 Teardown phase
duration:
0.0001453319564461708outcome:
passed -
✅ Test 169
params: expr="10 % 3", expected=1📌 Runtime Parameters
params: expr: 10 % 3 expected: 1 id: 10 % 3-1📌 Setup phase
duration:
0.0002405960112810135outcome:
passed📌 Call phase
duration:
0.00015916815027594566outcome:
passed📌 Teardown phase
duration:
0.0001386459916830063outcome:
passed -
✅ Test 170
params: expr="-5", expected=-5📌 Runtime Parameters
params: expr: -5 expected: -5 id: -5--5📌 Setup phase
duration:
0.00023295311257243156outcome:
passed📌 Call phase
duration:
0.00016196118667721748outcome:
passed📌 Teardown phase
duration:
0.00014306185767054558outcome:
passed -
✅ Test 171
params: expr="+7", expected=7📌 Runtime Parameters
params: expr: +7 expected: 7 id: +7-7📌 Setup phase
duration:
0.00023144390434026718outcome:
passed📌 Call phase
duration:
0.00015455391258001328outcome:
passed📌 Teardown phase
duration:
0.00015800818800926208outcome:
passed -
✅ Test 172
params: expr="1 + 2 * 3", expected=7📌 Runtime Parameters
params: expr: 1 + 2 * 3 expected: 7 id: 1 + 2 * 3-7📌 Setup phase
duration:
0.00022727390751242638outcome:
passed📌 Call phase
duration:
0.00016303593292832375outcome:
passed📌 Teardown phase
duration:
0.00013811234384775162outcome:
passed -
✅ Test 173
params: expr="(1 + 2) * 3", expected=9📌 Runtime Parameters
params: expr: (1 + 2) * 3 expected: 9 id: (1 + 2) * 3-9📌 Setup phase
duration:
0.00023106765002012253outcome:
passed📌 Call phase
duration:
0.00016857311129570007outcome:
passed📌 Teardown phase
duration:
0.00014148512855172157outcome:
passed -
✅ Test 174
params: expr="-(-3)", expected=3📌 Runtime Parameters
params: expr: -(-3) expected: 3 id: -(-3)-3📌 Setup phase
duration:
0.00022874074056744576outcome:
passed📌 Call phase
duration:
0.0001717940904200077outcome:
passed📌 Teardown phase
duration:
0.0001396099105477333outcome:
passed -
✅ Test 175
params: expr="-2 + 4 * 2", expected=6📌 Runtime Parameters
params: expr: -2 + 4 * 2 expected: 6 id: -2 + 4 * 2-6📌 Setup phase
duration:
0.00021476857364177704outcome:
passed📌 Call phase
duration:
0.00016117794439196587outcome:
passed📌 Teardown phase
duration:
0.00014110282063484192outcome:
passed -
✅ Test 176
params: expr="(4 + 5) * (6 - 1)", expected=45📌 Runtime Parameters
params: expr: (4 + 5) * (6 - 1) expected: 45 id: (4 + 5) * (6 - 1)-45📌 Setup phase
duration:
0.00023959018290042877outcome:
passed📌 Call phase
duration:
0.00017299409955739975outcome:
passed📌 Teardown phase
duration:
0.00013816310092806816outcome:
passed -
✅ Test 177
params: expr="(((3)))", expected=3📌 Runtime Parameters
params: expr: (((3))) expected: 3 id: (((3)))-3📌 Setup phase
duration:
0.00022582896053791046outcome:
passed📌 Call phase
duration:
0.00014956295490264893outcome:
passed📌 Teardown phase
duration:
0.00014412682503461838outcome:
passed -
✅ Test 178
params: expr="-(-(-2))", expected=-2📌 Runtime Parameters
params: expr: -(-(-2)) expected: -2 id: -(-(-2))--2📌 Setup phase
duration:
0.0002252589911222458outcome:
passed📌 Call phase
duration:
0.0001663658767938614outcome:
passed📌 Teardown phase
duration:
0.00013849977403879166outcome:
passed -
✅ Test 179
params: expr="3 + +4", expected=7📌 Runtime Parameters
params: expr: 3 + +4 expected: 7 id: 3 + +4-7📌 Setup phase
duration:
0.00022860197350382805outcome:
passed📌 Call phase
duration:
0.0001614447683095932outcome:
passed📌 Teardown phase
duration:
0.00015090592205524445outcome:
passed -
✅ Test 180
params: expr="3 + -4", expected=-1📌 Runtime Parameters
params: expr: 3 + -4 expected: -1 id: 3 + -4--1📌 Setup phase
duration:
0.0002302001230418682outcome:
passed📌 Call phase
duration:
0.000163322314620018outcome:
passed📌 Teardown phase
duration:
0.00014489982277154922outcome:
passed -
✅ Test 181
params: expr="True + 1", expected=2📌 Runtime Parameters
params: expr: True + 1 expected: 2 id: True + 1-2📌 Setup phase
duration:
0.00023044412955641747outcome:
passed📌 Call phase
duration:
0.00017340481281280518outcome:
passed📌 Teardown phase
duration:
0.00014215009286999702outcome:
passed -
✅ Test 182
params: expr="'string'", expected="string"📌 Runtime Parameters
params: expr: 'string' expected: string id: 'string'-string📌 Setup phase
duration:
0.00021742796525359154outcome:
passed📌 Call phase
duration:
0.00015680678188800812outcome:
passed📌 Teardown phase
duration:
0.0001368117518723011outcome:
passed -
✅ Test 183
params: expr="1e1000 * 1e1000", expected=Infinity📌 Runtime Parameters
params: expr: 1e1000 * 1e1000 expected: inf id: 1e1000 * 1e1000-inf📌 Setup phase
duration:
0.0002239546738564968outcome:
passed📌 Call phase
duration:
0.000160951167345047outcome:
passed📌 Teardown phase
duration:
0.00014043087139725685outcome:
passed -
✅ Test 184
params: expr="'a' + 'b'", expected="ab"📌 Runtime Parameters
params: expr: 'a' + 'b' expected: ab id: 'a' + 'b'-ab📌 Setup phase
duration:
0.0002275877632200718outcome:
passed📌 Call phase
duration:
0.0001527499407529831outcome:
passed📌 Teardown phase
duration:
0.00015331385657191277outcome:
passed
↳ Function: test_arithmetic_eval_raises_with_message
-
✅ Test 185
params: expr="2 ** 3", expected_message="Unsupported BinOp Pow"📌 Runtime Parameters
params: expr: 2 ** 3 expected_message: Unsupported BinOp Pow id: 2 ** 3-Unsupported BinOp Pow📌 Setup phase
duration:
0.0002428349107503891outcome:
passed📌 Call phase
duration:
0.00044977106153964996outcome:
passed📌 Teardown phase
duration:
0.00015733856707811356outcome:
passed -
✅ Test 186
params: expr="3 << 1", expected_message="Unsupported BinOp LShift"📌 Runtime Parameters
params: expr: 3 << 1 expected_message: Unsupported BinOp LShift id: 3 << 1-Unsupported BinOp LShift📌 Setup phase
duration:
0.0002414691261947155outcome:
passed📌 Call phase
duration:
0.00039223022758960724outcome:
passed📌 Teardown phase
duration:
0.00014340784400701523outcome:
passed -
✅ Test 187
params: expr="1 < 2", expected_message="Unsupported node type Compare"📌 Runtime Parameters
params: expr: 1 < 2 expected_message: Unsupported node type Compare id: 1 < 2-Unsupported node type Compare📌 Setup phase
duration:
0.00023112213239073753outcome:
passed📌 Call phase
duration:
0.0003695380873978138outcome:
passed📌 Teardown phase
duration:
0.00014373427256941795outcome:
passed -
✅ Test 188
params: expr="abs(3)", expected_message="Unsupported node type Call"📌 Runtime Parameters
params: expr: abs(3) expected_message: Unsupported node type Call id: abs(3)-Unsupported node type Call📌 Setup phase
duration:
0.0002253623679280281outcome:
passed📌 Call phase
duration:
0.0003515612334012985outcome:
passed📌 Teardown phase
duration:
0.00015435414388775826outcome:
passed -
✅ Test 189
params: expr="a + 2", expected_message="Unsupported node type Name"📌 Runtime Parameters
params: expr: a + 2 expected_message: Unsupported node type Name id: a + 2-Unsupported node type Name📌 Setup phase
duration:
0.00022921711206436157outcome:
passed📌 Call phase
duration:
0.00035652099177241325outcome:
passed📌 Teardown phase
duration:
0.00014543114230036736outcome:
passed -
✅ Test 190
params: expr="string", expected_message="Unsupported node type Name"📌 Runtime Parameters
params: expr: string expected_message: Unsupported node type Name id: string-Unsupported node type Name📌 Setup phase
duration:
0.00023284414783120155outcome:
passed📌 Call phase
duration:
0.00018625985831022263outcome:
passed📌 Teardown phase
duration:
0.00015482213348150253outcome:
passed -
✅ Test 191
params: expr="[1, 2] + [3]", expected_message="Unsupported node type List"📌 Runtime Parameters
params: expr: [1, 2] + [3] expected_message: Unsupported node type List id: [1, 2] + [3]-Unsupported node type List📌 Setup phase
duration:
0.0002288762480020523outcome:
passed📌 Call phase
duration:
0.0005602920427918434outcome:
passed📌 Teardown phase
duration:
0.0001626298762857914outcome:
passed -
✅ Test 192
params: expr="{1: 2}", expected_message="Unsupported node type Dict"📌 Runtime Parameters
params: expr: {1: 2} expected_message: Unsupported node type Dict id: {1: 2}-Unsupported node type Dict📌 Setup phase
duration:
0.00023518502712249756outcome:
passed📌 Call phase
duration:
0.0003398512490093708outcome:
passed📌 Teardown phase
duration:
0.00015088682994246483outcome:
passed
↳ Function: test_arithmetic_eval_runtime_errors
-
✅ Test 193
params: expr="1 / 0", exception=""📌 Runtime Parameters
params: expr: 1 / 0 exception: <class 'ZeroDivisionError'> id: 1 / 0-ZeroDivisionError📌 Setup phase
duration:
0.0002481779083609581outcome:
passed📌 Call phase
duration:
0.0001834481954574585outcome:
passed📌 Teardown phase
duration:
0.00014175893738865852outcome:
passed -
✅ Test 194
params: expr="10 % 0", exception=""📌 Runtime Parameters
params: expr: 10 % 0 exception: <class 'ZeroDivisionError'> id: 10 % 0-ZeroDivisionError📌 Setup phase
duration:
0.00023598922416567802outcome:
passed📌 Call phase
duration:
0.00018152594566345215outcome:
passed📌 Teardown phase
duration:
0.00015314016491174698outcome:
passed
↳ Function: test_forgiving_eval
-
✅ Test 195
params: expr="1 + 2", expected=3📌 Runtime Parameters
params: expr: 1 + 2 expected: 3 id: 1 + 2-3📌 Setup phase
duration:
0.00023023365065455437outcome:
passed📌 Call phase
duration:
0.00016646599397063255outcome:
passed📌 Teardown phase
duration:
0.00014170585200190544outcome:
passed -
✅ Test 196
params: expr="bad + 2", expected="bad + 2"📌 Runtime Parameters
params: expr: bad + 2 expected: bad + 2 id: bad + 2-bad + 2📌 Setup phase
duration:
0.00021504424512386322outcome:
passed📌 Call phase
duration:
0.00017047999426722527outcome:
passed📌 Teardown phase
duration:
0.00014757318422198296outcome:
passed -
✅ Test 197
params: expr="1 / 0", expected="1 / 0"📌 Runtime Parameters
params: expr: 1 / 0 expected: 1 / 0 id: 1 / 0-1 / 0📌 Setup phase
duration:
0.0002233763225376606outcome:
passed📌 Call phase
duration:
0.00017096474766731262outcome:
passed📌 Teardown phase
duration:
0.00013442616909742355outcome:
passed -
✅ Test 198
params: expr="2 ** 10", expected="2 ** 10"📌 Runtime Parameters
params: expr: 2 ** 10 expected: 2 ** 10 id: 2 ** 10-2 ** 10📌 Setup phase
duration:
0.00022624386474490166outcome:
passed📌 Call phase
duration:
0.00016282498836517334outcome:
passed📌 Teardown phase
duration:
0.00014041736721992493outcome:
passed
↳ Function: test_defaulting_eval
-
✅ Test 199
params: expr="3 * 4", default=0, expected=12📌 Runtime Parameters
params: expr: 3 * 4 default: 0 expected: 12 id: 3 * 4-0-12📌 Setup phase
duration:
0.00027066702023148537outcome:
passed📌 Call phase
duration:
0.00015504378825426102outcome:
passed📌 Teardown phase
duration:
0.00015947408974170685outcome:
passed -
✅ Test 200
params: expr="invalid + 1", default=99, expected=99📌 Runtime Parameters
params: expr: invalid + 1 default: 99 expected: 99 id: invalid + 1-99-99📌 Setup phase
duration:
0.0002721748314797878outcome:
passed📌 Call phase
duration:
0.00016802223399281502outcome:
passed📌 Teardown phase
duration:
0.00015815487131476402outcome:
passed -
✅ Test 201
params: expr="1 / 0", default=-1, expected=-1📌 Runtime Parameters
params: expr: 1 / 0 default: -1 expected: -1 id: 1 / 0--1--1📌 Setup phase
duration:
0.0002714828588068485outcome:
passed📌 Call phase
duration:
0.0001560840755701065outcome:
passed📌 Teardown phase
duration:
0.0001545501872897148outcome:
passed -
✅ Test 202
params: expr="2 ** 10", default=42, expected=42📌 Runtime Parameters
params: expr: 2 ** 10 default: 42 expected: 42 id: 2 ** 10-42-42📌 Setup phase
duration:
0.00026734406128525734outcome:
passed📌 Call phase
duration:
0.00017223507165908813outcome:
passed📌 Teardown phase
duration:
0.0001580868847668171outcome:
passed
-
-
📄 test_utils_exceptions.py
↳ Function: test_chained_exception_various
-
✅ Test 203
params: func="", expected_output="High-level task failed\ncaused by KeyError: 'missing'"📌 Runtime Parameters
params: func: <function cause_key_error at 0x7f1effb1a820> expected_output: High-level task failed caused by KeyError: 'missing' id: cause_key_error-High-level task failed\ncaused by KeyError: 'missing'📌 Setup phase
duration:
0.00024137506261467934outcome:
passed📌 Call phase
duration:
0.00016723712906241417outcome:
passed📌 Teardown phase
duration:
0.0001424248330295086outcome:
passed -
✅ Test 204
params: func="", expected_output="High-level task failed\ncaused by IndexError: list index out of range"📌 Runtime Parameters
params: func: <function cause_index_error at 0x7f1effb1a940> expected_output: High-level task failed caused by IndexError: list index out of range id: cause_index_error-High-level task failed\ncaused by IndexError: list index out of range📌 Setup phase
duration:
0.00023136381059885025outcome:
passed📌 Call phase
duration:
0.0001466311514377594outcome:
passed📌 Teardown phase
duration:
0.00014568865299224854outcome:
passed -
✅ Test 205
params: func="", expected_output="High-level task failed\ncaused by ZeroDivisionError: division by zero"📌 Runtime Parameters
params: func: <function cause_zero_division at 0x7f1effb1a9d0> expected_output: High-level task failed caused by ZeroDivisionError: division by zero id: cause_zero_division-High-level task failed\ncaused by ZeroDivisionError: division by zero📌 Setup phase
duration:
0.00022416375577449799outcome:
passed📌 Call phase
duration:
0.00014524906873703003outcome:
passed📌 Teardown phase
duration:
0.00013794703409075737outcome:
passed -
✅ Test 206
params: func="", expected_output="High-level task failed\ncaused by ValueError: invalid literal for int() with base 10: 'not_a_number'"📌 Runtime Parameters
params: func: <function cause_value_error at 0x7f1effb1aa60> expected_output: High-level task failed caused by ValueError: invalid literal for int() with base 10: 'not_a_number' id: cause_value_error-High-level task failed\ncaused by ValueError: invalid literal for int() with base 10: 'not_a_number'📌 Setup phase
duration:
0.00022654561325907707outcome:
passed📌 Call phase
duration:
0.0001516607590019703outcome:
passed📌 Teardown phase
duration:
0.00013715215027332306outcome:
passed -
✅ Test 207
params: func="", expected_output="High-level task failed\ncaused by TypeError: can only concatenate str (not \"int\") to str"📌 Runtime Parameters
params: func: <function cause_type_error at 0x7f1effb1aaf0> expected_output: High-level task failed caused by TypeError: can only concatenate str (not "int") to str id: cause_type_error-High-level task failed\ncaused by TypeError: can only concatenate str (not "int") to str📌 Setup phase
duration:
0.0002229679375886917outcome:
passed📌 Call phase
duration:
0.00014648912474513054outcome:
passed📌 Teardown phase
duration:
0.00014876713976264outcome:
passed
↳ Function: test_printed_exception
-
✅ Test 208
params: func="", expected_output="KeyError: 'missing'"📌 Runtime Parameters
params: func: <function cause_key_error at 0x7f1effb1a820> expected_output: KeyError: 'missing' id: cause_key_error-KeyError: 'missing'📌 Setup phase
duration:
0.0008511836640536785outcome:
passed📌 Call phase
duration:
0.0010292432270944118outcome:
passed📌 Teardown phase
duration:
0.0004617362283170223outcome:
passed -
✅ Test 209
params: func="", expected_output="IndexError: list index out of range"📌 Runtime Parameters
params: func: <function cause_index_error at 0x7f1effb1a940> expected_output: IndexError: list index out of range id: cause_index_error-IndexError: list index out of range📌 Setup phase
duration:
0.0005900328978896141outcome:
passed📌 Call phase
duration:
0.0008583632297813892outcome:
passed📌 Teardown phase
duration:
0.0004561101086437702outcome:
passed -
✅ Test 210
params: func="", expected_output="ZeroDivisionError: division by zero"📌 Runtime Parameters
params: func: <function cause_zero_division at 0x7f1effb1a9d0> expected_output: ZeroDivisionError: division by zero id: cause_zero_division-ZeroDivisionError: division by zero📌 Setup phase
duration:
0.0005513308569788933outcome:
passed📌 Call phase
duration:
0.0007747728377580643outcome:
passed📌 Teardown phase
duration:
0.000447726808488369outcome:
passed -
✅ Test 211
params: func="", expected_output="ValueError: invalid literal for int() with base 10: 'not_a_number'"📌 Runtime Parameters
params: func: <function cause_value_error at 0x7f1effb1aa60> expected_output: ValueError: invalid literal for int() with base 10: 'not_a_number' id: cause_value_error-ValueError: invalid literal for int() with base 10: 'not_a_number'📌 Setup phase
duration:
0.0005857599899172783outcome:
passed📌 Call phase
duration:
0.0008012009784579277outcome:
passed📌 Teardown phase
duration:
0.0004378827288746834outcome:
passed -
✅ Test 212
params: func="", expected_output="TypeError: can only concatenate str (not \"int\") to str"📌 Runtime Parameters
params: func: <function cause_type_error at 0x7f1effb1aaf0> expected_output: TypeError: can only concatenate str (not "int") to str id: cause_type_error-TypeError: can only concatenate str (not "int") to str📌 Setup phase
duration:
0.0005553243681788445outcome:
passed📌 Call phase
duration:
0.0008986708708107471outcome:
passed📌 Teardown phase
duration:
0.00042945798486471176outcome:
passed
-
-
📄 test_utils_get_adj.py
↳ Function: test_get_adj_success
-
✅ Test 213
📌 Setup phase
duration:
0.0001361737959086895outcome:
passed📌 Call phase
duration:
0.0008083907887339592outcome:
passed📌 Teardown phase
duration:
0.0001244647428393364outcome:
passed
↳ Function: test_get_adj_not_found
-
✅ Test 214
📌 Setup phase
duration:
0.0004949569702148438outcome:
passed📌 Call phase
duration:
0.0009916778653860092outcome:
passed📌 Teardown phase
duration:
0.00045226700603961945outcome:
passed
↳ Function: test_ensure_adjs_mixed
-
✅ Test 215
📌 Setup phase
duration:
0.0001222020946443081outcome:
passed📌 Call phase
duration:
0.0008111419156193733outcome:
passed📌 Teardown phase
duration:
0.00012024771422147751outcome:
passed
↳ Function: test_get_adjs_filter
-
✅ Test 216
📌 Setup phase
duration:
0.00011720787733793259outcome:
passed📌 Call phase
duration:
0.0008809911087155342outcome:
passed📌 Teardown phase
duration:
0.00011863373219966888outcome:
passed
-
-
📄 test_utils_hastepics.py
↳ Function: test_get_pv_connect_false_and_true
-
✅ Test 217
📌 Setup phase
duration:
0.0002907360903918743outcome:
passed📌 Call phase
duration:
0.1312147076241672outcome:
passed📌 Teardown phase
duration:
0.0005140509456396103outcome:
passed
↳ Function: test_motor_invalid_name_raises
-
✅ Test 219
📌 Setup phase
duration:
0.00018027611076831818outcome:
passed📌 Call phase
duration:
0.0002937610261142254outcome:
passed📌 Teardown phase
duration:
0.00012231385335326195outcome:
passed
↳ Function: test_motor_init_list_and_extras_build_handles_eagerly
-
✅ Test 221
📌 Setup phase
duration:
0.00017654011026024818outcome:
passed📌 Call phase
duration:
0.002447251696139574outcome:
passed📌 Teardown phase
duration:
0.00015519000589847565outcome:
passed
↳ Function: test_motor_val_connect_via_cache
-
✅ Test 222
📌 Setup phase
duration:
0.00016947509720921516outcome:
passed📌 Call phase
duration:
0.22556475969031453outcome:
passed📌 Teardown phase
duration:
0.00023851916193962097outcome:
passed
↳ Function: test_speedup_get_pv
-
✅ Test 223
📌 Setup phase
duration:
0.00019996799528598785outcome:
passed📌 Call phase
duration:
0.02014406817033887outcome:
passed📌 Teardown phase
duration:
0.000223647803068161outcome:
passed
↳ Function: test_motor_init_list_attrs_created
-
✅ Test 226
📌 Setup phase
duration:
0.00018774112686514854outcome:
passed📌 Call phase
duration:
0.001185649074614048outcome:
passed📌 Teardown phase
duration:
0.00014699064195156097outcome:
passed
↳ Function: test_motor_extras_attrs_correct
-
✅ Test 227
📌 Setup phase
duration:
0.00015828292816877365outcome:
passed📌 Call phase
duration:
0.0009898687712848186outcome:
passed📌 Teardown phase
duration:
0.00012573972344398499outcome:
passed
↳ Function: test_motor_callbacks_empty
-
✅ Test 228
📌 Setup phase
duration:
0.00013981014490127563outcome:
passed📌 Call phase
duration:
0.0013813721016049385outcome:
passed📌 Teardown phase
duration:
0.00013425620272755623outcome:
passed
-
-
📄 test_utils_ipy.py
↳ Function: test_devices_repr_fallback_and_ignore
-
✅ Test 229
📌 Setup phase
duration:
0.0008283639326691628outcome:
passed📌 Call phase
duration:
0.0008915197104215622outcome:
passed📌 Teardown phase
duration:
0.00027998117730021477outcome:
passed
-
-
📄 test_utils_jsonext.py
↳ Function: test_json_validate_save_load
-
✅ Test 230
params: input_obj="[1 2 3]", expected=[1, 2, 3]📌 Runtime Parameters
params: input_obj: [1 2 3] expected: - 1 - 2 - 3 id: input_obj0-expected0📌 Setup phase
duration:
0.0012213238514959812outcome:
passed📌 Call phase
duration:
0.0008453191258013248outcome:
passed📌 Teardown phase
duration:
0.0002115708775818348outcome:
passed -
✅ Test 231
params: input_obj="42", expected=42📌 Runtime Parameters
params: input_obj: 42 expected: 42 id: input_obj1-42📌 Setup phase
duration:
0.0009752647019922733outcome:
passed📌 Call phase
duration:
0.0008450066670775414outcome:
passed📌 Teardown phase
duration:
0.00019838102161884308outcome:
passed -
✅ Test 232
params: input_obj="(1-1j)", expected={"real": 1.0, "imag": -1.0}📌 Runtime Parameters
params: input_obj: (1-1j) expected: real: 1.0 imag: -1.0 id: (1-1j)-expected2📌 Setup phase
duration:
0.0013558450154960155outcome:
passed📌 Call phase
duration:
0.0013521211221814156outcome:
passed📌 Teardown phase
duration:
0.00019728532060980797outcome:
passed -
✅ Test 233
params: input_obj="/tmp/file.txt", expected="/tmp/file.txt"📌 Runtime Parameters
params: input_obj: /tmp/file.txt expected: /tmp/file.txt id: input_obj3-/tmp/file.txt📌 Setup phase
duration:
0.0009703007526695728outcome:
passed📌 Call phase
duration:
0.0005944068543612957outcome:
passed📌 Teardown phase
duration:
0.0001874319277703762outcome:
passed -
✅ Test 234
params: input_obj="{1, 2, 3}", expected=[1, 2, 3]📌 Runtime Parameters
params: input_obj: {1, 2, 3} expected: - 1 - 2 - 3 id: input_obj4-expected4📌 Setup phase
duration:
0.0009689219295978546outcome:
passed📌 Call phase
duration:
0.0009386059828102589outcome:
passed📌 Teardown phase
duration:
0.00018425891175866127outcome:
passed -
✅ Test 235
params: input_obj="{'a': array([10, 20])}", expected={"a": [10, 20]}📌 Runtime Parameters
params: input_obj: {'a': array([10, 20])} expected: a: - 10 - 20 id: input_obj5-expected5📌 Setup phase
duration:
0.000909402035176754outcome:
passed📌 Call phase
duration:
0.0008927970193326473outcome:
passed📌 Teardown phase
duration:
0.00018705427646636963outcome:
passed -
✅ Test 236
params: input_obj="{'c': (2+3j)}", expected={"c": {"real": 2.0, "imag": 3.0}}📌 Runtime Parameters
params: input_obj: {'c': (2+3j)} expected: c: real: 2.0 imag: 3.0 id: input_obj6-expected6📌 Setup phase
duration:
0.0012725172564387321outcome:
passed📌 Call phase
duration:
0.0010638111270964146outcome:
passed📌 Teardown phase
duration:
0.00019159773364663124outcome:
passed -
✅ Test 237
params: input_obj="{'nested': {'arr': array(10, 20],\n [30, 40), 'complex_num': (-1+5j), 'files': [PosixPath('/file1'), PosixPath('/file2')], 'set_values': {200, 100}, 'inner': {'num': 7}}}", expected={"nested": {"arr": 10, 20], [30, 40, "complex_num": {"real": -1.0, "imag": 5.0}, "files": ["/file1", "/file2"], "set_values": [100, 200], "inner": {"num": 7}}}📌 Runtime Parameters
params: input_obj: {'nested': {'arr': array([[10, 20], [30, 40]]), 'complex_num': (-1+5j), 'files': [PosixPath('/file1'), PosixPath('/file2')], 'set_values': {200, 100}, 'inner': {'num': 7}}} expected: nested: arr: - - 10 - 20 - - 30 - 40 complex_num: real: -1.0 imag: 5.0 files: - /file1 - /file2 set_values: - 100 - 200 inner: num: 7 id: input_obj7-expected7📌 Setup phase
duration:
0.0013387338258326054outcome:
passed📌 Call phase
duration:
0.0013774489052593708outcome:
passed📌 Teardown phase
duration:
0.0002019805833697319outcome:
passed
-
-
📄 test_utils_lazypv.py
↳ Function: test_getattr
-
✅ Test 238
📌 Setup phase
duration:
0.00015653204172849655outcome:
passed📌 Call phase
duration:
0.0004974789917469025outcome:
passed📌 Teardown phase
duration:
0.00012835487723350525outcome:
passed
-
-
📄 test_utils_logcfg.py
↳ Function: test_custom_log_outputs
-
✅ Test 239
params: levelname="LONG", logfunc=" at 0x7f1eff29ce50>", message="This is a LONG message"📌 Runtime Parameters
params: levelname: LONG logfunc: <function <lambda> at 0x7f1eff29ce50> message: This is a LONG message id: LONG-<lambda>-This is a LONG message📌 Setup phase
duration:
0.001551011111587286outcome:
passed📌 Call phase
duration:
0.0009265933185815811outcome:
passed📌 Teardown phase
duration:
0.00025635911151766777outcome:
passed -
✅ Test 240
params: levelname="ENLARGE", logfunc=" at 0x7f1eff29cee0>", message="Please ENLARGE this!"📌 Runtime Parameters
params: levelname: ENLARGE logfunc: <function <lambda> at 0x7f1eff29cee0> message: Please ENLARGE this! id: ENLARGE-<lambda>-Please ENLARGE this!📌 Setup phase
duration:
0.0004207058809697628outcome:
passed📌 Call phase
duration:
0.000657128170132637outcome:
passed📌 Teardown phase
duration:
0.000236517284065485outcome:
passed
-
-
📄 test_utils_logign.py
↳ Function: test_ignore_log_msg_behavior
-
✅ Test 242
params: levelname="WARNING", msg_to_ignore="This should be ignored", msg_to_keep="This should appear"📌 Runtime Parameters
params: levelname: WARNING msg_to_ignore: This should be ignored msg_to_keep: This should appear id: WARNING-This should be ignored-This should appear📌 Setup phase
duration:
0.0006221281364560127outcome:
passed📌 Call phase
duration:
0.0007948540151119232outcome:
passed📌 Teardown phase
duration:
0.00025020772591233253outcome:
passed -
✅ Test 243
params: levelname="ENLARGE", msg_to_ignore="ENLARGE this", msg_to_keep="Keep this ENLARGE"📌 Runtime Parameters
params: levelname: ENLARGE msg_to_ignore: ENLARGE this msg_to_keep: Keep this ENLARGE id: ENLARGE-ENLARGE this-Keep this ENLARGE📌 Setup phase
duration:
0.0004070112481713295outcome:
passed📌 Call phase
duration:
0.00046227313578128815outcome:
passed📌 Teardown phase
duration:
0.0002462528645992279outcome:
passed
↳ Function: test_ignore_only_by_level
-
✅ Test 244
📌 Setup phase
duration:
0.00023772800341248512outcome:
passed📌 Call phase
duration:
0.0004074210301041603outcome:
passed📌 Teardown phase
duration:
0.0001786532811820507outcome:
passed
↳ Function: test_ignore_only_by_msg
-
✅ Test 245
📌 Setup phase
duration:
0.00024305284023284912outcome:
passed📌 Call phase
duration:
0.00037458399310708046outcome:
passed📌 Teardown phase
duration:
0.00018440419808030128outcome:
passed
↳ Function: test_filter_removed_after_context
-
✅ Test 246
📌 Setup phase
duration:
0.00023878877982497215outcome:
passed📌 Call phase
duration:
0.00036502769216895103outcome:
passed📌 Teardown phase
duration:
0.00017793290317058563outcome:
passed
-
-
📄 test_utils_marker.py
↳ Function: test_format_value_with_units
-
✅ Test 247
📌 Setup phase
duration:
0.0001276358962059021outcome:
passed📌 Call phase
duration:
0.00016833888366818428outcome:
passed📌 Teardown phase
duration:
0.00010723434388637543outcome:
passed
↳ Function: test_format_value_without_units
-
✅ Test 248
📌 Setup phase
duration:
0.0001114988699555397outcome:
passed📌 Call phase
duration:
0.00014948006719350815outcome:
passed📌 Teardown phase
duration:
0.00010880781337618828outcome:
passed
↳ Function: test_marker_name_default
-
✅ Test 249
📌 Setup phase
duration:
0.000106101855635643outcome:
passed📌 Call phase
duration:
0.00022375397384166718outcome:
passed📌 Teardown phase
duration:
9.960494935512543e-05outcome:
passed
↳ Function: test_marker_name_custom
-
✅ Test 250
📌 Setup phase
duration:
0.0001095728948712349outcome:
passed📌 Call phase
duration:
0.0001624678261578083outcome:
passed📌 Teardown phase
duration:
9.993277490139008e-05outcome:
passed
↳ Function: test_marker_repr_format
-
✅ Test 251
📌 Setup phase
duration:
0.00011068861931562424outcome:
passed📌 Call phase
duration:
0.00017521996051073074outcome:
passed📌 Teardown phase
duration:
0.00010720128193497658outcome:
passed
↳ Function: test_marker_update_changes_value
-
✅ Test 252
📌 Setup phase
duration:
0.00010826019570231438outcome:
passed📌 Call phase
duration:
0.00016030203551054outcome:
passed📌 Teardown phase
duration:
9.967992082238197e-05outcome:
passed
↳ Function: test_marker_update_with_explicit_value
-
✅ Test 253
📌 Setup phase
duration:
0.0001062341034412384outcome:
passed📌 Call phase
duration:
0.0001376718282699585outcome:
passed📌 Teardown phase
duration:
9.49702225625515e-05outcome:
passed
↳ Function: test_marker_goto_sets_value_and_returns_result
-
✅ Test 254
📌 Setup phase
duration:
0.00011675013229250908outcome:
passed📌 Call phase
duration:
0.00017676595598459244outcome:
passed📌 Teardown phase
duration:
9.962311014533043e-05outcome:
passed
↳ Function: test_marker_call_is_alias_of_goto
-
✅ Test 255
📌 Setup phase
duration:
0.00010428391396999359outcome:
passed📌 Call phase
duration:
0.0001654587686061859outcome:
passed📌 Teardown phase
duration:
9.642494842410088e-05outcome:
passed
↳ Function: test_markers_register_and_access
-
✅ Test 256
📌 Setup phase
duration:
0.0001138150691986084outcome:
passed📌 Call phase
duration:
0.00029150117188692093outcome:
passed📌 Teardown phase
duration:
0.00010571489110589027outcome:
passed
↳ Function: test_markers_repr_contains_all
-
✅ Test 257
📌 Setup phase
duration:
0.00011600321158766747outcome:
passed📌 Call phase
duration:
0.00027693063020706177outcome:
passed📌 Teardown phase
duration:
0.00010673422366380692outcome:
passed
↳ Function: test_marker_registry_dict_is_printable_dict
-
✅ Test 258
📌 Setup phase
duration:
0.00011510401964187622outcome:
passed📌 Call phase
duration:
0.0002009030431509018outcome:
passed📌 Teardown phase
duration:
9.92720015347004e-05outcome:
passed
↳ Function: test_markers_getitem_invalid_key_raises
-
✅ Test 259
📌 Setup phase
duration:
0.00011356081813573837outcome:
passed📌 Call phase
duration:
0.00019934307783842087outcome:
passed📌 Teardown phase
duration:
0.00011338433250784874outcome:
passed
-
-
📄 test_utils_metaclasses.py
↳ Function: test_combine_classes_combines_methods
-
✅ Test 260
📌 Setup phase
duration:
0.00012713531032204628outcome:
passed📌 Call phase
duration:
0.00019759219139814377outcome:
passed📌 Teardown phase
duration:
0.0001031174324452877outcome:
passed
↳ Function: test_registryabc_combines_registrymeta_and_abcmeta
-
✅ Test 261
📌 Setup phase
duration:
0.00010759476572275162outcome:
passed📌 Call phase
duration:
0.005193570163100958outcome:
passed📌 Teardown phase
duration:
0.00013429811224341393outcome:
passed
-
-
📄 test_utils_namespace.py
↳ Function: test_namespace_pretty_repr_mixed_and_nested
-
✅ Test 262
📌 Setup phase
duration:
0.00013804063200950623outcome:
passed📌 Call phase
duration:
0.00026028789579868317outcome:
passed📌 Teardown phase
duration:
0.0001150309108197689outcome:
passed
-
-
📄 test_utils_npy.py
↳ Function: test_nice_arange
-
✅ Test 263
params: start=0, stop=5, step=1, expected=[0, 1, 2, 3, 4, 5]📌 Runtime Parameters
params: start: 0 stop: 5 step: 1 expected: - (vide) - 1 - 2 - 3 - 4 - 5 id: 0-5-1-expected0📌 Setup phase
duration:
0.0003660800866782665outcome:
passed📌 Call phase
duration:
0.02004447765648365outcome:
passed📌 Teardown phase
duration:
0.0002478780224919319outcome:
passed -
✅ Test 264
params: start=5, stop=0, step=-1, expected=[0, 1, 2, 3, 4, 5]📌 Runtime Parameters
params: start: 5 stop: 0 step: -1 expected: - (vide) - 1 - 2 - 3 - 4 - 5 id: 5-0--1-expected1📌 Setup phase
duration:
0.00037732021883130074outcome:
passed📌 Call phase
duration:
0.0004255371168255806outcome:
passed📌 Teardown phase
duration:
0.00019283918663859367outcome:
passed -
✅ Test 265
params: start=1, stop=2, step=0.3, expected=[1, 1.3333333333333333, 1.6666666666666667, 2]📌 Runtime Parameters
params: start: 1 stop: 2 step: 0.3 expected: - 1 - 1.3333333333333333 - 1.6666666666666667 - 2 id: 1-2-0.3-expected2📌 Setup phase
duration:
0.0003771558403968811outcome:
passed📌 Call phase
duration:
0.0003825719468295574outcome:
passed📌 Teardown phase
duration:
0.0002012290060520172outcome:
passed -
✅ Test 266
params: start=-2, stop=2, step=1.5, expected=[-2, -0.6666666666666666, 0.6666666666666666, 2]📌 Runtime Parameters
params: start: -2 stop: 2 step: 1.5 expected: - -2 - -0.6666666666666666 - 0.6666666666666666 - 2 id: -2-2-1.5-expected3📌 Setup phase
duration:
0.0003443276509642601outcome:
passed📌 Call phase
duration:
0.0003625759854912758outcome:
passed📌 Teardown phase
duration:
0.00018604565411806107outcome:
passed -
✅ Test 267
params: start=2.5, stop=0.5, step=-0.4, expected=[0.5, 0.9, 1.3, 1.7, 2.1, 2.5]📌 Runtime Parameters
params: start: 2.5 stop: 0.5 step: -0.4 expected: - 0.5 - 0.9 - 1.3 - 1.7 - 2.1 - 2.5 id: 2.5-0.5--0.4-expected4📌 Setup phase
duration:
0.00034626107662916183outcome:
passed📌 Call phase
duration:
0.00034230900928378105outcome:
passed📌 Teardown phase
duration:
0.0001991880126297474outcome:
passed
↳ Function: test_nice_linspace
-
✅ Test 268
params: start=0, stop=10, num=4, expected="[ 0. 2.5 5. 7.5 10. ]"📌 Runtime Parameters
params: start: 0 stop: 10 num: 4 expected: [ 0. 2.5 5. 7.5 10. ] id: 0-10-4-expected0📌 Setup phase
duration:
0.00034373579546809196outcome:
passed📌 Call phase
duration:
0.00034929392859339714outcome:
passed📌 Teardown phase
duration:
0.00019734492525458336outcome:
passed -
✅ Test 269
params: start=5, stop=15, num=2, expected="[ 5. 10. 15.]"📌 Runtime Parameters
params: start: 5 stop: 15 num: 2 expected: [ 5. 10. 15.] id: 5-15-2-expected1📌 Setup phase
duration:
0.0003450671210885048outcome:
passed📌 Call phase
duration:
0.00036100298166275024outcome:
passed📌 Teardown phase
duration:
0.00020004482939839363outcome:
passed -
✅ Test 270
params: start=-5, stop=5, num=4, expected="[-5. -2.5 0. 2.5 5. ]"📌 Runtime Parameters
params: start: -5 stop: 5 num: 4 expected: [-5. -2.5 0. 2.5 5. ] id: -5-5-4-expected2📌 Setup phase
duration:
0.0003412528894841671outcome:
passed📌 Call phase
duration:
0.0003619138151407242outcome:
passed📌 Teardown phase
duration:
0.00018650805577635765outcome:
passed -
✅ Test 271
params: start=0, stop=1, num=3, expected="[0. 0.33333333 0.66666667 1. ]"📌 Runtime Parameters
params: start: 0 stop: 1 num: 3 expected: [0. 0.33333333 0.66666667 1. ] id: 0-1-3-expected3📌 Setup phase
duration:
0.0003343690186738968outcome:
passed📌 Call phase
duration:
0.0003427742049098015outcome:
passed📌 Teardown phase
duration:
0.00018765591084957123outcome:
passed -
✅ Test 272
params: start=2, stop=2, num=3, expected="[2. 2. 2. 2.]"📌 Runtime Parameters
params: start: 2 stop: 2 num: 3 expected: [2. 2. 2. 2.] id: 2-2-3-expected4📌 Setup phase
duration:
0.0003714710474014282outcome:
passed📌 Call phase
duration:
0.00034832069650292397outcome:
passed📌 Teardown phase
duration:
0.00019479729235172272outcome:
passed -
✅ Test 273
params: start=3, stop=0, num=3, expected="[3. 2. 1. 0.]"📌 Runtime Parameters
params: start: 3 stop: 0 num: 3 expected: [3. 2. 1. 0.] id: 3-0-3-expected5📌 Setup phase
duration:
0.000336645171046257outcome:
passed📌 Call phase
duration:
0.00034543080255389214outcome:
passed📌 Teardown phase
duration:
0.00018370477482676506outcome:
passed -
✅ Test 274
params: start=0, stop=1, num=0, expected="[0.]"📌 Runtime Parameters
params: start: 0 stop: 1 num: 0 expected: [0.] id: 0-1-0-expected6📌 Setup phase
duration:
0.00032969797030091286outcome:
passed📌 Call phase
duration:
0.0003466140478849411outcome:
passed📌 Teardown phase
duration:
0.00018984731286764145outcome:
passed -
✅ Test 275
params: start=-2, stop=2, num=3, expected="[-2. -0.66666667 0.66666667 2. ]"📌 Runtime Parameters
params: start: -2 stop: 2 num: 3 expected: [-2. -0.66666667 0.66666667 2. ] id: -2-2-3-expected7📌 Setup phase
duration:
0.00035477103665471077outcome:
passed📌 Call phase
duration:
0.00033629080280661583outcome:
passed📌 Teardown phase
duration:
0.000218310859054327outcome:
passed
↳ Function: test_nice_steps_centered
-
✅ Test 276
params: start=-2, stop=2, step=2, endpoint=true, expected="[-2. 0. 2.]"📌 Runtime Parameters
params: start: -2 stop: 2 step: 2 endpoint: True expected: [-2. 0. 2.] id: -2-2-2-True-expected0📌 Setup phase
duration:
0.0004059639759361744outcome:
passed📌 Call phase
duration:
0.0003627208061516285outcome:
passed📌 Teardown phase
duration:
0.00019912701100111008outcome:
passed -
✅ Test 277
params: start=0, stop=5, step=2, endpoint=true, expected="[0. 2. 4.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: True expected: [0. 2. 4.] id: 0-5-2-True-expected1📌 Setup phase
duration:
0.00037375185638666153outcome:
passed📌 Call phase
duration:
0.0003566131927073002outcome:
passed📌 Teardown phase
duration:
0.0002071908675134182outcome:
passed -
✅ Test 278
params: start=0, stop=5, step=2, endpoint=false, expected="[0. 2.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: False expected: [0. 2.] id: 0-5-2-False-expected2📌 Setup phase
duration:
0.00038920482620596886outcome:
passed📌 Call phase
duration:
0.0003474391996860504outcome:
passed📌 Teardown phase
duration:
0.000209723599255085outcome:
passed -
✅ Test 279
params: start=-1, stop=2, step=1.5, endpoint=true, expected="[-1.5 0. 1.5]"📌 Runtime Parameters
params: start: -1 stop: 2 step: 1.5 endpoint: True expected: [-1.5 0. 1.5] id: -1-2-1.5-True-expected3📌 Setup phase
duration:
0.00040700798854231834outcome:
passed📌 Call phase
duration:
0.00033848313614726067outcome:
passed📌 Teardown phase
duration:
0.0002019992098212242outcome:
passed -
✅ Test 280
params: start=-1, stop=2, step=-1.5, endpoint=true, expected="[ 1.5 0. -1.5]"📌 Runtime Parameters
params: start: -1 stop: 2 step: -1.5 endpoint: True expected: [ 1.5 0. -1.5] id: -1-2--1.5-True-expected4📌 Setup phase
duration:
0.0004215962253510952outcome:
passed📌 Call phase
duration:
0.00033897580578923225outcome:
passed📌 Teardown phase
duration:
0.00021706894040107727outcome:
passed -
✅ Test 281
params: start=5, stop=0, step=-2, endpoint=true, expected="[0. 2. 4.]"📌 Runtime Parameters
params: start: 5 stop: 0 step: -2 endpoint: True expected: [0. 2. 4.] id: 5-0--2-True-expected5📌 Setup phase
duration:
0.00038472702726721764outcome:
passed📌 Call phase
duration:
0.0003474853001534939outcome:
passed📌 Teardown phase
duration:
0.0002061133272945881outcome:
passed
↳ Function: test_nice_steps_left_aligned
-
✅ Test 282
params: start=0, stop=5, step=2, endpoint=true, expected="[0. 2. 4.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: True expected: [0. 2. 4.] id: 0-5-2-True-expected0📌 Setup phase
duration:
0.00036345189437270164outcome:
passed📌 Call phase
duration:
0.0003612698055803776outcome:
passed📌 Teardown phase
duration:
0.0002082143910229206outcome:
passed -
✅ Test 283
params: start=0, stop=5, step=2, endpoint=false, expected="[0. 2.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: False expected: [0. 2.] id: 0-5-2-False-expected1📌 Setup phase
duration:
0.0004046401008963585outcome:
passed📌 Call phase
duration:
0.00036167120561003685outcome:
passed📌 Teardown phase
duration:
0.0002047186717391014outcome:
passed -
✅ Test 284
params: start=-1, stop=2, step=1.5, endpoint=true, expected="[-1. 0.5 2. ]"📌 Runtime Parameters
params: start: -1 stop: 2 step: 1.5 endpoint: True expected: [-1. 0.5 2. ] id: -1-2-1.5-True-expected2📌 Setup phase
duration:
0.0004011639393866062outcome:
passed📌 Call phase
duration:
0.00033102696761488914outcome:
passed📌 Teardown phase
duration:
0.0002092001959681511outcome:
passed -
✅ Test 285
params: start=-1, stop=2, step=1.5, endpoint=false, expected="[-1. 0.5]"📌 Runtime Parameters
params: start: -1 stop: 2 step: 1.5 endpoint: False expected: [-1. 0.5] id: -1-2-1.5-False-expected3📌 Setup phase
duration:
0.0003787511959671974outcome:
passed📌 Call phase
duration:
0.00033905357122421265outcome:
passed📌 Teardown phase
duration:
0.00020280899479985237outcome:
passed -
✅ Test 286
params: start=-2, stop=1, step=1.2, endpoint=true, expected="[-2. -0.8 0.4]"📌 Runtime Parameters
params: start: -2 stop: 1 step: 1.2 endpoint: True expected: [-2. -0.8 0.4] id: -2-1-1.2-True-expected4📌 Setup phase
duration:
0.0003841221332550049outcome:
passed📌 Call phase
duration:
0.00033334409818053246outcome:
passed📌 Teardown phase
duration:
0.00023859506472945213outcome:
passed -
✅ Test 287
params: start=5, stop=0, step=-2, endpoint=true, expected="[0. 2. 4.]"📌 Runtime Parameters
params: start: 5 stop: 0 step: -2 endpoint: True expected: [0. 2. 4.] id: 5-0--2-True-expected5📌 Setup phase
duration:
0.0003974698483943939outcome:
passed📌 Call phase
duration:
0.0003377213142812252outcome:
passed📌 Teardown phase
duration:
0.00020126579329371452outcome:
passed -
✅ Test 288
params: start=5, stop=0, step=-2, endpoint=false, expected="[0. 2.]"📌 Runtime Parameters
params: start: 5 stop: 0 step: -2 endpoint: False expected: [0. 2.] id: 5-0--2-False-expected6📌 Setup phase
duration:
0.0003866027109324932outcome:
passed📌 Call phase
duration:
0.0003342549316585064outcome:
passed📌 Teardown phase
duration:
0.00022668298333883286outcome:
passed
↳ Function: test_nice_steps_right_aligned
-
✅ Test 289
params: start=0, stop=5, step=2, endpoint=true, expected="[1. 3. 5.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: True expected: [1. 3. 5.] id: 0-5-2-True-expected0📌 Setup phase
duration:
0.0003909091465175152outcome:
passed📌 Call phase
duration:
0.0004756283015012741outcome:
passed📌 Teardown phase
duration:
0.00019787903875112534outcome:
passed -
✅ Test 290
params: start=0, stop=5, step=2, endpoint=false, expected="[3. 5.]"📌 Runtime Parameters
params: start: 0 stop: 5 step: 2 endpoint: False expected: [3. 5.] id: 0-5-2-False-expected1📌 Setup phase
duration:
0.00038871122524142265outcome:
passed📌 Call phase
duration:
0.00035351142287254333outcome:
passed📌 Teardown phase
duration:
0.00020445790141820908outcome:
passed -
✅ Test 291
params: start=-1, stop=2, step=1.5, endpoint=true, expected="[-1. 0.5 2. ]"📌 Runtime Parameters
params: start: -1 stop: 2 step: 1.5 endpoint: True expected: [-1. 0.5 2. ] id: -1-2-1.5-True-expected2📌 Setup phase
duration:
0.000382118858397007outcome:
passed📌 Call phase
duration:
0.00032806117087602615outcome:
passed📌 Teardown phase
duration:
0.000247051939368248outcome:
passed -
✅ Test 292
params: start=-1, stop=2, step=1.5, endpoint=false, expected="[0.5 2. ]"📌 Runtime Parameters
params: start: -1 stop: 2 step: 1.5 endpoint: False expected: [0.5 2. ] id: -1-2-1.5-False-expected3📌 Setup phase
duration:
0.00040227407589554787outcome:
passed📌 Call phase
duration:
0.00033226003870368004outcome:
passed📌 Teardown phase
duration:
0.00020411983132362366outcome:
passed -
✅ Test 293
params: start=5, stop=0, step=-2, endpoint=true, expected="[1. 3. 5.]"📌 Runtime Parameters
params: start: 5 stop: 0 step: -2 endpoint: True expected: [1. 3. 5.] id: 5-0--2-True-expected4📌 Setup phase
duration:
0.00038041407242417336outcome:
passed📌 Call phase
duration:
0.0003351150080561638outcome:
passed📌 Teardown phase
duration:
0.00021046912297606468outcome:
passed -
✅ Test 294
params: start=5, stop=0, step=-2, endpoint=false, expected="[3. 5.]"📌 Runtime Parameters
params: start: 5 stop: 0 step: -2 endpoint: False expected: [3. 5.] id: 5-0--2-False-expected5📌 Setup phase
duration:
0.00038526626303792outcome:
passed📌 Call phase
duration:
0.00034841708838939667outcome:
passed📌 Teardown phase
duration:
0.000213750172406435outcome:
passed -
✅ Test 295
params: start=-3, stop=3, step=2, endpoint=true, expected="[-3. -1. 1. 3.]"📌 Runtime Parameters
params: start: -3 stop: 3 step: 2 endpoint: True expected: [-3. -1. 1. 3.] id: -3-3-2-True-expected6📌 Setup phase
duration:
0.0004056878387928009outcome:
passed📌 Call phase
duration:
0.00037747714668512344outcome:
passed📌 Teardown phase
duration:
0.00021665776148438454outcome:
passed
↳ Function: test_within_scalar
-
✅ Test 296
params: val=5, vmin=0, vmax=10, expected=true📌 Runtime Parameters
params: val: 5 vmin: 0 vmax: 10 expected: True id: 5-0-10-True📌 Setup phase
duration:
0.0003503640182316303outcome:
passed📌 Call phase
duration:
0.00014530308544635773outcome:
passed📌 Teardown phase
duration:
0.00016523199155926704outcome:
passed -
✅ Test 297
params: val=5, vmin=6, vmax=10, expected=false📌 Runtime Parameters
params: val: 5 vmin: 6 vmax: 10 expected: False id: 5-6-10-False📌 Setup phase
duration:
0.00030691782012581825outcome:
passed📌 Call phase
duration:
0.00014142412692308426outcome:
passed📌 Teardown phase
duration:
0.00017713801935315132outcome:
passed -
✅ Test 298
params: val=5, vmin=null, vmax=10, expected=true📌 Runtime Parameters
params: val: 5 vmin: None vmax: 10 expected: True id: 5-None-10-True📌 Setup phase
duration:
0.00029609305784106255outcome:
passed📌 Call phase
duration:
0.0001409095712006092outcome:
passed📌 Teardown phase
duration:
0.00016789929941296577outcome:
passed -
✅ Test 299
params: val=5, vmin=0, vmax=null, expected=true📌 Runtime Parameters
params: val: 5 vmin: 0 vmax: None expected: True id: 5-0-None-True📌 Setup phase
duration:
0.0003016563132405281outcome:
passed📌 Call phase
duration:
0.00013476330786943436outcome:
passed📌 Teardown phase
duration:
0.00016349786892533302outcome:
passed -
✅ Test 300
params: val=5, vmin=null, vmax=null, expected=true📌 Runtime Parameters
params: val: 5 vmin: None vmax: None expected: True id: 5-None-None-True📌 Setup phase
duration:
0.00032620131969451904outcome:
passed📌 Call phase
duration:
0.00013688299804925919outcome:
passed📌 Teardown phase
duration:
0.00016563106328248978outcome:
passed
↳ Function: test_within_fraction
-
✅ Test 301
params: data=[1, 2, 3, 4, 5], vmin=2, vmax=5, expected=0.6📌 Runtime Parameters
params: data: - 1 - 2 - 3 - 4 - 5 vmin: 2 vmax: 5 expected: 0.6 id: data0-2-5-0.6📌 Setup phase
duration:
0.000324747059494257outcome:
passed📌 Call phase
duration:
0.00028657959774136543outcome:
passed📌 Teardown phase
duration:
0.00017720600590109825outcome:
passed -
✅ Test 302
params: data=[10, 20, 30], vmin=5, vmax=25, expected=0.6666666666666666📌 Runtime Parameters
params: data: - 10 - 20 - 30 vmin: 5 vmax: 25 expected: 0.6666666666666666 id: data1-5-25-0.6666666666666666📌 Setup phase
duration:
0.000338756013661623outcome:
passed📌 Call phase
duration:
0.0002408018335700035outcome:
passed📌 Teardown phase
duration:
0.00017503602430224419outcome:
passed -
✅ Test 303
params: data=[1, 2, 3], vmin=null, vmax=2, expected=0.3333333333333333📌 Runtime Parameters
params: data: - 1 - 2 - 3 vmin: None vmax: 2 expected: 0.3333333333333333 id: data2-None-2-0.3333333333333333📌 Setup phase
duration:
0.0003277920186519623outcome:
passed📌 Call phase
duration:
0.00022792117670178413outcome:
passed📌 Teardown phase
duration:
0.0001895502209663391outcome:
passed -
✅ Test 304
params: data=[], vmin=0, vmax=1, expected=0📌 Runtime Parameters
params: data: [] vmin: 0 vmax: 1 expected: 0 id: data3-0-1-0📌 Setup phase
duration:
0.0003296751528978348outcome:
passed📌 Call phase
duration:
0.0002465229481458664outcome:
passed📌 Teardown phase
duration:
0.00017288001254200935outcome:
passed
↳ Function: test_fraction_to_percentage
-
✅ Test 305
params: fraction=0.456, ndigits=1, expected=45.6📌 Runtime Parameters
params: fraction: 0.456 ndigits: 1 expected: 45.6 id: 0.456-1-45.6📌 Setup phase
duration:
0.0002912161871790886outcome:
passed📌 Call phase
duration:
0.00014510564506053925outcome:
passed📌 Teardown phase
duration:
0.0001509576104581356outcome:
passed -
✅ Test 306
params: fraction=0.12345, ndigits=2, expected=12.35📌 Runtime Parameters
params: fraction: 0.12345 ndigits: 2 expected: 12.35 id: 0.12345-2-12.35📌 Setup phase
duration:
0.0002694767899811268outcome:
passed📌 Call phase
duration:
0.0001387856900691986outcome:
passed📌 Teardown phase
duration:
0.0001567038707435131outcome:
passed -
✅ Test 307
params: fraction=0.9999, ndigits=0, expected=100.0📌 Runtime Parameters
params: fraction: 0.9999 ndigits: 0 expected: 100.0 id: 0.9999-0-100.0📌 Setup phase
duration:
0.0002676551230251789outcome:
passed📌 Call phase
duration:
0.000138808973133564outcome:
passed📌 Teardown phase
duration:
0.00015868106856942177outcome:
passed
↳ Function: test_get_dtype
-
✅ Test 308
params: val="[1 2 3]", expected=""📌 Runtime Parameters
params: val: [1 2 3] expected: <class 'numpy.ndarray'> id: val0-ndarray📌 Setup phase
duration:
0.0002326597459614277outcome:
passed📌 Call phase
duration:
0.000141932163387537outcome:
passed📌 Teardown phase
duration:
0.00015617068856954575outcome:
passed -
✅ Test 309
params: val=[1, 2, 3], expected=""📌 Runtime Parameters
params: val: - 1 - 2 - 3 expected: <class 'list'> id: val1-list📌 Setup phase
duration:
0.0002371487207710743outcome:
passed📌 Call phase
duration:
0.0001523829996585846outcome:
passed📌 Teardown phase
duration:
0.00013784365728497505outcome:
passed -
✅ Test 310
params: val=3.14, expected=""📌 Runtime Parameters
params: val: 3.14 expected: <class 'float'> id: 3.14-float📌 Setup phase
duration:
0.00023591890931129456outcome:
passed📌 Call phase
duration:
0.0001422576606273651outcome:
passed📌 Teardown phase
duration:
0.00013802014291286469outcome:
passed
↳ Function: test_get_shape
-
✅ Test 311
params: val="1 2]\n [3 4", expected=[2, 2]📌 Runtime Parameters
params: val: [[1 2] [3 4]] expected: - 2 - 2 id: val0-expected0📌 Setup phase
duration:
0.00022870022803544998outcome:
passed📌 Call phase
duration:
0.00013741105794906616outcome:
passed📌 Teardown phase
duration:
0.00015837373211979866outcome:
passed -
✅ Test 312
params: val=[1, 2, 3], expected=[]📌 Runtime Parameters
params: val: - 1 - 2 - 3 expected: [] id: val1-expected1📌 Setup phase
duration:
0.0002452167682349682outcome:
passed📌 Call phase
duration:
0.00014279084280133247outcome:
passed📌 Teardown phase
duration:
0.00014528818428516388outcome:
passed -
✅ Test 313
params: val=42, expected=[]📌 Runtime Parameters
params: val: 42 expected: [] id: 42-expected2📌 Setup phase
duration:
0.00022360589355230331outcome:
passed📌 Call phase
duration:
0.00019841687753796577outcome:
passed📌 Teardown phase
duration:
0.00014218641445040703outcome:
passed
↳ Function: test_is_array
-
✅ Test 314
params: val="[1 2 3]", expected=true📌 Runtime Parameters
params: val: [1 2 3] expected: True id: val0-True📌 Setup phase
duration:
0.00022649578750133514outcome:
passed📌 Call phase
duration:
0.00014580413699150085outcome:
passed📌 Teardown phase
duration:
0.00014645792543888092outcome:
passed -
✅ Test 315
params: val=[1, 2, 3], expected=false📌 Runtime Parameters
params: val: - 1 - 2 - 3 expected: False id: val1-False📌 Setup phase
duration:
0.0002288161776959896outcome:
passed📌 Call phase
duration:
0.00014470238238573074outcome:
passed📌 Teardown phase
duration:
0.0001407642848789692outcome:
passed -
✅ Test 316
params: val=42, expected=false📌 Runtime Parameters
params: val: 42 expected: False id: 42-False📌 Setup phase
duration:
0.00022605201229453087outcome:
passed📌 Call phase
duration:
0.00014095893129706383outcome:
passed📌 Teardown phase
duration:
0.00013965973630547523outcome:
passed
-
-
📄 test_utils_path.py
↳ Function: test_can_create_all_files_user_says_yes
-
✅ Test 317
📌 Setup phase
duration:
0.00012499885633587837outcome:
passed📌 Call phase
duration:
0.0006349519826471806outcome:
passed📌 Teardown phase
duration:
0.00012230826541781425outcome:
passed
↳ Function: test_can_create_all_files_user_says_no
-
✅ Test 318
📌 Setup phase
duration:
0.00012189801782369614outcome:
passed📌 Call phase
duration:
0.0004804758355021477outcome:
passed📌 Teardown phase
duration:
0.00011635571718215942outcome:
passed
↳ Function: test_make_missing_dir_creates_folder
-
✅ Test 319
📌 Setup phase
duration:
0.00012517673894762993outcome:
passed📌 Call phase
duration:
0.0004676911048591137outcome:
passed📌 Teardown phase
duration:
0.00011795805767178535outcome:
passed
↳ Function: test_glob_files_returns_matching_files_only
-
✅ Test 320
📌 Setup phase
duration:
0.00010862806811928749outcome:
passed📌 Call phase
duration:
0.0010766307823359966outcome:
passed📌 Teardown phase
duration:
0.00012304075062274933outcome:
passed
↳ Function: test_filter_files_excludes_directories
-
✅ Test 321
📌 Setup phase
duration:
0.00012069102376699448outcome:
passed📌 Call phase
duration:
0.0005661668255925179outcome:
passed📌 Teardown phase
duration:
0.00012925965711474419outcome:
passed
-
-
📄 test_utils_picklio.py
↳ Function: test_pickle_and_unpickle
-
✅ Test 322
params: test_obj={"a": 1, "b": [2, 3], "c": {"world": "ok"}}📌 Runtime Parameters
params: test_obj: a: 1 b: - 2 - 3 c: world: ok id: test_obj0📌 Setup phase
duration:
0.0006913649849593639outcome:
passed📌 Call phase
duration:
0.00041458895429968834outcome:
passed📌 Teardown phase
duration:
0.0001661079004406929outcome:
passed -
✅ Test 323
params: test_obj=[1, 2, 3, 4, 5]📌 Runtime Parameters
params: test_obj: - 1 - 2 - 3 - 4 - 5 id: test_obj1📌 Setup phase
duration:
0.0006199530325829983outcome:
passed📌 Call phase
duration:
0.0002969871275126934outcome:
passed📌 Teardown phase
duration:
0.0001644226722419262outcome:
passed -
✅ Test 324
params: test_obj="simple string"📌 Runtime Parameters
params: test_obj: simple string id: simple string📌 Setup phase
duration:
0.0005889814347028732outcome:
passed📌 Call phase
duration:
0.00029465556144714355outcome:
passed📌 Teardown phase
duration:
0.0001691998913884163outcome:
passed -
✅ Test 325
params: test_obj=42📌 Runtime Parameters
params: test_obj: 42 id: 42📌 Setup phase
duration:
0.0004998068325221539outcome:
passed📌 Call phase
duration:
0.0003659147769212723outcome:
passed📌 Teardown phase
duration:
0.00016105733811855316outcome:
passed -
✅ Test 326
params: test_obj=3.14159📌 Runtime Parameters
params: test_obj: 3.14159 id: 3.14159📌 Setup phase
duration:
0.0005519632250070572outcome:
passed📌 Call phase
duration:
0.00028036022558808327outcome:
passed📌 Teardown phase
duration:
0.0001569320447742939outcome:
passed -
✅ Test 327
params: test_obj=[true, false, null]📌 Runtime Parameters
params: test_obj: - True - (vide) - (vide) id: test_obj5📌 Setup phase
duration:
0.0005798670463263988outcome:
passed📌 Call phase
duration:
0.000283700879663229outcome:
passed📌 Teardown phase
duration:
0.00015724403783679008outcome:
passed -
✅ Test 328
params: test_obj={"complex": [{"list": [1, 2]}, {"dict": {"x": 10}}]}📌 Runtime Parameters
params: test_obj: complex: - list: - 1 - 2 - dict: x: 10 id: test_obj6📌 Setup phase
duration:
0.0005213222466409206outcome:
passed📌 Call phase
duration:
0.00030113430693745613outcome:
passed📌 Teardown phase
duration:
0.00017466815188527107outcome:
passed
-
-
📄 test_utils_printing.py
↳ Function: test_maxlen_valid
-
✅ Test 329
params: seq=["a", "abc", ""], expected=3📌 Runtime Parameters
params: seq: - a - abc - (vide) expected: 3 id: seq0-3📌 Setup phase
duration:
0.000281341839581728outcome:
passed📌 Call phase
duration:
0.00016233092173933983outcome:
passed📌 Teardown phase
duration:
0.00014400901272892952outcome:
passed -
✅ Test 330
params: seq=[], expected=0📌 Runtime Parameters
params: seq: [] expected: 0 id: seq1-0📌 Setup phase
duration:
0.00023064808920025826outcome:
passed📌 Call phase
duration:
0.00014512380585074425outcome:
passed📌 Teardown phase
duration:
0.0001451568678021431outcome:
passed -
✅ Test 331
params: seq=1, 2], [3], [4, 5, 6, expected=3📌 Runtime Parameters
params: seq: - - 1 - 2 - - 3 - - 4 - 5 - 6 expected: 3 id: seq2-3📌 Setup phase
duration:
0.00023253308609127998outcome:
passed📌 Call phase
duration:
0.00015914812684059143outcome:
passed📌 Teardown phase
duration:
0.00013580499216914177outcome:
passed -
✅ Test 332
params: seq=[{"a": 2, "b": 3}, {}, {"c": 4}], expected=2📌 Runtime Parameters
params: seq: - a: 2 b: 3 - (vide) - c: 4 expected: 2 id: seq3-2📌 Setup phase
duration:
0.00022954680025577545outcome:
passed📌 Call phase
duration:
0.00015309778973460197outcome:
passed📌 Teardown phase
duration:
0.00020974688231945038outcome:
passed
↳ Function: test_strlen
-
✅ Test 333
params: value=42, expected=2📌 Runtime Parameters
params: value: 42 expected: 2 id: 42-2📌 Setup phase
duration:
0.0002283831126987934outcome:
passed📌 Call phase
duration:
0.0001545618288218975outcome:
passed📌 Teardown phase
duration:
0.00014076102524995804outcome:
passed -
✅ Test 334
params: value="hello", expected=5📌 Runtime Parameters
params: value: hello expected: 5 id: hello-5📌 Setup phase
duration:
0.0002482319250702858outcome:
passed📌 Call phase
duration:
0.00013375608250498772outcome:
passed📌 Teardown phase
duration:
0.00013345805928111076outcome:
passed -
✅ Test 335
params: value=false, expected=5📌 Runtime Parameters
params: value: False expected: 5 id: False-5📌 Setup phase
duration:
0.0002338946796953678outcome:
passed📌 Call phase
duration:
0.0001384369097650051outcome:
passed📌 Teardown phase
duration:
0.00013730069622397423outcome:
passed -
✅ Test 336
params: value=null, expected=4📌 Runtime Parameters
params: value: None expected: 4 id: None-4📌 Setup phase
duration:
0.00022413721308112144outcome:
passed📌 Call phase
duration:
0.00013814307749271393outcome:
passed📌 Teardown phase
duration:
0.00014917226508259773outcome:
passed -
✅ Test 337
params: value=[1, 2, 3], expected=9📌 Runtime Parameters
params: value: - 1 - 2 - 3 expected: 9 id: value4-9📌 Setup phase
duration:
0.00022815167903900146outcome:
passed📌 Call phase
duration:
0.00013635773211717606outcome:
passed📌 Teardown phase
duration:
0.00013732677325606346outcome:
passed -
✅ Test 338
params: value={"a": 1}, expected=8📌 Runtime Parameters
params: value: a: 1 expected: 8 id: value5-8📌 Setup phase
duration:
0.00021975301206111908outcome:
passed📌 Call phase
duration:
0.00013741385191679outcome:
passed📌 Teardown phase
duration:
0.00013768766075372696outcome:
passed -
✅ Test 339
params: value=[1, 2], expected=6📌 Runtime Parameters
params: value: - 1 - 2 expected: 6 id: value6-6📌 Setup phase
duration:
0.0002233949489891529outcome:
passed📌 Call phase
duration:
0.00014931382611393929outcome:
passed📌 Teardown phase
duration:
0.0001404210925102234outcome:
passed -
✅ Test 340
params: value="", expected=0📌 Runtime Parameters
params: value: None expected: 0 id: -0📌 Setup phase
duration:
0.0002173888497054577outcome:
passed📌 Call phase
duration:
0.00013213325291872025outcome:
passed📌 Teardown phase
duration:
0.00013598427176475525outcome:
passed -
✅ Test 341
params: value="this is a phrase", expected=16📌 Runtime Parameters
params: value: this is a phrase expected: 16 id: this is a phrase-16📌 Setup phase
duration:
0.00022290367633104324outcome:
passed📌 Call phase
duration:
0.00013307016342878342outcome:
passed📌 Teardown phase
duration:
0.0001343800686299801outcome:
passed
↳ Function: test_maxstrlen
-
✅ Test 342
params: seq=[1, true, 3.1415], expected=6📌 Runtime Parameters
params: seq: - 1 - True - 3.1415 expected: 6 id: seq0-6📌 Setup phase
duration:
0.00023898622021079063outcome:
passed📌 Call phase
duration:
0.00015053199604153633outcome:
passed📌 Teardown phase
duration:
0.00013778312131762505outcome:
passed -
✅ Test 343
params: seq=["aa", "bbb", "c"], expected=3📌 Runtime Parameters
params: seq: - aa - bbb - c expected: 3 id: seq1-3📌 Setup phase
duration:
0.00021877000108361244outcome:
passed📌 Call phase
duration:
0.00015778234228491783outcome:
passed📌 Teardown phase
duration:
0.0001384778879582882outcome:
passed -
✅ Test 344
params: seq=1, 2], [], [1, 2, 3, expected=9📌 Runtime Parameters
params: seq: - - 1 - 2 - (vide) - - 1 - 2 - 3 expected: 9 id: seq2-9📌 Setup phase
duration:
0.00023340806365013123outcome:
passed📌 Call phase
duration:
0.0001427019014954567outcome:
passed📌 Teardown phase
duration:
0.00014369701966643333outcome:
passed -
✅ Test 345
params: seq=[{"a": 1}, {}, {"a": 1, "b": 2}], expected=16📌 Runtime Parameters
params: seq: - a: 1 - (vide) - a: 1 b: 2 expected: 16 id: seq3-16📌 Setup phase
duration:
0.00021795229986310005outcome:
passed📌 Call phase
duration:
0.00014910707250237465outcome:
passed📌 Teardown phase
duration:
0.00014725001528859138outcome:
passed -
✅ Test 346
params: seq=[null, false, 12345], expected=5📌 Runtime Parameters
params: seq: - (vide) - (vide) - 12345 expected: 5 id: seq4-5📌 Setup phase
duration:
0.0002157827839255333outcome:
passed📌 Call phase
duration:
0.00014184974133968353outcome:
passed📌 Teardown phase
duration:
0.00014057103544473648outcome:
passed
↳ Function: test_transpose_matrix
-
✅ Test 347
params: data=1, 2], [3, 4, expected=1, 3], [2, 4📌 Runtime Parameters
params: data: - - 1 - 2 - - 3 - 4 expected: - - 1 - 3 - - 2 - 4 id: data0-expected0📌 Setup phase
duration:
0.00021392526105046272outcome:
passed📌 Call phase
duration:
0.0001632021740078926outcome:
passed📌 Teardown phase
duration:
0.0001403801143169403outcome:
passed -
✅ Test 348
params: data="a", "b"], ["c", "d", expected="a", "c"], ["b", "d"📌 Runtime Parameters
params: data: - - a - b - - c - d expected: - - a - c - - b - d id: data1-expected1📌 Setup phase
duration:
0.00021902518346905708outcome:
passed📌 Call phase
duration:
0.00014517875388264656outcome:
passed📌 Teardown phase
duration:
0.00013928301632404327outcome:
passed -
✅ Test 349
params: data={"x": 1}, {"y": 2}], [{"x": 3}, {"y": 4}, expected={"x": 1}, {"x": 3}], [{"y": 2}, {"y": 4}📌 Runtime Parameters
params: data: - - x: 1 - y: 2 - - x: 3 - y: 4 expected: - - x: 1 - x: 3 - - y: 2 - y: 4 id: data2-expected2📌 Setup phase
duration:
0.0002129548229277134outcome:
passed📌 Call phase
duration:
0.00013339100405573845outcome:
passed📌 Teardown phase
duration:
0.0001429365947842598outcome:
passed
↳ Function: test_prepend
-
✅ Test 350
params: initial=[1, 2, 3], prepend=1, expected=[1, 2, 3]📌 Runtime Parameters
params: initial: - 1 - 2 - 3 prepend: 1 expected: - 1 - 2 - 3 id: initial0-1-expected0📌 Setup phase
duration:
0.0002951589412987232outcome:
passed📌 Call phase
duration:
0.00013832608237862587outcome:
passed📌 Teardown phase
duration:
0.00014785723760724068outcome:
passed -
✅ Test 351
params: initial=["a", "b", "c"], prepend="a", expected=["a", "b", "c"]📌 Runtime Parameters
params: initial: - a - b - c prepend: a expected: - a - b - c id: initial1-a-expected1📌 Setup phase
duration:
0.0002771066501736641outcome:
passed📌 Call phase
duration:
0.00013821618631482124outcome:
passed📌 Teardown phase
duration:
0.00014907307922840118outcome:
passed -
✅ Test 352
params: initial=[{"a": 1}, {"b": 2}], prepend={"a": 1}, expected=[{"a": 1}, {"b": 2}]📌 Runtime Parameters
params: initial: - a: 1 - b: 2 prepend: a: 1 expected: - a: 1 - b: 2 id: initial2-prepend2-expected2📌 Setup phase
duration:
0.00025209318846464157outcome:
passed📌 Call phase
duration:
0.0001325211487710476outcome:
passed📌 Teardown phase
duration:
0.0001534302718937397outcome:
passed -
✅ Test 353
params: initial=1], [2], [3, prepend=[1], expected=1], [2], [3📌 Runtime Parameters
params: initial: - - 1 - - 2 - - 3 prepend: - 1 expected: - - 1 - - 2 - - 3 id: initial3-prepend3-expected3📌 Setup phase
duration:
0.00027669500559568405outcome:
passed📌 Call phase
duration:
0.0001365290954709053outcome:
passed📌 Teardown phase
duration:
0.00016071368008852005outcome:
passed
↳ Function: test_fmt_table_line
-
✅ Test 354
params: entries=["a", "bbb"], widths=[3, 5], expected=" a bbb"📌 Runtime Parameters
params: entries: - a - bbb widths: - 3 - 5 expected: a bbb id: entries0-widths0- a bbb📌 Setup phase
duration:
0.0002719610929489136outcome:
passed📌 Call phase
duration:
0.00014662137255072594outcome:
passed📌 Teardown phase
duration:
0.0001531536690890789outcome:
passed -
✅ Test 355
params: entries=[1, 2], widths=[2, 2], expected=" 1 2"📌 Runtime Parameters
params: entries: - 1 - 2 widths: - 2 - 2 expected: 1 2 id: entries1-widths1- 1 2📌 Setup phase
duration:
0.00026557501405477524outcome:
passed📌 Call phase
duration:
0.00014191260561347008outcome:
passed📌 Teardown phase
duration:
0.00015796301886439323outcome:
passed -
✅ Test 356
params: entries=["long", "val"], widths=[6, 4], expected=" long val"📌 Runtime Parameters
params: entries: - long - val widths: - 6 - 4 expected: long val id: entries2-widths2- long val📌 Setup phase
duration:
0.0003085820935666561outcome:
passed📌 Call phase
duration:
0.00021109497174620628outcome:
passed📌 Teardown phase
duration:
0.0001566787250339985outcome:
passed -
✅ Test 357
params: entries=[true, false], widths=[5, 6], expected=" True False"📌 Runtime Parameters
params: entries: - True - (vide) widths: - 5 - 6 expected: True False id: entries3-widths3- True False📌 Setup phase
duration:
0.00026909587904810905outcome:
passed📌 Call phase
duration:
0.00014312006533145905outcome:
passed📌 Teardown phase
duration:
0.00018067890778183937outcome:
passed -
✅ Test 358
params: entries=[123, 4567], widths=[5, 5], expected=" 123 4567"📌 Runtime Parameters
params: entries: - 123 - 4567 widths: - 5 - 5 expected: 123 4567 id: entries4-widths4- 123 4567📌 Setup phase
duration:
0.00027151312679052353outcome:
passed📌 Call phase
duration:
0.0001454693265259266outcome:
passed📌 Teardown phase
duration:
0.00016367807984352112outcome:
passed -
✅ Test 359
params: entries=["text with space", "end"], widths=[16, 5], expected=" text with space end"📌 Runtime Parameters
params: entries: - text with space - end widths: - 16 - 5 expected: text with space end id: entries5-widths5- text with space end📌 Setup phase
duration:
0.00026899902150034904outcome:
passed📌 Call phase
duration:
0.0001557166688144207outcome:
passed📌 Teardown phase
duration:
0.00015924684703350067outcome:
passed -
✅ Test 360
params: entries=[{"a": 1}, {"b": 2}], widths=[10, 10], expected=" {'a': 1} {'b': 2}"📌 Runtime Parameters
params: entries: - a: 1 - b: 2 widths: - 10 - 10 expected: {'a': 1} {'b': 2} id: entries6-widths6- {'a': 1} {'b': 2}📌 Setup phase
duration:
0.0002636830322444439outcome:
passed📌 Call phase
duration:
0.00014379341155290604outcome:
passed📌 Teardown phase
duration:
0.0001531350426375866outcome:
passed -
✅ Test 361
params: entries=1, 2], [3, 4, widths=[10, 10], expected=" [1, 2] [3, 4]"📌 Runtime Parameters
params: entries: - - 1 - 2 - - 3 - 4 widths: - 10 - 10 expected: [1, 2] [3, 4] id: entries7-widths7- [1, 2] [3, 4]📌 Setup phase
duration:
0.00028374092653393745outcome:
passed📌 Call phase
duration:
0.00014667119830846786outcome:
passed📌 Teardown phase
duration:
0.0001512886956334114outcome:
passed
↳ Function: test_fmt_label_sep
-
✅ Test 362
params: widths=[3, 4], line="-", expected="--- ----"📌 Runtime Parameters
params: widths: - 3 - 4 line: - expected: --- ---- id: widths0------ ----📌 Setup phase
duration:
0.00027660373598337173outcome:
passed📌 Call phase
duration:
0.0001437612809240818outcome:
passed📌 Teardown phase
duration:
0.00017001107335090637outcome:
passed -
✅ Test 363
params: widths=[2, 3], line="=", expected="== ==="📌 Runtime Parameters
params: widths: - 2 - 3 line: = expected: == === id: widths1-=-== ===📌 Setup phase
duration:
0.00027088774368166924outcome:
passed📌 Call phase
duration:
0.00014157872647047043outcome:
passed📌 Teardown phase
duration:
0.0001537790521979332outcome:
passed -
✅ Test 364
params: widths=[5, 2], line="*", expected="***** **"📌 Runtime Parameters
params: widths: - 5 - 2 line: * expected: ***** ** id: widths2-*-***** **📌 Setup phase
duration:
0.00025749485939741135outcome:
passed📌 Call phase
duration:
0.00015502795577049255outcome:
passed📌 Teardown phase
duration:
0.00015407707542181015outcome:
passed
↳ Function: test_printable_dict_with_header
-
✅ Test 365
params: d={"medium": true, "very_long_key": 3.14, "x": 1}, header="HeaderTest", expected_lines=["HeaderTest:", "-----------", "medium: True", "very_long_key: 3.14", "x: 1", ""]📌 Runtime Parameters
params: d: medium: True very_long_key: 3.14 x: 1 header: HeaderTest expected_lines: - HeaderTest: - ----------- - medium: True - very_long_key: 3.14 - x: 1 - (vide) id: d0-HeaderTest-expected_lines0📌 Setup phase
duration:
0.0002592559903860092outcome:
passed📌 Call phase
duration:
0.0002152048982679844outcome:
passed📌 Teardown phase
duration:
0.00016922364011406898outcome:
passed
↳ Function: test_printable_dict_of_dicts
-
✅ Test 366
📌 Setup phase
duration:
0.00011908076703548431outcome:
passed📌 Call phase
duration:
0.0002470030449330807outcome:
passed📌 Teardown phase
duration:
0.00010075094178318977outcome:
passed
↳ Function: test_printable_table
-
✅ Test 367
params: data="X1", true, 0.1234, {"meta": "ok"}], ["AnotherSample", false, 98765.4321, {"meta": [1, 2, 3]}], ["Z", null, 0.0, {"meta": {"nested_key": 42}}, labels=["ID", "✓ Success?", "SuperPrecisionValue", "Result Metadata"], expected="A: ID\nB: ✓ Success?\nC: SuperPrecisionValue\nD: Result Metadata\n\n# A B C D\n- ------------- ----- ---------- ----------------------------\n0 X1 True 0.1234 {'meta': 'ok'}\n1 AnotherSample False 98765.4321 {'meta': [1, 2, 3]}\n2 Z None 0.0 {'meta': {'nested_key': 42}}"📌 Runtime Parameters
params: data: - - X1 - True - 0.1234 - meta: ok - - AnotherSample - (vide) - 98765.4321 - meta: - 1 - 2 - 3 - - Z - (vide) - (vide) - meta: nested_key: 42 labels: - ID - ✓ Success? - SuperPrecisionValue - Result Metadata expected: A: ID B: ✓ Success? C: SuperPrecisionValue D: Result Metadata # A B C D - ------------- ----- ---------- ---------------------------- 0 X1 True 0.1234 {'meta': 'ok'} 1 AnotherSample False 98765.4321 {'meta': [1, 2, 3]} 2 Z None 0.0 {'meta': {'nested_key': 42}} id: data0-labels0-A: ID\nB: \u2713 Success?\nC: SuperPrecisionValue\nD: Result Metadata\n\n# A B C D\n- ------------- ----- ---------- ----------------------------\n0 X1 True 0.1234 {'meta': 'ok'}\n1 AnotherSample False 98765.4321 {'meta': [1, 2, 3]}\n2 Z None 0.0 {'meta': {'nested_key': 42}}📌 Setup phase
duration:
0.00028635095804929733outcome:
passed📌 Call phase
duration:
0.00032959412783384323outcome:
passed📌 Teardown phase
duration:
0.0001809457316994667outcome:
passed
-
-
📄 test_utils_pv.py
↳ Function: test_put_with_progress_and_repr
-
✅ Test 368
params: value_new=25, value_before=0, show_bar=true, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: 25 value_before: 0 show_bar: True expected_color: [32m id: 25-0-True-\x1b[32m📌 Setup phase
duration:
0.00034556398168206215outcome:
passed📌 Call phase
duration:
0.4200870068743825outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911055.6354098 msecs: 635.4098320007324 relativeCreated: 10436.583042144775 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=0 new=0.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911055.6357706 msecs: 635.7705593109131 relativeCreated: 10436.943769454956 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=0.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=4 time=1123759055.635901636 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911055.6359365 msecs: 635.9364986419678 relativeCreated: 10437.10970878601 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 0.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911055.8375978 msecs: 837.5978469848633 relativeCreated: 10638.771057128906 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=0.0 new=25.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911055.838253 msecs: 838.2530212402344 relativeCreated: 10639.426231384277 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=25.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759055.838369861 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911055.8383934 msecs: 838.3934497833252 relativeCreated: 10639.566659927368 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0003019571304321289outcome:
passed -
✅ Test 369
params: value_new=50, value_before=25, show_bar=true, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: 50 value_before: 25 show_bar: True expected_color: [32m id: 50-25-True-\x1b[32m📌 Setup phase
duration:
0.0004194071516394615outcome:
passed📌 Call phase
duration:
0.4042693139053881outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 25.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911056.042263 msecs: 42.263031005859375 relativeCreated: 10843.436241149902 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=25.0 new=25.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911056.0425506 msecs: 42.55056381225586 relativeCreated: 10843.723773956299 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=25.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123759056.42792269 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911056.0428138 msecs: 42.813777923583984 relativeCreated: 10843.986988067627 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 25.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911056.2438734 msecs: 243.87335777282715 relativeCreated: 11045.04656791687 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=25.0 new=50.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911056.244451 msecs: 244.45104598999023 relativeCreated: 11045.624256134033 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=50.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759056.244543381 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911056.2445638 msecs: 244.56381797790527 relativeCreated: 11045.737028121948 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00029209814965724945outcome:
passed -
✅ Test 370
params: value_new=75, value_before=50, show_bar=false, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: 75 value_before: 50 show_bar: False expected_color: [32m id: 75-50-False-\x1b[32m📌 Setup phase
duration:
0.0004405258223414421outcome:
passed📌 Call phase
duration:
0.40384940011426806outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 50.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911056.4483457 msecs: 448.3456611633301 relativeCreated: 11249.518871307373 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=50.0 new=50.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911056.4487746 msecs: 448.7745761871338 relativeCreated: 11249.947786331177 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=50.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123759056.448913991 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911056.4489388 msecs: 448.93884658813477 relativeCreated: 11250.112056732178 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=50.0 new=75.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911056.6501255 msecs: 650.1255035400391 relativeCreated: 11451.298713684082 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759056.650305651 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911056.6503289 msecs: 650.3288745880127 relativeCreated: 11451.502084732056 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00027795927599072456outcome:
passed -
✅ Test 371
params: value_new=100, value_before=75, show_bar=true, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: 100 value_before: 75 show_bar: True expected_color: [32m id: 100-75-True-\x1b[32m📌 Setup phase
duration:
0.0004024137742817402outcome:
passed📌 Call phase
duration:
0.40429277205839753outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 75.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911056.8538814 msecs: 853.8813591003418 relativeCreated: 11655.054569244385 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=75.0 new=75.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911056.8541937 msecs: 854.1936874389648 relativeCreated: 11655.366897583008 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123759056.854459021 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911056.8544986 msecs: 854.4986248016357 relativeCreated: 11655.671834945679 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 75.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911057.0555842 msecs: 55.58419227600098 relativeCreated: 11856.757402420044 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=75.0 new=100.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911057.0561755 msecs: 56.17547035217285 relativeCreated: 11857.348680496216 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=100.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759057.56265591 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911057.0562956 msecs: 56.29563331604004 relativeCreated: 11857.468843460083 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.000421411357820034outcome:
passed -
✅ Test 372
params: value_new=150, value_before=100, show_bar=false, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: 150 value_before: 100 show_bar: False expected_color: [32m id: 150-100-False-\x1b[32m📌 Setup phase
duration:
0.0004080580547451973outcome:
passed📌 Call phase
duration:
0.4031620039604604outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 100.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911057.2603602 msecs: 260.3602409362793 relativeCreated: 12061.533451080322 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=100.0 new=100.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911057.2607574 msecs: 260.7574462890625 relativeCreated: 12061.930656433105 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=100.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123759057.260848985 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911057.2608876 msecs: 260.88762283325195 relativeCreated: 12062.060832977295 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=100.0 new=150.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911057.46164 msecs: 461.6398811340332 relativeCreated: 12262.813091278076 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=150.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759057.461868087 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911057.4618962 msecs: 461.8961811065674 relativeCreated: 12263.06939125061 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0002924385480582714outcome:
passed -
✅ Test 373
params: value_new=-50, value_before=150, show_bar=true, expected_color="\u001b[32m"📌 Runtime Parameters
params: value_new: -50 value_before: 150 show_bar: True expected_color: [32m id: -50-150-True-\x1b[32m📌 Setup phase
duration:
0.00040389271453022957outcome:
passed📌 Call phase
duration:
0.4038311531767249outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 150.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911057.665161 msecs: 665.1608943939209 relativeCreated: 12466.334104537964 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=150.0 new=150.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911057.6656365 msecs: 665.6365394592285 relativeCreated: 12466.809749603271 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=150.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123759057.665740929 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911057.6657646 msecs: 665.764570236206 relativeCreated: 12466.937780380249 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 150.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911057.8667393 msecs: 866.7392730712891 relativeCreated: 12667.912483215332 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=150.0 new=-50.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911057.8672612 msecs: 867.2611713409424 relativeCreated: 12668.434381484985 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=-50.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759057.867347891 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911057.8673673 msecs: 867.3672676086426 relativeCreated: 12668.540477752686 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0002857469953596592outcome:
passed
↳ Function: test_use_callback_context_manager
-
✅ Test 374
📌 Setup phase
duration:
0.00013593584299087524outcome:
passed📌 Call phase
duration:
0.8084542192518711outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value -50.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.0703776 msecs: 70.37758827209473 relativeCreated: 12871.550798416138 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=-50.0 new=0.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911058.070756 msecs: 70.7559585571289 relativeCreated: 12871.929168701172 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=0.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759058.70847826 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911058.0708735 msecs: 70.87349891662598 relativeCreated: 12872.046709060669 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 0.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.272078 msecs: 272.0780372619629 relativeCreated: 13073.251247406006 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=0.0 new=42.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911058.2726357 msecs: 272.63569831848145 relativeCreated: 13073.808908462524 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=42.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759058.272765918 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911058.2727883 msecs: 272.78828620910645 relativeCreated: 13073.96149635315 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 42.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.4740977 msecs: 474.09772872924805 relativeCreated: 13275.270938873291 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=42.0 new=24.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911058.474826 msecs: 474.8260974884033 relativeCreated: 13275.999307632446 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=24.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759058.474967375 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911058.4749935 msecs: 474.9934673309326 relativeCreated: 13276.166677474976 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 24.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.6763587 msecs: 676.358699798584 relativeCreated: 13477.531909942627 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.writeValue msg: VAL: ad1e3ebbd45d root old=24.0 new=75.0 args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 549 funcName: writeValue created: 1754911058.677067 msecs: 677.0670413970947 relativeCreated: 13478.240251541138 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123759058.677189373 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 175 funcName: setParam created: 1754911058.6772156 msecs: 677.215576171875 relativeCreated: 13478.388786315918 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00028831465169787407outcome:
passed
↳ Function: test_orig_repr_is_not_custom_repr
-
✅ Test 375
📌 Setup phase
duration:
0.00017385929822921753outcome:
passed📌 Call phase
duration:
0.0021367566660046577outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: VAL: Read value 75.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.8807049 msecs: 880.7048797607422 relativeCreated: 13681.878089904785 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 75.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.8810806 msecs: 881.0806274414062 relativeCreated: 13682.25383758545 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: VAL: Read value 75.0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911058.8816996 msecs: 881.6995620727539 relativeCreated: 13682.872772216797 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00015005376189947128outcome:
passed
-
-
📄 test_utils_pvpreload.py
↳ Function: test_file_age
-
✅ Test 376
params: age_seconds=30, expected="0:00:30"📌 Runtime Parameters
params: age_seconds: 30 expected: 0:00:30 id: 30-expected0📌 Setup phase
duration:
0.001012162771075964outcome:
passed📌 Call phase
duration:
0.20333539601415396outcome:
passedlog:
- name: passlib.utils.compat msg: loaded lazy attr 'BytesIO': <class '_io.BytesIO'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/utils/compat/__init__.py filename: __init__.py module: __init__ exc_info: None exc_text: None stack_info: None lineno: 449 funcName: __getattr__ created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.utils.compat msg: loaded lazy attr 'NativeStringIO': <class '_io.StringIO'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/utils/compat/__init__.py filename: __init__.py module: __init__ exc_info: None exc_text: None stack_info: None lineno: 449 funcName: __getattr__ created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.utils.compat msg: loaded lazy attr 'OrderedDict': <class 'collections.OrderedDict'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/utils/compat/__init__.py filename: __init__.py module: __init__ exc_info: None exc_text: None stack_info: None lineno: 449 funcName: __getattr__ created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.utils.compat msg: loaded lazy attr 'SafeConfigParser': <class 'configparser.ConfigParser'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/utils/compat/__init__.py filename: __init__.py module: __init__ exc_info: None exc_text: None stack_info: None lineno: 449 funcName: __getattr__ created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.utils.compat msg: loaded lazy attr 'UnicodeIO': <class '_io.StringIO'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/utils/compat/__init__.py filename: __init__.py module: __init__ exc_info: None exc_text: None stack_info: None lineno: 449 funcName: __getattr__ created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'apr_md5_crypt' handler: <class 'passlib.handlers.md5_crypt.apr_md5_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'argon2' handler: <class 'passlib.handlers.argon2.argon2'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'atlassian_pbkdf2_sha1' handler: <class 'passlib.handlers.pbkdf2.atlassian_pbkdf2_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'bcrypt' handler: <class 'passlib.handlers.bcrypt.bcrypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'bcrypt_sha256' handler: <class 'passlib.handlers.bcrypt.bcrypt_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'bigcrypt' handler: <class 'passlib.handlers.des_crypt.bigcrypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'bsd_nthash' handler: PrefixWrapper('bsd_nthash', <class 'passlib.handlers.windows.nthash'>, prefix='$3$$') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'bsdi_crypt' handler: <class 'passlib.handlers.des_crypt.bsdi_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'cisco_asa' handler: <class 'passlib.handlers.cisco.cisco_asa'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'cisco_pix' handler: <class 'passlib.handlers.cisco.cisco_pix'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'cisco_type7' handler: <class 'passlib.handlers.cisco.cisco_type7'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'crypt16' handler: <class 'passlib.handlers.des_crypt.crypt16'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'cta_pbkdf2_sha1' handler: <class 'passlib.handlers.pbkdf2.cta_pbkdf2_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'des_crypt' handler: <class 'passlib.handlers.des_crypt.des_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'pbkdf2_sha1' handler: <class 'passlib.handlers.pbkdf2.pbkdf2_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'pbkdf2_sha256' handler: <class 'passlib.handlers.pbkdf2.pbkdf2_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_argon2' handler: PrefixWrapper('django_argon2', <class 'passlib.handlers.argon2.<customized argon2 hasher>'>, prefix='argon2') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_bcrypt' handler: PrefixWrapper('django_bcrypt', <class 'passlib.handlers.bcrypt.bcrypt'>, prefix='bcrypt$') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_bcrypt_sha256' handler: <class 'passlib.handlers.django.django_bcrypt_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_des_crypt' handler: <class 'passlib.handlers.django.django_des_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_disabled' handler: <class 'passlib.handlers.django.django_disabled'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_pbkdf2_sha1' handler: <class 'passlib.handlers.django.django_pbkdf2_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_pbkdf2_sha256' handler: <class 'passlib.handlers.django.django_pbkdf2_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_salted_md5' handler: <class 'passlib.handlers.django.django_salted_md5'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'django_salted_sha1' handler: <class 'passlib.handlers.django.django_salted_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'dlitz_pbkdf2_sha1' handler: <class 'passlib.handlers.pbkdf2.dlitz_pbkdf2_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'fshp' handler: <class 'passlib.handlers.fshp.fshp'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'grub_pbkdf2_sha512' handler: <class 'passlib.handlers.pbkdf2.grub_pbkdf2_sha512'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'hex_md4' handler: <class 'passlib.handlers.digests.hex_md4'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'hex_md5' handler: <class 'passlib.handlers.digests.hex_md5'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'hex_sha1' handler: <class 'passlib.handlers.digests.hex_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'hex_sha256' handler: <class 'passlib.handlers.digests.hex_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'hex_sha512' handler: <class 'passlib.handlers.digests.hex_sha512'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'htdigest' handler: <class 'passlib.handlers.digests.htdigest'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_bcrypt' handler: PrefixWrapper('ldap_bcrypt', 'bcrypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_bsdi_crypt' handler: PrefixWrapper('ldap_bsdi_crypt', 'bsdi_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_des_crypt' handler: PrefixWrapper('ldap_des_crypt', 'des_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_hex_md5' handler: PrefixWrapper('ldap_hex_md5', 'hex_md5', prefix='{MD5}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_hex_sha1' handler: PrefixWrapper('ldap_hex_sha1', 'hex_sha1', prefix='{SHA}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_md5' handler: <class 'passlib.handlers.ldap_digests.ldap_md5'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'md5_crypt' handler: <class 'passlib.handlers.md5_crypt.md5_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_md5_crypt' handler: PrefixWrapper('ldap_md5_crypt', 'md5_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_pbkdf2_sha1' handler: PrefixWrapper('ldap_pbkdf2_sha1', <class 'passlib.handlers.pbkdf2.pbkdf2_sha1'>, prefix='{PBKDF2}', orig_prefix='$pbkdf2$') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_pbkdf2_sha256' handler: PrefixWrapper('ldap_pbkdf2_sha256', <class 'passlib.handlers.pbkdf2.pbkdf2_sha256'>, prefix='{PBKDF2-SHA256}', orig_prefix='$pbkdf2-sha256$') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_pbkdf2_sha512' handler: PrefixWrapper('ldap_pbkdf2_sha512', <class 'passlib.handlers.pbkdf2.pbkdf2_sha512'>, prefix='{PBKDF2-SHA512}', orig_prefix='$pbkdf2-sha512$') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_plaintext' handler: <class 'passlib.handlers.ldap_digests.ldap_plaintext'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_salted_md5' handler: <class 'passlib.handlers.ldap_digests.ldap_salted_md5'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_salted_sha1' handler: <class 'passlib.handlers.ldap_digests.ldap_salted_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_salted_sha256' handler: <class 'passlib.handlers.ldap_digests.ldap_salted_sha256'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_salted_sha512' handler: <class 'passlib.handlers.ldap_digests.ldap_salted_sha512'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_sha1' handler: <class 'passlib.handlers.ldap_digests.ldap_sha1'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'sha1_crypt' handler: <class 'passlib.handlers.sha1_crypt.sha1_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_sha1_crypt' handler: PrefixWrapper('ldap_sha1_crypt', 'sha1_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_sha256_crypt' handler: PrefixWrapper('ldap_sha256_crypt', 'sha256_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'sha512_crypt' handler: <class 'passlib.handlers.sha2_crypt.sha512_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'ldap_sha512_crypt' handler: PrefixWrapper('ldap_sha512_crypt', 'sha512_crypt', prefix='{CRYPT}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'lmhash' handler: <class 'passlib.handlers.windows.lmhash'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'msdcc' handler: <class 'passlib.handlers.windows.msdcc'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'msdcc2' handler: <class 'passlib.handlers.windows.msdcc2'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'mssql2000' handler: <class 'passlib.handlers.mssql.mssql2000'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'mssql2005' handler: <class 'passlib.handlers.mssql.mssql2005'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'mysql323' handler: <class 'passlib.handlers.mysql.mysql323'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'mysql41' handler: <class 'passlib.handlers.mysql.mysql41'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'nthash' handler: <class 'passlib.handlers.windows.nthash'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'oracle10' handler: <class 'passlib.handlers.oracle.oracle10'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'oracle11' handler: <class 'passlib.handlers.oracle.oracle11'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'pbkdf2_sha512' handler: <class 'passlib.handlers.pbkdf2.pbkdf2_sha512'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'phpass' handler: <class 'passlib.handlers.phpass.phpass'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'plaintext' handler: <class 'passlib.handlers.misc.plaintext'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'postgres_md5' handler: <class 'passlib.handlers.postgres.postgres_md5'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'roundup_plaintext' handler: PrefixWrapper('roundup_plaintext', 'plaintext', prefix='{plaintext}') args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'scram' handler: <class 'passlib.handlers.scram.scram'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'scrypt' handler: <class 'passlib.handlers.scrypt.scrypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'sun_md5_crypt' handler: <class 'passlib.handlers.sun_md5_crypt.sun_md5_crypt'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'unix_disabled' handler: <class 'passlib.handlers.misc.unix_disabled'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: passlib.registry msg: registered 'unix_fallback' handler: <class 'passlib.handlers.misc.unix_fallback'> args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/passlib/registry.py filename: registry.py module: registry exc_info: None exc_text: None stack_info: None lineno: 296 funcName: register_crypt_handler created: 1754568000.0 msecs: 0.0 relativeCreated: -343045198.82678986 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0003983760252594948outcome:
passed -
✅ Test 377
params: age_seconds=300, expected="0:05:00"📌 Runtime Parameters
params: age_seconds: 300 expected: 0:05:00 id: 300-expected1📌 Setup phase
duration:
0.0008796332404017448outcome:
passed📌 Call phase
duration:
0.018368094228208065outcome:
passed📌 Teardown phase
duration:
0.00024293316528201103outcome:
passed -
✅ Test 378
params: age_seconds=3600, expected="1:00:00"📌 Runtime Parameters
params: age_seconds: 3600 expected: 1:00:00 id: 3600-expected2📌 Setup phase
duration:
0.0007495409809052944outcome:
passed📌 Call phase
duration:
0.01685446687042713outcome:
passed📌 Teardown phase
duration:
0.00027957186102867126outcome:
passed -
✅ Test 379
params: age_seconds=86400, expected="1 day, 0:00:00"📌 Runtime Parameters
params: age_seconds: 86400 expected: 1 day, 0:00:00 id: 86400-expected3📌 Setup phase
duration:
0.0007304730825126171outcome:
passed📌 Call phase
duration:
0.016588701866567135outcome:
passed📌 Teardown phase
duration:
0.00024285586550831795outcome:
passed -
✅ Test 380
params: age_seconds=1209600, expected="14 days, 0:00:00"📌 Runtime Parameters
params: age_seconds: 1209600 expected: 14 days, 0:00:00 id: 1209600-expected4📌 Setup phase
duration:
0.0007388172671198845outcome:
passed📌 Call phase
duration:
0.01665531238541007outcome:
passed📌 Teardown phase
duration:
0.000270904041826725outcome:
passed
↳ Function: test_preload_valid_file
-
✅ Test 381
📌 Setup phase
duration:
0.0007176827639341354outcome:
passed📌 Call phase
duration:
0.001502774190157652outcome:
passedlog:
- name: logzero_default msg: PV preload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 29 funcName: preload created: 1754911059.1667445 msecs: 166.74447059631348 relativeCreated: 13967.917680740356 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV preload done args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 41 funcName: preload created: 1754911059.1671362 msecs: 167.13619232177734 relativeCreated: 13968.30940246582 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.000250290147960186outcome:
passed
↳ Function: test_preload_old_file
-
✅ Test 382
📌 Setup phase
duration:
0.0005984380841255188outcome:
passed📌 Call phase
duration:
0.0006951731629669666outcome:
passedlog:
- name: logzero_default msg: PV preload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 29 funcName: preload created: 1754911059.169505 msecs: 169.50488090515137 relativeCreated: 13970.678091049194 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV preload file too old args: None levelname: INFO levelno: 20 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 33 funcName: preload created: 1754911059.1695976 msecs: 169.59762573242188 relativeCreated: 13970.770835876465 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00024294201284646988outcome:
passed
↳ Function: test_preload_corrupt_file
-
✅ Test 383
📌 Setup phase
duration:
0.0005757356993854046outcome:
passed📌 Call phase
duration:
0.0006978912279009819outcome:
passedlog:
- name: logzero_default msg: PV preload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 29 funcName: preload created: 1754911059.1716595 msecs: 171.6594696044922 relativeCreated: 13972.832679748535 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV preload file not loaded due to: UnpicklingError: invalid load key, 'n'. args: None levelname: WARNING levelno: 30 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 38 funcName: preload created: 1754911059.171792 msecs: 171.79203033447266 relativeCreated: 13972.965240478516 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.00021781492978334427outcome:
passed
↳ Function: test_offload
-
✅ Test 384
📌 Setup phase
duration:
0.000562841072678566outcome:
passed📌 Call phase
duration:
0.021293885074555874outcome:
passedlog:
- name: pcaspy.SimplePV.getValue msg: PV1: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.1829238 msecs: 182.9237937927246 relativeCreated: 13984.097003936768 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: PV2: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.1831925 msecs: 183.19249153137207 relativeCreated: 13984.365701675415 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload delay (0.01 seconds) args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 44 funcName: offload created: 1754911059.1838295 msecs: 183.82954597473145 relativeCreated: 13985.002756118774 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: PV3: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.1839437 msecs: 183.9437484741211 relativeCreated: 13985.116958618164 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: PV4: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.1840565 msecs: 184.05652046203613 relativeCreated: 13985.22973060608 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 46 funcName: offload created: 1754911059.1939952 msecs: 193.99523735046387 relativeCreated: 13995.168447494507 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV offload done args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 54 funcName: offload created: 1754911059.1943822 msecs: 194.3821907043457 relativeCreated: 13995.555400848389 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.000265748705714941outcome:
passed
↳ Function: test_offload_exception
-
✅ Test 385
📌 Setup phase
duration:
0.0006254049949347973outcome:
passed📌 Call phase
duration:
0.011180491652339697outcome:
passedlog:
- name: logzero_default msg: PV offload delay (0.01 seconds) args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 44 funcName: offload created: 1754911059.196811 msecs: 196.81096076965332 relativeCreated: 13997.984170913696 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV offload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 46 funcName: offload created: 1754911059.2069902 msecs: 206.99024200439453 relativeCreated: 14008.163452148438 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516 - name: logzero_default msg: PV preload file not saved due to: IsADirectoryError: [Errno 21] Is a directory: '/tmp/pytest-of-root/pytest-0/test_offload_exception0/invalid_dir' args: None levelname: WARNING levelno: 30 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 52 funcName: offload created: 1754911059.2073166 msecs: 207.31663703918457 relativeCreated: 14008.489847183228 thread: 139772538365440 threadName: MainThread processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0002726977691054344outcome:
passed
↳ Function: test_pvpreload_end_to_end
-
✅ Test 386
📌 Setup phase
duration:
0.0007652267813682556outcome:
passed📌 Call phase
duration:
0.4302986632101238outcome:
passedlog:
- name: logzero_default msg: PV preload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 29 funcName: preload created: 1754911059.2101014 msecs: 210.10136604309082 relativeCreated: 14011.274576187134 thread: 139771065833152 threadName: Thread-5 processName: MainProcess process: 1516 - name: logzero_default msg: PV preload file not loaded due to: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pytest-of-root/pytest-0/test_pvpreload_end_to_end0/end2end.pkl' args: None levelname: WARNING levelno: 30 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 38 funcName: preload created: 1754911059.2104697 msecs: 210.46972274780273 relativeCreated: 14011.642932891846 thread: 139771065833152 threadName: Thread-5 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload delay (0.05 seconds) args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 44 funcName: offload created: 1754911059.2105918 msecs: 210.59179306030273 relativeCreated: 14011.765003204346 thread: 139771065833152 threadName: Thread-5 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: PV5: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.2369862 msecs: 236.9861602783203 relativeCreated: 14038.159370422363 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 46 funcName: offload created: 1754911059.2607746 msecs: 260.7746124267578 relativeCreated: 14061.9478225708 thread: 139771065833152 threadName: Thread-5 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload done args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 54 funcName: offload created: 1754911059.2612839 msecs: 261.28387451171875 relativeCreated: 14062.457084655762 thread: 139771065833152 threadName: Thread-5 processName: MainProcess process: 1516 - name: logzero_default msg: PV preload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 29 funcName: preload created: 1754911059.4386282 msecs: 438.6281967163086 relativeCreated: 14239.801406860352 thread: 139771065833152 threadName: Thread-6 processName: MainProcess process: 1516 - name: logzero_default msg: PV preload done args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 41 funcName: preload created: 1754911059.4391258 msecs: 439.12577629089355 relativeCreated: 14240.298986434937 thread: 139771065833152 threadName: Thread-6 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload delay (0.05 seconds) args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 44 funcName: offload created: 1754911059.4392092 msecs: 439.2092227935791 relativeCreated: 14240.382432937622 thread: 139771065833152 threadName: Thread-6 processName: MainProcess process: 1516 - name: pcaspy.SimplePV.getValue msg: PV6: Read value 0 args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pcaspy/driver.py filename: driver.py module: driver exc_info: None exc_text: None stack_info: None lineno: 649 funcName: getValue created: 1754911059.4532747 msecs: 453.2747268676758 relativeCreated: 14254.447937011719 thread: 139771028264640 threadName: Thread-1 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload start args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 46 funcName: offload created: 1754911059.4893909 msecs: 489.3908500671387 relativeCreated: 14290.564060211182 thread: 139771065833152 threadName: Thread-6 processName: MainProcess process: 1516 - name: logzero_default msg: PV offload done args: None levelname: DEBUG levelno: 10 pathname: /workspace/tligui_y/slic/slic/utils/pvpreload.py filename: pvpreload.py module: pvpreload exc_info: None exc_text: None stack_info: None lineno: 54 funcName: offload created: 1754911059.490129 msecs: 490.1289939880371 relativeCreated: 14291.30220413208 thread: 139771065833152 threadName: Thread-6 processName: MainProcess process: 1516📌 Teardown phase
duration:
0.0004971837624907494outcome:
passed
-
-
📄 test_utils_rangebar.py
↳ Function: test_full_progress_bar
-
✅ Test 387
📌 Setup phase
duration:
0.000490495003759861outcome:
passed📌 Call phase
duration:
0.00031292811036109924outcome:
passed📌 Teardown phase
duration:
0.00020999973639845848outcome:
passed
↳ Function: test_half_progress_bar
-
✅ Test 388
📌 Setup phase
duration:
0.00031473906710743904outcome:
passed📌 Call phase
duration:
0.00022758590057492256outcome:
passed📌 Teardown phase
duration:
0.00016461312770843506outcome:
passed
↳ Function: test_zero_progress_bar
-
✅ Test 389
📌 Setup phase
duration:
0.00027990899980068207outcome:
passed📌 Call phase
duration:
0.0001917569898068905outcome:
passed📌 Teardown phase
duration:
0.00016706204041838646outcome:
passed
↳ Function: test_overflow_bar
-
✅ Test 390
📌 Setup phase
duration:
0.00035796407610177994outcome:
passed📌 Call phase
duration:
0.00022678077220916748outcome:
passed📌 Teardown phase
duration:
0.00018595997244119644outcome:
passed
↳ Function: test_underflow_bar
-
✅ Test 391
📌 Setup phase
duration:
0.00027689291164278984outcome:
passed📌 Call phase
duration:
0.00018700258806347847outcome:
passed📌 Teardown phase
duration:
0.00015767943114042282outcome:
passed
↳ Function: test_repr
-
✅ Test 392
📌 Setup phase
duration:
0.00010403292253613472outcome:
passed📌 Call phase
duration:
0.00014904886484146118outcome:
passed📌 Teardown phase
duration:
0.0001005721278488636outcome:
passed
↳ Function: test_each_value_separately
-
✅ Test 393
params: value=0, expected_bar_part=" "📌 Runtime Parameters
params: value: 0 expected_bar_part: id: 0-📌 Setup phase
duration:
0.0003710496239364147outcome:
passed📌 Call phase
duration:
0.0001989533193409443outcome:
passed📌 Teardown phase
duration:
0.00020755082368850708outcome:
passed -
✅ Test 394
params: value=10, expected_bar_part="█ "📌 Runtime Parameters
params: value: 10 expected_bar_part: █ id: 10-\u2588📌 Setup phase
duration:
0.00037919776514172554outcome:
passed📌 Call phase
duration:
0.00019655795767903328outcome:
passed📌 Teardown phase
duration:
0.0002000848762691021outcome:
passed -
✅ Test 395
params: value=25, expected_bar_part="██▌ "📌 Runtime Parameters
params: value: 25 expected_bar_part: ██▌ id: 25-\u2588\u2588\u258c📌 Setup phase
duration:
0.0003685685805976391outcome:
passed📌 Call phase
duration:
0.00020241597667336464outcome:
passed📌 Teardown phase
duration:
0.00018999911844730377outcome:
passed -
✅ Test 396
params: value=27, expected_bar_part="██▊ "📌 Runtime Parameters
params: value: 27 expected_bar_part: ██▊ id: 27-\u2588\u2588\u258a📌 Setup phase
duration:
0.0004152171313762665outcome:
passed📌 Call phase
duration:
0.0001992671750485897outcome:
passed📌 Teardown phase
duration:
0.00020049512386322021outcome:
passed -
✅ Test 397
params: value=49, expected_bar_part="████▉ "📌 Runtime Parameters
params: value: 49 expected_bar_part: ████▉ id: 49-\u2588\u2588\u2588\u2588\u2589📌 Setup phase
duration:
0.0003526657819747925outcome:
passed📌 Call phase
duration:
0.0001927381381392479outcome:
passed📌 Teardown phase
duration:
0.00021129613742232323outcome:
passed -
✅ Test 398
params: value=50, expected_bar_part="█████ "📌 Runtime Parameters
params: value: 50 expected_bar_part: █████ id: 50-\u2588\u2588\u2588\u2588\u2588📌 Setup phase
duration:
0.00035496195778250694outcome:
passed📌 Call phase
duration:
0.00019047502428293228outcome:
passed📌 Teardown phase
duration:
0.000196108128875494outcome:
passed -
✅ Test 399
params: value=51, expected_bar_part="█████▏ "📌 Runtime Parameters
params: value: 51 expected_bar_part: █████▏ id: 51-\u2588\u2588\u2588\u2588\u2588\u258f📌 Setup phase
duration:
0.00037476327270269394outcome:
passed📌 Call phase
duration:
0.0001906394027173519outcome:
passed📌 Teardown phase
duration:
0.00020399410277605057outcome:
passed -
✅ Test 400
params: value=73, expected_bar_part="███████▎ "📌 Runtime Parameters
params: value: 73 expected_bar_part: ███████▎ id: 73-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258e📌 Setup phase
duration:
0.0003549298271536827outcome:
passed📌 Call phase
duration:
0.00019772816449403763outcome:
passed📌 Teardown phase
duration:
0.00019137002527713776outcome:
passed -
✅ Test 401
params: value=75, expected_bar_part="███████▌ "📌 Runtime Parameters
params: value: 75 expected_bar_part: ███████▌ id: 75-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c📌 Setup phase
duration:
0.00037007033824920654outcome:
passed📌 Call phase
duration:
0.00019055604934692383outcome:
passed📌 Teardown phase
duration:
0.00019465293735265732outcome:
passed -
✅ Test 402
params: value=90, expected_bar_part="█████████ "📌 Runtime Parameters
params: value: 90 expected_bar_part: █████████ id: 90-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588📌 Setup phase
duration:
0.00036325491964817047outcome:
passed📌 Call phase
duration:
0.00018733367323875427outcome:
passed📌 Teardown phase
duration:
0.00020741624757647514outcome:
passed -
✅ Test 403
params: value=100, expected_bar_part="██████████"📌 Runtime Parameters
params: value: 100 expected_bar_part: ██████████ id: 100-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588📌 Setup phase
duration:
0.0003602546639740467outcome:
passed📌 Call phase
duration:
0.00019851187244057655outcome:
passed📌 Teardown phase
duration:
0.00018768524751067162outcome:
passed
-
-
📄 test_utils_readable.py
↳ Function: test_readable_seconds
-
✅ Test 404
params: seconds=59.4, expected="59 seconds"📌 Runtime Parameters
params: seconds: 59.4 expected: 59 seconds id: 59.4-59 seconds📌 Setup phase
duration:
0.0002746880054473877outcome:
passed📌 Call phase
duration:
0.00016436167061328888outcome:
passed📌 Teardown phase
duration:
0.00014249887317419052outcome:
passed -
✅ Test 405
params: seconds=59.9, expected="60 seconds"📌 Runtime Parameters
params: seconds: 59.9 expected: 60 seconds id: 59.9-60 seconds📌 Setup phase
duration:
0.0002721617929637432outcome:
passed📌 Call phase
duration:
0.00015220511704683304outcome:
passed📌 Teardown phase
duration:
0.00015778141096234322outcome:
passed -
✅ Test 406
params: seconds=119.9, expected="120 seconds"📌 Runtime Parameters
params: seconds: 119.9 expected: 120 seconds id: 119.9-120 seconds📌 Setup phase
duration:
0.00021937768906354904outcome:
passed📌 Call phase
duration:
0.00014182506129145622outcome:
passed📌 Teardown phase
duration:
0.00014038663357496262outcome:
passed -
✅ Test 407
params: seconds=120.1, expected="2 minutes"📌 Runtime Parameters
params: seconds: 120.1 expected: 2 minutes id: 120.1-2 minutes📌 Setup phase
duration:
0.0002380148507654667outcome:
passed📌 Call phase
duration:
0.00016668066382408142outcome:
passed📌 Teardown phase
duration:
0.00018940214067697525outcome:
passed -
✅ Test 408
params: seconds=3599.9, expected="60 minutes"📌 Runtime Parameters
params: seconds: 3599.9 expected: 60 minutes id: 3599.9-60 minutes📌 Setup phase
duration:
0.000234152190387249outcome:
passed📌 Call phase
duration:
0.00015117879956960678outcome:
passed📌 Teardown phase
duration:
0.00013982458040118217outcome:
passed -
✅ Test 409
params: seconds=3600.1, expected="60 minutes"📌 Runtime Parameters
params: seconds: 3600.1 expected: 60 minutes id: 3600.1-60 minutes📌 Setup phase
duration:
0.0002290080301463604outcome:
passed📌 Call phase
duration:
0.00014727795496582985outcome:
passed📌 Teardown phase
duration:
0.00013768067583441734outcome:
passed -
✅ Test 410
params: seconds=7199.9, expected="120 minutes"📌 Runtime Parameters
params: seconds: 7199.9 expected: 120 minutes id: 7199.9-120 minutes📌 Setup phase
duration:
0.00022322684526443481outcome:
passed📌 Call phase
duration:
0.00013693282380700111outcome:
passed📌 Teardown phase
duration:
0.00013661803677678108outcome:
passed -
✅ Test 411
params: seconds=7200.1, expected="2 hours"📌 Runtime Parameters
params: seconds: 7200.1 expected: 2 hours id: 7200.1-2 hours📌 Setup phase
duration:
0.0002278462052345276outcome:
passed📌 Call phase
duration:
0.0001538582146167755outcome:
passed📌 Teardown phase
duration:
0.00013622688129544258outcome:
passed -
✅ Test 412
params: seconds=90.4, expected="90 seconds"📌 Runtime Parameters
params: seconds: 90.4 expected: 90 seconds id: 90.4-90 seconds📌 Setup phase
duration:
0.00020910799503326416outcome:
passed📌 Call phase
duration:
0.00013369694352149963outcome:
passed📌 Teardown phase
duration:
0.00014259200543165207outcome:
passed -
✅ Test 413
params: seconds=90.6, expected="91 seconds"📌 Runtime Parameters
params: seconds: 90.6 expected: 91 seconds id: 90.6-91 seconds📌 Setup phase
duration:
0.00032352982088923454outcome:
passed📌 Call phase
duration:
0.00015443097800016403outcome:
passed📌 Teardown phase
duration:
0.0001665176823735237outcome:
passed -
✅ Test 414
params: seconds=121.9, expected="2 minutes"📌 Runtime Parameters
params: seconds: 121.9 expected: 2 minutes id: 121.9-2 minutes📌 Setup phase
duration:
0.00022336188703775406outcome:
passed📌 Call phase
duration:
0.0001500900834798813outcome:
passed📌 Teardown phase
duration:
0.00014210492372512817outcome:
passed -
✅ Test 415
params: seconds=1296000.0, expected="2 weeks"📌 Runtime Parameters
params: seconds: 1296000.0 expected: 2 weeks id: 1296000.0-2 weeks📌 Setup phase
duration:
0.00022048968821763992outcome:
passed📌 Call phase
duration:
0.00015221396461129189outcome:
passed📌 Teardown phase
duration:
0.00013456586748361588outcome:
passed -
✅ Test 416
params: seconds=2592000.0, expected="4 weeks"📌 Runtime Parameters
params: seconds: 2592000.0 expected: 4 weeks id: 2592000.0-4 weeks📌 Setup phase
duration:
0.00022038398310542107outcome:
passed📌 Call phase
duration:
0.00014181528240442276outcome:
passed📌 Teardown phase
duration:
0.00013756565749645233outcome:
passed -
✅ Test 417
params: seconds=2800000.0, expected="5 weeks"📌 Runtime Parameters
params: seconds: 2800000.0 expected: 5 weeks id: 2800000.0-5 weeks📌 Setup phase
duration:
0.0002191220410168171outcome:
passed📌 Call phase
duration:
0.00014943676069378853outcome:
passed📌 Teardown phase
duration:
0.00013827113434672356outcome:
passed -
✅ Test 418
params: seconds=3888000.0, expected="6 weeks"📌 Runtime Parameters
params: seconds: 3888000.0 expected: 6 weeks id: 3888000.0-6 weeks📌 Setup phase
duration:
0.00022652419283986092outcome:
passed📌 Call phase
duration:
0.00014386791735887527outcome:
passed📌 Teardown phase
duration:
0.00014358200132846832outcome:
passed -
✅ Test 419
params: seconds=5097600.0, expected="8 weeks"📌 Runtime Parameters
params: seconds: 5097600.0 expected: 8 weeks id: 5097600.0-8 weeks📌 Setup phase
duration:
0.00024069705978035927outcome:
passed📌 Call phase
duration:
0.00014000991359353065outcome:
passed📌 Teardown phase
duration:
0.00013603782281279564outcome:
passed -
✅ Test 420
params: seconds=5184000.0, expected="9 weeks"📌 Runtime Parameters
params: seconds: 5184000.0 expected: 9 weeks id: 5184000.0-9 weeks📌 Setup phase
duration:
0.00022226665169000626outcome:
passed📌 Call phase
duration:
0.0001398199237883091outcome:
passed📌 Teardown phase
duration:
0.0001352829858660698outcome:
passed -
✅ Test 421
params: seconds=5270400.0, expected="2 months"📌 Runtime Parameters
params: seconds: 5270400.0 expected: 2 months id: 5270400.0-2 months📌 Setup phase
duration:
0.00021697208285331726outcome:
passed📌 Call phase
duration:
0.0002176119014620781outcome:
passed📌 Teardown phase
duration:
0.00017309235408902168outcome:
passed -
✅ Test 422
params: seconds=23328000.0, expected="9 months"📌 Runtime Parameters
params: seconds: 23328000.0 expected: 9 months id: 23328000.0-9 months📌 Setup phase
duration:
0.00022739777341485023outcome:
passed📌 Call phase
duration:
0.00014848029240965843outcome:
passed📌 Teardown phase
duration:
0.00014535291120409966outcome:
passed -
✅ Test 423
params: seconds=31104000.0, expected="12 months"📌 Runtime Parameters
params: seconds: 31104000.0 expected: 12 months id: 31104000.0-12 months📌 Setup phase
duration:
0.0002216142602264881outcome:
passed📌 Call phase
duration:
0.000151902437210083outcome:
passed📌 Teardown phase
duration:
0.00013787904754281044outcome:
passed -
✅ Test 424
params: seconds=33696000.0, expected="13 months"📌 Runtime Parameters
params: seconds: 33696000.0 expected: 13 months id: 33696000.0-13 months📌 Setup phase
duration:
0.00022291997447609901outcome:
passed📌 Call phase
duration:
0.00014430610463023186outcome:
passed📌 Teardown phase
duration:
0.00013654539361596107outcome:
passed -
✅ Test 425
params: seconds=59616000.0, expected="23 months"📌 Runtime Parameters
params: seconds: 59616000.0 expected: 23 months id: 59616000.0-23 months📌 Setup phase
duration:
0.00021018926054239273outcome:
passed📌 Call phase
duration:
0.00014086859300732613outcome:
passed📌 Teardown phase
duration:
0.0001374427229166031outcome:
passed -
✅ Test 426
params: seconds=62208000.0, expected="24 months"📌 Runtime Parameters
params: seconds: 62208000.0 expected: 24 months id: 62208000.0-24 months📌 Setup phase
duration:
0.00023260526359081268outcome:
passed📌 Call phase
duration:
0.00014459900557994843outcome:
passed📌 Teardown phase
duration:
0.0001324191689491272outcome:
passed -
✅ Test 427
params: seconds=64208000.0, expected="2 years"📌 Runtime Parameters
params: seconds: 64208000.0 expected: 2 years id: 64208000.0-2 years📌 Setup phase
duration:
0.00023348024114966393outcome:
passed📌 Call phase
duration:
0.00014159223064780235outcome:
passed📌 Teardown phase
duration:
0.00013902503997087479outcome:
passed
-
-
📄 test_utils_registry.py
↳ Function: test_metaclass_creates_weakset
-
✅ Test 428
📌 Setup phase
duration:
0.00012632086873054504outcome:
passed📌 Call phase
duration:
0.0007388070225715637outcome:
passed📌 Teardown phase
duration:
0.00011308910325169563outcome:
passed
↳ Function: test_metaclass_tracks_instances
-
✅ Test 429
📌 Setup phase
duration:
0.0001271371729671955outcome:
passed📌 Call phase
duration:
0.00024435902014374733outcome:
passed📌 Teardown phase
duration:
0.00010319007560610771outcome:
passed
↳ Function: test_registry_inheritance
-
✅ Test 430
📌 Setup phase
duration:
0.00019771093502640724outcome:
passed📌 Call phase
duration:
0.0006802617572247982outcome:
passed📌 Teardown phase
duration:
0.00014730077236890793outcome:
passed
↳ Function: test_instance_tracking
-
✅ Test 431
📌 Setup phase
duration:
0.000205356627702713outcome:
passed📌 Call phase
duration:
0.00024193665012717247outcome:
passed📌 Teardown phase
duration:
0.00012768898159265518outcome:
passed
↳ Function: test_collect_instances_recursive
-
✅ Test 432
📌 Setup phase
duration:
0.00017851637676358223outcome:
passed📌 Call phase
duration:
0.0011882949620485306outcome:
passed📌 Teardown phase
duration:
0.0001582740806043148outcome:
passed
↳ Function: test_instances_function
-
✅ Test 433
📌 Setup phase
duration:
0.00018944405019283295outcome:
passed📌 Call phase
duration:
0.0010742023587226868outcome:
passed📌 Teardown phase
duration:
0.00014683278277516365outcome:
passed
↳ Function: test_non_registry_class_error
-
✅ Test 434
📌 Setup phase
duration:
0.00011943373829126358outcome:
passed📌 Call phase
duration:
0.0002074670046567917outcome:
passed📌 Teardown phase
duration:
0.00010318867862224579outcome:
passed
↳ Function: test_signature_preservation
-
✅ Test 435
📌 Setup phase
duration:
0.00011443626135587692outcome:
passed📌 Call phase
duration:
0.0002476237714290619outcome:
passed📌 Teardown phase
duration:
0.00011481065303087234outcome:
passed
-
-
📄 test_utils_richcfg.py
↳ Function: test_rich_inspector_outputs_more_than_builtin
-
✅ Test 436
📌 Setup phase
duration:
0.0001857532188296318outcome:
passed📌 Call phase
duration:
0.09354437096044421outcome:
passed📌 Teardown phase
duration:
0.0002358248457312584outcome:
passed
-
-
📄 test_utils_run_later.py
↳ Function: test_init_and_repr
-
✅ Test 437
📌 Setup phase
duration:
0.0001788092777132988outcome:
passed📌 Call phase
duration:
0.00022297492250800133outcome:
passed📌 Teardown phase
duration:
0.000134957954287529outcome:
passed
↳ Function: test_call
-
✅ Test 438
📌 Setup phase
duration:
0.000115199014544487outcome:
passed📌 Call phase
duration:
0.00016107922419905663outcome:
passed📌 Teardown phase
duration:
0.00012203771620988846outcome:
passed
↳ Function: test_matmul_with_string
-
✅ Test 439
📌 Setup phase
duration:
0.00013425294309854507outcome:
passed📌 Call phase
duration:
0.00017511844635009766outcome:
passed📌 Teardown phase
duration:
0.00013039866462349892outcome:
passed
↳ Function: test_matmul_with_list
-
✅ Test 440
📌 Setup phase
duration:
0.00010860292240977287outcome:
passed📌 Call phase
duration:
0.00015701726078987122outcome:
passed📌 Teardown phase
duration:
0.00013851607218384743outcome:
passed
↳ Function: test_matmul_with_single_int
-
✅ Test 441
📌 Setup phase
duration:
0.0001148320734500885outcome:
passed📌 Call phase
duration:
0.0001610768958926201outcome:
passed📌 Teardown phase
duration:
0.0001094108447432518outcome:
passed
↳ Function: test_run_at_future_triggered_and_logs
-
✅ Test 442
📌 Setup phase
duration:
0.00032765697687864304outcome:
passed📌 Call phase
duration:
0.20556226326152682outcome:
passed📌 Teardown phase
duration:
0.0003579617477953434outcome:
passed
↳ Function: test_run_at_already_past
-
✅ Test 443
📌 Setup phase
duration:
0.00036452431231737137outcome:
passed📌 Call phase
duration:
0.00038976361975073814outcome:
passed📌 Teardown phase
duration:
0.00019564572721719742outcome:
passed
↳ Function: test_run_in_future_triggered_and_logs
-
✅ Test 444
📌 Setup phase
duration:
0.0002667699009180069outcome:
passed📌 Call phase
duration:
0.20213553123176098outcome:
passed📌 Teardown phase
duration:
0.0003602541983127594outcome:
passed
↳ Function: test_run_in_past
-
✅ Test 445
📌 Setup phase
duration:
0.00034080585464835167outcome:
passed📌 Call phase
duration:
0.0004080766811966896outcome:
passed📌 Teardown phase
duration:
0.00017662439495325089outcome:
passed
↳ Function: test_run_later_with_seconds
-
✅ Test 446
📌 Setup phase
duration:
0.0002703331410884857outcome:
passed📌 Call phase
duration:
0.20219265716150403outcome:
passed📌 Teardown phase
duration:
0.00045912014320492744outcome:
passed
↳ Function: test_run_later_with_past_datetime
-
✅ Test 447
📌 Setup phase
duration:
0.0005665048956871033outcome:
passed📌 Call phase
duration:
0.0004353933036327362outcome:
passed📌 Teardown phase
duration:
0.0002318299375474453outcome:
passed
↳ Function: test_run_at_tqdm_multiple_updates
-
✅ Test 448
📌 Setup phase
duration:
0.00039614783599972725outcome:
passed📌 Call phase
duration:
0.2023721532896161outcome:
passed📌 Teardown phase
duration:
0.0004129498265683651outcome:
passed
↳ Function: test_today_basic
-
✅ Test 449
📌 Setup phase
duration:
0.00014681508764624596outcome:
passed📌 Call phase
duration:
0.000728243961930275outcome:
passed📌 Teardown phase
duration:
0.0001257108524441719outcome:
passed
↳ Function: test_tomorrow_basic
-
✅ Test 450
📌 Setup phase
duration:
0.0001303250901401043outcome:
passed📌 Call phase
duration:
0.00037341611459851265outcome:
passed📌 Teardown phase
duration:
0.00012335600331425667outcome:
passed
↳ Function: test_yesterday_basic
-
✅ Test 451
📌 Setup phase
duration:
0.00011142529547214508outcome:
passed📌 Call phase
duration:
0.0003608907572925091outcome:
passed📌 Teardown phase
duration:
0.0001118052750825882outcome:
passed
↳ Function: test_today_matmul_string
-
✅ Test 452
📌 Setup phase
duration:
0.00011476222425699234outcome:
passed📌 Call phase
duration:
0.00034611113369464874outcome:
passed📌 Teardown phase
duration:
0.00011345697566866875outcome:
passed
↳ Function: test_tomorrow_matmul_list
-
✅ Test 453
📌 Setup phase
duration:
0.0001227138563990593outcome:
passed📌 Call phase
duration:
0.00036214571446180344outcome:
passed📌 Teardown phase
duration:
0.00011135218665003777outcome:
passed
↳ Function: test_yesterday_matmul_single
-
✅ Test 454
📌 Setup phase
duration:
0.00011796504259109497outcome:
passed📌 Call phase
duration:
0.0003506466746330261outcome:
passed📌 Teardown phase
duration:
0.00011027511209249496outcome:
passed
-
-
📄 test_utils_sendmail.py
↳ Function: test_sendmail_real_local_verbose
-
✅ Test 455
📌 Setup phase
duration:
0.000131221953779459outcome:
passed📌 Call phase
duration:
1.9834412992931902outcome:
passed📌 Teardown phase
duration:
0.00029517989605665207outcome:
passed
-
-
📄 test_utils_shortcut.py
↳ Function: TestShortcutInitialization
-
✅ Test 456
📌 Setup phase
duration:
0.000455598346889019outcome:
passed📌 Call phase
duration:
0.00025472836568951607outcome:
passed📌 Teardown phase
duration:
0.00015811389312148094outcome:
passed -
✅ Test 457
📌 Setup phase
duration:
0.0002555293031036854outcome:
passed📌 Call phase
duration:
0.00024370523169636726outcome:
passed📌 Teardown phase
duration:
0.00020751822739839554outcome:
passed
↳ Function: test_run_method
-
✅ Test 458
📌 Setup phase
duration:
0.000524385366588831outcome:
passed📌 Call phase
duration:
0.0008641211315989494outcome:
passed📌 Teardown phase
duration:
0.0002941959537565708outcome:
passed
↳ Function: test_repr_output
-
✅ Test 459
📌 Setup phase
duration:
0.00026199687272310257outcome:
passed📌 Call phase
duration:
0.00022145593538880348outcome:
passed📌 Teardown phase
duration:
0.00019227713346481323outcome:
passed
↳ Function: test_source_with_regular_function
-
✅ Test 460
📌 Setup phase
duration:
0.0002559036947786808outcome:
passed📌 Call phase
duration:
0.0009391088970005512outcome:
passed📌 Teardown phase
duration:
0.00019181100651621819outcome:
passed
↳ Function: test_source_error_handling
-
✅ Test 461
📌 Setup phase
duration:
0.00026742368936538696outcome:
passed📌 Call phase
duration:
0.0011593131348490715outcome:
passed📌 Teardown phase
duration:
0.0001691998913884163outcome:
passed
↳ Function: test_as_shortcut_basic
-
✅ Test 462
📌 Setup phase
duration:
0.00020430423319339752outcome:
passed📌 Call phase
duration:
0.00017097080126404762outcome:
passed📌 Teardown phase
duration:
0.00014756759628653526outcome:
passed
↳ Function: test_as_shortcut_with_name
-
✅ Test 463
📌 Setup phase
duration:
0.00018643587827682495outcome:
passed📌 Call phase
duration:
0.00018138019368052483outcome:
passed📌 Teardown phase
duration:
0.00013536401093006134outcome:
passed
↳ Function: test_as_shortcut_factory_pattern
-
✅ Test 464
📌 Setup phase
duration:
0.0003580823540687561outcome:
passed📌 Call phase
duration:
0.0002688807435333729outcome:
passed📌 Teardown phase
duration:
0.0002237670123577118outcome:
passed
↳ Function: TestShortcutsSingleton
-
✅ Test 465
📌 Setup phase
duration:
0.0004592989571392536outcome:
passed📌 Call phase
duration:
0.00015519745647907257outcome:
passed📌 Teardown phase
duration:
0.00016305875033140182outcome:
passed -
✅ Test 466
📌 Setup phase
duration:
0.0002545090392231941outcome:
passed📌 Call phase
duration:
0.00025287410244345665outcome:
passed📌 Teardown phase
duration:
0.00015310104936361313outcome:
passed -
✅ Test 467
📌 Setup phase
duration:
0.00025362102314829826outcome:
passed📌 Call phase
duration:
0.0001795976422727108outcome:
passed📌 Teardown phase
duration:
0.00016085803508758545outcome:
passed -
✅ Test 468
📌 Setup phase
duration:
0.0002734111621975899outcome:
passed📌 Call phase
duration:
0.00022154580801725388outcome:
passed📌 Teardown phase
duration:
0.00015295995399355888outcome:
passed -
✅ Test 469
📌 Setup phase
duration:
0.0002447059378027916outcome:
passed📌 Call phase
duration:
0.00025934912264347076outcome:
passed📌 Teardown phase
duration:
0.00014626933261752129outcome:
passed
↳ Function: TestFullIntegration
-
✅ Test 470
📌 Setup phase
duration:
0.0004266691394150257outcome:
passed📌 Call phase
duration:
0.000764193944633007outcome:
passed📌 Teardown phase
duration:
0.0002509201876819134outcome:
passed -
✅ Test 471
📌 Setup phase
duration:
0.0002551400102674961outcome:
passed📌 Call phase
duration:
0.00021489011123776436outcome:
passed📌 Teardown phase
duration:
0.00014800159260630608outcome:
passed
↳ Function: test_registry_inheritance
-
✅ Test 472
📌 Setup phase
duration:
0.00018138159066438675outcome:
passed📌 Call phase
duration:
0.000142756849527359outcome:
passed📌 Teardown phase
duration:
0.00012944405898451805outcome:
passed
-
-
📄 test_utils_snapshot.py
↳ Function: test_snapshot
-
✅ Test 473
params: test_input="v1", "Visible", false], ["h1", "Hidden", true, expected=["Visible"], kwargs={}📌 Runtime Parameters
params: test_input: - - v1 - Visible - (vide) - - h1 - Hidden - True expected: - Visible kwargs: {} id: exclude_internals📌 Setup phase
duration:
0.0003204410895705223outcome:
passed📌 Call phase
duration:
0.0007017101161181927outcome:
passed📌 Teardown phase
duration:
0.00017580389976501465outcome:
passed -
✅ Test 474
params: test_input="v1", "Visible", false], ["h1", "Hidden", true, expected=["Visible", "Hidden"], kwargs={"include_internal": true}📌 Runtime Parameters
params: test_input: - - v1 - Visible - (vide) - - h1 - Hidden - True expected: - Visible - Hidden kwargs: include_internal: True id: include_internals📌 Setup phase
duration:
0.000293215736746788outcome:
passed📌 Call phase
duration:
0.0004870598204433918outcome:
passed📌 Teardown phase
duration:
0.00017172889783978462outcome:
passed -
✅ Test 475
params: test_input=[], expected=[], kwargs={}📌 Runtime Parameters
params: test_input: [] expected: [] kwargs: {} id: empty_case📌 Setup phase
duration:
0.0002826116979122162outcome:
passed📌 Call phase
duration:
0.00014350377023220062outcome:
passed📌 Teardown phase
duration:
0.00016281800344586372outcome:
passed -
✅ Test 476
params: test_input="3", "Charlie"], ["1", "Alpha"], ["2", "Beta", expected=["Alpha", "Beta", "Charlie"], kwargs="{'sort_key': }"📌 Runtime Parameters
params: test_input: - - 3 - Charlie - - 1 - Alpha - - 2 - Beta expected: - Alpha - Beta - Charlie kwargs: {'sort_key': <class 'str'>} id: sort_str📌 Setup phase
duration:
0.000271389726549387outcome:
passed📌 Call phase
duration:
0.0005857418291270733outcome:
passed📌 Teardown phase
duration:
0.0001727626658976078outcome:
passed -
✅ Test 477
params: test_input="z3", "C"], ["a1", "A"], ["m2", "B", expected=["A", "B", "C"], kwargs="{'sort_key': at 0x7f1eff81b4c0>}"📌 Runtime Parameters
params: test_input: - - z3 - C - - a1 - A - - m2 - B expected: - A - B - C kwargs: {'sort_key': <function <lambda> at 0x7f1eff81b4c0>} id: sort_id📌 Setup phase
duration:
0.0002911868505179882outcome:
passed📌 Call phase
duration:
0.0005689407698810101outcome:
passed📌 Teardown phase
duration:
0.00017390819266438484outcome:
passed -
✅ Test 478
params: test_input="3", "Charlie"], ["1", "alpha"], ["2", "Beta", expected=["alpha", "Beta", "Charlie"], kwargs="{'sort_key': at 0x7f1eff81b550>}"📌 Runtime Parameters
params: test_input: - - 3 - Charlie - - 1 - alpha - - 2 - Beta expected: - alpha - Beta - Charlie kwargs: {'sort_key': <function <lambda> at 0x7f1eff81b550>} id: sort_case_insensitive📌 Setup phase
duration:
0.0002914280630648136outcome:
passed📌 Call phase
duration:
0.0005579628050327301outcome:
passed📌 Teardown phase
duration:
0.00017556408420205116outcome:
passed -
✅ Test 479
params: test_input="1", "A"], ["2", "BB"], ["3", "CCC", expected=["A", "BB", "CCC"], kwargs="{'sort_key': at 0x7f1eff81b5e0>}"📌 Runtime Parameters
params: test_input: - - 1 - A - - 2 - BB - - 3 - CCC expected: - A - BB - CCC kwargs: {'sort_key': <function <lambda> at 0x7f1eff81b5e0>} id: sort_length📌 Setup phase
duration:
0.00028735725209116936outcome:
passed📌 Call phase
duration:
0.0006867437623441219outcome:
passed📌 Teardown phase
duration:
0.00018716277554631233outcome:
passed -
✅ Test 480
params: test_input="1", "A"], ["2", "B"], ["3", "C", expected=["C", "B", "A"], kwargs="{'sort_key': at 0x7f1eff81b670>}"📌 Runtime Parameters
params: test_input: - - 1 - A - - 2 - B - - 3 - C expected: - C - B - A kwargs: {'sort_key': <function <lambda> at 0x7f1eff81b670>} id: sort_reverse📌 Setup phase
duration:
0.0002817166969180107outcome:
passed📌 Call phase
duration:
0.0005593039095401764outcome:
passed📌 Teardown phase
duration:
0.00018938211724162102outcome:
passed
-
-
📄 test_utils_termtitle.py
↳ Function: test_terminal_title_with_tmux
-
✅ Test 481
📌 Setup phase
duration:
0.00014301203191280365outcome:
passed📌 Call phase
duration:
0.021328015252947807outcome:
passed📌 Teardown phase
duration:
0.00026535987854003906outcome:
passed
-
-
📄 test_utils_tqdm_mod.py
↳ Function: test_complete_progress_bar
-
✅ Test 482
📌 Setup phase
duration:
0.00019492162391543388outcome:
passed📌 Call phase
duration:
0.004242850933223963outcome:
passed📌 Teardown phase
duration:
0.00015310989692807198outcome:
passed
↳ Function: test_set_progress_multiple_points
-
✅ Test 483
📌 Setup phase
duration:
0.0001281178556382656outcome:
passed📌 Call phase
duration:
0.0017865109257400036outcome:
passed📌 Teardown phase
duration:
0.00015200581401586533outcome:
passed
↳ Function: test_format_sizeof_alignment
-
✅ Test 484
📌 Setup phase
duration:
0.00013749487698078156outcome:
passed📌 Call phase
duration:
0.00017733173444867134outcome:
passed📌 Teardown phase
duration:
0.00010952632874250412outcome:
passed
↳ Function: test_custom_unit
-
✅ Test 486
📌 Setup phase
duration:
0.00012366566807031631outcome:
passed📌 Call phase
duration:
0.00488821417093277outcome:
passed📌 Teardown phase
duration:
0.00012362096458673477outcome:
passed
↳ Function: test_clamp_above_total
-
✅ Test 487
📌 Setup phase
duration:
0.00011934665963053703outcome:
passed📌 Call phase
duration:
0.0005181957967579365outcome:
passed📌 Teardown phase
duration:
0.00011802138760685921outcome:
passed
↳ Function: test_clamp_below_zero
-
✅ Test 488
📌 Setup phase
duration:
0.00011623604223132133outcome:
passed📌 Call phase
duration:
0.0006401808932423592outcome:
passed📌 Teardown phase
duration:
0.00012153433635830879outcome:
passed
-
-
📄 test_utils_trinary.py
↳ Function: test_check_trinary_valid_values
-
✅ Test 489
📌 Setup phase
duration:
0.00013872981071472168outcome:
passed📌 Call phase
duration:
0.00018201302736997604outcome:
passed📌 Teardown phase
duration:
0.00010278401896357536outcome:
passed
↳ Function: test_check_trinary_invalid_value
-
✅ Test 490
📌 Setup phase
duration:
0.00011399900540709496outcome:
passed📌 Call phase
duration:
0.000416796188801527outcome:
passed📌 Teardown phase
duration:
0.0001162341795861721outcome:
passed
↳ Function: test_check_trinary_with_custom_allowed_values
-
✅ Test 491
📌 Setup phase
duration:
0.00010822014883160591outcome:
passed📌 Call phase
duration:
0.00016638869419693947outcome:
passed📌 Teardown phase
duration:
0.00010623829439282417outcome:
passed
-
-
📄 test_utils_typecast.py
↳ Function: test_downcast_success
-
✅ Test 492
📌 Setup phase
duration:
0.00012124702334403992outcome:
passed📌 Call phase
duration:
0.0001835082657635212outcome:
passed📌 Teardown phase
duration:
0.00011172005906701088outcome:
passed
↳ Function: test_upcast_success
-
✅ Test 493
📌 Setup phase
duration:
0.0001345733180642128outcome:
passed📌 Call phase
duration:
0.0001544589176774025outcome:
passed📌 Teardown phase
duration:
0.00010391790419816971outcome:
passed
↳ Function: test_downcast_invalid
-
✅ Test 494
📌 Setup phase
duration:
0.00010575680062174797outcome:
passed📌 Call phase
duration:
0.0003707488067448139outcome:
passed📌 Teardown phase
duration:
0.00011442601680755615outcome:
passed
↳ Function: test_upcast_invalid
-
✅ Test 495
📌 Setup phase
duration:
0.00011781277135014534outcome:
passed📌 Call phase
duration:
0.00017803721129894257outcome:
passed📌 Teardown phase
duration:
0.00010206224396824837outcome:
passed
↳ Function: test_object_identity_preserved
-
✅ Test 496
📌 Setup phase
duration:
0.00010933214798569679outcome:
passed📌 Call phase
duration:
0.00014099199324846268outcome:
passed📌 Teardown phase
duration:
0.00010279100388288498outcome:
passed
↳ Function: test_ensure_subclass_valid
-
✅ Test 497
📌 Setup phase
duration:
0.00011683208867907524outcome:
passed📌 Call phase
duration:
0.00013534026220440865outcome:
passed📌 Teardown phase
duration:
0.00010453583672642708outcome:
passed
↳ Function: test_ensure_subclass_invalid
-
✅ Test 498
📌 Setup phase
duration:
0.0001135868951678276outcome:
passed📌 Call phase
duration:
0.00017014844343066216outcome:
passed📌 Teardown phase
duration:
0.00010000821202993393outcome:
passed
↳ Function: test_cast_changes_class
-
✅ Test 499
📌 Setup phase
duration:
0.00012064538896083832outcome:
passed📌 Call phase
duration:
0.00015104515478014946outcome:
passed📌 Teardown phase
duration:
9.688502177596092e-05outcome:
passed
↳ Function: test_cast_preserves_identity
-
✅ Test 500
📌 Setup phase
duration:
0.00012139091268181801outcome:
passed📌 Call phase
duration:
0.00013540685176849365outcome:
passed📌 Teardown phase
duration:
0.00010086921975016594outcome:
passed
-
-
📄 test_utils_utils.py
↳ Function: test_singleton_instance
-
✅ Test 501
📌 Setup phase
duration:
0.00011406419798731804outcome:
passed📌 Call phase
duration:
0.00016194302588701248outcome:
passed📌 Teardown phase
duration:
0.00010319100692868233outcome:
passed
↳ Function: test_singleton_identity
-
✅ Test 502
📌 Setup phase
duration:
0.00010665087029337883outcome:
passed📌 Call phase
duration:
0.00012838374823331833outcome:
passed📌 Teardown phase
duration:
9.73348505795002e-05outcome:
passed
↳ Function: test_typename
-
✅ Test 503
params: obj=null, expected="NoneType"📌 Runtime Parameters
params: obj: None expected: NoneType id: None-NoneType📌 Setup phase
duration:
0.00032447325065732outcome:
passed📌 Call phase
duration:
0.00015476392582058907outcome:
passed📌 Teardown phase
duration:
0.00015634484589099884outcome:
passed -
✅ Test 504
params: obj=true, expected="bool"📌 Runtime Parameters
params: obj: True expected: bool id: True-bool📌 Setup phase
duration:
0.0002481229603290558outcome:
passed📌 Call phase
duration:
0.00013750791549682617outcome:
passed📌 Teardown phase
duration:
0.00014569610357284546outcome:
passed -
✅ Test 505
params: obj=42, expected="int"📌 Runtime Parameters
params: obj: 42 expected: int id: 42-int📌 Setup phase
duration:
0.00024857698008418083outcome:
passed📌 Call phase
duration:
0.00013857893645763397outcome:
passed📌 Teardown phase
duration:
0.00013817427679896355outcome:
passed -
✅ Test 506
params: obj=3.14, expected="float"📌 Runtime Parameters
params: obj: 3.14 expected: float id: 3.14-float📌 Setup phase
duration:
0.000223647803068161outcome:
passed📌 Call phase
duration:
0.00014086905866861343outcome:
passed📌 Teardown phase
duration:
0.00015106983482837677outcome:
passed -
✅ Test 507
params: obj="text", expected="str"📌 Runtime Parameters
params: obj: text expected: str id: text-str📌 Setup phase
duration:
0.00022653210908174515outcome:
passed📌 Call phase
duration:
0.00013296911492943764outcome:
passed📌 Teardown phase
duration:
0.0001420886255800724outcome:
passed -
✅ Test 508
params: obj="{1, 2, 3}", expected="set"📌 Runtime Parameters
params: obj: {1, 2, 3} expected: set id: obj5-set📌 Setup phase
duration:
0.00022245384752750397outcome:
passed📌 Call phase
duration:
0.0001369495876133442outcome:
passed📌 Teardown phase
duration:
0.0001461375504732132outcome:
passed -
✅ Test 509
params: obj=1], [2, 3, expected="list"📌 Runtime Parameters
params: obj: - - 1 - - 2 - 3 expected: list id: obj6-list📌 Setup phase
duration:
0.00023314030840992928outcome:
passed📌 Call phase
duration:
0.00014034006744623184outcome:
passed📌 Teardown phase
duration:
0.0001455056481063366outcome:
passed -
✅ Test 510
params: obj=[{"a": [1, 2]}, {"b": [3, 4]}], expected="list"📌 Runtime Parameters
params: obj: - a: - 1 - 2 - b: - 3 - 4 expected: list id: obj7-list📌 Setup phase
duration:
0.00022341730073094368outcome:
passed📌 Call phase
duration:
0.00013545993715524673outcome:
passed📌 Teardown phase
duration:
0.00013658730313181877outcome:
passed -
✅ Test 511
params: obj={"key": [{"nested": 1}, [2, 3]]}, expected="dict"📌 Runtime Parameters
params: obj: key: - nested: 1 - - 2 - 3 expected: dict id: obj8-dict📌 Setup phase
duration:
0.00022205989807844162outcome:
passed📌 Call phase
duration:
0.0001372932456433773outcome:
passed📌 Teardown phase
duration:
0.00014014728367328644outcome:
passed -
✅ Test 512
params: obj=" at 0x7f1eff82edc0>", expected="function"📌 Runtime Parameters
params: obj: <function <lambda> at 0x7f1eff82edc0> expected: function id: <lambda>-function📌 Setup phase
duration:
0.0003229076974093914outcome:
passed📌 Call phase
duration:
0.00015450920909643173outcome:
passed📌 Teardown phase
duration:
0.0001478581689298153outcome:
passed -
✅ Test 513
params: obj="", expected="function"📌 Runtime Parameters
params: obj: <function sample_function at 0x7f1eff82ed30> expected: function id: sample_function-function📌 Setup phase
duration:
0.00023788213729858398outcome:
passed📌 Call phase
duration:
0.00013566995039582253outcome:
passed📌 Teardown phase
duration:
0.0001393621787428856outcome:
passed -
✅ Test 514
params: obj=".nested at 0x7f1eff82ee50>", expected="function"📌 Runtime Parameters
params: obj: <function sample_function.<locals>.nested at 0x7f1eff82ee50> expected: function id: nested-function📌 Setup phase
duration:
0.00023075612261891365outcome:
passed📌 Call phase
duration:
0.00013876194134354591outcome:
passed📌 Teardown phase
duration:
0.00015177391469478607outcome:
passed -
✅ Test 515
params: obj="", expected="builtin_function_or_method"📌 Runtime Parameters
params: obj: <built-in function len> expected: builtin_function_or_method id: len-builtin_function_or_method📌 Setup phase
duration:
0.00022138282656669617outcome:
passed📌 Call phase
duration:
0.00013321125879883766outcome:
passed📌 Teardown phase
duration:
0.00014525512233376503outcome:
passed -
✅ Test 516
params: obj="", expected="builtin_function_or_method"📌 Runtime Parameters
params: obj: <built-in function sum> expected: builtin_function_or_method id: sum-builtin_function_or_method📌 Setup phase
duration:
0.00022121611982584outcome:
passed📌 Call phase
duration:
0.0001367758959531784outcome:
passed📌 Teardown phase
duration:
0.00013745203614234924outcome:
passed -
✅ Test 517
params: obj="", expected="module"📌 Runtime Parameters
params: obj: <module 'math' from '/workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/lib-dynload/math.cpython-38-x86_64-linux-gnu.so'> expected: module id: math-module📌 Setup phase
duration:
0.00023318873718380928outcome:
passed📌 Call phase
duration:
0.00013795588165521622outcome:
passed📌 Teardown phase
duration:
0.00014008581638336182outcome:
passed -
✅ Test 518
params: obj="", expected="module"📌 Runtime Parameters
params: obj: <module 'sys' (built-in)> expected: module id: sys-module📌 Setup phase
duration:
0.00021536881104111671outcome:
passed📌 Call phase
duration:
0.0001339539885520935outcome:
passed📌 Teardown phase
duration:
0.0001473170705139637outcome:
passed -
✅ Test 519
params: obj="", expected="type"📌 Runtime Parameters
params: obj: <class 'function'> expected: type id: function-type📌 Setup phase
duration:
0.0002226489596068859outcome:
passed📌 Call phase
duration:
0.0001336769200861454outcome:
passed📌 Teardown phase
duration:
0.0001373952254652977outcome:
passed -
✅ Test 520
params: obj=" at 0x7f1eff2d9d60>", expected="generator"📌 Runtime Parameters
params: obj: <generator object <genexpr> at 0x7f1eff2d9d60> expected: generator id: <genexpr>-generator📌 Setup phase
duration:
0.00021932600066065788outcome:
passed📌 Call phase
duration:
0.00014864280819892883outcome:
passed📌 Teardown phase
duration:
0.00014116475358605385outcome:
passed -
✅ Test 521
params: obj="", expected="list_iterator"📌 Runtime Parameters
params: obj: <list_iterator object at 0x7f1eff2d4eb0> expected: list_iterator id: obj18-list_iterator📌 Setup phase
duration:
0.00021888315677642822outcome:
passed📌 Call phase
duration:
0.00013376818969845772outcome:
passed📌 Teardown phase
duration:
0.00014749495312571526outcome:
passed
↳ Function: test_next_int
-
✅ Test 522
params: nums=[1, 2, 3], expected=4📌 Runtime Parameters
params: nums: - 1 - 2 - 3 expected: 4 id: nums0-4📌 Setup phase
duration:
0.00023960508406162262outcome:
passed📌 Call phase
duration:
0.00014084484428167343outcome:
passed📌 Teardown phase
duration:
0.00013792701065540314outcome:
passed -
✅ Test 523
params: nums=[10, 20], expected=21📌 Runtime Parameters
params: nums: - 10 - 20 expected: 21 id: nums1-21📌 Setup phase
duration:
0.00022633885964751244outcome:
passed📌 Call phase
duration:
0.0001458846963942051outcome:
passed📌 Teardown phase
duration:
0.0001531951129436493outcome:
passed -
✅ Test 524
params: nums=[], expected=0📌 Runtime Parameters
params: nums: [] expected: 0 id: nums2-0📌 Setup phase
duration:
0.00023034913465380669outcome:
passed📌 Call phase
duration:
0.0001391516998410225outcome:
passed📌 Teardown phase
duration:
0.00014483975246548653outcome:
passed
↳ Function: test_zero_pad
-
✅ Test 525
params: i=7, n=3, expected="007"📌 Runtime Parameters
params: i: 7 n: 3 expected: 007 id: 7-3-007📌 Setup phase
duration:
0.0002597901038825512outcome:
passed📌 Call phase
duration:
0.00018716184422373772outcome:
passed📌 Teardown phase
duration:
0.00016913283616304398outcome:
passed -
✅ Test 526
params: i=123, n=5, expected="00123"📌 Runtime Parameters
params: i: 123 n: 5 expected: 00123 id: 123-5-00123📌 Setup phase
duration:
0.00028138095512986183outcome:
passed📌 Call phase
duration:
0.00014438992366194725outcome:
passed📌 Teardown phase
duration:
0.00016494467854499817outcome:
passed -
✅ Test 527
params: i=0, n=2, expected="00"📌 Runtime Parameters
params: i: 0 n: 2 expected: 00 id: 0-2-00📌 Setup phase
duration:
0.00026948610320687294outcome:
passed📌 Call phase
duration:
0.0001430031843483448outcome:
passed📌 Teardown phase
duration:
0.0001606503501534462outcome:
passed
↳ Function: test_iround
-
✅ Test 528
params: val=3.6, expected=4📌 Runtime Parameters
params: val: 3.6 expected: 4 id: 3.6-4📌 Setup phase
duration:
0.00022627972066402435outcome:
passed📌 Call phase
duration:
0.00014786794781684875outcome:
passed📌 Teardown phase
duration:
0.00014513637870550156outcome:
passed -
✅ Test 529
params: val=2.1, expected=2📌 Runtime Parameters
params: val: 2.1 expected: 2 id: 2.1-2📌 Setup phase
duration:
0.00022944994270801544outcome:
passed📌 Call phase
duration:
0.00013757124543190002outcome:
passed📌 Teardown phase
duration:
0.00014818180352449417outcome:
passed -
✅ Test 530
params: val=-1.5, expected=-2📌 Runtime Parameters
params: val: -1.5 expected: -2 id: -1.5--2📌 Setup phase
duration:
0.0002230447717010975outcome:
passed📌 Call phase
duration:
0.0001426241360604763outcome:
passed📌 Teardown phase
duration:
0.0001461259089410305outcome:
passed -
✅ Test 531
params: val=-1.4, expected=-1📌 Runtime Parameters
params: val: -1.4 expected: -1 id: -1.4--1📌 Setup phase
duration:
0.00024359766393899918outcome:
passed📌 Call phase
duration:
0.00014254078269004822outcome:
passed📌 Teardown phase
duration:
0.0001399470493197441outcome:
passed
↳ Function: test_sorted_naturally
-
✅ Test 532
params: items=["file1", "file10", "file2"], expected=["file1", "file2", "file10"]📌 Runtime Parameters
params: items: - file1 - file10 - file2 expected: - file1 - file2 - file10 id: items0-expected0📌 Setup phase
duration:
0.00022283010184764862outcome:
passed📌 Call phase
duration:
0.00018936209380626678outcome:
passed📌 Teardown phase
duration:
0.0001484067179262638outcome:
passed -
✅ Test 533
params: items=["z9", "z10", "z2", "z1"], expected=["z1", "z2", "z9", "z10"]📌 Runtime Parameters
params: items: - z9 - z10 - z2 - z1 expected: - z1 - z2 - z9 - z10 id: items1-expected1📌 Setup phase
duration:
0.0002400618977844715outcome:
passed📌 Call phase
duration:
0.00017633289098739624outcome:
passed📌 Teardown phase
duration:
0.0001413370482623577outcome:
passed
↳ Function: test_sorted_naturally_reverse
-
✅ Test 534
params: items=["file1", "file10", "file2"], expected=["file10", "file2", "file1"]📌 Runtime Parameters
params: items: - file1 - file10 - file2 expected: - file10 - file2 - file1 id: items0-expected0📌 Setup phase
duration:
0.00024148821830749512outcome:
passed📌 Call phase
duration:
0.00016696099191904068outcome:
passed📌 Teardown phase
duration:
0.00015084818005561829outcome:
passed
-
-
📄 test_utils_xrange.py
↳ Function: test_xrange_finite
-
✅ Test 535
params: args=[10], kwargs={}, expected=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]📌 Runtime Parameters
params: args: - 10 kwargs: {} expected: - (vide) - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 id: args0-kwargs0-expected0📌 Setup phase
duration:
0.0003030700609087944outcome:
passed📌 Call phase
duration:
0.00016293395310640335outcome:
passed📌 Teardown phase
duration:
0.00016106804832816124outcome:
passed -
✅ Test 536
params: args=[0, 10], kwargs={}, expected=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]📌 Runtime Parameters
params: args: - (vide) - 10 kwargs: {} expected: - (vide) - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 id: args1-kwargs1-expected1📌 Setup phase
duration:
0.00027647288516163826outcome:
passed📌 Call phase
duration:
0.0002200491726398468outcome:
passed📌 Teardown phase
duration:
0.0001731603406369686outcome:
passed -
✅ Test 537
params: args=[0, 10, 2], kwargs={}, expected=[0, 2, 4, 6, 8]📌 Runtime Parameters
params: args: - (vide) - 10 - 2 kwargs: {} expected: - (vide) - 2 - 4 - 6 - 8 id: args2-kwargs2-expected2📌 Setup phase
duration:
0.00028345081955194473outcome:
passed📌 Call phase
duration:
0.00015764357522130013outcome:
passed📌 Teardown phase
duration:
0.00016279099509119987outcome:
passed -
✅ Test 538
params: args=[10], kwargs={"step": 2}, expected=[0, 2, 4, 6, 8]📌 Runtime Parameters
params: args: - 10 kwargs: step: 2 expected: - (vide) - 2 - 4 - 6 - 8 id: args3-kwargs3-expected3📌 Setup phase
duration:
0.00027702469378709793outcome:
passed📌 Call phase
duration:
0.00014502229169011116outcome:
passed📌 Teardown phase
duration:
0.00015634996816515923outcome:
passed
↳ Function: test_xrange_infinite
-
✅ Test 539
params: args=[], kwargs={}, expected_repr="count(0)"📌 Runtime Parameters
params: args: [] kwargs: {} expected_repr: count(0) id: args0-kwargs0-count(0)📌 Setup phase
duration:
0.00028405338525772095outcome:
passed📌 Call phase
duration:
0.00015222001820802689outcome:
passed📌 Teardown phase
duration:
0.00015718583017587662outcome:
passed -
✅ Test 540
params: args=[], kwargs={"step": 2}, expected_repr="count(0, 2)"📌 Runtime Parameters
params: args: [] kwargs: step: 2 expected_repr: count(0, 2) id: args1-kwargs1-count(0, 2)📌 Setup phase
duration:
0.00027339300140738487outcome:
passed📌 Call phase
duration:
0.0001613851636648178outcome:
passed📌 Teardown phase
duration:
0.0001801569014787674outcome:
passed
↳ Function: test_xrange_too_many_args
-
✅ Test 541
params: args=[1, 2, 3, 4]📌 Runtime Parameters
params: args: - 1 - 2 - 3 - 4 id: args0📌 Setup phase
duration:
0.0001924009993672371outcome:
passed📌 Call phase
duration:
0.00047395192086696625outcome:
passed📌 Teardown phase
duration:
0.0009667850099503994outcome:
passed
-
❌ Failed (14)
-
📄 test_utils_debug.py
↳ Function: test_short_repr
-
❌ Test 134
params: value="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", cutoff=10, expected="'aaaaaaaaaa..."📌 Runtime Parameters
params: value: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa cutoff: 10 expected: 'aaaaaaaaaa... id: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-10-'aaaaaaaaaa...📌 Setup phase
duration:
0.00026382505893707275outcome:
passed📌 Call phase
duration:
0.0010556750930845737outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_debug.py lineno: 66 message: assert "'aaaaaaaaa..." == "'aaaaaaaaaa..." - 'aaaaaaaaaa... ? - + 'aaaaaaaaa...traceback:
- path: tests/test_utils_debug.py lineno: 66 message: AssertionErrorlongrepr:
value = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' cutoff = 10, expected = "'aaaaaaaaaa..." @pytest.mark.parametrize( "value, cutoff, expected", [ ("abc", 10, "'abc'"), ("a" * 100, 10, "'aaaaaaaaaa..."), (12345, 10, "12345"), ([0]*100, 15, str(repr([0]*100))[:15] + "..."), (None, 10, "None"), (type("Obj", (), {"__repr__": lambda self: "Obj(" + "x"*50 + ")"})(), 20, "Obj(xxxxxxxxxxxxxxxxx..."), ] ) def test_short_repr(value, cutoff, expected): > assert short_repr(value, cutoff) == expected E assert "'aaaaaaaaa..." == "'aaaaaaaaaa..." E E - 'aaaaaaaaaa... E ? - E + 'aaaaaaaaa... tests/test_utils_debug.py:66: AssertionError📌 Teardown phase
duration:
0.0003656763583421707outcome:
passed -
❌ Test 138
params: value="Obj(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)", cutoff=20, expected="Obj(xxxxxxxxxxxxxxxxx..."📌 Runtime Parameters
params: value: Obj(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) cutoff: 20 expected: Obj(xxxxxxxxxxxxxxxxx... id: value5-20-Obj(xxxxxxxxxxxxxxxxx...📌 Setup phase
duration:
0.00026075728237628937outcome:
passed📌 Call phase
duration:
0.0006162370555102825outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_debug.py lineno: 66 message: AssertionError: assert 'Obj(xxxxxxxxxxxxxxxx...' == 'Obj(xxxxxxxxxxxxxxxxx...' - Obj(xxxxxxxxxxxxxxxxx... ? - + Obj(xxxxxxxxxxxxxxxx...traceback:
- path: tests/test_utils_debug.py lineno: 66 message: AssertionErrorlongrepr:
value = Obj(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), cutoff = 20 expected = 'Obj(xxxxxxxxxxxxxxxxx...' @pytest.mark.parametrize( "value, cutoff, expected", [ ("abc", 10, "'abc'"), ("a" * 100, 10, "'aaaaaaaaaa..."), (12345, 10, "12345"), ([0]*100, 15, str(repr([0]*100))[:15] + "..."), (None, 10, "None"), (type("Obj", (), {"__repr__": lambda self: "Obj(" + "x"*50 + ")"})(), 20, "Obj(xxxxxxxxxxxxxxxxx..."), ] ) def test_short_repr(value, cutoff, expected): > assert short_repr(value, cutoff) == expected E AssertionError: assert 'Obj(xxxxxxxxxxxxxxxx...' == 'Obj(xxxxxxxxxxxxxxxxx...' E E - Obj(xxxxxxxxxxxxxxxxx... E ? - E + Obj(xxxxxxxxxxxxxxxx... tests/test_utils_debug.py:66: AssertionError📌 Teardown phase
duration:
0.00021316297352313995outcome:
passed
-
-
📄 test_utils_elog.py
↳ Function: test_post_local
-
❌ Test 159
📌 Setup phase
duration:
0.00013289926573634148outcome:
passed📌 Call phase
duration:
0.01127771520987153outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 46 message: None - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 307 message: in post - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: LogbookServerProblemlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1eff144b80> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff144c70> method = 'POST', url = '/demo/' body = b'--46b3f449cda38e7ccb6a03bcbb1d9434\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--46b3f449cda38e...position: form-data; name="Text"; filename=""\r\n\r\nHello from local test\r\n--46b3f449cda38e7ccb6a03bcbb1d9434--\r\n' headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '1116', 'Content-Type': 'multipart/form-data; boundary=46b3f449cda38e7ccb6a03bcbb1d9434'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1eff144b80> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1eff144b80>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1eff1445b0> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'POST', url = '/demo/', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff144b80>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff144c70> _stacktrace = <traceback object at 0x7f1eff108440> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff144b80>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1eff144ac0> message = 'Hello from local test', msg_id = None, reply = False attributes = {'Author': 'robot', 'Category': 'General', 'Encoding': 'HTML', 'Subject': 'Test simple', ...} attachments = [], suppress_email_notification = False, encoding = 'HTML' timeout = None, kwargs = {} new_attachment_list = [('Text', ('', b'Hello from local test'))] objects_to_close = [] attributes_to_edit = {'Author': b'robot', 'Category': b'General', 'Encoding': b'HTML', 'Subject': b'Test simple', ...} def post(self, message, msg_id=None, reply=False, attributes=None, attachments=None, suppress_email_notification=False, encoding=None, timeout=None, **kwargs): """ Posts message to the logbook. If msg_id is not specified new message will be created, otherwise existing message will be edited, or a reply (if reply=True) to it will be created. This method returns the msg_id of the newly created message. :param message: string with message text :param msg_id: ID number of message to edit or reply. If not specified new message is created. :param reply: If 'True' reply to existing message is created instead of editing it :param attributes: Dictionary of attributes. Following attributes are used internally by the elog and will be ignored: Text, Date, Encoding, Reply to, In reply to, Locked by, Attachment :param attachments: list of: - file like objects which read() will return bytes (if file_like_object.name is not defined, default name "attachment<i>" will be used. - paths to the files All items will be appended as attachment to the elog entry. In case of unknown attachment an exception LogbookInvalidAttachment will be raised. :param suppress_email_notification: If set to True or 1, E-Mail notification will be suppressed, defaults to False. :param encoding: Defines encoding of the message. Can be: 'plain' -> plain text, 'html'->html-text, 'ELCode' --> elog formatting syntax :param timeout: Define the timeout to be used by the post request. Its value is directly passed to the requests post. Use None to disable the request timeout. :param kwargs: Anything in the kwargs will be interpreted as attribute. e.g.: logbook.post('Test text', Author='Rok Vintar), "Author" will be sent as an attribute. If named same as one of the attributes defined in "attributes", kwargs will have priority. :return: msg_id """ attributes = attributes or {} attributes = {**attributes, **kwargs} # kwargs as attributes with higher priority attachments = attachments or [] if encoding is not None: if encoding not in ['plain', 'HTML', 'ELCode']: raise LogbookMessageRejected('Invalid message encoding. Valid options: plain, HTML, ELCode.') attributes['Encoding'] = encoding if suppress_email_notification: attributes["suppress"] = 1 # THE ATTACHMENT STRATEGY WHEN DEALING WITH POST MODIFICATION # # 1. Does the message on the server have already attachments? # 1.1 - We read the message getting the existing attachment list. # 1.2 - Add to the attributes dictionary one line for each attachment like this: # attributes['attachmentN'] = timestamped_filename_name # # 2. Do we have new attachments? # 2.1 - Those are in the new_attachment_list. This is a list of this type: # [ ('attfileN', ('filename', fileobject)) ] # 2.2 - We need to loop over all the new attachments: # 2.2.1 - Does a file already on the server with the same name exist? # 2.2.1.1 - No: OK. Then we go ahead with the next attachment. # 2.2.1.2 - Yes: # 2.2.1.2.1 - Are the two files identical? # 2.2.1.2.1.1 - Yes: then we remove this current entry from the new_attachment_list and we leave the one # already on server. # 2.2.1.2.1.2 - No: # 2.2.1.2.1.2.1 - Then the file has been update. # 2.2.1.2.1.2.2 - We need to remove the file on server first (using special post) # 2.2.1.2.1.2.3 - We have to remove the old attachment from the attributes dictionary. # if attachments: # here we accomplish point 2.1. # new_attachment_list is something like [ ('attfileN', ('filename', fileobject)) ] new_attachment_list, objects_to_close = self._prepare_attachments(attachments) else: objects_to_close = list() new_attachment_list = list() attributes_to_edit = dict() if msg_id: # Message exists, we can continue if reply: # Verify that there is a message on the server, otherwise do not reply to it! self._check_if_message_on_server(msg_id) # raises exception in case of none existing message attributes['reply_to'] = str(msg_id) else: # Edit existing attributes['edit_id'] = str(msg_id) attributes['skiplock'] = '1' # here we accomplish point 1.1. # existing_attachments_list is something like: # [ 'https://elog.url.com/logbook/timestamped_filename' ] msg_to_edit, attributes_to_edit, existing_attachments_list = self.read(msg_id) for attribute, data in attributes.items(): new_data = attributes.get(attribute) if new_data is not None: attributes_to_edit[attribute] = new_data i = 0 existing_attachments_filename_list = list() for attachment in existing_attachments_list: # here we accomplish point 1.2. We strip the timestamped_filename from the whole URL. attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) existing_attachments_filename_list.append(os.path.basename(attachment)[14:]) i += 1 # let's accomplish 2.2. Loop over all new attachment duplicate_attachment_list = list() for new_attachment in new_attachment_list: # the new_attachment_list is something like: # [ ('attfileN', ('filename', fileobject)) ] new_attachment_filename = new_attachment[1][0] if new_attachment_filename in existing_attachments_filename_list: # a file with the same name existing already on the server. # we need to check if the two files are the same. # read the content of the new file new_attachment_content = new_attachment[1][1].read() # don't forget to reset the fileobj to the beginning of the file new_attachment[1][1].seek(0) # get the existing attachment content attachment_index = existing_attachments_filename_list.index(new_attachment_filename) existing_attachment_content = self.download_attachment( url=existing_attachments_list[attachment_index], timeout=timeout ) # check if the two contents are the same if new_attachment_content == existing_attachment_content: # yes. then we don't upload a second copy. we remove the current entry from the list duplicate_attachment_list.append(new_attachment) else: # no. they are not the same file. we will replace the existing file with the new one # first: we need to remove the attachment from the server using the dedicated method self.delete_attachment(msg_id, attributes=attributes_to_edit, attachment_id=attachment_index, timeout=timeout, text=msg_to_edit) # now we can remove this attachment from the auxiliary lists. existing_attachments_filename_list.pop(attachment_index) existing_attachments_list.pop(attachment_index) # now we need to rebuild the attributes dictionary for the part concerning the attachments. # we remove all of them first keys_to_be_removed = list() for key in attributes_to_edit.keys(): if key.startswith('attachment'): keys_to_be_removed.append(key) if key.startswith('delatt'): keys_to_be_removed.append(key) for key in keys_to_be_removed: del attributes_to_edit[key] # now we rebuild it for i, attachment in enumerate(existing_attachments_list): attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) # remove all duplicate attachments from the new_attachment_list for attach in duplicate_attachment_list: new_attachment_list.remove(attach) else: # As we create a new message, specify creation time if not already specified in attributes if 'When' not in attributes: attributes['When'] = int(datetime.now().timestamp()) if not attributes_to_edit: attributes_to_edit = attributes # Remove any attributes that should not be sent _remove_reserved_attributes(attributes_to_edit) # Make requests module think that Text is a "file". This is the only way to force requests to send data as # multipart/form-data even if there are no attachments. Elog understands only multipart/form-data new_attachment_list.append(('Text', ('', message.encode('iso-8859-1')))) # Base attributes are common to all messages self._add_base_msg_attributes(attributes_to_edit) # Keys in attributes cannot have certain characters like whitespaces or dashes for the http request attributes_to_edit = _replace_special_characters_in_attribute_keys(attributes_to_edit) # All string values in the attributes must be encoded in latin1 attributes_to_edit = _encode_values(attributes_to_edit) try: > response = requests.post(self._url, data=attributes_to_edit, files=new_attachment_list, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:288: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:115: in post return request("post", url, data=data, json=json, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1eff1445b0> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff144b80>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: self = <urllib3.connection.HTTPConnection object at 0x7f1eff151190> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff24c550> method = 'GET', url = '/demo/None', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'unm=robot;upwd=me1T.2jUUqQNa1wNuey9zNBOmOa4eILOaPb.ZSZjpn4;'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/None', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1eff151190> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1eff24ccd0> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo/None', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff24c550> _stacktrace = <traceback object at 0x7f1eff10e540> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1eff144ac0>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: > response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1eff24ccd0> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: def test_post_local(): logbook = elog.open( hostname="http://localhost", port=8080, user="robot", password="testpassword", use_ssl=False, logbook="demo" ) attributes = { "Author": "robot", "Subject": "Test simple", "Category": "General", "Type": "Note" } message = "Hello from local test" > msg_id = logbook.post(message, attributes=attributes, encoding="HTML") tests/test_utils_elog.py:46: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:307: in post self._check_if_message_on_server(msg_id) # raises exceptions if no message or no response from server _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <elog.logbook.Logbook object at 0x7f1eff144ac0>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) # If there is no message code 200 will be returned (OK) and _validate_response will not recognise it # but there will be some error in the html code. resp_message, resp_headers, resp_msg_id = _validate_response(response) # If there is no message, code 200 will be returned (OK) but there will be some error indication in # the html code. if re.findall('<td.*?class="errormsg".*?>.*?</td>', resp_message.decode('utf-8', 'ignore'), flags=re.DOTALL): raise LogbookInvalidMessageID('Message with ID: ' + str(msg_id) + ' does not exist on logbook.') except requests.Timeout as e: # Catch here a timeout o the post request. # Raise the logbook exception and let the user handle it raise LogbookServerTimeout('{0} method cannot be completed because of a network timeout:\n' + '{1}'.format(sys._getframe().f_code.co_name, e)) except requests.RequestException as e: > raise LogbookServerProblem('No response from the logbook server.\nDetails: ' + '{0}'.format(e)) E elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. E Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff151190>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:601: LogbookServerProblem📌 Teardown phase
duration:
0.0003072451800107956outcome:
passed
↳ Function: test_get_default_elog_instance_with_direct_password_and_real_check
-
❌ Test 160
📌 Setup phase
duration:
0.0001544533297419548outcome:
passed📌 Call phase
duration:
0.00581365218386054outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1ef9a86730>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 64 message: None - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 73 message: in get - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 59 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 589 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 703 message: in send - path: .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: ConnectionErrorlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1ef9a86730> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff1e3940> method = 'GET', url = '/demo', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic cm9ib3Q6dGVzdHBhc3N3b3Jk'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1ef9a86730> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1ef9a86730>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1ef998b070> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1ef9a86730>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff1e3940> _stacktrace = <traceback object at 0x7f1efe5a4580> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1ef9a86730>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: def test_get_default_elog_instance_with_direct_password_and_real_check(): url = "http://localhost:8080/demo" user = "robot" password = "testpassword" elog_instance, returned_user = get_default_elog_instance(url, user=user, password=password) assert returned_user == user assert hasattr(elog_instance, "post") > r = requests.get(url, auth=(user, password)) tests/test_utils_elog.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1ef998b070> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1ef9a86730>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError📌 Teardown phase
duration:
0.0003089196979999542outcome:
passed
↳ Function: test_get_default_elog_instance_asks_password_and_opens
-
❌ Test 161
📌 Setup phase
duration:
0.00016319379210472107outcome:
passed📌 Call phase
duration:
0.006640265230089426outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff275fa0>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 81 message: None - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 73 message: in get - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 59 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 589 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 703 message: in send - path: .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: ConnectionErrorlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1eff275fa0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff3b5a60> method = 'GET', url = '/demo', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic cm9ib3Q6dGVzdHBhc3N3b3Jk'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1eff275fa0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1eff275fa0>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1eff3b5d00> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff275fa0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff3b5a60> _stacktrace = <traceback object at 0x7f1efe5ee840> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff275fa0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: mock_home = <MagicMock name='home' id='139771092841856'> mock_getpass = <MagicMock name='getpass' id='139771112497216'> @patch("slic.utils.elog.getpass") @patch("slic.utils.elog.Path.home") def test_get_default_elog_instance_asks_password_and_opens(mock_home, mock_getpass): mock_home.return_value = Path("/does/not/exist") # Fausse home → lecture échoue mock_getpass.return_value = "testpassword" url = "http://localhost:8080/demo" user = "robot" elog_instance, returned_user = get_default_elog_instance(url, user=user) assert returned_user == user assert hasattr(elog_instance, "post") > r = requests.get(url, auth=(user, mock_getpass.return_value)) tests/test_utils_elog.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1eff3b5d00> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff275fa0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError📌 Teardown phase
duration:
0.0002803737297654152outcome:
passed
↳ Function: test_get_default_elog_with_path_home
-
❌ Test 162
📌 Setup phase
duration:
0.0001474260352551937outcome:
passed📌 Call phase
duration:
0.007166213821619749outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe5984f0>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 108 message: None - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 73 message: in get - path: .pixi/envs/default/lib/python3.8/site-packages/requests/api.py lineno: 59 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 589 message: in request - path: .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py lineno: 703 message: in send - path: .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py lineno: 700 message: ConnectionErrorlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1efe5984f0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff38bca0> method = 'GET', url = '/demo', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic cm9ib3Q6dGVzdHBhc3N3b3Jk'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1efe5984f0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1efe5984f0>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1efe5ce640> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe5984f0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff38bca0> _stacktrace = <traceback object at 0x7f1efe34a880> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe5984f0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: mock_home = <MagicMock name='home' id='139771093543184'> mock_getuser = <MagicMock name='getuser' id='139771090626880'> mock_getpass = <MagicMock name='getpass' id='139771106483456'> @patch("slic.utils.elog.getpass") @patch("slic.utils.elog.getuser") @patch("slic.utils.elog.Path.home") def test_get_default_elog_with_path_home(mock_home, mock_getuser, mock_getpass): fake_user = "robot" fake_pw = "testpassword" mock_getuser.return_value = fake_user mock_getpass.return_value = fake_pw # fallback safety tmp_home = Path("/tmp/fake_home_for_robot") tmp_home.mkdir(parents=True, exist_ok=True) pw_file = tmp_home / ".elog_psi" pw_file.write_text(fake_pw) mock_home.return_value = tmp_home url = "http://localhost:8080/demo" try: elog_instance, returned_user = get_default_elog_instance(url) assert returned_user == fake_user assert hasattr(elog_instance, "post") > r = requests.get(url, auth=(fake_user, fake_pw)) tests/test_utils_elog.py:108: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1efe5ce640> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe5984f0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError📌 Teardown phase
duration:
0.00027978187426924706outcome:
passed
↳ Function: test_post
-
❌ Test 163
📌 Setup phase
duration:
0.00015637697651982307outcome:
passed📌 Call phase
duration:
0.007669949904084206outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 123 message: None - path: slic/utils/elog.py lineno: 16 message: in post - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 307 message: in post - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: LogbookServerProblemlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1efe4977f0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efe497460> method = 'POST', url = '/demo/' body = b'--d731488d3457fa2a58c3628081dee384\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--d731488d3457fa...-Disposition: form-data; name="Text"; filename=""\r\n\r\nThis is a message\r\n--d731488d3457fa2a58c3628081dee384--\r\n' headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '735', 'Content-Type': 'multipart/form-data; boundary=d731488d3457fa2a58c3628081dee384'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1efe4977f0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1efe4977f0>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1efe497160> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'POST', url = '/demo/', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe4977f0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efe497460> _stacktrace = <traceback object at 0x7f1efe2e7380> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe4977f0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1efe2c1a90> message = 'This is a message', msg_id = None, reply = False attributes = {'Author': 'robot', 'When': 1754911052, 'cmd': 'Submit', 'exp': 'demo', ...} attachments = [], suppress_email_notification = False, encoding = None timeout = None, kwargs = {'Author': 'robot'} new_attachment_list = [('Text', ('', b'This is a message'))] objects_to_close = [] attributes_to_edit = {'Author': b'robot', 'When': 1754911052, 'cmd': b'Submit', 'exp': b'demo', ...} def post(self, message, msg_id=None, reply=False, attributes=None, attachments=None, suppress_email_notification=False, encoding=None, timeout=None, **kwargs): """ Posts message to the logbook. If msg_id is not specified new message will be created, otherwise existing message will be edited, or a reply (if reply=True) to it will be created. This method returns the msg_id of the newly created message. :param message: string with message text :param msg_id: ID number of message to edit or reply. If not specified new message is created. :param reply: If 'True' reply to existing message is created instead of editing it :param attributes: Dictionary of attributes. Following attributes are used internally by the elog and will be ignored: Text, Date, Encoding, Reply to, In reply to, Locked by, Attachment :param attachments: list of: - file like objects which read() will return bytes (if file_like_object.name is not defined, default name "attachment<i>" will be used. - paths to the files All items will be appended as attachment to the elog entry. In case of unknown attachment an exception LogbookInvalidAttachment will be raised. :param suppress_email_notification: If set to True or 1, E-Mail notification will be suppressed, defaults to False. :param encoding: Defines encoding of the message. Can be: 'plain' -> plain text, 'html'->html-text, 'ELCode' --> elog formatting syntax :param timeout: Define the timeout to be used by the post request. Its value is directly passed to the requests post. Use None to disable the request timeout. :param kwargs: Anything in the kwargs will be interpreted as attribute. e.g.: logbook.post('Test text', Author='Rok Vintar), "Author" will be sent as an attribute. If named same as one of the attributes defined in "attributes", kwargs will have priority. :return: msg_id """ attributes = attributes or {} attributes = {**attributes, **kwargs} # kwargs as attributes with higher priority attachments = attachments or [] if encoding is not None: if encoding not in ['plain', 'HTML', 'ELCode']: raise LogbookMessageRejected('Invalid message encoding. Valid options: plain, HTML, ELCode.') attributes['Encoding'] = encoding if suppress_email_notification: attributes["suppress"] = 1 # THE ATTACHMENT STRATEGY WHEN DEALING WITH POST MODIFICATION # # 1. Does the message on the server have already attachments? # 1.1 - We read the message getting the existing attachment list. # 1.2 - Add to the attributes dictionary one line for each attachment like this: # attributes['attachmentN'] = timestamped_filename_name # # 2. Do we have new attachments? # 2.1 - Those are in the new_attachment_list. This is a list of this type: # [ ('attfileN', ('filename', fileobject)) ] # 2.2 - We need to loop over all the new attachments: # 2.2.1 - Does a file already on the server with the same name exist? # 2.2.1.1 - No: OK. Then we go ahead with the next attachment. # 2.2.1.2 - Yes: # 2.2.1.2.1 - Are the two files identical? # 2.2.1.2.1.1 - Yes: then we remove this current entry from the new_attachment_list and we leave the one # already on server. # 2.2.1.2.1.2 - No: # 2.2.1.2.1.2.1 - Then the file has been update. # 2.2.1.2.1.2.2 - We need to remove the file on server first (using special post) # 2.2.1.2.1.2.3 - We have to remove the old attachment from the attributes dictionary. # if attachments: # here we accomplish point 2.1. # new_attachment_list is something like [ ('attfileN', ('filename', fileobject)) ] new_attachment_list, objects_to_close = self._prepare_attachments(attachments) else: objects_to_close = list() new_attachment_list = list() attributes_to_edit = dict() if msg_id: # Message exists, we can continue if reply: # Verify that there is a message on the server, otherwise do not reply to it! self._check_if_message_on_server(msg_id) # raises exception in case of none existing message attributes['reply_to'] = str(msg_id) else: # Edit existing attributes['edit_id'] = str(msg_id) attributes['skiplock'] = '1' # here we accomplish point 1.1. # existing_attachments_list is something like: # [ 'https://elog.url.com/logbook/timestamped_filename' ] msg_to_edit, attributes_to_edit, existing_attachments_list = self.read(msg_id) for attribute, data in attributes.items(): new_data = attributes.get(attribute) if new_data is not None: attributes_to_edit[attribute] = new_data i = 0 existing_attachments_filename_list = list() for attachment in existing_attachments_list: # here we accomplish point 1.2. We strip the timestamped_filename from the whole URL. attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) existing_attachments_filename_list.append(os.path.basename(attachment)[14:]) i += 1 # let's accomplish 2.2. Loop over all new attachment duplicate_attachment_list = list() for new_attachment in new_attachment_list: # the new_attachment_list is something like: # [ ('attfileN', ('filename', fileobject)) ] new_attachment_filename = new_attachment[1][0] if new_attachment_filename in existing_attachments_filename_list: # a file with the same name existing already on the server. # we need to check if the two files are the same. # read the content of the new file new_attachment_content = new_attachment[1][1].read() # don't forget to reset the fileobj to the beginning of the file new_attachment[1][1].seek(0) # get the existing attachment content attachment_index = existing_attachments_filename_list.index(new_attachment_filename) existing_attachment_content = self.download_attachment( url=existing_attachments_list[attachment_index], timeout=timeout ) # check if the two contents are the same if new_attachment_content == existing_attachment_content: # yes. then we don't upload a second copy. we remove the current entry from the list duplicate_attachment_list.append(new_attachment) else: # no. they are not the same file. we will replace the existing file with the new one # first: we need to remove the attachment from the server using the dedicated method self.delete_attachment(msg_id, attributes=attributes_to_edit, attachment_id=attachment_index, timeout=timeout, text=msg_to_edit) # now we can remove this attachment from the auxiliary lists. existing_attachments_filename_list.pop(attachment_index) existing_attachments_list.pop(attachment_index) # now we need to rebuild the attributes dictionary for the part concerning the attachments. # we remove all of them first keys_to_be_removed = list() for key in attributes_to_edit.keys(): if key.startswith('attachment'): keys_to_be_removed.append(key) if key.startswith('delatt'): keys_to_be_removed.append(key) for key in keys_to_be_removed: del attributes_to_edit[key] # now we rebuild it for i, attachment in enumerate(existing_attachments_list): attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) # remove all duplicate attachments from the new_attachment_list for attach in duplicate_attachment_list: new_attachment_list.remove(attach) else: # As we create a new message, specify creation time if not already specified in attributes if 'When' not in attributes: attributes['When'] = int(datetime.now().timestamp()) if not attributes_to_edit: attributes_to_edit = attributes # Remove any attributes that should not be sent _remove_reserved_attributes(attributes_to_edit) # Make requests module think that Text is a "file". This is the only way to force requests to send data as # multipart/form-data even if there are no attachments. Elog understands only multipart/form-data new_attachment_list.append(('Text', ('', message.encode('iso-8859-1')))) # Base attributes are common to all messages self._add_base_msg_attributes(attributes_to_edit) # Keys in attributes cannot have certain characters like whitespaces or dashes for the http request attributes_to_edit = _replace_special_characters_in_attribute_keys(attributes_to_edit) # All string values in the attributes must be encoded in latin1 attributes_to_edit = _encode_values(attributes_to_edit) try: > response = requests.post(self._url, data=attributes_to_edit, files=new_attachment_list, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:288: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:115: in post return request("post", url, data=data, json=json, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1efe497160> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe4977f0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: self = <urllib3.connection.HTTPConnection object at 0x7f1efe61aa00> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efe497a90> method = 'GET', url = '/demo/None', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'unm=robot;upwd=me1T.2jUUqQNa1wNuey9zNBOmOa4eILOaPb.ZSZjpn4;'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/None', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1efe61aa00> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1efe497e80> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo/None', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efe497a90> _stacktrace = <traceback object at 0x7f1efe618d00> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1efe2c1a90>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: > response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1efe497e80> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: def test_post(): elog = get_test_elog() title = "AUTHOR_OVERRIDE_TEST" text = "This is a message" author = "robot" > elog.post(text, attributes = {"Author": author}) tests/test_utils_elog.py:123: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ slic/utils/elog.py:16: in post return self._log.post(*args, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:307: in post self._check_if_message_on_server(msg_id) # raises exceptions if no message or no response from server _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <elog.logbook.Logbook object at 0x7f1efe2c1a90>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) # If there is no message code 200 will be returned (OK) and _validate_response will not recognise it # but there will be some error in the html code. resp_message, resp_headers, resp_msg_id = _validate_response(response) # If there is no message, code 200 will be returned (OK) but there will be some error indication in # the html code. if re.findall('<td.*?class="errormsg".*?>.*?</td>', resp_message.decode('utf-8', 'ignore'), flags=re.DOTALL): raise LogbookInvalidMessageID('Message with ID: ' + str(msg_id) + ' does not exist on logbook.') except requests.Timeout as e: # Catch here a timeout o the post request. # Raise the logbook exception and let the user handle it raise LogbookServerTimeout('{0} method cannot be completed because of a network timeout:\n' + '{1}'.format(sys._getframe().f_code.co_name, e)) except requests.RequestException as e: > raise LogbookServerProblem('No response from the logbook server.\nDetails: ' + '{0}'.format(e)) E elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. E Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1efe61aa00>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:601: LogbookServerProblem📌 Teardown phase
duration:
0.0002941722050309181outcome:
passed
↳ Function: test_screenshot
-
❌ Test 164
📌 Setup phase
duration:
0.00015840865671634674outcome:
passed📌 Call phase
duration:
0.009291501250118017outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused'))traceback:
- path: tests/test_utils_elog.py lineno: 144 message: None - path: slic/utils/elog.py lineno: 21 message: in screenshot - path: slic/utils/elog.py lineno: 16 message: in post - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 307 message: in post - path: .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py lineno: 601 message: LogbookServerProblemlongrepr:
self = <urllib3.connection.HTTPConnection object at 0x7f1eff1513a0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efeeb9b80> method = 'POST', url = '/demo/' body = b'--9730219655180ece925e70f61ffc7eab\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--9730219655180e...-data; name="Text"; filename=""\r\n\r\nSCREENSHOT_INTEGRATION_TEST_MSG_456\r\n--9730219655180ece925e70f61ffc7eab--\r\n' headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '885', 'Content-Type': 'multipart/form-data; boundary=9730219655180ece925e70f61ffc7eab'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1eff1513a0> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1eff1513a0>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1efeeb9c40> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'POST', url = '/demo/', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1513a0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1efeeb9b80> _stacktrace = <traceback object at 0x7f1efe499540> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1513a0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1efeeb9640> message = 'SCREENSHOT_INTEGRATION_TEST_MSG_456', msg_id = None, reply = False attributes = {'Author': 'robot', 'When': 1754911052, 'cmd': 'Submit', 'exp': 'demo', ...} attachments = ['/tmp/tmpfbcq1zai.png'], suppress_email_notification = False encoding = None, timeout = None, kwargs = {'Author': 'robot'} new_attachment_list = [('attfile0', ('tmpfbcq1zai.png', <_io.BufferedReader name='/tmp/tmpfbcq1zai.png'>)), ('Text', ('', b'SCREENSHOT_INTEGRATION_TEST_MSG_456'))] objects_to_close = [<_io.BufferedReader name='/tmp/tmpfbcq1zai.png'>] attributes_to_edit = {'Author': b'robot', 'When': 1754911052, 'cmd': b'Submit', 'exp': b'demo', ...} def post(self, message, msg_id=None, reply=False, attributes=None, attachments=None, suppress_email_notification=False, encoding=None, timeout=None, **kwargs): """ Posts message to the logbook. If msg_id is not specified new message will be created, otherwise existing message will be edited, or a reply (if reply=True) to it will be created. This method returns the msg_id of the newly created message. :param message: string with message text :param msg_id: ID number of message to edit or reply. If not specified new message is created. :param reply: If 'True' reply to existing message is created instead of editing it :param attributes: Dictionary of attributes. Following attributes are used internally by the elog and will be ignored: Text, Date, Encoding, Reply to, In reply to, Locked by, Attachment :param attachments: list of: - file like objects which read() will return bytes (if file_like_object.name is not defined, default name "attachment<i>" will be used. - paths to the files All items will be appended as attachment to the elog entry. In case of unknown attachment an exception LogbookInvalidAttachment will be raised. :param suppress_email_notification: If set to True or 1, E-Mail notification will be suppressed, defaults to False. :param encoding: Defines encoding of the message. Can be: 'plain' -> plain text, 'html'->html-text, 'ELCode' --> elog formatting syntax :param timeout: Define the timeout to be used by the post request. Its value is directly passed to the requests post. Use None to disable the request timeout. :param kwargs: Anything in the kwargs will be interpreted as attribute. e.g.: logbook.post('Test text', Author='Rok Vintar), "Author" will be sent as an attribute. If named same as one of the attributes defined in "attributes", kwargs will have priority. :return: msg_id """ attributes = attributes or {} attributes = {**attributes, **kwargs} # kwargs as attributes with higher priority attachments = attachments or [] if encoding is not None: if encoding not in ['plain', 'HTML', 'ELCode']: raise LogbookMessageRejected('Invalid message encoding. Valid options: plain, HTML, ELCode.') attributes['Encoding'] = encoding if suppress_email_notification: attributes["suppress"] = 1 # THE ATTACHMENT STRATEGY WHEN DEALING WITH POST MODIFICATION # # 1. Does the message on the server have already attachments? # 1.1 - We read the message getting the existing attachment list. # 1.2 - Add to the attributes dictionary one line for each attachment like this: # attributes['attachmentN'] = timestamped_filename_name # # 2. Do we have new attachments? # 2.1 - Those are in the new_attachment_list. This is a list of this type: # [ ('attfileN', ('filename', fileobject)) ] # 2.2 - We need to loop over all the new attachments: # 2.2.1 - Does a file already on the server with the same name exist? # 2.2.1.1 - No: OK. Then we go ahead with the next attachment. # 2.2.1.2 - Yes: # 2.2.1.2.1 - Are the two files identical? # 2.2.1.2.1.1 - Yes: then we remove this current entry from the new_attachment_list and we leave the one # already on server. # 2.2.1.2.1.2 - No: # 2.2.1.2.1.2.1 - Then the file has been update. # 2.2.1.2.1.2.2 - We need to remove the file on server first (using special post) # 2.2.1.2.1.2.3 - We have to remove the old attachment from the attributes dictionary. # if attachments: # here we accomplish point 2.1. # new_attachment_list is something like [ ('attfileN', ('filename', fileobject)) ] new_attachment_list, objects_to_close = self._prepare_attachments(attachments) else: objects_to_close = list() new_attachment_list = list() attributes_to_edit = dict() if msg_id: # Message exists, we can continue if reply: # Verify that there is a message on the server, otherwise do not reply to it! self._check_if_message_on_server(msg_id) # raises exception in case of none existing message attributes['reply_to'] = str(msg_id) else: # Edit existing attributes['edit_id'] = str(msg_id) attributes['skiplock'] = '1' # here we accomplish point 1.1. # existing_attachments_list is something like: # [ 'https://elog.url.com/logbook/timestamped_filename' ] msg_to_edit, attributes_to_edit, existing_attachments_list = self.read(msg_id) for attribute, data in attributes.items(): new_data = attributes.get(attribute) if new_data is not None: attributes_to_edit[attribute] = new_data i = 0 existing_attachments_filename_list = list() for attachment in existing_attachments_list: # here we accomplish point 1.2. We strip the timestamped_filename from the whole URL. attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) existing_attachments_filename_list.append(os.path.basename(attachment)[14:]) i += 1 # let's accomplish 2.2. Loop over all new attachment duplicate_attachment_list = list() for new_attachment in new_attachment_list: # the new_attachment_list is something like: # [ ('attfileN', ('filename', fileobject)) ] new_attachment_filename = new_attachment[1][0] if new_attachment_filename in existing_attachments_filename_list: # a file with the same name existing already on the server. # we need to check if the two files are the same. # read the content of the new file new_attachment_content = new_attachment[1][1].read() # don't forget to reset the fileobj to the beginning of the file new_attachment[1][1].seek(0) # get the existing attachment content attachment_index = existing_attachments_filename_list.index(new_attachment_filename) existing_attachment_content = self.download_attachment( url=existing_attachments_list[attachment_index], timeout=timeout ) # check if the two contents are the same if new_attachment_content == existing_attachment_content: # yes. then we don't upload a second copy. we remove the current entry from the list duplicate_attachment_list.append(new_attachment) else: # no. they are not the same file. we will replace the existing file with the new one # first: we need to remove the attachment from the server using the dedicated method self.delete_attachment(msg_id, attributes=attributes_to_edit, attachment_id=attachment_index, timeout=timeout, text=msg_to_edit) # now we can remove this attachment from the auxiliary lists. existing_attachments_filename_list.pop(attachment_index) existing_attachments_list.pop(attachment_index) # now we need to rebuild the attributes dictionary for the part concerning the attachments. # we remove all of them first keys_to_be_removed = list() for key in attributes_to_edit.keys(): if key.startswith('attachment'): keys_to_be_removed.append(key) if key.startswith('delatt'): keys_to_be_removed.append(key) for key in keys_to_be_removed: del attributes_to_edit[key] # now we rebuild it for i, attachment in enumerate(existing_attachments_list): attributes_to_edit[f'attachment{i}'] = os.path.basename(attachment) # remove all duplicate attachments from the new_attachment_list for attach in duplicate_attachment_list: new_attachment_list.remove(attach) else: # As we create a new message, specify creation time if not already specified in attributes if 'When' not in attributes: attributes['When'] = int(datetime.now().timestamp()) if not attributes_to_edit: attributes_to_edit = attributes # Remove any attributes that should not be sent _remove_reserved_attributes(attributes_to_edit) # Make requests module think that Text is a "file". This is the only way to force requests to send data as # multipart/form-data even if there are no attachments. Elog understands only multipart/form-data new_attachment_list.append(('Text', ('', message.encode('iso-8859-1')))) # Base attributes are common to all messages self._add_base_msg_attributes(attributes_to_edit) # Keys in attributes cannot have certain characters like whitespaces or dashes for the http request attributes_to_edit = _replace_special_characters_in_attribute_keys(attributes_to_edit) # All string values in the attributes must be encoded in latin1 attributes_to_edit = _encode_values(attributes_to_edit) try: > response = requests.post(self._url, data=attributes_to_edit, files=new_attachment_list, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:288: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:115: in post return request("post", url, data=data, json=json, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1efeeb9c40> request = <PreparedRequest [POST]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1513a0>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: self = <urllib3.connection.HTTPConnection object at 0x7f1eff1e1520> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:199: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('localhost', 8080), timeout = None, source_address = None socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff151190> method = 'GET', url = '/demo/None', body = None headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'unm=robot;upwd=me1T.2jUUqQNa1wNuey9zNBOmOa4eILOaPb.ZSZjpn4;'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None, preload_content = False decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/demo/None', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] <https://github.com/urllib3/urllib3/issues/651> release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:495: in _make_request conn.request( .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:441: in request self.endheaders() .pixi/envs/default/lib/python3.8/http/client.py:1251: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) .pixi/envs/default/lib/python3.8/http/client.py:1011: in _send_output self.send(msg) .pixi/envs/default/lib/python3.8/http/client.py:951: in send self.connect() .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:279: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <urllib3.connection.HTTPConnection object at 0x7f1eff1e1520> def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused .pixi/envs/default/lib/python3.8/site-packages/urllib3/connection.py:214: NewConnectionError The above exception was the direct cause of the following exception: self = <requests.adapters.HTTPAdapter object at 0x7f1eff151b80> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'GET', url = '/demo/None', response = None error = NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f1eff151190> _stacktrace = <traceback object at 0x7f1efe689d40> def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: self = <elog.logbook.Logbook object at 0x7f1efeeb9640>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: > response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:581: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:73: in get return request("get", url, params=params, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) .pixi/envs/default/lib/python3.8/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <requests.adapters.HTTPAdapter object at 0x7f1eff151b80> request = <PreparedRequest [GET]>, stream = False timeout = Timeout(connect=None, read=None, total=None), verify = False cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) <timeouts>` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/requests/adapters.py:700: ConnectionError During handling of the above exception, another exception occurred: mock_screenshot_class = <MagicMock name='Screenshot' id='139771092232272'> @patch("slic.utils.elog.Screenshot") def test_screenshot(mock_screenshot_class): with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp: fake_path = tmp.name tmp.write(b"fake image data") mock_instance = mock_screenshot_class.return_value mock_instance.shoot.return_value = [fake_path] elog = get_test_elog() test_msg = "SCREENSHOT_INTEGRATION_TEST_MSG_456" > entry_id = elog.screenshot(message=test_msg) tests/test_utils_elog.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ slic/utils/elog.py:21: in screenshot self.post(message, **kwargs) slic/utils/elog.py:16: in post return self._log.post(*args, **kwargs) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:307: in post self._check_if_message_on_server(msg_id) # raises exceptions if no message or no response from server _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <elog.logbook.Logbook object at 0x7f1efeeb9640>, msg_id = None timeout = None def _check_if_message_on_server(self, msg_id, timeout=None): """Try to load page for specific message. If there is a html tag like <td class="errormsg"> then there is no such message. :param msg_id: ID of message to be checked :params timeout: The value of timeout to be passed to the get request :return: """ request_headers = dict() if self._user or self._password: request_headers['Cookie'] = self._make_user_and_pswd_cookie() try: response = requests.get(self._url + str(msg_id), headers=request_headers, allow_redirects=False, verify=False, timeout=timeout) # If there is no message code 200 will be returned (OK) and _validate_response will not recognise it # but there will be some error in the html code. resp_message, resp_headers, resp_msg_id = _validate_response(response) # If there is no message, code 200 will be returned (OK) but there will be some error indication in # the html code. if re.findall('<td.*?class="errormsg".*?>.*?</td>', resp_message.decode('utf-8', 'ignore'), flags=re.DOTALL): raise LogbookInvalidMessageID('Message with ID: ' + str(msg_id) + ' does not exist on logbook.') except requests.Timeout as e: # Catch here a timeout o the post request. # Raise the logbook exception and let the user handle it raise LogbookServerTimeout('{0} method cannot be completed because of a network timeout:\n' + '{1}'.format(sys._getframe().f_code.co_name, e)) except requests.RequestException as e: > raise LogbookServerProblem('No response from the logbook server.\nDetails: ' + '{0}'.format(e)) E elog.logbook_exceptions.LogbookServerProblem: No response from the logbook server. E Details: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /demo/None (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1eff1e1520>: Failed to establish a new connection: [Errno 111] Connection refused')) .pixi/envs/default/lib/python3.8/site-packages/elog/logbook.py:601: LogbookServerProblem📌 Teardown phase
duration:
0.0003057657741010189outcome:
passed
-
-
📄 test_utils_hastepics.py
↳ Function: test_motor_init_strips_suffixes
-
❌ Test 218
📌 Setup phase
duration:
0.00035137496888637543outcome:
passed📌 Call phase
duration:
0.0040621450170874596outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_hastepics.py lineno: 46 message: AssertionError: assert 'TEST:SIM:M1.' == 'TEST:SIM:M1' - TEST:SIM:M1 + TEST:SIM:M1. ? +traceback:
- path: tests/test_utils_hastepics.py lineno: 46 message: AssertionErrorlongrepr:
def test_motor_init_strips_suffixes(): m1 = Motor("TEST:SIM:M1.VAL") > assert m1._prefix == "TEST:SIM:M1" E AssertionError: assert 'TEST:SIM:M1.' == 'TEST:SIM:M1' E E - TEST:SIM:M1 E + TEST:SIM:M1. E ? + tests/test_utils_hastepics.py:46: AssertionError📌 Teardown phase
duration:
0.00022141216322779655outcome:
passed
↳ Function: test_disabled_removed_relative_to_upstream
-
❌ Test 220
📌 Setup phase
duration:
0.00014946889132261276outcome:
passed📌 Call phase
duration:
0.001401647925376892outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_hastepics.py lineno: 67 message: AssertionError: _extras is empty; expected at least one entry assert 0 > 0 + where 0 = len({})traceback:
- path: tests/test_utils_hastepics.py lineno: 67 message: AssertionErrorlongrepr:
def test_disabled_removed_relative_to_upstream(): m = Motor("TEST:SIM:M7") init_list = tuple(getattr(m, "_init_list", ())) extras = dict(getattr(m, "_extras", {})) assert len(init_list) > 0, "_init_list is empty; expected at least one field" > assert len(extras) > 0, "_extras is empty; expected at least one entry" E AssertionError: _extras is empty; expected at least one entry E assert 0 > 0 E + where 0 = len({}) tests/test_utils_hastepics.py:67: AssertionError📌 Teardown phase
duration:
0.0002365950495004654outcome:
passed
↳ Function: test_speedup_motor_instantiation
-
❌ Test 224
📌 Setup phase
duration:
0.0002030991017818451outcome:
passed📌 Call phase
duration:
0.03656577970832586outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py lineno: 254 message: epics.motor.MotorException: TEST:SIM:M8 is not an Epics Motortraceback:
- path: tests/test_utils_hastepics.py lineno: 157 message: None - path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py lineno: 254 message: MotorExceptionlongrepr:
def test_speedup_motor_instantiation(): """On exige juste pas de grosse régression vs EPICS.""" t0 = time.perf_counter() Motor("TEST:SIM:M6") t1 = time.perf_counter() t2 = time.perf_counter() > epics.Motor("TEST:SIM:M8") tests/test_utils_hastepics.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <epics.Motor: TEST:SIM:M8.: '0.0'>, name = 'TEST:SIM:M8', timeout = 3.0 def __init__(self, name=None, timeout=3.0): if name is None: raise MotorException("must supply motor name") if name.endswith('.VAL'): name = name[:-4] if name.endswith('.'): name = name[:-1] self._prefix = name device.Device.__init__(self, name, delim='.', attrs=self._init_list, timeout=timeout) # make sure this is really a motor! rectype = self.get('RTYP') if rectype != 'motor': > raise MotorException("%s is not an Epics Motor" % name) E epics.motor.MotorException: TEST:SIM:M8 is not an Epics Motor /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py:254: MotorException📌 Teardown phase
duration:
0.00027246028184890747outcome:
passed
↳ Function: test_speedup_motor_PV
-
❌ Test 225
📌 Setup phase
duration:
0.00018363678827881813outcome:
passed📌 Call phase
duration:
0.028660180978477outcome:
failedcrash:
path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py lineno: 254 message: epics.motor.MotorException: TEST:SIM:M14 is not an Epics Motortraceback:
- path: tests/test_utils_hastepics.py lineno: 169 message: None - path: /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py lineno: 254 message: MotorExceptionlongrepr:
def test_speedup_motor_PV(): # baseline EPICS > m_epics = epics.Motor("TEST:SIM:M14") tests/test_utils_hastepics.py:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <epics.Motor: TEST:SIM:M14.: '0.0'>, name = 'TEST:SIM:M14', timeout = 3.0 def __init__(self, name=None, timeout=3.0): if name is None: raise MotorException("must supply motor name") if name.endswith('.VAL'): name = name[:-4] if name.endswith('.'): name = name[:-1] self._prefix = name device.Device.__init__(self, name, delim='.', attrs=self._init_list, timeout=timeout) # make sure this is really a motor! rectype = self.get('RTYP') if rectype != 'motor': > raise MotorException("%s is not an Epics Motor" % name) E epics.motor.MotorException: TEST:SIM:M14 is not an Epics Motor /workspace/tligui_y/slic/.pixi/envs/default/lib/python3.8/site-packages/pyepics-3.4.3-py3.9.egg/epics/motor.py:254: MotorException📌 Teardown phase
duration:
0.00026385392993688583outcome:
passed
-
-
📄 test_utils_logcfg.py
↳ Function: test_import_logging_once_per_module
-
❌ Test 241
📌 Setup phase
duration:
0.00016429461538791656outcome:
passed📌 Call phase
duration:
1.6963239032775164outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_logcfg.py lineno: 78 message: AssertionError: Expected 1 import log for 'math', found 0 assert 0 == 1traceback:
- path: tests/test_utils_logcfg.py lineno: 78 message: AssertionErrorlongrepr:
def test_import_logging_once_per_module(): code = textwrap.dedent(""" from slic.utils.logcfg import * import math import io import random """) with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as tmp: tmp.write(code) tmp_path = tmp.name env = os.environ.copy() root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) env["PYTHONPATH"] = root_path + os.pathsep + env.get("PYTHONPATH", "") result = subprocess.run([sys.executable, tmp_path], capture_output=True, text=True, env=env) os.remove(tmp_path) assert result.returncode == 0, f"Script failed:\n{result.stderr}" stderr = result.stderr print(stderr) lines = stderr.splitlines() for mod in ["math", "io", "random"]: count = sum(1 for line in lines if f"importing: {mod}" in line) > assert count == 1, f"Expected 1 import log for '{mod}', found {count}" E AssertionError: Expected 1 import log for 'math', found 0 E assert 0 == 1 tests/test_utils_logcfg.py:78: AssertionError📌 Teardown phase
duration:
0.0003606691025197506outcome:
passed
-
-
📄 test_utils_tqdm_mod.py
↳ Function: test_float_alignment_in_bar
-
❌ Test 485
📌 Setup phase
duration:
0.000126528088003397outcome:
passed📌 Call phase
duration:
0.0016154809854924679outcome:
failedcrash:
path: /workspace/tligui_y/slic/tests/test_utils_tqdm_mod.py lineno: 130 message: assert 3 == 1 + where 3 = len({50, 64, 65}) + where {50, 64, 65} = set([50, 64, 64, 65, 65])traceback:
- path: tests/test_utils_tqdm_mod.py lineno: 130 message: AssertionErrorlongrepr:
def test_float_alignment_in_bar(): # Capture the tqdm output into a string buffer f = io.StringIO() with redirect_stdout(f): bar = tqdm_mod(total=100.12, desc="AlignBar", file=f, miniters=1, mininterval=0) bar.set(1.3333) bar.set(12.5) bar.set(99.89) bar.set(100.12) bar.close() # Extract lines containing the label lines = extract_lines(f.getvalue(), "AlignBar") # Expected formatted values using format_sizeof expected_values = [ "1.3/100.1", "12.5/100.1", "99.9/100.1", "100.1/100.1", ] # Extract the actual padded float/total strings from the full lines values = [] for line in lines: match = re.search(r"(\d{1,3}\.\d)/100\.1", line) if match: values.append(match.group(0)) # Ensure raw 100.12 never appears : format_sizeof must have truncated it assert all("100.12" not in line for line in lines), "Unrounded value '100.12' found in output!" # Check all expected values appear rounded as expected by format_sizeof for expected in expected_values: assert expected in values, f"Missing expected value: {expected}" # Check that all values are visually aligned, output with same length, to ensure that format_sizeof add the good number avec spaces print("\n") bar_segments = [] for line in lines: match = re.search(r".*?\]", line) if match: bar_segments.append(match.group(0)) print(match.group(0)) lengths = [len(seg) for seg in bar_segments] > assert len(set(lengths)) == 1 E assert 3 == 1 E + where 3 = len({50, 64, 65}) E + where {50, 64, 65} = set([50, 64, 64, 65, 65]) tests/test_utils_tqdm_mod.py:130: AssertionError📌 Teardown phase
duration:
0.00016647297888994217outcome:
passed
-
📚 Collected files
✅ (1 tests)
-
✅
- Outcome:
passed - result:
- nodeid: . type: Dir - Outcome:
✅ ci-reports (13 tests)
-
✅ ci-reports
- Outcome:
passed - result:
- nodeid: ci-reports/allure type: Dir - nodeid: ci-reports/junit type: Dir - nodeid: ci-reports/markdown type: Dir-
✅ ci-reports/allure
- Outcome:
passed - result:
- nodeid: ci-reports/allure/data type: Dir - nodeid: ci-reports/allure/export type: Dir - nodeid: ci-reports/allure/history type: Dir - nodeid: ci-reports/allure/plugin type: Dir - nodeid: ci-reports/allure/widgets type: Dir - Outcome:
-
✅ ci-reports/allure/data
- Outcome:
passed - result:
- nodeid: ci-reports/allure/data/test-cases type: Dir - Outcome:
-
✅ ci-reports/allure/data/test-cases
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/export
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/history
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/plugin
- Outcome:
passed - result:
- nodeid: ci-reports/allure/plugin/behaviors type: Dir - nodeid: ci-reports/allure/plugin/packages type: Dir - nodeid: ci-reports/allure/plugin/screen-diff type: Dir - Outcome:
-
✅ ci-reports/allure/plugin/behaviors
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/plugin/packages
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/plugin/screen-diff
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/allure/widgets
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/junit
- Outcome:
passed - result:
[] - Outcome:
-
✅ ci-reports/markdown
- Outcome:
passed - result:
[] - Outcome:
- Outcome:
✅ morbidissimo (6 tests)
-
✅ morbidissimo
- Outcome:
passed - result:
- nodeid: morbidissimo/morbidissimo type: Package-
✅ morbidissimo/morbidissimo
- Outcome:
passed - result:
- nodeid: morbidissimo/morbidissimo/modman type: Package - nodeid: morbidissimo/morbidissimo/morioc type: Package - Outcome:
-
✅ morbidissimo/morbidissimo/modman
- Outcome:
passed - result:
- nodeid: morbidissimo/morbidissimo/modman/scripts type: Dir - Outcome:
-
✅ morbidissimo/morbidissimo/modman/scripts
- Outcome:
passed - result:
[] - Outcome:
-
✅ morbidissimo/morbidissimo/morioc
- Outcome:
passed - result:
- nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py type: Module - Outcome:
-
✅ morbidissimo/morbidissimo/morioc/test_infer_type.py
- Outcome:
passed - result:
- nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_type_str type: Function lineno: 14 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_type_float type: Function lineno: 17 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_type_int type: Function lineno: 20 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_value_str type: Function lineno: 24 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_value_long_str type: Function lineno: 27 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_value_float type: Function lineno: 32 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_value_int type: Function lineno: 35 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_empty_value_str type: Function lineno: 39 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_empty_value_float type: Function lineno: 42 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_empty_value_int type: Function lineno: 45 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_pstrue_str type: Function lineno: 49 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_pstrue_float type: Function lineno: 52 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_pstrue_int type: Function lineno: 55 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_psfalse_str type: Function lineno: 59 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_psfalse_float type: Function lineno: 62 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_psfalse_int type: Function lineno: 65 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_None type: Function lineno: 69 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_True type: Function lineno: 72 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_False type: Function lineno: 75 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_nan type: Function lineno: 78 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np_nan type: Function lineno: 81 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np1D_int type: Function lineno: 85 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np2D_int type: Function lineno: 91 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np1D_float type: Function lineno: 99 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np2D_float type: Function lineno: 105 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np1D_bool type: Function lineno: 114 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np1D_object type: Function lineno: 119 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np_scalar_int type: Function lineno: 126 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np_scalar_float type: Function lineno: 131 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_np_scalar_bool type: Function lineno: 136 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_list type: Function lineno: 145 - nodeid: morbidissimo/morbidissimo/morioc/test_infer_type.py::test_it_tuple type: Function lineno: 150 - Outcome:
- Outcome:
✅ outputs (1 tests)
-
✅ outputs
- Outcome:
passed - result:
[] - Outcome:
✅ slic (30 tests)
-
✅ slic
- Outcome:
passed - result:
- nodeid: slic/core type: Package - nodeid: slic/devices type: Package - nodeid: slic/gui type: Package - nodeid: slic/utils type: Package-
✅ slic/core
- Outcome:
passed - result:
- nodeid: slic/core/acquisition type: Package - nodeid: slic/core/adjustable type: Package - nodeid: slic/core/condition type: Package - nodeid: slic/core/device type: Package - nodeid: slic/core/scanner type: Package - nodeid: slic/core/sensor type: Package - nodeid: slic/core/task type: Package - Outcome:
-
✅ slic/core/acquisition
- Outcome:
passed - result:
- nodeid: slic/core/acquisition/broker type: Package - Outcome:
-
✅ slic/core/acquisition/broker
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/adjustable
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/condition
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/device
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/scanner
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/sensor
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/core/task
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices
- Outcome:
passed - result:
- nodeid: slic/devices/cameras type: Package - nodeid: slic/devices/endstations type: Package - nodeid: slic/devices/general type: Package - nodeid: slic/devices/loptics type: Package - nodeid: slic/devices/timing type: Package - nodeid: slic/devices/xdiagnostics type: Package - nodeid: slic/devices/xoptics type: Package - Outcome:
-
✅ slic/devices/cameras
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/endstations
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/general
- Outcome:
passed - result:
- nodeid: slic/devices/general/detectors type: Package - nodeid: slic/devices/general/unused type: Dir - Outcome:
-
✅ slic/devices/general/detectors
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/general/unused
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/loptics
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/timing
- Outcome:
passed - result:
- nodeid: slic/devices/timing/events type: Package - Outcome:
-
✅ slic/devices/timing/events
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/xdiagnostics
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/xoptics
- Outcome:
passed - result:
- nodeid: slic/devices/xoptics/slits type: Package - nodeid: slic/devices/xoptics/unused type: Dir - Outcome:
-
✅ slic/devices/xoptics/slits
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/devices/xoptics/unused
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/gui
- Outcome:
passed - result:
- nodeid: slic/gui/daqpanels type: Package - nodeid: slic/gui/widgets type: Package - Outcome:
-
✅ slic/gui/daqpanels
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/gui/widgets
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/utils
- Outcome:
passed - result:
- nodeid: slic/utils/ioc type: Package - nodeid: slic/utils/unused type: Dir - Outcome:
-
✅ slic/utils/ioc
- Outcome:
passed - result:
[] - Outcome:
-
✅ slic/utils/unused
- Outcome:
passed - result:
- nodeid: slic/utils/unused/xsim type: Package - Outcome:
-
✅ slic/utils/unused/xsim
- Outcome:
passed - result:
[] - Outcome:
- Outcome:
✅ temp-ci (1 tests)
-
✅ temp-ci
- Outcome:
passed - result:
[] - Outcome:
✅ tests (47 tests)
-
✅ tests
- Outcome:
passed - result:
- nodeid: tests/test_utils_argfwd.py type: Module - nodeid: tests/test_utils_ask_yes_no.py type: Module - nodeid: tests/test_utils_channels.py type: Module - nodeid: tests/test_utils_config.py type: Module - nodeid: tests/test_utils_cpint.py type: Module - nodeid: tests/test_utils_debug.py type: Module - nodeid: tests/test_utils_dictext.py type: Module - nodeid: tests/test_utils_dotdir.py type: Module - nodeid: tests/test_utils_elog.py type: Module - nodeid: tests/test_utils_eval.py type: Module - nodeid: tests/test_utils_exceptions.py type: Module - nodeid: tests/test_utils_get_adj.py type: Module - nodeid: tests/test_utils_hastepics.py type: Module - nodeid: tests/test_utils_ipy.py type: Module - nodeid: tests/test_utils_jsonext.py type: Module - nodeid: tests/test_utils_lazypv.py type: Module - nodeid: tests/test_utils_logcfg.py type: Module - nodeid: tests/test_utils_logign.py type: Module - nodeid: tests/test_utils_marker.py type: Module - nodeid: tests/test_utils_metaclasses.py type: Module - nodeid: tests/test_utils_namespace.py type: Module - nodeid: tests/test_utils_npy.py type: Module - nodeid: tests/test_utils_opmsg.py type: Module - nodeid: tests/test_utils_path.py type: Module - nodeid: tests/test_utils_picklio.py type: Module - nodeid: tests/test_utils_printing.py type: Module - nodeid: tests/test_utils_pv.py type: Module - nodeid: tests/test_utils_pvpreload.py type: Module - nodeid: tests/test_utils_pyepics.py type: Module - nodeid: tests/test_utils_rangebar.py type: Module - nodeid: tests/test_utils_readable.py type: Module - nodeid: tests/test_utils_registry.py type: Module - nodeid: tests/test_utils_richcfg.py type: Module - nodeid: tests/test_utils_run_later.py type: Module - nodeid: tests/test_utils_sendmail.py type: Module - nodeid: tests/test_utils_shortcut.py type: Module - nodeid: tests/test_utils_snapshot.py type: Module - nodeid: tests/test_utils_termtitle.py type: Module - nodeid: tests/test_utils_tqdm_mod.py type: Module - nodeid: tests/test_utils_trinary.py type: Module - nodeid: tests/test_utils_typecast.py type: Module - nodeid: tests/test_utils_utils.py type: Module - nodeid: tests/test_utils_xrange.py type: Module-
✅ tests/test_utils_argfwd.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_argfwd.py::test_split_at[lst0-2-expected0] type: Function lineno: 8 - nodeid: tests/test_utils_argfwd.py::test_split_at[lst1-1-expected1] type: Function lineno: 8 - nodeid: tests/test_utils_argfwd.py::test_split_at[lst2-0-expected2] type: Function lineno: 8 - nodeid: tests/test_utils_argfwd.py::test_merge_lists_unique[a0-b0-expected0] type: Function lineno: 17 - nodeid: tests/test_utils_argfwd.py::test_merge_lists_unique[a1-b1-expected1] type: Function lineno: 17 - nodeid: tests/test_utils_argfwd.py::test_merge_lists_unique[a2-b2-expected2] type: Function lineno: 17 - nodeid: tests/test_utils_argfwd.py::test_merge_dicts_unique[a0-b0-expected0] type: Function lineno: 26 - nodeid: tests/test_utils_argfwd.py::test_merge_dicts_unique[a1-b1-expected1] type: Function lineno: 26 - nodeid: tests/test_utils_argfwd.py::test_merge_dicts_unique[a2-b2-expected2] type: Function lineno: 26 - nodeid: tests/test_utils_argfwd.py::test_make_params_pos_basic[pos0-expected_names0] type: Function lineno: 35 - nodeid: tests/test_utils_argfwd.py::test_make_params_pos_basic[pos1-expected_names1] type: Function lineno: 35 - nodeid: tests/test_utils_argfwd.py::test_make_params_pos_basic[pos2-expected_names2] type: Function lineno: 35 - nodeid: tests/test_utils_argfwd.py::test_make_params_kw_basic[kw0-expected_keys0-expected_defaults0] type: Function lineno: 48 - nodeid: tests/test_utils_argfwd.py::test_make_params_kw_basic[kw1-expected_keys1-expected_defaults1] type: Function lineno: 48 - nodeid: tests/test_utils_argfwd.py::test_make_params_kw_basic[kw2-expected_keys2-expected_defaults2] type: Function lineno: 48 - nodeid: tests/test_utils_argfwd.py::test_make_signature_parametrized[pos0-kw0-(x, y, z=3)] type: Function lineno: 60 - nodeid: tests/test_utils_argfwd.py::test_make_signature_parametrized[pos1-kw1-(a, b=1, c=2)] type: Function lineno: 60 - nodeid: tests/test_utils_argfwd.py::test_make_signature_parametrized[pos2-kw2-(flag=False)] type: Function lineno: 60 - nodeid: tests/test_utils_argfwd.py::test_get_args_parametrized[<lambda>-expected_pos0-expected_kw0] type: Function lineno: 71 - nodeid: tests/test_utils_argfwd.py::test_get_args_parametrized[<lambda>-expected_pos1-expected_kw1] type: Function lineno: 71 - nodeid: tests/test_utils_argfwd.py::test_get_args_parametrized[<lambda>-expected_pos2-expected_kw2] type: Function lineno: 71 - nodeid: tests/test_utils_argfwd.py::test_signature_visible[wrap_all-(a, b, d=30, c=10)] type: Function lineno: 104 - nodeid: tests/test_utils_argfwd.py::test_signature_visible[wrap_skip-(a, b, c=10, d=20)] type: Function lineno: 104 - nodeid: tests/test_utils_argfwd.py::test_signature_visible[wrap_ignore_all-(x, y, c=10, d=20)] type: Function lineno: 104 - nodeid: tests/test_utils_argfwd.py::test_wrapper_behavior[wrap_all-args0-kwargs0-36] type: Function lineno: 112 - nodeid: tests/test_utils_argfwd.py::test_wrapper_behavior[wrap_all-args1-kwargs1-11] type: Function lineno: 112 - nodeid: tests/test_utils_argfwd.py::test_wrapper_behavior[wrap_skip-args2-kwargs2-10] type: Function lineno: 112 - nodeid: tests/test_utils_argfwd.py::test_wrapper_behavior[wrap_ignore_all-args3-kwargs3-10] type: Function lineno: 112 - Outcome:
-
✅ tests/test_utils_ask_yes_no.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-y-True-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-yes-True-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-n-False-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-no-False-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-user_input4-True-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-user_input5-False-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[None-user_input6-True-Question? [y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[y-y-True-Question? [Y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[y-n-False-Question? [Y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[y--True-Question? [Y/n] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[n-y-True-Question? [y/N] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[n-n-False-Question? [y/N] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no[n--False-Question? [y/N] ] type: Function lineno: 8 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[None-KeyboardInterrupt-False-n] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[None-KeyboardInterrupt-True-y] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[y-KeyboardInterrupt-False-n] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[y-KeyboardInterrupt-True-y] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[n-KeyboardInterrupt-False-n] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[None-user_input5-False-n] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[None-user_input6-True-y] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[None-user_input7-False-None] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[n-user_input8-False-None] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_c[n-user_input9-False-Invalid] type: Function lineno: 46 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-EOFError-False-n] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-EOFError-True-y] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[y-EOFError-True-y] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[n-EOFError-True-y] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[n-EOFError-False-n] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input5-True-y] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input6-False-n] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[y-EOFError-True-None] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[n-EOFError-False-None] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input9-True-None] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[n-user_input10-False-None] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input11-True-None] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input12-False-n] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_ctrl_d[None-user_input13-True-y] type: Function lineno: 79 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_mixed_sequences[None-invalid-None-user_input0-False] type: Function lineno: 117 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_mixed_sequences[None-None-notananswer-user_input1-True] type: Function lineno: 117 - nodeid: tests/test_utils_ask_yes_no.py::test_ask_yes_no_mixed_sequences[None-n-nop-user_input2-False] type: Function lineno: 117 - Outcome:
-
✅ tests/test_utils_channels.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_channels.py::test_load_channels_and_channels_class_with_professional_names type: Function lineno: 42 - Outcome:
-
✅ tests/test_utils_config.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_config.py::test_config_with_nested_and_list_data type: Function lineno: 15 - nodeid: tests/test_utils_config.py::test_config_with_strange_and_edge_keys type: Function lineno: 73 - Outcome:
-
✅ tests/test_utils_cpint.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[red] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[blue] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[yellow] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[green] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[cyan] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[magenta] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[white] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_load_color_variants_all_keys_and_types[black] type: Function lineno: 9 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects0-color_spec0- | -['Fancy', 'list'] | {'a': 7} | None-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects1-color_spec1- - -{'k': [1, 2]} - 99 - ['X', ['Y']]-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects2-color_spec2- / -[] / {} / End-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects3-color_spec3-;-['', [3, 4]];done;0-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects4-color_spec4-::-['alpha', None]::['beta', {}]::stop-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects5-color_spec5- ... -['deep', ['deeper', ['deepest']]] ... X-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects6-color_spec6- // -{'dict': {'nested': [4, 5]}} // [True, False] // 6.28-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects7-color_spec7-==-['A', ['B']]==string==C-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects8-color_spec8- ++ -['Test', None, []] ++ {'v': 0}-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects9-None-;-['no', 'color'];plain-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects10-None- | -['simple'] | | 12-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects11-None- : -[['very', 'deep']] : {'ok': True}-None] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects12-color_spec12-|-['fail', 'color']|123-ValueError] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects13-color_spec13- * -['error'] * {}-ValueError] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects14-color_spec14-//-['nope']//['bad']-ValueError] type: Function lineno: 24 - nodeid: tests/test_utils_cpint.py::test_cprint_all_cases_fancy[objects15-color_spec15----wrong--base-ValueError] type: Function lineno: 24 - Outcome:
-
✅ tests/test_utils_debug.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_debug.py::test_traceable[A-entry0-creating: A(10, 20)] type: Function lineno: 21 - nodeid: tests/test_utils_debug.py::test_traceable[A-entry1-creating: A(10, 20, e=100)] type: Function lineno: 21 - nodeid: tests/test_utils_debug.py::test_traceable[A-entry2-creating: A('foo', [1, 2, 3], flag=True, data={'x': 9})] type: Function lineno: 21 - nodeid: tests/test_utils_debug.py::test_traceable[A-entry3-creating: A(CustomObj(big), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], name='test', meta='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy...)] type: Function lineno: 21 - nodeid: tests/test_utils_debug.py::test_traceable[A-entry4-creating: A('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..., [0, 0, 0, 0, 0])] type: Function lineno: 21 - nodeid: tests/test_utils_debug.py::test_short_repr[abc-10-'abc'] type: Function lineno: 52 - nodeid: tests/test_utils_debug.py::test_short_repr[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-10-'aaaaaaaaaa...] type: Function lineno: 52 - nodeid: tests/test_utils_debug.py::test_short_repr[12345-10-12345] type: Function lineno: 52 - nodeid: tests/test_utils_debug.py::test_short_repr[value3-15-[0, 0, 0, 0, 0,...] type: Function lineno: 52 - nodeid: tests/test_utils_debug.py::test_short_repr[None-10-None] type: Function lineno: 52 - nodeid: tests/test_utils_debug.py::test_short_repr[value5-20-Obj(xxxxxxxxxxxxxxxxx...] type: Function lineno: 52 - Outcome:
-
✅ tests/test_utils_dictext.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_dictext.py::test_attrdict_getattr[data0-x-1] type: Function lineno: 12 - nodeid: tests/test_utils_dictext.py::test_attrdict_getattr[data1-world-ok] type: Function lineno: 12 - nodeid: tests/test_utils_dictext.py::test_attrdict_getattr[data2-outer-expected2] type: Function lineno: 12 - nodeid: tests/test_utils_dictext.py::test_attrdict_setattr[initial0-nouveau-123] type: Function lineno: 26 - nodeid: tests/test_utils_dictext.py::test_attrdict_setattr[initial1-b-valeur] type: Function lineno: 26 - nodeid: tests/test_utils_dictext.py::test_attrdict_delattr[initial0-a-expected_keys0] type: Function lineno: 40 - nodeid: tests/test_utils_dictext.py::test_attrdict_delattr[initial1-k-expected_keys1] type: Function lineno: 40 - nodeid: tests/test_utils_dictext.py::test_attrdict_dir[data0-expected_keys0] type: Function lineno: 55 - nodeid: tests/test_utils_dictext.py::test_attrdict_dir[data1-expected_keys1] type: Function lineno: 55 - nodeid: tests/test_utils_dictext.py::test_attrdict_getattr_and_missing[data0-x-1-None] type: Function lineno: 69 - nodeid: tests/test_utils_dictext.py::test_attrdict_getattr_and_missing[data1-missing-None-'MyDict' object has no attribute 'missing'] type: Function lineno: 69 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs0-None-kwargs0-expected0] type: Function lineno: 90 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs1-other1-kwargs1-expected1] type: Function lineno: 90 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs2-other2-kwargs2-expected2] type: Function lineno: 90 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs3-None-kwargs3-expected3] type: Function lineno: 90 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs4-other4-kwargs4-expected4] type: Function lineno: 90 - nodeid: tests/test_utils_dictext.py::test_dictupdatemixin_init_and_update[init_kwargs5-other5-kwargs5-expected5] type: Function lineno: 90 - Outcome:
-
✅ tests/test_utils_dotdir.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_dotdir.py::test_dotdir_creation_and_base_exists type: Function lineno: 14 - nodeid: tests/test_utils_dotdir.py::test_dotdir_repr_returns_path_str type: Function lineno: 28 - nodeid: tests/test_utils_dotdir.py::test_dotdir_call type: Function lineno: 35 - Outcome:
-
✅ tests/test_utils_elog.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_elog.py::test_post_local type: Function lineno: 29 - nodeid: tests/test_utils_elog.py::test_get_default_elog_instance_with_direct_password_and_real_check type: Function lineno: 53 - nodeid: tests/test_utils_elog.py::test_get_default_elog_instance_asks_password_and_opens type: Function lineno: 66 - nodeid: tests/test_utils_elog.py::test_get_default_elog_with_path_home type: Function lineno: 84 - nodeid: tests/test_utils_elog.py::test_post type: Function lineno: 115 - nodeid: tests/test_utils_elog.py::test_screenshot type: Function lineno: 131 - Outcome:
-
✅ tests/test_utils_eval.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[1 + 2-3] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[4 - 2-2] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[3 * 5-15] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[10 / 2-5.0] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[10 % 3-1] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[-5--5] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[+7-7] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[1 + 2 * 3-7] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[(1 + 2) * 3-9] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[-(-3)-3] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[-2 + 4 * 2-6] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[(4 + 5) * (6 - 1)-45] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[(((3)))-3] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[-(-(-2))--2] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[3 + +4-7] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[3 + -4--1] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[True + 1-2] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid['string'-string] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid[1e1000 * 1e1000-inf] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_valid['a' + 'b'-ab] type: Function lineno: 7 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[2 ** 3-Unsupported BinOp Pow] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[3 << 1-Unsupported BinOp LShift] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[1 < 2-Unsupported node type Compare] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[abs(3)-Unsupported node type Call] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[a + 2-Unsupported node type Name] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[string-Unsupported node type Name] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[[1, 2] + [3]-Unsupported node type List] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_raises_with_message[{1: 2}-Unsupported node type Dict] type: Function lineno: 33 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_runtime_errors[1 / 0-ZeroDivisionError] type: Function lineno: 52 - nodeid: tests/test_utils_eval.py::test_arithmetic_eval_runtime_errors[10 % 0-ZeroDivisionError] type: Function lineno: 52 - nodeid: tests/test_utils_eval.py::test_forgiving_eval[1 + 2-3] type: Function lineno: 61 - nodeid: tests/test_utils_eval.py::test_forgiving_eval[bad + 2-bad + 2] type: Function lineno: 61 - nodeid: tests/test_utils_eval.py::test_forgiving_eval[1 / 0-1 / 0] type: Function lineno: 61 - nodeid: tests/test_utils_eval.py::test_forgiving_eval[2 ** 10-2 ** 10] type: Function lineno: 61 - nodeid: tests/test_utils_eval.py::test_defaulting_eval[3 * 4-0-12] type: Function lineno: 71 - nodeid: tests/test_utils_eval.py::test_defaulting_eval[invalid + 1-99-99] type: Function lineno: 71 - nodeid: tests/test_utils_eval.py::test_defaulting_eval[1 / 0--1--1] type: Function lineno: 71 - nodeid: tests/test_utils_eval.py::test_defaulting_eval[2 ** 10-42-42] type: Function lineno: 71 - Outcome:
-
✅ tests/test_utils_exceptions.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_exceptions.py::test_chained_exception_various[cause_key_error-High-level task failed\ncaused by KeyError: 'missing'] type: Function lineno: 28 - nodeid: tests/test_utils_exceptions.py::test_chained_exception_various[cause_index_error-High-level task failed\ncaused by IndexError: list index out of range] type: Function lineno: 28 - nodeid: tests/test_utils_exceptions.py::test_chained_exception_various[cause_zero_division-High-level task failed\ncaused by ZeroDivisionError: division by zero] type: Function lineno: 28 - nodeid: tests/test_utils_exceptions.py::test_chained_exception_various[cause_value_error-High-level task failed\ncaused by ValueError: invalid literal for int() with base 10: 'not_a_number'] type: Function lineno: 28 - nodeid: tests/test_utils_exceptions.py::test_chained_exception_various[cause_type_error-High-level task failed\ncaused by TypeError: can only concatenate str (not "int") to str] type: Function lineno: 28 - nodeid: tests/test_utils_exceptions.py::test_printed_exception[cause_key_error-KeyError: 'missing'] type: Function lineno: 60 - nodeid: tests/test_utils_exceptions.py::test_printed_exception[cause_index_error-IndexError: list index out of range] type: Function lineno: 60 - nodeid: tests/test_utils_exceptions.py::test_printed_exception[cause_zero_division-ZeroDivisionError: division by zero] type: Function lineno: 60 - nodeid: tests/test_utils_exceptions.py::test_printed_exception[cause_value_error-ValueError: invalid literal for int() with base 10: 'not_a_number'] type: Function lineno: 60 - nodeid: tests/test_utils_exceptions.py::test_printed_exception[cause_type_error-TypeError: can only concatenate str (not "int") to str] type: Function lineno: 60 - Outcome:
-
✅ tests/test_utils_get_adj.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_get_adj.py::test_get_adj_success type: Function lineno: 23 - nodeid: tests/test_utils_get_adj.py::test_get_adj_not_found type: Function lineno: 27 - nodeid: tests/test_utils_get_adj.py::test_ensure_adjs_mixed type: Function lineno: 31 - nodeid: tests/test_utils_get_adj.py::test_get_adjs_filter type: Function lineno: 37 - Outcome:
-
✅ tests/test_utils_hastepics.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_hastepics.py::test_get_pv_connect_false_and_true type: Function lineno: 28 - nodeid: tests/test_utils_hastepics.py::test_motor_init_strips_suffixes type: Function lineno: 43 - nodeid: tests/test_utils_hastepics.py::test_motor_invalid_name_raises type: Function lineno: 54 - nodeid: tests/test_utils_hastepics.py::test_disabled_removed_relative_to_upstream type: Function lineno: 59 - nodeid: tests/test_utils_hastepics.py::test_motor_init_list_and_extras_build_handles_eagerly type: Function lineno: 80 - nodeid: tests/test_utils_hastepics.py::test_motor_val_connect_via_cache type: Function lineno: 110 - nodeid: tests/test_utils_hastepics.py::test_speedup_get_pv type: Function lineno: 129 - nodeid: tests/test_utils_hastepics.py::test_speedup_motor_instantiation type: Function lineno: 149 - nodeid: tests/test_utils_hastepics.py::test_speedup_motor_PV type: Function lineno: 166 - nodeid: tests/test_utils_hastepics.py::test_motor_init_list_attrs_created type: Function lineno: 188 - nodeid: tests/test_utils_hastepics.py::test_motor_extras_attrs_correct type: Function lineno: 199 - nodeid: tests/test_utils_hastepics.py::test_motor_callbacks_empty type: Function lineno: 211 - Outcome:
-
✅ tests/test_utils_ipy.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_ipy.py::test_devices_repr_fallback_and_ignore type: Function lineno: 19 - Outcome:
-
✅ tests/test_utils_jsonext.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj0-expected0] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj1-42] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[(1-1j)-expected2] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj3-/tmp/file.txt] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj4-expected4] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj5-expected5] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj6-expected6] type: Function lineno: 7 - nodeid: tests/test_utils_jsonext.py::test_json_validate_save_load[input_obj7-expected7] type: Function lineno: 7 - Outcome:
-
✅ tests/test_utils_lazypv.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_lazypv.py::test_getattr type: Function lineno: 7 - Outcome:
-
✅ tests/test_utils_logcfg.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_logcfg.py::test_custom_log_outputs[LONG-<lambda>-This is a LONG message] type: Function lineno: 21 - nodeid: tests/test_utils_logcfg.py::test_custom_log_outputs[ENLARGE-<lambda>-Please ENLARGE this!] type: Function lineno: 21 - nodeid: tests/test_utils_logcfg.py::test_import_logging_once_per_module type: Function lineno: 51 - Outcome:
-
✅ tests/test_utils_logign.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_logign.py::test_ignore_log_msg_behavior[WARNING-This should be ignored-This should appear] type: Function lineno: 9 - nodeid: tests/test_utils_logign.py::test_ignore_log_msg_behavior[ENLARGE-ENLARGE this-Keep this ENLARGE] type: Function lineno: 9 - nodeid: tests/test_utils_logign.py::test_ignore_only_by_level type: Function lineno: 42 - nodeid: tests/test_utils_logign.py::test_ignore_only_by_msg type: Function lineno: 64 - nodeid: tests/test_utils_logign.py::test_filter_removed_after_context type: Function lineno: 86 - Outcome:
-
✅ tests/test_utils_marker.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_marker.py::test_format_value_with_units type: Function lineno: 30 - nodeid: tests/test_utils_marker.py::test_format_value_without_units type: Function lineno: 33 - nodeid: tests/test_utils_marker.py::test_marker_name_default type: Function lineno: 39 - nodeid: tests/test_utils_marker.py::test_marker_name_custom type: Function lineno: 44 - nodeid: tests/test_utils_marker.py::test_marker_repr_format type: Function lineno: 49 - nodeid: tests/test_utils_marker.py::test_marker_update_changes_value type: Function lineno: 56 - nodeid: tests/test_utils_marker.py::test_marker_update_with_explicit_value type: Function lineno: 63 - nodeid: tests/test_utils_marker.py::test_marker_goto_sets_value_and_returns_result type: Function lineno: 69 - nodeid: tests/test_utils_marker.py::test_marker_call_is_alias_of_goto type: Function lineno: 77 - nodeid: tests/test_utils_marker.py::test_markers_register_and_access type: Function lineno: 87 - nodeid: tests/test_utils_marker.py::test_markers_repr_contains_all type: Function lineno: 103 - nodeid: tests/test_utils_marker.py::test_marker_registry_dict_is_printable_dict type: Function lineno: 114 - nodeid: tests/test_utils_marker.py::test_markers_getitem_invalid_key_raises type: Function lineno: 122 - Outcome:
-
✅ tests/test_utils_metaclasses.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_metaclasses.py::test_combine_classes_combines_methods type: Function lineno: 14 - nodeid: tests/test_utils_metaclasses.py::test_registryabc_combines_registrymeta_and_abcmeta type: Function lineno: 25 - Outcome:
-
✅ tests/test_utils_namespace.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_namespace.py::test_namespace_pretty_repr_mixed_and_nested type: Function lineno: 4 - Outcome:
-
✅ tests/test_utils_npy.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_npy.py::test_nice_arange[0-5-1-expected0] type: Function lineno: 7 - nodeid: tests/test_utils_npy.py::test_nice_arange[5-0--1-expected1] type: Function lineno: 7 - nodeid: tests/test_utils_npy.py::test_nice_arange[1-2-0.3-expected2] type: Function lineno: 7 - nodeid: tests/test_utils_npy.py::test_nice_arange[-2-2-1.5-expected3] type: Function lineno: 7 - nodeid: tests/test_utils_npy.py::test_nice_arange[2.5-0.5--0.4-expected4] type: Function lineno: 7 - nodeid: tests/test_utils_npy.py::test_nice_linspace[0-10-4-expected0] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[5-15-2-expected1] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[-5-5-4-expected2] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[0-1-3-expected3] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[2-2-3-expected4] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[3-0-3-expected5] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[0-1-0-expected6] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_linspace[-2-2-3-expected7] type: Function lineno: 18 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[-2-2-2-True-expected0] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[0-5-2-True-expected1] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[0-5-2-False-expected2] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[-1-2-1.5-True-expected3] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[-1-2--1.5-True-expected4] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_centered[5-0--2-True-expected5] type: Function lineno: 33 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[0-5-2-True-expected0] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[0-5-2-False-expected1] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[-1-2-1.5-True-expected2] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[-1-2-1.5-False-expected3] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[-2-1-1.2-True-expected4] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[5-0--2-True-expected5] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_left_aligned[5-0--2-False-expected6] type: Function lineno: 46 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[0-5-2-True-expected0] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[0-5-2-False-expected1] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[-1-2-1.5-True-expected2] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[-1-2-1.5-False-expected3] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[5-0--2-True-expected4] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[5-0--2-False-expected5] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_nice_steps_right_aligned[-3-3-2-True-expected6] type: Function lineno: 60 - nodeid: tests/test_utils_npy.py::test_within_scalar[5-0-10-True] type: Function lineno: 74 - nodeid: tests/test_utils_npy.py::test_within_scalar[5-6-10-False] type: Function lineno: 74 - nodeid: tests/test_utils_npy.py::test_within_scalar[5-None-10-True] type: Function lineno: 74 - nodeid: tests/test_utils_npy.py::test_within_scalar[5-0-None-True] type: Function lineno: 74 - nodeid: tests/test_utils_npy.py::test_within_scalar[5-None-None-True] type: Function lineno: 74 - nodeid: tests/test_utils_npy.py::test_within_fraction[data0-2-5-0.6] type: Function lineno: 85 - nodeid: tests/test_utils_npy.py::test_within_fraction[data1-5-25-0.6666666666666666] type: Function lineno: 85 - nodeid: tests/test_utils_npy.py::test_within_fraction[data2-None-2-0.3333333333333333] type: Function lineno: 85 - nodeid: tests/test_utils_npy.py::test_within_fraction[data3-0-1-0] type: Function lineno: 85 - nodeid: tests/test_utils_npy.py::test_fraction_to_percentage[0.456-1-45.6] type: Function lineno: 96 - nodeid: tests/test_utils_npy.py::test_fraction_to_percentage[0.12345-2-12.35] type: Function lineno: 96 - nodeid: tests/test_utils_npy.py::test_fraction_to_percentage[0.9999-0-100.0] type: Function lineno: 96 - nodeid: tests/test_utils_npy.py::test_get_dtype[val0-ndarray] type: Function lineno: 105 - nodeid: tests/test_utils_npy.py::test_get_dtype[val1-list] type: Function lineno: 105 - nodeid: tests/test_utils_npy.py::test_get_dtype[3.14-float] type: Function lineno: 105 - nodeid: tests/test_utils_npy.py::test_get_shape[val0-expected0] type: Function lineno: 118 - nodeid: tests/test_utils_npy.py::test_get_shape[val1-expected1] type: Function lineno: 118 - nodeid: tests/test_utils_npy.py::test_get_shape[42-expected2] type: Function lineno: 118 - nodeid: tests/test_utils_npy.py::test_is_array[val0-True] type: Function lineno: 127 - nodeid: tests/test_utils_npy.py::test_is_array[val1-False] type: Function lineno: 127 - nodeid: tests/test_utils_npy.py::test_is_array[42-False] type: Function lineno: 127 - Outcome:
-
✅ tests/test_utils_opmsg.py
- Outcome:
passed - result:
[] - Outcome:
-
✅ tests/test_utils_path.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_path.py::test_can_create_all_files_user_says_yes type: Function lineno: 10 - nodeid: tests/test_utils_path.py::test_can_create_all_files_user_says_no type: Function lineno: 36 - nodeid: tests/test_utils_path.py::test_make_missing_dir_creates_folder type: Function lineno: 54 - nodeid: tests/test_utils_path.py::test_glob_files_returns_matching_files_only type: Function lineno: 66 - nodeid: tests/test_utils_path.py::test_filter_files_excludes_directories type: Function lineno: 83 - Outcome:
-
✅ tests/test_utils_picklio.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[test_obj0] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[test_obj1] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[simple string] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[42] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[3.14159] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[test_obj5] type: Function lineno: 6 - nodeid: tests/test_utils_picklio.py::test_pickle_and_unpickle[test_obj6] type: Function lineno: 6 - Outcome:
-
✅ tests/test_utils_printing.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_printing.py::test_maxlen_valid[seq0-3] type: Function lineno: 8 - nodeid: tests/test_utils_printing.py::test_maxlen_valid[seq1-0] type: Function lineno: 8 - nodeid: tests/test_utils_printing.py::test_maxlen_valid[seq2-3] type: Function lineno: 8 - nodeid: tests/test_utils_printing.py::test_maxlen_valid[seq3-2] type: Function lineno: 8 - nodeid: tests/test_utils_printing.py::test_strlen[42-2] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[hello-5] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[False-5] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[None-4] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[value4-9] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[value5-8] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[value6-6] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[-0] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_strlen[this is a phrase-16] type: Function lineno: 17 - nodeid: tests/test_utils_printing.py::test_maxstrlen[seq0-6] type: Function lineno: 31 - nodeid: tests/test_utils_printing.py::test_maxstrlen[seq1-3] type: Function lineno: 31 - nodeid: tests/test_utils_printing.py::test_maxstrlen[seq2-9] type: Function lineno: 31 - nodeid: tests/test_utils_printing.py::test_maxstrlen[seq3-16] type: Function lineno: 31 - nodeid: tests/test_utils_printing.py::test_maxstrlen[seq4-5] type: Function lineno: 31 - nodeid: tests/test_utils_printing.py::test_transpose_matrix[data0-expected0] type: Function lineno: 41 - nodeid: tests/test_utils_printing.py::test_transpose_matrix[data1-expected1] type: Function lineno: 41 - nodeid: tests/test_utils_printing.py::test_transpose_matrix[data2-expected2] type: Function lineno: 41 - nodeid: tests/test_utils_printing.py::test_prepend[initial0-1-expected0] type: Function lineno: 50 - nodeid: tests/test_utils_printing.py::test_prepend[initial1-a-expected1] type: Function lineno: 50 - nodeid: tests/test_utils_printing.py::test_prepend[initial2-prepend2-expected2] type: Function lineno: 50 - nodeid: tests/test_utils_printing.py::test_prepend[initial3-prepend3-expected3] type: Function lineno: 50 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries0-widths0- a bbb] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries1-widths1- 1 2] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries2-widths2- long val] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries3-widths3- True False] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries4-widths4- 123 4567] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries5-widths5- text with space end] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries6-widths6- {'a': 1} {'b': 2}] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_table_line[entries7-widths7- [1, 2] [3, 4]] type: Function lineno: 61 - nodeid: tests/test_utils_printing.py::test_fmt_label_sep[widths0------ ----] type: Function lineno: 74 - nodeid: tests/test_utils_printing.py::test_fmt_label_sep[widths1-=-== ===] type: Function lineno: 74 - nodeid: tests/test_utils_printing.py::test_fmt_label_sep[widths2-*-***** **] type: Function lineno: 74 - nodeid: tests/test_utils_printing.py::test_printable_dict_with_header[d0-HeaderTest-expected_lines0] type: Function lineno: 82 - nodeid: tests/test_utils_printing.py::test_printable_dict_of_dicts type: Function lineno: 101 - nodeid: tests/test_utils_printing.py::test_printable_table[data0-labels0-A: ID\nB: \u2713 Success?\nC: SuperPrecisionValue\nD: Result Metadata\n\n# A B C D\n- ------------- ----- ---------- ----------------------------\n0 X1 True 0.1234 {'meta': 'ok'}\n1 AnotherSample False 98765.4321 {'meta': [1, 2, 3]}\n2 Z None 0.0 {'meta': {'nested_key': 42}}] type: Function lineno: 128 - Outcome:
-
✅ tests/test_utils_pv.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[25-0-True-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[50-25-True-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[75-50-False-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[100-75-True-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[150-100-False-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_put_with_progress_and_repr[-50-150-True-\x1b[32m] type: Function lineno: 69 - nodeid: tests/test_utils_pv.py::test_use_callback_context_manager type: Function lineno: 125 - nodeid: tests/test_utils_pv.py::test_orig_repr_is_not_custom_repr type: Function lineno: 151 - Outcome:
-
✅ tests/test_utils_pvpreload.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_pvpreload.py::test_file_age[30-expected0] type: Function lineno: 69 - nodeid: tests/test_utils_pvpreload.py::test_file_age[300-expected1] type: Function lineno: 69 - nodeid: tests/test_utils_pvpreload.py::test_file_age[3600-expected2] type: Function lineno: 69 - nodeid: tests/test_utils_pvpreload.py::test_file_age[86400-expected3] type: Function lineno: 69 - nodeid: tests/test_utils_pvpreload.py::test_file_age[1209600-expected4] type: Function lineno: 69 - nodeid: tests/test_utils_pvpreload.py::test_preload_valid_file type: Function lineno: 89 - nodeid: tests/test_utils_pvpreload.py::test_preload_old_file type: Function lineno: 125 - nodeid: tests/test_utils_pvpreload.py::test_preload_corrupt_file type: Function lineno: 153 - nodeid: tests/test_utils_pvpreload.py::test_offload type: Function lineno: 174 - nodeid: tests/test_utils_pvpreload.py::test_offload_exception type: Function lineno: 224 - nodeid: tests/test_utils_pvpreload.py::test_pvpreload_end_to_end type: Function lineno: 249 - Outcome:
-
✅ tests/test_utils_pyepics.py
- Outcome:
passed - result:
[] - Outcome:
-
✅ tests/test_utils_rangebar.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_rangebar.py::test_full_progress_bar type: Function lineno: 14 - nodeid: tests/test_utils_rangebar.py::test_half_progress_bar type: Function lineno: 27 - nodeid: tests/test_utils_rangebar.py::test_zero_progress_bar type: Function lineno: 42 - nodeid: tests/test_utils_rangebar.py::test_overflow_bar type: Function lineno: 56 - nodeid: tests/test_utils_rangebar.py::test_underflow_bar type: Function lineno: 69 - nodeid: tests/test_utils_rangebar.py::test_repr type: Function lineno: 82 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[0- ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[10-\u2588 ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[25-\u2588\u2588\u258c ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[27-\u2588\u2588\u258a ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[49-\u2588\u2588\u2588\u2588\u2589 ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[50-\u2588\u2588\u2588\u2588\u2588 ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[51-\u2588\u2588\u2588\u2588\u2588\u258f ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[73-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258e ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[75-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258c ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[90-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ] type: Function lineno: 89 - nodeid: tests/test_utils_rangebar.py::test_each_value_separately[100-\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588] type: Function lineno: 89 - Outcome:
-
✅ tests/test_utils_readable.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_readable.py::test_readable_seconds[59.4-59 seconds] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[59.9-60 seconds] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[119.9-120 seconds] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[120.1-2 minutes] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[3599.9-60 minutes] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[3600.1-60 minutes] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[7199.9-120 minutes] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[7200.1-2 hours] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[90.4-90 seconds] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[90.6-91 seconds] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[121.9-2 minutes] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[1296000.0-2 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[2592000.0-4 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[2800000.0-5 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[3888000.0-6 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[5097600.0-8 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[5184000.0-9 weeks] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[5270400.0-2 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[23328000.0-9 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[31104000.0-12 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[33696000.0-13 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[59616000.0-23 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[62208000.0-24 months] type: Function lineno: 3 - nodeid: tests/test_utils_readable.py::test_readable_seconds[64208000.0-2 years] type: Function lineno: 3 - Outcome:
-
✅ tests/test_utils_registry.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_registry.py::test_metaclass_creates_weakset type: Function lineno: 13 - nodeid: tests/test_utils_registry.py::test_metaclass_tracks_instances type: Function lineno: 22 - nodeid: tests/test_utils_registry.py::test_registry_inheritance type: Function lineno: 32 - nodeid: tests/test_utils_registry.py::test_instance_tracking type: Function lineno: 39 - nodeid: tests/test_utils_registry.py::test_collect_instances_recursive type: Function lineno: 53 - nodeid: tests/test_utils_registry.py::test_instances_function type: Function lineno: 69 - nodeid: tests/test_utils_registry.py::test_non_registry_class_error type: Function lineno: 93 - nodeid: tests/test_utils_registry.py::test_signature_preservation type: Function lineno: 102 - Outcome:
-
✅ tests/test_utils_richcfg.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_richcfg.py::test_rich_inspector_outputs_more_than_builtin type: Function lineno: 45 - Outcome:
-
✅ tests/test_utils_run_later.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_run_later.py::test_init_and_repr type: Function lineno: 17 - nodeid: tests/test_utils_run_later.py::test_call type: Function lineno: 22 - nodeid: tests/test_utils_run_later.py::test_matmul_with_string type: Function lineno: 27 - nodeid: tests/test_utils_run_later.py::test_matmul_with_list type: Function lineno: 32 - nodeid: tests/test_utils_run_later.py::test_matmul_with_single_int type: Function lineno: 37 - nodeid: tests/test_utils_run_later.py::test_run_at_future_triggered_and_logs type: Function lineno: 49 - nodeid: tests/test_utils_run_later.py::test_run_at_already_past type: Function lineno: 61 - nodeid: tests/test_utils_run_later.py::test_run_in_future_triggered_and_logs type: Function lineno: 72 - nodeid: tests/test_utils_run_later.py::test_run_in_past type: Function lineno: 83 - nodeid: tests/test_utils_run_later.py::test_run_later_with_seconds type: Function lineno: 95 - nodeid: tests/test_utils_run_later.py::test_run_later_with_past_datetime type: Function lineno: 105 - nodeid: tests/test_utils_run_later.py::test_run_at_tqdm_multiple_updates type: Function lineno: 115 - nodeid: tests/test_utils_run_later.py::test_today_basic type: Function lineno: 137 - nodeid: tests/test_utils_run_later.py::test_tomorrow_basic type: Function lineno: 143 - nodeid: tests/test_utils_run_later.py::test_yesterday_basic type: Function lineno: 149 - nodeid: tests/test_utils_run_later.py::test_today_matmul_string type: Function lineno: 155 - nodeid: tests/test_utils_run_later.py::test_tomorrow_matmul_list type: Function lineno: 161 - nodeid: tests/test_utils_run_later.py::test_yesterday_matmul_single type: Function lineno: 167 - Outcome:
-
✅ tests/test_utils_sendmail.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_sendmail.py::test_sendmail_real_local_verbose type: Function lineno: 70 - Outcome:
-
✅ tests/test_utils_shortcut.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_shortcut.py::TestShortcutInitialization type: Class - nodeid: tests/test_utils_shortcut.py::test_run_method type: Function lineno: 31 - nodeid: tests/test_utils_shortcut.py::test_repr_output type: Function lineno: 54 - nodeid: tests/test_utils_shortcut.py::test_source_with_regular_function type: Function lineno: 62 - nodeid: tests/test_utils_shortcut.py::test_source_error_handling type: Function lineno: 76 - nodeid: tests/test_utils_shortcut.py::test_as_shortcut_basic type: Function lineno: 86 - nodeid: tests/test_utils_shortcut.py::test_as_shortcut_with_name type: Function lineno: 96 - nodeid: tests/test_utils_shortcut.py::test_as_shortcut_factory_pattern type: Function lineno: 104 - nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton type: Class - nodeid: tests/test_utils_shortcut.py::TestFullIntegration type: Class - nodeid: tests/test_utils_shortcut.py::test_registry_inheritance type: Function lineno: 204 - Outcome:
-
✅ tests/test_utils_shortcut.py::TestFullIntegration
- Outcome:
passed - result:
- nodeid: tests/test_utils_shortcut.py::TestFullIntegration::test_workflow type: Function lineno: 170 - nodeid: tests/test_utils_shortcut.py::TestFullIntegration::test_multiple_shortcuts type: Function lineno: 190 - Outcome:
-
✅ tests/test_utils_shortcut.py::TestShortcutInitialization
- Outcome:
passed - result:
- nodeid: tests/test_utils_shortcut.py::TestShortcutInitialization::test_init_with_custom_name type: Function lineno: 16 - nodeid: tests/test_utils_shortcut.py::TestShortcutInitialization::test_init_without_name type: Function lineno: 23 - Outcome:
-
✅ tests/test_utils_shortcut.py::TestShortcutsSingleton
- Outcome:
passed - result:
- nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton::test_singleton_behavior type: Function lineno: 121 - nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton::test_registration type: Function lineno: 127 - nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton::test_getitem_access type: Function lineno: 141 - nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton::test_missing_key type: Function lineno: 149 - nodeid: tests/test_utils_shortcut.py::TestShortcutsSingleton::test_repr_output type: Function lineno: 154 - Outcome:
-
✅ tests/test_utils_snapshot.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_snapshot.py::test_snapshot[exclude_internals] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[include_internals] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[empty_case] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[sort_str] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[sort_id] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[sort_case_insensitive] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[sort_length] type: Function lineno: 83 - nodeid: tests/test_utils_snapshot.py::test_snapshot[sort_reverse] type: Function lineno: 83 - Outcome:
-
✅ tests/test_utils_termtitle.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_termtitle.py::test_terminal_title_with_tmux type: Function lineno: 9 - Outcome:
-
✅ tests/test_utils_tqdm_mod.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_tqdm_mod.py::test_complete_progress_bar type: Function lineno: 25 - nodeid: tests/test_utils_tqdm_mod.py::test_set_progress_multiple_points type: Function lineno: 42 - nodeid: tests/test_utils_tqdm_mod.py::test_format_sizeof_alignment type: Function lineno: 65 - nodeid: tests/test_utils_tqdm_mod.py::test_float_alignment_in_bar type: Function lineno: 83 - nodeid: tests/test_utils_tqdm_mod.py::test_custom_unit type: Function lineno: 132 - nodeid: tests/test_utils_tqdm_mod.py::test_clamp_above_total type: Function lineno: 146 - nodeid: tests/test_utils_tqdm_mod.py::test_clamp_below_zero type: Function lineno: 163 - Outcome:
-
✅ tests/test_utils_trinary.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_trinary.py::test_check_trinary_valid_values type: Function lineno: 6 - nodeid: tests/test_utils_trinary.py::test_check_trinary_invalid_value type: Function lineno: 14 - nodeid: tests/test_utils_trinary.py::test_check_trinary_with_custom_allowed_values type: Function lineno: 22 - Outcome:
-
✅ tests/test_utils_typecast.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_typecast.py::test_downcast_success type: Function lineno: 24 - nodeid: tests/test_utils_typecast.py::test_upcast_success type: Function lineno: 30 - nodeid: tests/test_utils_typecast.py::test_downcast_invalid type: Function lineno: 41 - nodeid: tests/test_utils_typecast.py::test_upcast_invalid type: Function lineno: 48 - nodeid: tests/test_utils_typecast.py::test_object_identity_preserved type: Function lineno: 53 - nodeid: tests/test_utils_typecast.py::test_ensure_subclass_valid type: Function lineno: 64 - nodeid: tests/test_utils_typecast.py::test_ensure_subclass_invalid type: Function lineno: 67 - nodeid: tests/test_utils_typecast.py::test_cast_changes_class type: Function lineno: 79 - nodeid: tests/test_utils_typecast.py::test_cast_preserves_identity type: Function lineno: 86 - Outcome:
-
✅ tests/test_utils_utils.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_utils.py::test_singleton_instance type: Function lineno: 17 - nodeid: tests/test_utils_utils.py::test_singleton_identity type: Function lineno: 25 - nodeid: tests/test_utils_utils.py::test_typename[None-NoneType] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[True-bool] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[42-int] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[3.14-float] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[text-str] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[obj5-set] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[obj6-list] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[obj7-list] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[obj8-dict] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[<lambda>-function] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[sample_function-function] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[nested-function] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[len-builtin_function_or_method] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[sum-builtin_function_or_method] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[math-module] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[sys-module] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[function-type] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[<genexpr>-generator] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_typename[obj18-list_iterator] type: Function lineno: 44 - nodeid: tests/test_utils_utils.py::test_next_int[nums0-4] type: Function lineno: 77 - nodeid: tests/test_utils_utils.py::test_next_int[nums1-21] type: Function lineno: 77 - nodeid: tests/test_utils_utils.py::test_next_int[nums2-0] type: Function lineno: 77 - nodeid: tests/test_utils_utils.py::test_zero_pad[7-3-007] type: Function lineno: 87 - nodeid: tests/test_utils_utils.py::test_zero_pad[123-5-00123] type: Function lineno: 87 - nodeid: tests/test_utils_utils.py::test_zero_pad[0-2-00] type: Function lineno: 87 - nodeid: tests/test_utils_utils.py::test_iround[3.6-4] type: Function lineno: 97 - nodeid: tests/test_utils_utils.py::test_iround[2.1-2] type: Function lineno: 97 - nodeid: tests/test_utils_utils.py::test_iround[-1.5--2] type: Function lineno: 97 - nodeid: tests/test_utils_utils.py::test_iround[-1.4--1] type: Function lineno: 97 - nodeid: tests/test_utils_utils.py::test_sorted_naturally[items0-expected0] type: Function lineno: 108 - nodeid: tests/test_utils_utils.py::test_sorted_naturally[items1-expected1] type: Function lineno: 108 - nodeid: tests/test_utils_utils.py::test_sorted_naturally_reverse[items0-expected0] type: Function lineno: 115 - Outcome:
-
✅ tests/test_utils_xrange.py
- Outcome:
passed - result:
- nodeid: tests/test_utils_xrange.py::test_xrange_finite[args0-kwargs0-expected0] type: Function lineno: 11 - nodeid: tests/test_utils_xrange.py::test_xrange_finite[args1-kwargs1-expected1] type: Function lineno: 11 - nodeid: tests/test_utils_xrange.py::test_xrange_finite[args2-kwargs2-expected2] type: Function lineno: 11 - nodeid: tests/test_utils_xrange.py::test_xrange_finite[args3-kwargs3-expected3] type: Function lineno: 11 - nodeid: tests/test_utils_xrange.py::test_xrange_infinite[args0-kwargs0-count(0)] type: Function lineno: 20 - nodeid: tests/test_utils_xrange.py::test_xrange_infinite[args1-kwargs1-count(0, 2)] type: Function lineno: 20 - nodeid: tests/test_utils_xrange.py::test_xrange_too_many_args[args0] type: Function lineno: 31 - Outcome:
- Outcome:
✅ . (1 tests)
-
✅ .
- Outcome:
passed - result:
- nodeid: ci-reports type: Dir - nodeid: morbidissimo type: Dir - nodeid: outputs type: Dir - nodeid: slic type: Package - nodeid: temp-ci type: Dir - nodeid: tests type: Dir - Outcome:
⚠️ Warnings
Warnings nº1
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
Warnings nº2
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