Table of Contents
Test Report
View CI Run 2038 | Commit 43289b4
🧪 Test Report
Generated on 2025-08-11 13:10:50 CEST
🧾 General Info
- duration: 16.935845136642456
- 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.0007580528035759926outcome:
passed📌 Call phase
duration:
0.00022729579359292984outcome:
passed📌 Teardown phase
duration:
0.00020979996770620346outcome:
passed
↳ Function: test_it_type_float
-
✅ Test 2
📌 Setup phase
duration:
0.0001255180686712265outcome:
passed📌 Call phase
duration:
0.00014641322195529938outcome:
passed📌 Teardown phase
duration:
0.00010460196062922478outcome:
passed
↳ Function: test_it_type_int
-
✅ Test 3
📌 Setup phase
duration:
0.00011472497135400772outcome:
passed📌 Call phase
duration:
0.00013836706057190895outcome:
passed📌 Teardown phase
duration:
0.00010683899745345116outcome:
passed
↳ Function: test_it_value_str
-
✅ Test 4
📌 Setup phase
duration:
0.00011753709986805916outcome:
passed📌 Call phase
duration:
0.0001452709548175335outcome:
passed📌 Teardown phase
duration:
0.0001047118566930294outcome:
passed
↳ Function: test_it_value_long_str
-
✅ Test 5
📌 Setup phase
duration:
0.00011598179116845131outcome:
passed📌 Call phase
duration:
0.00014033028855919838outcome:
passed📌 Teardown phase
duration:
0.00010079331696033478outcome:
passed
↳ Function: test_it_value_float
-
✅ Test 6
📌 Setup phase
duration:
0.00010841106995940208outcome:
passed📌 Call phase
duration:
0.0001588873565196991outcome:
passed📌 Teardown phase
duration:
9.965337812900543e-05outcome:
passed
↳ Function: test_it_value_int
-
✅ Test 7
📌 Setup phase
duration:
0.00011884933337569237outcome:
passed📌 Call phase
duration:
0.00015481282025575638outcome:
passed📌 Teardown phase
duration:
9.692180901765823e-05outcome:
passed
↳ Function: test_it_empty_value_str
-
✅ Test 8
📌 Setup phase
duration:
0.000125120859593153outcome:
passed📌 Call phase
duration:
0.00013633398339152336outcome:
passed📌 Teardown phase
duration:
9.94289293885231e-05outcome:
passed
↳ Function: test_it_empty_value_float
-
✅ Test 9
📌 Setup phase
duration:
0.00010956777259707451outcome:
passed📌 Call phase
duration:
0.00013684481382369995outcome:
passed📌 Teardown phase
duration:
9.580515325069427e-05outcome:
passed
↳ Function: test_it_empty_value_int
-
✅ Test 10
📌 Setup phase
duration:
0.00010692281648516655outcome:
passed📌 Call phase
duration:
0.00014319317415356636outcome:
passed📌 Teardown phase
duration:
0.00010215025395154953outcome:
passed
↳ Function: test_pstrue_str
-
✅ Test 11
📌 Setup phase
duration:
0.00010974286124110222outcome:
passed📌 Call phase
duration:
0.00015579396858811378outcome:
passed📌 Teardown phase
duration:
9.803706780076027e-05outcome:
passed
↳ Function: test_pstrue_float
-
✅ Test 12
📌 Setup phase
duration:
0.00011395104229450226outcome:
passed📌 Call phase
duration:
0.00014103390276432037outcome:
passed📌 Teardown phase
duration:
0.00011104904115200043outcome:
passed
↳ Function: test_pstrue_int
-
✅ Test 13
📌 Setup phase
duration:
0.00010882597416639328outcome:
passed📌 Call phase
duration:
0.0001376848667860031outcome:
passed📌 Teardown phase
duration:
9.934511035680771e-05outcome:
passed
↳ Function: test_psfalse_str
-
✅ Test 14
📌 Setup phase
duration:
0.00011351797729730606outcome:
passed📌 Call phase
duration:
0.00013855518773198128outcome:
passed📌 Teardown phase
duration:
0.00011399295181035995outcome:
passed
↳ Function: test_psfalse_float
-
✅ Test 15
📌 Setup phase
duration:
0.00010652001947164536outcome:
passed📌 Call phase
duration:
0.000134326983243227outcome:
passed📌 Teardown phase
duration:
9.550200775265694e-05outcome:
passed
↳ Function: test_psfalse_int
-
✅ Test 16
📌 Setup phase
duration:
0.00011391378939151764outcome:
passed📌 Call phase
duration:
0.00013848580420017242outcome:
passed📌 Teardown phase
duration:
9.931111708283424e-05outcome:
passed
↳ Function: test_it_None
-
✅ Test 17
📌 Setup phase
duration:
0.00010615494102239609outcome:
passed📌 Call phase
duration:
0.000163388904184103outcome:
passed📌 Teardown phase
duration:
0.00011361017823219299outcome:
passed
↳ Function: test_it_True
-
✅ Test 18
📌 Setup phase
duration:
0.00011754967272281647outcome:
passed📌 Call phase
duration:
0.00013798894360661507outcome:
passed📌 Teardown phase
duration:
0.00010299868881702423outcome:
passed
↳ Function: test_it_False
-
✅ Test 19
📌 Setup phase
duration:
0.00011096987873315811outcome:
passed📌 Call phase
duration:
0.0003062877804040909outcome:
passed📌 Teardown phase
duration:
0.00010626483708620071outcome:
passed
↳ Function: test_it_nan
-
✅ Test 20
📌 Setup phase
duration:
0.00011529959738254547outcome:
passed📌 Call phase
duration:
0.0001484481617808342outcome:
passed📌 Teardown phase
duration:
0.00010226573795080185outcome:
passed
↳ Function: test_it_np_nan
-
✅ Test 21
📌 Setup phase
duration:
0.00011008791625499725outcome:
passed📌 Call phase
duration:
0.00013734307140111923outcome:
passed📌 Teardown phase
duration:
0.00010398635640740395outcome:
passed
↳ Function: test_it_np1D_int
-
✅ Test 22
📌 Setup phase
duration:
0.00011941418051719666outcome:
passed📌 Call phase
duration:
0.00020978180691599846outcome:
passed📌 Teardown phase
duration:
0.00010384712368249893outcome:
passed
↳ Function: test_it_np2D_int
-
✅ Test 23
📌 Setup phase
duration:
0.00011179642751812935outcome:
passed📌 Call phase
duration:
0.0001818961463868618outcome:
passed📌 Teardown phase
duration:
0.00010120030492544174outcome:
passed
↳ Function: test_it_np1D_float
-
✅ Test 24
📌 Setup phase
duration:
0.0001144707202911377outcome:
passed📌 Call phase
duration:
0.0002403021790087223outcome:
passed📌 Teardown phase
duration:
0.00011318596079945564outcome:
passed
↳ Function: test_it_np2D_float
-
✅ Test 25
📌 Setup phase
duration:
0.00011491775512695312outcome:
passed📌 Call phase
duration:
0.00020614312961697578outcome:
passed📌 Teardown phase
duration:
0.00010630488395690918outcome:
passed
↳ Function: test_it_np1D_bool
-
✅ Test 26
📌 Setup phase
duration:
0.00011335406452417374outcome:
passed📌 Call phase
duration:
0.00016076117753982544outcome:
passed📌 Teardown phase
duration:
9.790528565645218e-05outcome:
passed
↳ Function: test_it_np1D_object
-
✅ Test 27
📌 Setup phase
duration:
0.00010752910748124123outcome:
passed📌 Call phase
duration:
0.00015710573643445969outcome:
passed📌 Teardown phase
duration:
0.00011356407776474953outcome:
passed
↳ Function: test_it_np_scalar_int
-
✅ Test 28
📌 Setup phase
duration:
0.00011485395953059196outcome:
passed📌 Call phase
duration:
0.0001725456677377224outcome:
passed📌 Teardown phase
duration:
0.0001318659633398056outcome:
passed
↳ Function: test_it_np_scalar_float
-
✅ Test 29
📌 Setup phase
duration:
0.00011839810758829117outcome:
passed📌 Call phase
duration:
0.00017269188538193703outcome:
passed📌 Teardown phase
duration:
0.0001279190182685852outcome:
passed
↳ Function: test_it_np_scalar_bool
-
✅ Test 30
📌 Setup phase
duration:
0.0001775459386408329outcome:
passed📌 Call phase
duration:
0.00018493784591555595outcome:
passed📌 Teardown phase
duration:
0.0001290980726480484outcome:
passed
↳ Function: test_it_list
-
✅ Test 31
📌 Setup phase
duration:
0.00011614710092544556outcome:
passed📌 Call phase
duration:
0.0001524803228676319outcome:
passed📌 Teardown phase
duration:
0.00011445488780736923outcome:
passed
↳ Function: test_it_tuple
-
✅ Test 32
📌 Setup phase
duration:
0.00011578481644392014outcome:
passed📌 Call phase
duration:
0.00015260931104421616outcome:
passed📌 Teardown phase
duration:
0.00012848200276494026outcome:
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.00043006986379623413outcome:
passed📌 Call phase
duration:
0.00015723798424005508outcome:
passed📌 Teardown phase
duration:
0.00017386535182595253outcome:
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.0003060167655348778outcome:
passed📌 Call phase
duration:
0.00014581065624952316outcome:
passed📌 Teardown phase
duration:
0.0001638880930840969outcome:
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.00027471501380205154outcome:
passed📌 Call phase
duration:
0.0001445799134671688outcome:
passed📌 Teardown phase
duration:
0.00017253030091524124outcome:
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.0002719671465456486outcome:
passed📌 Call phase
duration:
0.00014622975140810013outcome:
passed📌 Teardown phase
duration:
0.0001615709625184536outcome:
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.00026725511997938156outcome:
passed📌 Call phase
duration:
0.00014068791642785072outcome:
passed📌 Teardown phase
duration:
0.00015750480815768242outcome:
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.00028285104781389236outcome:
passed📌 Call phase
duration:
0.00014300411567091942outcome:
passed📌 Teardown phase
duration:
0.00016086827963590622outcome:
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.0002611870877444744outcome:
passed📌 Call phase
duration:
0.00014800811186432838outcome:
passed📌 Teardown phase
duration:
0.000161763746291399outcome:
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.0003639981150627136outcome:
passed📌 Call phase
duration:
0.00015404680743813515outcome:
passed📌 Teardown phase
duration:
0.00016593141481280327outcome:
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.00026336219161748886outcome:
passed📌 Call phase
duration:
0.00015985872596502304outcome:
passed📌 Teardown phase
duration:
0.00015673600137233734outcome:
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.00024427101016044617outcome:
passed📌 Call phase
duration:
0.00017879903316497803outcome:
passed📌 Teardown phase
duration:
0.00014626933261752129outcome:
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.00022823689505457878outcome:
passed📌 Call phase
duration:
0.00016777217388153076outcome:
passed📌 Teardown phase
duration:
0.00014920393005013466outcome:
passed -
✅ Test 44
params: pos=[], expected_names=[]📌 Runtime Parameters
params: pos: [] expected_names: [] id: pos2-expected_names2📌 Setup phase
duration:
0.000224206130951643outcome:
passed📌 Call phase
duration:
0.00013769138604402542outcome:
passed📌 Teardown phase
duration:
0.00014516711235046387outcome:
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.000269290991127491outcome:
passed📌 Call phase
duration:
0.0001621479168534279outcome:
passed📌 Teardown phase
duration:
0.00015777908265590668outcome:
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.0002667051739990711outcome:
passed📌 Call phase
duration:
0.00017014937475323677outcome:
passed📌 Teardown phase
duration:
0.00016253022477030754outcome:
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.00025786785408854485outcome:
passed📌 Call phase
duration:
0.00014235638082027435outcome:
passed📌 Teardown phase
duration:
0.00016458099707961082outcome:
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.00028451206162571907outcome:
passed📌 Call phase
duration:
0.00019025010988116264outcome:
passed📌 Teardown phase
duration:
0.00016742991283535957outcome:
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.00027479464188218117outcome:
passed📌 Call phase
duration:
0.00018179090693593025outcome:
passed📌 Teardown phase
duration:
0.0001730034127831459outcome:
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.0002731489948928356outcome:
passed📌 Call phase
duration:
0.00018293503671884537outcome:
passed📌 Teardown phase
duration:
0.00016307272017002106outcome:
passed
↳ Function: test_get_args_parametrized
-
✅ Test 51
params: func=" at 0x7f919e97f0d0>", expected_pos=["a", "b"], expected_kw={"c": 3, "d": 4}📌 Runtime Parameters
params: func: <function <lambda> at 0x7f919e97f0d0> expected_pos: - a - b expected_kw: c: 3 d: 4 id: <lambda>-expected_pos0-expected_kw0📌 Setup phase
duration:
0.0002673729322850704outcome:
passed📌 Call phase
duration:
0.0002056392841041088outcome:
passed📌 Teardown phase
duration:
0.00022189784795045853outcome:
passed -
✅ Test 52
params: func=" at 0x7f919e98b040>", expected_pos=[], expected_kw="{'x': 1, 'y': , 'z': 0}"📌 Runtime Parameters
params: func: <function <lambda> at 0x7f919e98b040> expected_pos: [] expected_kw: {'x': 1, 'y': <class 'inspect._empty'>, 'z': 0} id: <lambda>-expected_pos1-expected_kw1📌 Setup phase
duration:
0.0002797059714794159outcome:
passed📌 Call phase
duration:
0.0003274800255894661outcome:
passed📌 Teardown phase
duration:
0.0002715219743549824outcome:
passed -
✅ Test 53
params: func=" at 0x7f919e98b160>", expected_pos=[], expected_kw={}📌 Runtime Parameters
params: func: <function <lambda> at 0x7f919e98b160> expected_pos: [] expected_kw: {} id: <lambda>-expected_pos2-expected_kw2📌 Setup phase
duration:
0.00037058303132653236outcome:
passed📌 Call phase
duration:
0.00018598930910229683outcome:
passed📌 Teardown phase
duration:
0.00016946718096733093outcome:
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 0x7f919e98b3a0> expected_sig: (a, b, d=30, c=10) id: wrap_all-(a, b, d=30, c=10)📌 Setup phase
duration:
0.00022373534739017487outcome:
passed📌 Call phase
duration:
0.0001671840436756611outcome:
passed📌 Teardown phase
duration:
0.00014520296826958656outcome:
passed -
✅ Test 55
params: func="", expected_sig="(a, b, c=10, d=20)"📌 Runtime Parameters
params: func: <function wrap_skip at 0x7f919e98b430> expected_sig: (a, b, c=10, d=20) id: wrap_skip-(a, b, c=10, d=20)📌 Setup phase
duration:
0.00022240588441491127outcome:
passed📌 Call phase
duration:
0.0002802792005240917outcome:
passed📌 Teardown phase
duration:
0.0002535260282456875outcome:
passed -
✅ Test 56
params: func="", expected_sig="(x, y, c=10, d=20)"📌 Runtime Parameters
params: func: <function wrap_ignore_all at 0x7f919e98b4c0> expected_sig: (x, y, c=10, d=20) id: wrap_ignore_all-(x, y, c=10, d=20)📌 Setup phase
duration:
0.0003797491081058979outcome:
passed📌 Call phase
duration:
0.00021199602633714676outcome:
passed📌 Teardown phase
duration:
0.00015433412045240402outcome:
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 0x7f919e98b3a0> args: - 1 - 2 - 3 kwargs: {} expected_result: 36 id: wrap_all-args0-kwargs0-36📌 Setup phase
duration:
0.0003299708478152752outcome:
passed📌 Call phase
duration:
0.00014227209612727165outcome:
passed📌 Teardown phase
duration:
0.000176318921148777outcome:
passed -
✅ Test 58
params: func="", args=[1, 2, 3], kwargs={"d": 5}, expected_result=11📌 Runtime Parameters
params: func: <function wrap_all at 0x7f919e98b3a0> args: - 1 - 2 - 3 kwargs: d: 5 expected_result: 11 id: wrap_all-args1-kwargs1-11📌 Setup phase
duration:
0.0004952452145516872outcome:
passed📌 Call phase
duration:
0.0002402598038315773outcome:
passed📌 Teardown phase
duration:
0.0002877223305404186outcome:
passed -
✅ Test 59
params: func="", args=[0, 0], kwargs={"c": 3, "d": 4}, expected_result=10📌 Runtime Parameters
params: func: <function wrap_skip at 0x7f919e98b430> args: - (vide) - (vide) kwargs: c: 3 d: 4 expected_result: 10 id: wrap_skip-args2-kwargs2-10📌 Setup phase
duration:
0.000519242137670517outcome:
passed📌 Call phase
duration:
0.0002580140717327595outcome:
passed📌 Teardown phase
duration:
0.0002826959826052189outcome:
passed -
✅ Test 60
params: func="", args=[0, 0], kwargs={}, expected_result=10📌 Runtime Parameters
params: func: <function wrap_ignore_all at 0x7f919e98b4c0> args: - (vide) - (vide) kwargs: {} expected_result: 10 id: wrap_ignore_all-args3-kwargs3-10📌 Setup phase
duration:
0.0005173329263925552outcome:
passed📌 Call phase
duration:
0.00026203086599707603outcome:
passed📌 Teardown phase
duration:
0.00028526969254016876outcome:
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.0005296911112964153outcome:
passed📌 Call phase
duration:
0.001321922056376934outcome:
passed📌 Teardown phase
duration:
0.00031259190291166306outcome:
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.0005554067902266979outcome:
passed📌 Call phase
duration:
0.0009210393764078617outcome:
passed📌 Teardown phase
duration:
0.0003441721200942993outcome:
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.0005374508909881115outcome:
passed📌 Call phase
duration:
0.0008786693215370178outcome:
passed📌 Teardown phase
duration:
0.0003042910248041153outcome:
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.0005358471535146236outcome:
passed📌 Call phase
duration:
0.0009941179305315018outcome:
passed📌 Teardown phase
duration:
0.00030300533398985863outcome:
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.0005206870846450329outcome:
passed📌 Call phase
duration:
0.0009021079167723656outcome:
passed📌 Teardown phase
duration:
0.00030956510454416275outcome:
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.0005462467670440674outcome:
passed📌 Call phase
duration:
0.0008836030028760433outcome:
passed📌 Teardown phase
duration:
0.00029092421755194664outcome:
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.0005223159678280354outcome:
passed📌 Call phase
duration:
0.0006960290484130383outcome:
passed📌 Teardown phase
duration:
0.0003064810298383236outcome:
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.0005440851673483849outcome:
passed📌 Call phase
duration:
0.0009745131246745586outcome:
passed📌 Teardown phase
duration:
0.00029880600050091743outcome:
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.0005353442393243313outcome:
passed📌 Call phase
duration:
0.0008158767595887184outcome:
passed📌 Teardown phase
duration:
0.0003040032461285591outcome:
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.0005249730311334133outcome:
passed📌 Call phase
duration:
0.0008605481125414371outcome:
passed📌 Teardown phase
duration:
0.00031281914561986923outcome:
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.0005455133505165577outcome:
passed📌 Call phase
duration:
0.0009660478681325912outcome:
passed📌 Teardown phase
duration:
0.0003199358470737934outcome:
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.0004506050609052181outcome:
passed📌 Call phase
duration:
0.0005545048043131828outcome:
passed📌 Teardown phase
duration:
0.00019869860261678696outcome:
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.00032165180891752243outcome:
passed📌 Call phase
duration:
0.0005263686180114746outcome:
passed📌 Teardown phase
duration:
0.0001819860190153122outcome:
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.000328713096678257outcome:
passed📌 Call phase
duration:
0.0007998421788215637outcome:
passed📌 Teardown phase
duration:
0.0003156149759888649outcome:
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.0005592727102339268outcome:
passed📌 Call phase
duration:
0.0009576571173965931outcome:
passed📌 Teardown phase
duration:
0.0002943030558526516outcome:
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.0005328468978404999outcome:
passed📌 Call phase
duration:
0.0006856881082057953outcome:
passed📌 Teardown phase
duration:
0.000283815898001194outcome:
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.0005247136577963829outcome:
passed📌 Call phase
duration:
0.0008364436216652393outcome:
passed📌 Teardown phase
duration:
0.0002791392616927624outcome:
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.0005470570176839828outcome:
passed📌 Call phase
duration:
0.0008151629008352757outcome:
passed📌 Teardown phase
duration:
0.00033552106469869614outcome:
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.0005520209670066833outcome:
passed📌 Call phase
duration:
0.0010135583579540253outcome:
passed📌 Teardown phase
duration:
0.00019734306260943413outcome:
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.00032166484743356705outcome:
passed📌 Call phase
duration:
0.0005521480925381184outcome:
passed📌 Teardown phase
duration:
0.00018583890050649643outcome:
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.00033415062353014946outcome:
passed📌 Call phase
duration:
0.0005745338276028633outcome:
passed📌 Teardown phase
duration:
0.00019218074157834053outcome:
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.0003206380642950535outcome:
passed📌 Call phase
duration:
0.0006449217908084393outcome:
passed📌 Teardown phase
duration:
0.00019181706011295319outcome:
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.00032101524993777275outcome:
passed📌 Call phase
duration:
0.0005603460595011711outcome:
passed📌 Teardown phase
duration:
0.00018518604338169098outcome:
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.00031924108043313026outcome:
passed📌 Call phase
duration:
0.0005156402476131916outcome:
passed📌 Teardown phase
duration:
0.00018503423780202866outcome:
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.00033371709287166595outcome:
passed📌 Call phase
duration:
0.0005060150288045406outcome:
passed📌 Teardown phase
duration:
0.00018671900033950806outcome:
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.0003175218589603901outcome:
passed📌 Call phase
duration:
0.0010980903171002865outcome:
passed📌 Teardown phase
duration:
0.00018317904323339462outcome:
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.0003357711248099804outcome:
passed📌 Call phase
duration:
0.0004958650097250938outcome:
passed📌 Teardown phase
duration:
0.00018729222938418388outcome:
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.0003175525926053524outcome:
passed📌 Call phase
duration:
0.0005423999391496181outcome:
passed📌 Teardown phase
duration:
0.0001989295706152916outcome:
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.00038443785160779953outcome:
passed📌 Call phase
duration:
0.000559947919100523outcome:
passed📌 Teardown phase
duration:
0.00018597766757011414outcome:
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.00033301999792456627outcome:
passed📌 Call phase
duration:
0.0007283417508006096outcome:
passed📌 Teardown phase
duration:
0.00018714368343353271outcome:
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.00033748429268598557outcome:
passed📌 Call phase
duration:
0.0005422458052635193outcome:
passed📌 Teardown phase
duration:
0.00018511107191443443outcome:
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.0003299289382994175outcome:
passed📌 Call phase
duration:
0.0005003758706152439outcome:
passed📌 Teardown phase
duration:
0.00018166890367865562outcome:
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.0003151628188788891outcome:
passed📌 Call phase
duration:
0.000670969020575285outcome:
passed📌 Teardown phase
duration:
0.00019186735153198242outcome:
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.00031384173780679703outcome:
passed📌 Call phase
duration:
0.0005015581846237183outcome:
passed📌 Teardown phase
duration:
0.0001766793429851532outcome:
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.00034206314012408257outcome:
passed📌 Call phase
duration:
0.0005559111014008522outcome:
passed📌 Teardown phase
duration:
0.00018552690744400024outcome:
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.0003278120420873165outcome:
passed📌 Call phase
duration:
0.0005447631701827049outcome:
passed📌 Teardown phase
duration:
0.0002030692994594574outcome:
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.0003185402601957321outcome:
passed📌 Call phase
duration:
0.0006507979705929756outcome:
passed📌 Teardown phase
duration:
0.00019650720059871674outcome:
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.000363111961632967outcome:
passed📌 Call phase
duration:
0.0005916077643632889outcome:
passed📌 Teardown phase
duration:
0.0001958608627319336outcome:
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.0003640931099653244outcome:
passed📌 Call phase
duration:
0.0005822638049721718outcome:
passed📌 Teardown phase
duration:
0.00020760810002684593outcome:
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.00037183286622166634outcome:
passed📌 Call phase
duration:
0.0006869770586490631outcome:
passed📌 Teardown phase
duration:
0.0002097119577229023outcome:
passed
-
-
📄 test_utils_channels.py
↳ Function: test_load_channels_and_channels_class_with_professional_names
-
✅ Test 101
📌 Setup phase
duration:
0.00012871110811829567outcome:
passed📌 Call phase
duration:
0.0009967908263206482outcome:
passed📌 Teardown phase
duration:
0.0001269499771296978outcome:
passed
-
-
📄 test_utils_config.py
↳ Function: test_config_with_nested_and_list_data
-
✅ Test 102
📌 Setup phase
duration:
0.00013117026537656784outcome:
passed📌 Call phase
duration:
0.0005405410192906857outcome:
passed📌 Teardown phase
duration:
0.00012250198051333427outcome:
passed
↳ Function: test_config_with_strange_and_edge_keys
-
✅ Test 103
📌 Setup phase
duration:
0.00011781416833400726outcome:
passed📌 Call phase
duration:
0.0007669040933251381outcome:
passed📌 Teardown phase
duration:
0.00012246007099747658outcome:
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.00020550517365336418outcome:
passed📌 Call phase
duration:
0.00016273371875286102outcome:
passed📌 Teardown phase
duration:
0.00017514824867248535outcome:
passed -
✅ Test 105
params: base_color="blue"📌 Runtime Parameters
params: base_color: blue id: blue📌 Setup phase
duration:
0.00018975604325532913outcome:
passed📌 Call phase
duration:
0.00015760678797960281outcome:
passed📌 Teardown phase
duration:
0.00012598605826497078outcome:
passed -
✅ Test 106
params: base_color="yellow"📌 Runtime Parameters
params: base_color: yellow id: yellow📌 Setup phase
duration:
0.0001780879683792591outcome:
passed📌 Call phase
duration:
0.0001568063162267208outcome:
passed📌 Teardown phase
duration:
0.00012624217197299004outcome:
passed -
✅ Test 107
params: base_color="green"📌 Runtime Parameters
params: base_color: green id: green📌 Setup phase
duration:
0.0001766248606145382outcome:
passed📌 Call phase
duration:
0.00015880772843956947outcome:
passed📌 Teardown phase
duration:
0.00011950312182307243outcome:
passed -
✅ Test 108
params: base_color="cyan"📌 Runtime Parameters
params: base_color: cyan id: cyan📌 Setup phase
duration:
0.00017163436859846115outcome:
passed📌 Call phase
duration:
0.00017673708498477936outcome:
passed📌 Teardown phase
duration:
0.00013074977323412895outcome:
passed -
✅ Test 109
params: base_color="magenta"📌 Runtime Parameters
params: base_color: magenta id: magenta📌 Setup phase
duration:
0.00017608283087611198outcome:
passed📌 Call phase
duration:
0.000149410218000412outcome:
passed📌 Teardown phase
duration:
0.00012385286390781403outcome:
passed -
✅ Test 110
params: base_color="white"📌 Runtime Parameters
params: base_color: white id: white📌 Setup phase
duration:
0.0001766728237271309outcome:
passed📌 Call phase
duration:
0.00015137437731027603outcome:
passed📌 Teardown phase
duration:
0.00011986494064331055outcome:
passed -
✅ Test 111
params: base_color="black"📌 Runtime Parameters
params: base_color: black id: black📌 Setup phase
duration:
0.00016492605209350586outcome:
passed📌 Call phase
duration:
0.00015058089047670364outcome:
passed📌 Teardown phase
duration:
0.00012445123866200447outcome:
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.0006494279950857162outcome:
passed📌 Call phase
duration:
0.0002579363062977791outcome:
passed📌 Teardown phase
duration:
0.0002650967799127102outcome:
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.0004691062495112419outcome:
passed📌 Call phase
duration:
0.00023387325927615166outcome:
passed📌 Teardown phase
duration:
0.00023949705064296722outcome:
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.0004495028406381607outcome:
passed📌 Call phase
duration:
0.00024688197299838066outcome:
passed📌 Teardown phase
duration:
0.0002443329431116581outcome:
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.0004612402990460396outcome:
passed📌 Call phase
duration:
0.00022691907361149788outcome:
passed📌 Teardown phase
duration:
0.0002660239115357399outcome:
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.0004527517594397068outcome:
passed📌 Call phase
duration:
0.00023450283333659172outcome:
passed📌 Teardown phase
duration:
0.0002365419641137123outcome:
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.00047360826283693314outcome:
passed📌 Call phase
duration:
0.00022255908697843552outcome:
passed📌 Teardown phase
duration:
0.00026140501722693443outcome:
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.0004568612203001976outcome:
passed📌 Call phase
duration:
0.00022739777341485023outcome:
passed📌 Teardown phase
duration:
0.00024113012477755547outcome:
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.0004390464164316654outcome:
passed📌 Call phase
duration:
0.000371050089597702outcome:
passed📌 Teardown phase
duration:
0.000249265693128109outcome:
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.00046969298273324966outcome:
passed📌 Call phase
duration:
0.00022347457706928253outcome:
passed📌 Teardown phase
duration:
0.0002690991386771202outcome:
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.0004531010054051876outcome:
passed📌 Call phase
duration:
0.00020978786051273346outcome:
passed📌 Teardown phase
duration:
0.00023470912128686905outcome:
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.00047225458547472954outcome:
passed📌 Call phase
duration:
0.00021571293473243713outcome:
passed📌 Teardown phase
duration:
0.0002585640177130699outcome:
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.00045028235763311386outcome:
passed📌 Call phase
duration:
0.0002208258956670761outcome:
passed📌 Teardown phase
duration:
0.0002359268255531788outcome:
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.0004573832266032696outcome:
passed📌 Call phase
duration:
0.00025292765349149704outcome:
passed📌 Teardown phase
duration:
0.00024358881637454033outcome:
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.0004632016643881798outcome:
passed📌 Call phase
duration:
0.00023447303101420403outcome:
passed📌 Teardown phase
duration:
0.0002355370670557022outcome:
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.00044360384345054626outcome:
passed📌 Call phase
duration:
0.000244098249822855outcome:
passed📌 Teardown phase
duration:
0.00023963116109371185outcome:
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.0004596048966050148outcome:
passed📌 Call phase
duration:
0.0002265111543238163outcome:
passed📌 Teardown phase
duration:
0.00026341667398810387outcome:
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.0002944469451904297outcome:
passed📌 Call phase
duration:
0.000917365774512291outcome:
passed📌 Teardown phase
duration:
0.00017850706353783607outcome:
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.0002780393697321415outcome:
passed📌 Call phase
duration:
0.000915077980607748outcome:
passed📌 Teardown phase
duration:
0.0001779249869287014outcome:
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.00028561288490891457outcome:
passed📌 Call phase
duration:
0.0007903263904154301outcome:
passed📌 Teardown phase
duration:
0.00017006183043122292outcome:
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.0002806750126183033outcome:
passed📌 Call phase
duration:
0.000865972600877285outcome:
passed📌 Teardown phase
duration:
0.00017524603754281998outcome:
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.00027869967743754387outcome:
passed📌 Call phase
duration:
0.000790382269769907outcome:
passed📌 Teardown phase
duration:
0.00017146114259958267outcome:
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.0002850140444934368outcome:
passed📌 Call phase
duration:
0.0001645800657570362outcome:
passed📌 Teardown phase
duration:
0.00015676021575927734outcome:
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.00033869268372654915outcome:
passed📌 Call phase
duration:
0.00016194023191928864outcome:
passed📌 Teardown phase
duration:
0.00016125524416565895outcome:
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.0003174259327352047outcome:
passed📌 Call phase
duration:
0.0001558312214910984outcome:
passed📌 Teardown phase
duration:
0.00015881238505244255outcome:
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.00026155728846788406outcome:
passed📌 Call phase
duration:
0.00014415383338928223outcome:
passed📌 Teardown phase
duration:
0.00017318595200777054outcome:
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.0003075599670410156outcome:
passed📌 Call phase
duration:
0.00018315576016902924outcome:
passed📌 Teardown phase
duration:
0.00016841432079672813outcome:
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.0002757636830210686outcome:
passed📌 Call phase
duration:
0.0001467508263885975outcome:
passed📌 Teardown phase
duration:
0.00016085105016827583outcome:
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.00028316304087638855outcome:
passed📌 Call phase
duration:
0.00014242297038435936outcome:
passed📌 Teardown phase
duration:
0.00015546893700957298outcome:
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.0002686758525669575outcome:
passed📌 Call phase
duration:
0.00014142412692308426outcome:
passed📌 Teardown phase
duration:
0.00015289895236492157outcome:
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.0002675149589776993outcome:
passed📌 Call phase
duration:
0.00014037685468792915outcome:
passed📌 Teardown phase
duration:
0.0001538819633424282outcome:
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.00025529414415359497outcome:
passed📌 Call phase
duration:
0.0002171602100133896outcome:
passed📌 Teardown phase
duration:
0.00015864288434386253outcome:
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.000266325194388628outcome:
passed📌 Call phase
duration:
0.00017636222764849663outcome:
passed📌 Teardown phase
duration:
0.00015456415712833405outcome:
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.0002296213060617447outcome:
passed📌 Call phase
duration:
0.00013815239071846008outcome:
passed📌 Teardown phase
duration:
0.00013521499931812286outcome:
passed -
✅ Test 147
params: data={}, expected_keys="set()"📌 Runtime Parameters
params: data: {} expected_keys: set() id: data1-expected_keys1📌 Setup phase
duration:
0.00023578014224767685outcome:
passed📌 Call phase
duration:
0.00016615400090813637outcome:
passed📌 Teardown phase
duration:
0.00013853097334504128outcome:
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.00030099693685770035outcome:
passed📌 Call phase
duration:
0.00013690674677491188outcome:
passed📌 Teardown phase
duration:
0.00017966190353035927outcome:
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.0003057951107621193outcome:
passed📌 Call phase
duration:
0.0001695738174021244outcome:
passed📌 Teardown phase
duration:
0.00017044087871909142outcome:
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.00030819885432720184outcome:
passed📌 Call phase
duration:
0.00014971382915973663outcome:
passed📌 Teardown phase
duration:
0.00016659870743751526outcome:
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.0003162478096783161outcome:
passed📌 Call phase
duration:
0.0001587490551173687outcome:
passed📌 Teardown phase
duration:
0.00016887299716472626outcome:
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.00032006995752453804outcome:
passed📌 Call phase
duration:
0.00014774315059185028outcome:
passed📌 Teardown phase
duration:
0.0001979437656700611outcome:
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.0003118198364973068outcome:
passed📌 Call phase
duration:
0.00014656363055109978outcome:
passed📌 Teardown phase
duration:
0.00017183925956487656outcome:
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.0003071906976401806outcome:
passed📌 Call phase
duration:
0.0001472323201596737outcome:
passed📌 Teardown phase
duration:
0.00016203615814447403outcome:
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.00033526308834552765outcome:
passed📌 Call phase
duration:
0.0002838470973074436outcome:
passed📌 Teardown phase
duration:
0.00017779367044568062outcome:
passed
-
-
📄 test_utils_dotdir.py
↳ Function: test_dotdir_creation_and_base_exists
-
✅ Test 156
📌 Setup phase
duration:
0.0015311576426029205outcome:
passed📌 Call phase
duration:
0.0002645812928676605outcome:
passed📌 Teardown phase
duration:
0.00022007431834936142outcome:
passed
↳ Function: test_dotdir_repr_returns_path_str
-
✅ Test 157
📌 Setup phase
duration:
0.0006056008860468864outcome:
passed📌 Call phase
duration:
0.00025893934071063995outcome:
passed📌 Teardown phase
duration:
0.00021010683849453926outcome:
passed
↳ Function: test_dotdir_call
-
✅ Test 158
📌 Setup phase
duration:
0.0006353240460157394outcome:
passed📌 Call phase
duration:
0.00023598270490765572outcome:
passed📌 Teardown phase
duration:
0.00021062279120087624outcome:
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.0003254576586186886outcome:
passed📌 Call phase
duration:
0.00019576586782932281outcome:
passed📌 Teardown phase
duration:
0.00015520723536610603outcome:
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.00022805295884609222outcome:
passed📌 Call phase
duration:
0.00017031608149409294outcome:
passed📌 Teardown phase
duration:
0.0001483522355556488outcome:
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.0002267151139676571outcome:
passed📌 Call phase
duration:
0.0001576961949467659outcome:
passed📌 Teardown phase
duration:
0.0001355060376226902outcome:
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.00023992685601115227outcome:
passed📌 Call phase
duration:
0.00015898700803518295outcome:
passed📌 Teardown phase
duration:
0.00013785623013973236outcome:
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.00024178577587008476outcome:
passed📌 Call phase
duration:
0.00015158997848629951outcome:
passed📌 Teardown phase
duration:
0.0001430930569767952outcome:
passed -
✅ Test 170
params: expr="-5", expected=-5📌 Runtime Parameters
params: expr: -5 expected: -5 id: -5--5📌 Setup phase
duration:
0.0002225828357040882outcome:
passed📌 Call phase
duration:
0.00015382375568151474outcome:
passed📌 Teardown phase
duration:
0.00013577984645962715outcome:
passed -
✅ Test 171
params: expr="+7", expected=7📌 Runtime Parameters
params: expr: +7 expected: 7 id: +7-7📌 Setup phase
duration:
0.0002356511540710926outcome:
passed📌 Call phase
duration:
0.00015809806063771248outcome:
passed📌 Teardown phase
duration:
0.00015048310160636902outcome:
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.0002137916162610054outcome:
passed📌 Call phase
duration:
0.00015645986422896385outcome:
passed📌 Teardown phase
duration:
0.00014887331053614616outcome:
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.00022297678515315056outcome:
passed📌 Call phase
duration:
0.00016225222498178482outcome:
passed📌 Teardown phase
duration:
0.00014758622273802757outcome:
passed -
✅ Test 174
params: expr="-(-3)", expected=3📌 Runtime Parameters
params: expr: -(-3) expected: 3 id: -(-3)-3📌 Setup phase
duration:
0.00021763192489743233outcome:
passed📌 Call phase
duration:
0.0001668240875005722outcome:
passed📌 Teardown phase
duration:
0.00014155032113194466outcome:
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.00021929526701569557outcome:
passed📌 Call phase
duration:
0.0001688040792942047outcome:
passed📌 Teardown phase
duration:
0.0001342911273241043outcome:
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.0002991519868373871outcome:
passed📌 Call phase
duration:
0.00018039997667074203outcome:
passed📌 Teardown phase
duration:
0.0001415233127772808outcome:
passed -
✅ Test 177
params: expr="(((3)))", expected=3📌 Runtime Parameters
params: expr: (((3))) expected: 3 id: (((3)))-3📌 Setup phase
duration:
0.00021988805383443832outcome:
passed📌 Call phase
duration:
0.00014982698485255241outcome:
passed📌 Teardown phase
duration:
0.0001402059569954872outcome:
passed -
✅ Test 178
params: expr="-(-(-2))", expected=-2📌 Runtime Parameters
params: expr: -(-(-2)) expected: -2 id: -(-(-2))--2📌 Setup phase
duration:
0.00022889720275998116outcome:
passed📌 Call phase
duration:
0.00016000401228666306outcome:
passed📌 Teardown phase
duration:
0.00014196010306477547outcome:
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.00022251345217227936outcome:
passed📌 Call phase
duration:
0.0001570163294672966outcome:
passed📌 Teardown phase
duration:
0.00014451611787080765outcome:
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.0002191159874200821outcome:
passed📌 Call phase
duration:
0.000161660835146904outcome:
passed📌 Teardown phase
duration:
0.000146474689245224outcome:
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.00021259719505906105outcome:
passed📌 Call phase
duration:
0.000150349922478199outcome:
passed📌 Teardown phase
duration:
0.0001360108144581318outcome:
passed -
✅ Test 182
params: expr="'string'", expected="string"📌 Runtime Parameters
params: expr: 'string' expected: string id: 'string'-string📌 Setup phase
duration:
0.00022301217541098595outcome:
passed📌 Call phase
duration:
0.0001583457924425602outcome:
passed📌 Teardown phase
duration:
0.0001375218853354454outcome:
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.0002247421070933342outcome:
passed📌 Call phase
duration:
0.00016876403242349625outcome:
passed📌 Teardown phase
duration:
0.00013921922072768211outcome:
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.00021239882335066795outcome:
passed📌 Call phase
duration:
0.0001534661278128624outcome:
passed📌 Teardown phase
duration:
0.00014060083776712418outcome:
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.00023219408467411995outcome:
passed📌 Call phase
duration:
0.0003916206769645214outcome:
passed📌 Teardown phase
duration:
0.00015174131840467453outcome:
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.0002375035546720028outcome:
passed📌 Call phase
duration:
0.000347738154232502outcome:
passed📌 Teardown phase
duration:
0.00014517828822135925outcome:
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.00022666389122605324outcome:
passed📌 Call phase
duration:
0.0003716330975294113outcome:
passed📌 Teardown phase
duration:
0.0001395740546286106outcome:
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.00022775260731577873outcome:
passed📌 Call phase
duration:
0.0003456864506006241outcome:
passed📌 Teardown phase
duration:
0.00014459900557994843outcome:
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.0002236403524875641outcome:
passed📌 Call phase
duration:
0.0003304830752313137outcome:
passed📌 Teardown phase
duration:
0.00014969008043408394outcome:
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.0002234899438917637outcome:
passed📌 Call phase
duration:
0.0001882081851363182outcome:
passed📌 Teardown phase
duration:
0.0001448020339012146outcome:
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.0002256808802485466outcome:
passed📌 Call phase
duration:
0.000528787262737751outcome:
passed📌 Teardown phase
duration:
0.00015032710507512093outcome:
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.00023258104920387268outcome:
passed📌 Call phase
duration:
0.0003347541205585003outcome:
passed📌 Teardown phase
duration:
0.00014486489817500114outcome:
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.0002302541397511959outcome:
passed📌 Call phase
duration:
0.00019124895334243774outcome:
passed📌 Teardown phase
duration:
0.00014039874076843262outcome:
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.00021404027938842773outcome:
passed📌 Call phase
duration:
0.00019022496417164803outcome:
passed📌 Teardown phase
duration:
0.00014092493802309036outcome:
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.0002221791073679924outcome:
passed📌 Call phase
duration:
0.000164044089615345outcome:
passed📌 Teardown phase
duration:
0.00013657985255122185outcome:
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.00023056240752339363outcome:
passed📌 Call phase
duration:
0.00016573630273342133outcome:
passed📌 Teardown phase
duration:
0.00013918336480855942outcome:
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.00023676268756389618outcome:
passed📌 Call phase
duration:
0.0001531597226858139outcome:
passed📌 Teardown phase
duration:
0.00014212913811206818outcome:
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.00022419774904847145outcome:
passed📌 Call phase
duration:
0.00015643611550331116outcome:
passed📌 Teardown phase
duration:
0.0001338152214884758outcome:
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.00026442529633641243outcome:
passed📌 Call phase
duration:
0.00015891669318079948outcome:
passed📌 Teardown phase
duration:
0.00016375910490751266outcome:
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.0002641589380800724outcome:
passed📌 Call phase
duration:
0.00016406923532485962outcome:
passed📌 Teardown phase
duration:
0.0001543322578072548outcome:
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.00025561079382896423outcome:
passed📌 Call phase
duration:
0.00016966089606285095outcome:
passed📌 Teardown phase
duration:
0.00015610409900546074outcome:
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.0002617747522890568outcome:
passed📌 Call phase
duration:
0.00015664007514715195outcome:
passed📌 Teardown phase
duration:
0.00015948619693517685outcome:
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 0x7f919ed9f820> 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.00024522608146071434outcome:
passed📌 Call phase
duration:
0.00015529198572039604outcome:
passed📌 Teardown phase
duration:
0.0001359879970550537outcome:
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 0x7f919ed9f940> 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.00023545371368527412outcome:
passed📌 Call phase
duration:
0.0001503019593656063outcome:
passed📌 Teardown phase
duration:
0.00013770675286650658outcome:
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 0x7f919ed9f9d0> 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.00021316064521670341outcome:
passed📌 Call phase
duration:
0.00014565791934728622outcome:
passed📌 Teardown phase
duration:
0.0001385859213769436outcome:
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 0x7f919ed9fa60> 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.00021874485537409782outcome:
passed�� Call phase
duration:
0.0001446027308702469outcome:
passed📌 Teardown phase
duration:
0.0001431889832019806outcome:
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 0x7f919ed9faf0> 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.0002251933328807354outcome:
passed📌 Call phase
duration:
0.00014587584882974625outcome:
passed📌 Teardown phase
duration:
0.00013958290219306946outcome:
passed
↳ Function: test_printed_exception
-
✅ Test 208
params: func="", expected_output="KeyError: 'missing'"📌 Runtime Parameters
params: func: <function cause_key_error at 0x7f919ed9f820> expected_output: KeyError: 'missing' id: cause_key_error-KeyError: 'missing'📌 Setup phase
duration:
0.0007570087909698486outcome:
passed📌 Call phase
duration:
0.0019241897389292717outcome:
passed📌 Teardown phase
duration:
0.0004670107737183571outcome:
passed -
✅ Test 209
params: func="", expected_output="IndexError: list index out of range"📌 Runtime Parameters
params: func: <function cause_index_error at 0x7f919ed9f940> expected_output: IndexError: list index out of range id: cause_index_error-IndexError: list index out of range📌 Setup phase
duration:
0.0005435086786746979outcome:
passed📌 Call phase
duration:
0.0010881279595196247outcome:
passed📌 Teardown phase
duration:
0.0004074340686202049outcome:
passed -
✅ Test 210
params: func="", expected_output="ZeroDivisionError: division by zero"📌 Runtime Parameters
params: func: <function cause_zero_division at 0x7f919ed9f9d0> expected_output: ZeroDivisionError: division by zero id: cause_zero_division-ZeroDivisionError: division by zero📌 Setup phase
duration:
0.0005485997535288334outcome:
passed📌 Call phase
duration:
0.001107082236558199outcome:
passed📌 Teardown phase
duration:
0.00043413322418928146outcome:
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 0x7f919ed9fa60> 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.0005709049291908741outcome:
passed📌 Call phase
duration:
0.0008788839913904667outcome:
passed📌 Teardown phase
duration:
0.00043404707685112953outcome:
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 0x7f919ed9faf0> 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.0005519879050552845outcome:
passed📌 Call phase
duration:
0.0009727431461215019outcome:
passed📌 Teardown phase
duration:
0.0004200311377644539outcome:
passed
-
-
📄 test_utils_get_adj.py
↳ Function: test_get_adj_success
-
✅ Test 213
📌 Setup phase
duration:
0.00014259479939937592outcome:
passed📌 Call phase
duration:
0.0007768981158733368outcome:
passed📌 Teardown phase
duration:
0.00011433009058237076outcome:
passed
↳ Function: test_get_adj_not_found
-
✅ Test 214
📌 Setup phase
duration:
0.00047307414934039116outcome:
passed📌 Call phase
duration:
0.0009619719348847866outcome:
passed📌 Teardown phase
duration:
0.00040848180651664734outcome:
passed
↳ Function: test_ensure_adjs_mixed
-
✅ Test 215
📌 Setup phase
duration:
0.00012598885223269463outcome:
passed📌 Call phase
duration:
0.0007556159980595112outcome:
passed📌 Teardown phase
duration:
0.0001204879954457283outcome:
passed
↳ Function: test_get_adjs_filter
-
✅ Test 216
📌 Setup phase
duration:
0.00011952314525842667outcome:
passed📌 Call phase
duration:
0.0008444739505648613outcome:
passed📌 Teardown phase
duration:
0.00011171214282512665outcome:
passed
-
-
📄 test_utils_hastepics.py
↳ Function: test_get_pv_connect_false_and_true
-
✅ Test 217
📌 Setup phase
duration:
0.0002682977356016636outcome:
passed📌 Call phase
duration:
0.1237018657848239outcome:
passed📌 Teardown phase
duration:
0.0004492602311074734outcome:
passed
↳ Function: test_motor_invalid_name_raises
-
✅ Test 219
📌 Setup phase
duration:
0.00017017172649502754outcome:
passed📌 Call phase
duration:
0.0002713981084525585outcome:
passed📌 Teardown phase
duration:
0.00012139277532696724outcome:
passed
↳ Function: test_motor_init_list_and_extras_build_handles_eagerly
-
✅ Test 221
📌 Setup phase
duration:
0.0001472262665629387outcome:
passed📌 Call phase
duration:
0.0022295848466455936outcome:
passed📌 Teardown phase
duration:
0.00012864498421549797outcome:
passed
↳ Function: test_motor_val_connect_via_cache
-
✅ Test 222
📌 Setup phase
duration:
0.0001595970243215561outcome:
passed📌 Call phase
duration:
0.2244043298996985outcome:
passed📌 Teardown phase
duration:
0.00019843829795718193outcome:
passed
↳ Function: test_speedup_get_pv
-
✅ Test 223
📌 Setup phase
duration:
0.00017997389659285545outcome:
passed📌 Call phase
duration:
0.022010913118720055outcome:
passed📌 Teardown phase
duration:
0.00020856596529483795outcome:
passed
↳ Function: test_motor_init_list_attrs_created
-
✅ Test 226
📌 Setup phase
duration:
0.00017130421474575996outcome:
passed📌 Call phase
duration:
0.0015584290958940983outcome:
passed📌 Teardown phase
duration:
0.00013960711658000946outcome:
passed
↳ Function: test_motor_extras_attrs_correct
-
✅ Test 227
📌 Setup phase
duration:
0.00015796395018696785outcome:
passed📌 Call phase
duration:
0.0009486759081482887outcome:
passed📌 Teardown phase
duration:
0.00012224307283759117outcome:
passed
↳ Function: test_motor_callbacks_empty
-
✅ Test 228
📌 Setup phase
duration:
0.00013724202290177345outcome:
passed📌 Call phase
duration:
0.001037894282490015outcome:
passed📌 Teardown phase
duration:
0.00013648159801959991outcome:
passed
-
-
📄 test_utils_ipy.py
↳ Function: test_devices_repr_fallback_and_ignore
-
✅ Test 229
📌 Setup phase
duration:
0.0006688288412988186outcome:
passed📌 Call phase
duration:
0.000802542082965374outcome:
passed📌 Teardown phase
duration:
0.00026482390239834785outcome:
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.0011490522883832455outcome:
passed📌 Call phase
duration:
0.0008399486541748047outcome:
passed📌 Teardown phase
duration:
0.00022073788568377495outcome:
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.001696667168289423outcome:
passed📌 Call phase
duration:
0.0011750152334570885outcome:
passed📌 Teardown phase
duration:
0.0001978408545255661outcome:
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.0014894572086632252outcome:
passed📌 Call phase
duration:
0.000907698180526495outcome:
passed📌 Teardown phase
duration:
0.00019012903794646263outcome:
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.0012862449511885643outcome:
passed📌 Call phase
duration:
0.000952553004026413outcome:
passed📌 Teardown phase
duration:
0.00024001765996217728outcome:
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.0011514890938997269outcome:
passed📌 Call phase
duration:
0.0007729060016572475outcome:
passed📌 Teardown phase
duration:
0.00020330306142568588outcome:
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.0015662829391658306outcome:
passed📌 Call phase
duration:
0.0008611790835857391outcome:
passed📌 Teardown phase
duration:
0.00019715214148163795outcome:
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.0017661959864199162outcome:
passed📌 Call phase
duration:
0.0012204581871628761outcome:
passed📌 Teardown phase
duration:
0.00019470416009426117outcome:
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.0013107499107718468outcome:
passed📌 Call phase
duration:
0.0015443540178239346outcome:
passed📌 Teardown phase
duration:
0.00021424377337098122outcome:
passed
-
-
📄 test_utils_lazypv.py
↳ Function: test_getattr
-
✅ Test 238
📌 Setup phase
duration:
0.00014072703197598457outcome:
passed📌 Call phase
duration:
0.0005454388447105885outcome:
passed📌 Teardown phase
duration:
0.00012408476322889328outcome:
passed
-
-
📄 test_utils_logcfg.py
↳ Function: test_custom_log_outputs
-
✅ Test 239
params: levelname="LONG", logfunc=" at 0x7f919e4d8e50>", message="This is a LONG message"📌 Runtime Parameters
params: levelname: LONG logfunc: <function <lambda> at 0x7f919e4d8e50> message: This is a LONG message id: LONG-<lambda>-This is a LONG message📌 Setup phase
duration:
0.0014072922058403492outcome:
passed📌 Call phase
duration:
0.0008790791034698486outcome:
passed📌 Teardown phase
duration:
0.0002872808836400509outcome:
passed -
✅ Test 240
params: levelname="ENLARGE", logfunc=" at 0x7f919e4d8ee0>", message="Please ENLARGE this!"📌 Runtime Parameters
params: levelname: ENLARGE logfunc: <function <lambda> at 0x7f919e4d8ee0> message: Please ENLARGE this! id: ENLARGE-<lambda>-Please ENLARGE this!📌 Setup phase
duration:
0.0004066852852702141outcome:
passed📌 Call phase
duration:
0.0004947059787809849outcome:
passed📌 Teardown phase
duration:
0.00023799296468496323outcome:
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.0005859718658030033outcome:
passed📌 Call phase
duration:
0.000816818792372942outcome:
passed📌 Teardown phase
duration:
0.00026409514248371124outcome:
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.0003951955586671829outcome:
passed📌 Call phase
duration:
0.00045572081580758095outcome:
passed📌 Teardown phase
duration:
0.00024447403848171234outcome:
passed
↳ Function: test_ignore_only_by_level
-
✅ Test 244
📌 Setup phase
duration:
0.00023680413141846657outcome:
passed📌 Call phase
duration:
0.000435651745647192outcome:
passed📌 Teardown phase
duration:
0.00018943380564451218outcome:
passed
↳ Function: test_ignore_only_by_msg
-
✅ Test 245
📌 Setup phase
duration:
0.0002637631259858608outcome:
passed📌 Call phase
duration:
0.0003646519035100937outcome:
passed📌 Teardown phase
duration:
0.0001722262240946293outcome:
passed
↳ Function: test_filter_removed_after_context
-
✅ Test 246
📌 Setup phase
duration:
0.00024193665012717247outcome:
passed📌 Call phase
duration:
0.00044231582432985306outcome:
passed📌 Teardown phase
duration:
0.00018057925626635551outcome:
passed
-
-
📄 test_utils_marker.py
↳ Function: test_format_value_with_units
-
✅ Test 247
📌 Setup phase
duration:
0.0001517869532108307outcome:
passed📌 Call phase
duration:
0.00018629804253578186outcome:
passed📌 Teardown phase
duration:
0.00010482920333743095outcome:
passed
↳ Function: test_format_value_without_units
-
✅ Test 248
📌 Setup phase
duration:
0.00011781696230173111outcome:
passed📌 Call phase
duration:
0.00014978693798184395outcome:
passed📌 Teardown phase
duration:
0.00010433373972773552outcome:
passed
↳ Function: test_marker_name_default
-
✅ Test 249
📌 Setup phase
duration:
0.00011183368042111397outcome:
passed📌 Call phase
duration:
0.00021427590399980545outcome:
passed📌 Teardown phase
duration:
9.952299296855927e-05outcome:
passed
↳ Function: test_marker_name_custom
-
✅ Test 250
📌 Setup phase
duration:
0.00010805297642946243outcome:
passed📌 Call phase
duration:
0.00015410035848617554outcome:
passed📌 Teardown phase
duration:
9.835325181484222e-05outcome:
passed
↳ Function: test_marker_repr_format
-
✅ Test 251
📌 Setup phase
duration:
0.00010714633390307426outcome:
passed📌 Call phase
duration:
0.00017707888036966324outcome:
passed📌 Teardown phase
duration:
0.00011397432535886765outcome:
passed
↳ Function: test_marker_update_changes_value
-
✅ Test 252
📌 Setup phase
duration:
0.0001072990708053112outcome:
passed📌 Call phase
duration:
0.00015897024422883987outcome:
passed📌 Teardown phase
duration:
0.00010453071445226669outcome:
passed
↳ Function: test_marker_update_with_explicit_value
-
✅ Test 253
📌 Setup phase
duration:
0.00011457595974206924outcome:
passed📌 Call phase
duration:
0.0001524072140455246outcome:
passed📌 Teardown phase
duration:
9.662285447120667e-05outcome:
passed
↳ Function: test_marker_goto_sets_value_and_returns_result
-
✅ Test 254
📌 Setup phase
duration:
0.00010683666914701462outcome:
passed📌 Call phase
duration:
0.00018156599253416061outcome:
passed📌 Teardown phase
duration:
9.719515219330788e-05outcome:
passed
↳ Function: test_marker_call_is_alias_of_goto
-
✅ Test 255
📌 Setup phase
duration:
0.00011009117588400841outcome:
passed📌 Call phase
duration:
0.0001659155823290348outcome:
passed📌 Teardown phase
duration:
9.95248556137085e-05outcome:
passed
↳ Function: test_markers_register_and_access
-
✅ Test 256
📌 Setup phase
duration:
0.0001125698909163475outcome:
passed📌 Call phase
duration:
0.0003391276113688946outcome:
passed📌 Teardown phase
duration:
0.0001216731034219265outcome:
passed
↳ Function: test_markers_repr_contains_all
-
✅ Test 257
📌 Setup phase
duration:
0.00011423416435718536outcome:
passed📌 Call phase
duration:
0.0003026486374437809outcome:
passed📌 Teardown phase
duration:
0.00011073285713791847outcome:
passed
↳ Function: test_marker_registry_dict_is_printable_dict
-
✅ Test 258
📌 Setup phase
duration:
0.00011131912469863892outcome:
passed📌 Call phase
duration:
0.00020202482119202614outcome:
passed📌 Teardown phase
duration:
0.00010081520304083824outcome:
passed
↳ Function: test_markers_getitem_invalid_key_raises
-
✅ Test 259
📌 Setup phase
duration:
0.00011931313201785088outcome:
passed📌 Call phase
duration:
0.00019127875566482544outcome:
passed📌 Teardown phase
duration:
0.00011071003973484039outcome:
passed
-
-
📄 test_utils_metaclasses.py
↳ Function: test_combine_classes_combines_methods
-
✅ Test 260
📌 Setup phase
duration:
0.00012405868619680405outcome:
passed📌 Call phase
duration:
0.00019272882491350174outcome:
passed📌 Teardown phase
duration:
0.00010262522846460342outcome:
passed
↳ Function: test_registryabc_combines_registrymeta_and_abcmeta
-
✅ Test 261
📌 Setup phase
duration:
0.00010498287156224251outcome:
passed📌 Call phase
duration:
0.005016160197556019outcome:
passed📌 Teardown phase
duration:
0.00014257896691560745outcome:
passed
-
-
📄 test_utils_namespace.py
↳ Function: test_namespace_pretty_repr_mixed_and_nested
-
✅ Test 262
📌 Setup phase
duration:
0.00014411984011530876outcome:
passed📌 Call phase
duration:
0.00026859715580940247outcome:
passed📌 Teardown phase
duration:
0.00011387094855308533outcome:
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.00036699092015624046outcome:
passed📌 Call phase
duration:
0.020609252620488405outcome:
passed📌 Teardown phase
duration:
0.0002628653310239315outcome:
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.00039489008486270905outcome:
passed📌 Call phase
duration:
0.00043219001963734627outcome:
passed📌 Teardown phase
duration:
0.00018599815666675568outcome:
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.00037040188908576965outcome:
passed📌 Call phase
duration:
0.00037217698991298676outcome:
passed📌 Teardown phase
duration:
0.00017992593348026276outcome:
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.0003191656433045864outcome:
passed📌 Call phase
duration:
0.00036695506423711777outcome:
passed📌 Teardown phase
duration:
0.00018435204401612282outcome:
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.00033232010900974274outcome:
passed📌 Call phase
duration:
0.0003592255525290966outcome:
passed📌 Teardown phase
duration:
0.00019714422523975372outcome:
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.0003520548343658447outcome:
passed📌 Call phase
duration:
0.00036645494401454926outcome:
passed📌 Teardown phase
duration:
0.00019887089729309082outcome:
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.00034640682861208916outcome:
passed📌 Call phase
duration:
0.0003566611558198929outcome:
passed📌 Teardown phase
duration:
0.00021149823442101479outcome:
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.0003460370935499668outcome:
passed📌 Call phase
duration:
0.0003485949710011482outcome:
passed📌 Teardown phase
duration:
0.00019005313515663147outcome:
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.0003614751622080803outcome:
passed📌 Call phase
duration:
0.0003594351001083851outcome:
passed📌 Teardown phase
duration:
0.00019211601465940475outcome:
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.00034667691215872765outcome:
passed📌 Call phase
duration:
0.00034631090238690376outcome:
passed📌 Teardown phase
duration:
0.0001867460086941719outcome:
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.00034049199894070625outcome:
passed📌 Call phase
duration:
0.00038693565875291824outcome:
passed📌 Teardown phase
duration:
0.0001982022076845169outcome:
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.0003438042476773262outcome:
passed📌 Call phase
duration:
0.00035633519291877747outcome:
passed📌 Teardown phase
duration:
0.00018203817307949066outcome:
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.0003467751666903496outcome:
passed📌 Call phase
duration:
0.0003470759838819504outcome:
passed📌 Teardown phase
duration:
0.00018664216622710228outcome:
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.00042186910286545753outcome:
passed📌 Call phase
duration:
0.0003590858541429043outcome:
passed📌 Teardown phase
duration:
0.00021082116290926933outcome:
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.00039526307955384254outcome:
passed📌 Call phase
duration:
0.00034585176035761833outcome:
passed📌 Teardown phase
duration:
0.00020694825798273087outcome:
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.00038535892963409424outcome:
passed📌 Call phase
duration:
0.00036327820271253586outcome:
passed📌 Teardown phase
duration:
0.0002124682068824768outcome:
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.0004001227207481861outcome:
passed📌 Call phase
duration:
0.00036803679540753365outcome:
passed📌 Teardown phase
duration:
0.00020304415374994278outcome:
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.0003900378942489624outcome:
passed📌 Call phase
duration:
0.00033767009153962135outcome:
passed📌 Teardown phase
duration:
0.000209880992770195outcome:
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.00038948096334934235outcome:
passed📌 Call phase
duration:
0.0003485078923404217outcome:
passed📌 Teardown phase
duration:
0.00019726483151316643outcome:
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.0003787260502576828outcome:
passed📌 Call phase
duration:
0.00035137496888637543outcome:
passed📌 Teardown phase
duration:
0.00020463112741708755outcome:
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.0003942381590604782outcome:
passed📌 Call phase
duration:
0.0003333599306643009outcome:
passed📌 Teardown phase
duration:
0.00019930629059672356outcome:
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.0003734789788722992outcome:
passed📌 Call phase
duration:
0.00033134082332253456outcome:
passed📌 Teardown phase
duration:
0.0002075103111565113outcome:
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.00041268300265073776outcome:
passed📌 Call phase
duration:
0.0003518019802868366outcome:
passed📌 Teardown phase
duration:
0.00020453520119190216outcome:
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.0003811563365161419outcome:
passed📌 Call phase
duration:
0.00031898682937026024outcome:
passed📌 Teardown phase
duration:
0.00020569190382957458outcome:
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.0003976612351834774outcome:
passed📌 Call phase
duration:
0.00034250225871801376outcome:
passed📌 Teardown phase
duration:
0.00019869813695549965outcome:
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.00038354285061359406outcome:
passed📌 Call phase
duration:
0.0003462289460003376outcome:
passed📌 Teardown phase
duration:
0.0003022388555109501outcome:
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.00039149681106209755outcome:
passed📌 Call phase
duration:
0.0004998017102479935outcome:
passed📌 Teardown phase
duration:
0.0002134423702955246outcome:
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.00038147391751408577outcome:
passed📌 Call phase
duration:
0.0003421129658818245outcome:
passed📌 Teardown phase
duration:
0.0002199471928179264outcome:
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.000364731065928936outcome:
passed📌 Call phase
duration:
0.0003311010077595711outcome:
passed📌 Teardown phase
duration:
0.00020823441445827484outcome:
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.00039348192512989044outcome:
passed📌 Call phase
duration:
0.00033859116956591606outcome:
passed📌 Teardown phase
duration:
0.00020410213619470596outcome:
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.00037563685327768326outcome:
passed📌 Call phase
duration:
0.0003537018783390522outcome:
passed📌 Teardown phase
duration:
0.00023324042558670044outcome:
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.00038266275078058243outcome:
passed📌 Call phase
duration:
0.00034649576991796494outcome:
passed📌 Teardown phase
duration:
0.00019875774160027504outcome:
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.00037051131948828697outcome:
passed📌 Call phase
duration:
0.00033567706122994423outcome:
passed📌 Teardown phase
duration:
0.00022004172205924988outcome:
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.00034196674823760986outcome:
passed📌 Call phase
duration:
0.00014911172911524773outcome:
passed📌 Teardown phase
duration:
0.00019622687250375748outcome:
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.0003158086910843849outcome:
passed📌 Call phase
duration:
0.00013793492689728737outcome:
passed📌 Teardown phase
duration:
0.00017905794084072113outcome:
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.00031100818887352943outcome:
passed📌 Call phase
duration:
0.0001532197929918766outcome:
passed📌 Teardown phase
duration:
0.0001634671352803707outcome:
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.0003103502094745636outcome:
passed📌 Call phase
duration:
0.00013985205441713333outcome:
passed📌 Teardown phase
duration:
0.00016549276188015938outcome:
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.000301252119243145outcome:
passed📌 Call phase
duration:
0.00014861300587654114outcome:
passed📌 Teardown phase
duration:
0.00016712304204702377outcome:
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.0003170417621731758outcome:
passed📌 Call phase
duration:
0.00033195922151207924outcome:
passed📌 Teardown phase
duration:
0.00018442608416080475outcome:
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.00033812737092375755outcome:
passed📌 Call phase
duration:
0.00025318004190921783outcome:
passed📌 Teardown phase
duration:
0.00018047727644443512outcome:
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.0003437330015003681outcome:
passed📌 Call phase
duration:
0.0002602669410407543outcome:
passed📌 Teardown phase
duration:
0.00018564285710453987outcome:
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.00034880172461271286outcome:
passed📌 Call phase
duration:
0.00024199485778808594outcome:
passed📌 Teardown phase
duration:
0.00017363298684358597outcome:
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.00030562421306967735outcome:
passed📌 Call phase
duration:
0.00015048496425151825outcome:
passed📌 Teardown phase
duration:
0.0001539350487291813outcome:
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.00026168301701545715outcome:
passed📌 Call phase
duration:
0.00013950560241937637outcome:
passed📌 Teardown phase
duration:
0.00015381909906864166outcome:
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.00026492588222026825outcome:
passed📌 Call phase
duration:
0.00014181481674313545outcome:
passed📌 Teardown phase
duration:
0.00016003893688321114outcome:
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.00022321101278066635outcome:
passed📌 Call phase
duration:
0.0001566610299050808outcome:
passed📌 Teardown phase
duration:
0.00016681896522641182outcome:
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.00023985514417290688outcome:
passed📌 Call phase
duration:
0.0001421961933374405outcome:
passed📌 Teardown phase
duration:
0.00016186200082302094outcome:
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.00023117801174521446outcome:
passed📌 Call phase
duration:
0.00014041224494576454outcome:
passed📌 Teardown phase
duration:
0.00014173192903399467outcome:
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.00023364881053566933outcome:
passed📌 Call phase
duration:
0.0001404210925102234outcome:
passed📌 Teardown phase
duration:
0.0001616617664694786outcome:
passed -
✅ Test 312
params: val=[1, 2, 3], expected=[]📌 Runtime Parameters
params: val: - 1 - 2 - 3 expected: [] id: val1-expected1📌 Setup phase
duration:
0.0002442598342895508outcome:
passed📌 Call phase
duration:
0.00015512900426983833outcome:
passed📌 Teardown phase
duration:
0.00014419620856642723outcome:
passed -
✅ Test 313
params: val=42, expected=[]📌 Runtime Parameters
params: val: 42 expected: [] id: 42-expected2📌 Setup phase
duration:
0.00024583982303738594outcome:
passed📌 Call phase
duration:
0.00022975821048021317outcome:
passed📌 Teardown phase
duration:
0.00014611613005399704outcome:
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.0002330760471522808outcome:
passed📌 Call phase
duration:
0.00013783667236566544outcome:
passed📌 Teardown phase
duration:
0.00015898793935775757outcome:
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.00025553302839398384outcome:
passed📌 Call phase
duration:
0.00014370400458574295outcome:
passed📌 Teardown phase
duration:
0.00013911398127675056outcome:
passed -
✅ Test 316
params: val=42, expected=false📌 Runtime Parameters
params: val: 42 expected: False id: 42-False📌 Setup phase
duration:
0.00022185221314430237outcome:
passed📌 Call phase
duration:
0.00013811606913805008outcome:
passed📌 Teardown phase
duration:
0.0001688450574874878outcome:
passed
-
-
📄 test_utils_path.py
↳ Function: test_can_create_all_files_user_says_yes
-
✅ Test 317
📌 Setup phase
duration:
0.00012163911014795303outcome:
passed📌 Call phase
duration:
0.0010302779264748096outcome:
passed📌 Teardown phase
duration:
0.00012491177767515182outcome:
passed
↳ Function: test_can_create_all_files_user_says_no
-
✅ Test 318
📌 Setup phase
duration:
0.00011717900633811951outcome:
passed📌 Call phase
duration:
0.0005709016695618629outcome:
passed📌 Teardown phase
duration:
0.00011990219354629517outcome:
passed
↳ Function: test_make_missing_dir_creates_folder
-
✅ Test 319
📌 Setup phase
duration:
0.00012492528185248375outcome:
passed📌 Call phase
duration:
0.0004885750822722912outcome:
passed📌 Teardown phase
duration:
0.00011899787932634354outcome:
passed
↳ Function: test_glob_files_returns_matching_files_only
-
✅ Test 320
📌 Setup phase
duration:
0.00011951010674238205outcome:
passed📌 Call phase
duration:
0.0010911268182098866outcome:
passed📌 Teardown phase
duration:
0.00012490898370742798outcome:
passed
↳ Function: test_filter_files_excludes_directories
-
✅ Test 321
📌 Setup phase
duration:
0.0001180870458483696outcome:
passed📌 Call phase
duration:
0.0005977130495011806outcome:
passed📌 Teardown phase
duration:
0.0001246402971446514outcome:
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.0006669098511338234outcome:
passed📌 Call phase
duration:
0.00045123789459466934outcome:
passed📌 Teardown phase
duration:
0.00017038173973560333outcome:
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.0005547031760215759outcome:
passed📌 Call phase
duration:
0.0003084801137447357outcome:
passed📌 Teardown phase
duration:
0.0001703309826552868outcome:
passed -
✅ Test 324
params: test_obj="simple string"📌 Runtime Parameters
params: test_obj: simple string id: simple string📌 Setup phase
duration:
0.00061412388458848outcome:
passed📌 Call phase
duration:
0.0002908729948103428outcome:
passed📌 Teardown phase
duration:
0.0001668781042098999outcome:
passed -
✅ Test 325
params: test_obj=42📌 Runtime Parameters
params: test_obj: 42 id: 42📌 Setup phase
duration:
0.0006013070233166218outcome:
passed📌 Call phase
duration:
0.0002976232208311558outcome:
passed📌 Teardown phase
duration:
0.0001648147590458393outcome:
passed -
✅ Test 326
params: test_obj=3.14159📌 Runtime Parameters
params: test_obj: 3.14159 id: 3.14159📌 Setup phase
duration:
0.0005330159328877926outcome:
passed📌 Call phase
duration:
0.0003164638765156269outcome:
passed📌 Teardown phase
duration:
0.000164128839969635outcome:
passed -
✅ Test 327
params: test_obj=[true, false, null]📌 Runtime Parameters
params: test_obj: - True - (vide) - (vide) id: test_obj5📌 Setup phase
duration:
0.0005447762086987495outcome:
passed📌 Call phase
duration:
0.0002767052501440048outcome:
passed📌 Teardown phase
duration:
0.0001670941710472107outcome:
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.0005868780426681042outcome:
passed📌 Call phase
duration:
0.0003063981421291828outcome:
passed📌 Teardown phase
duration:
0.00019201170653104782outcome:
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.00027508288621902466outcome:
passed📌 Call phase
duration:
0.00020622136071324348outcome:
passed📌 Teardown phase
duration:
0.00015264656394720078outcome:
passed -
✅ Test 330
params: seq=[], expected=0📌 Runtime Parameters
params: seq: [] expected: 0 id: seq1-0📌 Setup phase
duration:
0.000295054167509079outcome:
passed📌 Call phase
duration:
0.00014186976477503777outcome:
passed📌 Teardown phase
duration:
0.0001379428431391716outcome:
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.0002552112564444542outcome:
passed📌 Call phase
duration:
0.00015296880155801773outcome:
passed📌 Teardown phase
duration:
0.00013674795627593994outcome:
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.00023230398073792458outcome:
passed📌 Call phase
duration:
0.00014586327597498894outcome:
passed📌 Teardown phase
duration:
0.00024334201589226723outcome:
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.00022590765729546547outcome:
passed📌 Call phase
duration:
0.00013564806431531906outcome:
passed📌 Teardown phase
duration:
0.00017378805205225945outcome:
passed -
✅ Test 334
params: value="hello", expected=5📌 Runtime Parameters
params: value: hello expected: 5 id: hello-5📌 Setup phase
duration:
0.0002307826653122902outcome:
passed📌 Call phase
duration:
0.00013650720939040184outcome:
passed📌 Teardown phase
duration:
0.00013638706877827644outcome:
passed -
✅ Test 335
params: value=false, expected=5📌 Runtime Parameters
params: value: False expected: 5 id: False-5📌 Setup phase
duration:
0.0002202359028160572outcome:
passed📌 Call phase
duration:
0.0001483340747654438outcome:
passed📌 Teardown phase
duration:
0.0001367027871310711outcome:
passed -
✅ Test 336
params: value=null, expected=4📌 Runtime Parameters
params: value: None expected: 4 id: None-4📌 Setup phase
duration:
0.00020782416686415672outcome:
passed📌 Call phase
duration:
0.00014083879068493843outcome:
passed📌 Teardown phase
duration:
0.00013709068298339844outcome:
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.00022351974621415138outcome:
passed📌 Call phase
duration:
0.0001384420320391655outcome:
passed📌 Teardown phase
duration:
0.00013268180191516876outcome:
passed -
✅ Test 338
params: value={"a": 1}, expected=8📌 Runtime Parameters
params: value: a: 1 expected: 8 id: value5-8📌 Setup phase
duration:
0.0002130218781530857outcome:
passed📌 Call phase
duration:
0.0001368178054690361outcome:
passed📌 Teardown phase
duration:
0.00013410113751888275outcome:
passed -
✅ Test 339
params: value=[1, 2], expected=6📌 Runtime Parameters
params: value: - 1 - 2 expected: 6 id: value6-6📌 Setup phase
duration:
0.0002159751020371914outcome:
passed📌 Call phase
duration:
0.0001323227770626545outcome:
passed📌 Teardown phase
duration:
0.00013451417908072472outcome:
passed -
✅ Test 340
params: value="", expected=0📌 Runtime Parameters
params: value: None expected: 0 id: -0📌 Setup phase
duration:
0.00022892886772751808outcome:
passed📌 Call phase
duration:
0.00013582082465291023outcome:
passed📌 Teardown phase
duration:
0.00013499613851308823outcome:
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.00022072996944189072outcome:
passed📌 Call phase
duration:
0.00013801828026771545outcome:
passed📌 Teardown phase
duration:
0.0001505236141383648outcome:
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.00022134510800242424outcome:
passed📌 Call phase
duration:
0.0001470101997256279outcome:
passed📌 Teardown phase
duration:
0.00015309592708945274outcome:
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.00022840267047286034outcome:
passed📌 Call phase
duration:
0.00015358999371528625outcome:
passed📌 Teardown phase
duration:
0.00013824691995978355outcome:
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.00023331912234425545outcome:
passed📌 Call phase
duration:
0.0001433161087334156outcome:
passed📌 Teardown phase
duration:
0.00013635912910103798outcome:
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.0002069631591439247outcome:
passed📌 Call phase
duration:
0.00014850543811917305outcome:
passed📌 Teardown phase
duration:
0.00014475826174020767outcome:
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.00021676113829016685outcome:
passed📌 Call phase
duration:
0.00015094829723238945outcome:
passed📌 Teardown phase
duration:
0.00013367179781198502outcome:
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.00022032903507351875outcome:
passed📌 Call phase
duration:
0.00014376500621438026outcome:
passed📌 Teardown phase
duration:
0.0001436159946024418outcome:
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.00022723805159330368outcome:
passed📌 Call phase
duration:
0.0001355600543320179outcome:
passed📌 Teardown phase
duration:
0.00014230795204639435outcome:
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.0002350788563489914outcome:
passed📌 Call phase
duration:
0.00014135194942355156outcome:
passed📌 Teardown phase
duration:
0.00013363687321543694outcome:
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.00027442118152976036outcome:
passed📌 Call phase
duration:
0.00014459295198321342outcome:
passed📌 Teardown phase
duration:
0.00015023164451122284outcome:
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.0002610129304230213outcome:
passed📌 Call phase
duration:
0.00014023808762431145outcome:
passed📌 Teardown phase
duration:
0.00016163010150194168outcome:
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.0002717575989663601outcome:
passed📌 Call phase
duration:
0.00013523316010832787outcome:
passed📌 Teardown phase
duration:
0.0001575942151248455outcome:
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.00026863114908337593outcome:
passed📌 Call phase
duration:
0.00014591263607144356outcome:
passed📌 Teardown phase
duration:
0.00016460707411170006outcome:
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.00027324119582772255outcome:
passed📌 Call phase
duration:
0.00015098834410309792outcome:
passed📌 Teardown phase
duration:
0.00015173805877566338outcome:
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.00027964403852820396outcome:
passed📌 Call phase
duration:
0.0001459331251680851outcome:
passed📌 Teardown phase
duration:
0.000151890330016613outcome:
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.0002526841126382351outcome:
passed📌 Call phase
duration:
0.00021540233865380287outcome:
passed📌 Teardown phase
duration:
0.00016464898362755775outcome:
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.00026811985298991203outcome:
passed📌 Call phase
duration:
0.00014222506433725357outcome:
passed📌 Teardown phase
duration:
0.00016110436990857124outcome:
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.0002719331532716751outcome:
passed📌 Call phase
duration:
0.0001542731188237667outcome:
passed📌 Teardown phase
duration:
0.0001607281155884266outcome:
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.00026841601356863976outcome:
passed📌 Call phase
duration:
0.00014925794675946236outcome:
passed📌 Teardown phase
duration:
0.00015412690117955208outcome:
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.0002980809658765793outcome:
passed📌 Call phase
duration:
0.00014275964349508286outcome:
passed📌 Teardown phase
duration:
0.000162540003657341outcome:
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.0002973792143166065outcome:
passed📌 Call phase
duration:
0.00016369624063372612outcome:
passed📌 Teardown phase
duration:
0.00016169622540473938outcome:
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.00027624890208244324outcome:
passed📌 Call phase
duration:
0.0001448509283363819outcome:
passed📌 Teardown phase
duration:
0.00015312479808926582outcome:
passed -
✅ Test 363
params: widths=[2, 3], line="=", expected="== ==="📌 Runtime Parameters
params: widths: - 2 - 3 line: = expected: == === id: widths1-=-== ===📌 Setup phase
duration:
0.00027867406606674194outcome:
passed📌 Call phase
duration:
0.00015180837363004684outcome:
passed📌 Teardown phase
duration:
0.00015632854774594307outcome:
passed -
✅ Test 364
params: widths=[5, 2], line="*", expected="***** **"📌 Runtime Parameters
params: widths: - 5 - 2 line: * expected: ***** ** id: widths2-*-***** **📌 Setup phase
duration:
0.00026020174846053123outcome:
passed📌 Call phase
duration:
0.00013927090913057327outcome:
passed📌 Teardown phase
duration:
0.00016284501180052757outcome:
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.00027350010350346565outcome:
passed📌 Call phase
duration:
0.0002310359850525856outcome:
passed📌 Teardown phase
duration:
0.00015714997425675392outcome:
passed
↳ Function: test_printable_dict_of_dicts
-
✅ Test 366
📌 Setup phase
duration:
0.00010753097012639046outcome:
passed📌 Call phase
duration:
0.00024501513689756393outcome:
passed📌 Teardown phase
duration:
0.00011001434177160263outcome:
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.0002780561335384846outcome:
passed📌 Call phase
duration:
0.00032041920349001884outcome:
passed📌 Teardown phase
duration:
0.00018043490126729012outcome:
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.0003511388786137104outcome:
passed📌 Call phase
duration:
0.43113912362605333outcome:
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: 1754910610.4249716 msecs: 424.9715805053711 relativeCreated: 10630.635499954224 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910610.4254763 msecs: 425.4763126373291 relativeCreated: 10631.140232086182 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=0.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=4 time=1123758610.425636671 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: 1754910610.425678 msecs: 425.678014755249 relativeCreated: 10631.341934204102 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910610.6274478 msecs: 627.4478435516357 relativeCreated: 10833.111763000488 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910610.6282785 msecs: 628.2784938812256 relativeCreated: 10833.942413330078 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=25.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758610.628405228 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: 1754910610.628435 msecs: 628.4348964691162 relativeCreated: 10834.098815917969 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0003492669202387333outcome:
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.00045667029917240143outcome:
passed📌 Call phase
duration:
0.4050524686463177outcome:
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: 1754910610.8327541 msecs: 832.7541351318359 relativeCreated: 11038.418054580688 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910610.8331158 msecs: 833.115816116333 relativeCreated: 11038.779735565186 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=25.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123758610.833229900 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: 1754910610.8332584 msecs: 833.2583904266357 relativeCreated: 11038.922309875488 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910611.0347333 msecs: 34.73329544067383 relativeCreated: 11240.397214889526 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910611.0354626 msecs: 35.46261787414551 relativeCreated: 11241.126537322998 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=50.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758611.35565660 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: 1754910611.0355935 msecs: 35.593509674072266 relativeCreated: 11241.257429122925 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0005670636892318726outcome:
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.0007441109046339989outcome:
passed📌 Call phase
duration:
0.4055575211532414outcome:
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: 1754910611.2412872 msecs: 241.2872314453125 relativeCreated: 11446.951150894165 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910611.2428916 msecs: 242.8915500640869 relativeCreated: 11448.55546951294 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=50.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123758611.243187894 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: 1754910611.2432406 msecs: 243.2405948638916 relativeCreated: 11448.904514312744 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910611.444332 msecs: 444.3318843841553 relativeCreated: 11649.995803833008 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758611.444577705 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: 1754910611.4446125 msecs: 444.6125030517578 relativeCreated: 11650.27642250061 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0003694952465593815outcome:
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.0004650321789085865outcome:
passed📌 Call phase
duration:
0.4053159998729825outcome:
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: 1754910611.6488192 msecs: 648.8192081451416 relativeCreated: 11854.483127593994 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910611.649205 msecs: 649.2049694061279 relativeCreated: 11854.86888885498 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123758611.649350687 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: 1754910611.6493886 msecs: 649.3885517120361 relativeCreated: 11855.052471160889 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910611.8509848 msecs: 850.9848117828369 relativeCreated: 12056.64873123169 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910611.851742 msecs: 851.7420291900635 relativeCreated: 12057.405948638916 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=100.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758611.851884949 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: 1754910611.851914 msecs: 851.9139289855957 relativeCreated: 12057.577848434448 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0003669159486889839outcome:
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.00045209797099232674outcome:
passed📌 Call phase
duration:
0.4042776538990438outcome:
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: 1754910612.0564528 msecs: 56.45275115966797 relativeCreated: 12262.11667060852 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910612.0567706 msecs: 56.77056312561035 relativeCreated: 12262.434482574463 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=100.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123758612.56860688 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: 1754910612.0568857 msecs: 56.885719299316406 relativeCreated: 12262.549638748169 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910612.258096 msecs: 258.09597969055176 relativeCreated: 12463.759899139404 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=150.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758612.258331080 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: 1754910612.2583675 msecs: 258.36753845214844 relativeCreated: 12464.031457901001 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00033991318196058273outcome:
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.00045003602281212807outcome:
passed📌 Call phase
duration:
0.405426861718297outcome:
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: 1754910612.4624088 msecs: 462.40878105163574 relativeCreated: 12668.072700500488 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910612.4627635 msecs: 462.76354789733887 relativeCreated: 12668.427467346191 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=150.0 alarm=NO_ALARM severity=NO_ALARM flag=False mask=0 time=1123758612.462895989 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: 1754910612.4629223 msecs: 462.9223346710205 relativeCreated: 12668.586254119873 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910612.6646593 msecs: 664.6592617034912 relativeCreated: 12870.323181152344 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910612.6654608 msecs: 665.4608249664307 relativeCreated: 12871.124744415283 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=-50.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758612.665628056 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: 1754910612.665677 msecs: 665.6770706176758 relativeCreated: 12871.340990066528 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00034531671553850174outcome:
passed
↳ Function: test_use_callback_context_manager
-
✅ Test 374
📌 Setup phase
duration:
0.0001560598611831665outcome:
passed📌 Call phase
duration:
0.8102061301469803outcome:
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: 1754910612.8694181 msecs: 869.4181442260742 relativeCreated: 13075.082063674927 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910612.8697786 msecs: 869.7786331176758 relativeCreated: 13075.442552566528 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=0.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758612.869897279 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: 1754910612.869926 msecs: 869.9259757995605 relativeCreated: 13075.589895248413 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.071991 msecs: 71.990966796875 relativeCreated: 13277.654886245728 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910613.0727837 msecs: 72.7837085723877 relativeCreated: 13278.44762802124 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=42.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758613.72912499 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: 1754910613.072939 msecs: 72.93891906738281 relativeCreated: 13278.602838516235 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.2743745 msecs: 274.37448501586914 relativeCreated: 13480.038404464722 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910613.27516 msecs: 275.1600742340088 relativeCreated: 13480.823993682861 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=24.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758613.275349693 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: 1754910613.2753823 msecs: 275.38228034973145 relativeCreated: 13481.046199798584 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.4768078 msecs: 476.8078327178955 relativeCreated: 13682.471752166748 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.SimplePV.writeValue msg: VAL: 5745ed7350a9 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: 1754910613.477591 msecs: 477.59103775024414 relativeCreated: 13683.254957199097 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - name: pcaspy.Driver.setParam msg: VAL: value=75.0 alarm=NO_ALARM severity=NO_ALARM flag=True mask=3 time=1123758613.477767247 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: 1754910613.4778032 msecs: 477.80323028564453 relativeCreated: 13683.467149734497 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00024984730407595634outcome:
passed
↳ Function: test_orig_repr_is_not_custom_repr
-
✅ Test 375
📌 Setup phase
duration:
0.00015854695811867714outcome:
passed📌 Call phase
duration:
0.0021955366246402264outcome:
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: 1754910613.6813204 msecs: 681.3204288482666 relativeCreated: 13886.98434829712 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.6816332 msecs: 681.6332340240479 relativeCreated: 13887.2971534729 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.6822793 msecs: 682.2793483734131 relativeCreated: 13887.943267822266 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00015875883400440216outcome:
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.0009608902037143707outcome:
passed📌 Call phase
duration:
0.20063635474070907outcome:
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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: -342599794.33608055 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0003712517209351063outcome:
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.0009591719135642052outcome:
passed📌 Call phase
duration:
0.019768951926380396outcome:
passed📌 Teardown phase
duration:
0.00028996169567108154outcome:
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.0008524460718035698outcome:
passed📌 Call phase
duration:
0.018062815070152283outcome:
passed📌 Teardown phase
duration:
0.0002478901296854019outcome:
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.0007587810978293419outcome:
passed📌 Call phase
duration:
0.018182936124503613outcome:
passed📌 Teardown phase
duration:
0.000298911239951849outcome:
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.000852534081786871outcome:
passed📌 Call phase
duration:
0.017848404124379158outcome:
passed📌 Teardown phase
duration:
0.00026270700618624687outcome:
passed
↳ Function: test_preload_valid_file
-
✅ Test 381
📌 Setup phase
duration:
0.0007833391427993774outcome:
passed📌 Call phase
duration:
0.0015746261924505234outcome:
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: 1754910613.9709368 msecs: 970.9367752075195 relativeCreated: 14176.600694656372 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910613.9713528 msecs: 971.3528156280518 relativeCreated: 14177.016735076904 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00025075580924749374outcome:
passed
↳ Function: test_preload_old_file
-
✅ Test 382
📌 Setup phase
duration:
0.0005973111838102341outcome:
passed📌 Call phase
duration:
0.0007470170967280865outcome:
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: 1754910613.9737666 msecs: 973.766565322876 relativeCreated: 14179.430484771729 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910613.9738715 msecs: 973.8714694976807 relativeCreated: 14179.535388946533 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0002512037754058838outcome:
passed
↳ Function: test_preload_corrupt_file
-
✅ Test 383
📌 Setup phase
duration:
0.0012454441748559475outcome:
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: 1754910613.9757757 msecs: 975.7757186889648 relativeCreated: 14181.439638137817 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563📌 Call phase
duration:
0.0009624511003494263outcome:
passedlog:
- 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: 1754910613.9764698 msecs: 976.4697551727295 relativeCreated: 14182.133674621582 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910613.9768898 msecs: 976.8898487091064 relativeCreated: 14182.553768157959 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910613.9770207 msecs: 977.0207405090332 relativeCreated: 14182.684659957886 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00022287527099251747outcome:
passed
↳ Function: test_offload
-
✅ Test 384
📌 Setup phase
duration:
0.0005597621202468872outcome:
passed📌 Call phase
duration:
0.03433568775653839outcome:
passedlog:
- 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: 1754910614.0010648 msecs: 1.0647773742675781 relativeCreated: 14206.72869682312 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910614.0018797 msecs: 1.8796920776367188 relativeCreated: 14207.54361152649 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910614.0020103 msecs: 2.010345458984375 relativeCreated: 14207.674264907837 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910614.0120566 msecs: 12.056589126586914 relativeCreated: 14217.72050857544 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910614.012587 msecs: 12.58707046508789 relativeCreated: 14218.25098991394 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0003428296186029911outcome:
passed
↳ Function: test_offload_exception
-
✅ Test 385
📌 Setup phase
duration:
0.0008149687200784683outcome:
passed📌 Call phase
duration:
0.011114425025880337outcome:
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: 1754910614.0156612 msecs: 15.661239624023438 relativeCreated: 14221.325159072876 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910614.025827 msecs: 25.82693099975586 relativeCreated: 14231.490850448608 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563 - 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: 1754910614.026091 msecs: 26.09109878540039 relativeCreated: 14231.755018234253 thread: 140264835765760 threadName: MainThread processName: MainProcess process: 1563📌 Teardown phase
duration:
0.0002649053931236267outcome:
passed
↳ Function: test_pvpreload_end_to_end
-
✅ Test 386
📌 Setup phase
duration:
0.0006311642937362194outcome:
passed📌 Call phase
duration:
0.43003793293610215outcome:
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: 1754910614.0285723 msecs: 28.57232093811035 relativeCreated: 14234.236240386963 thread: 140263362008768 threadName: Thread-5 processName: MainProcess process: 1563 - 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: 1754910614.0288174 msecs: 28.817415237426758 relativeCreated: 14234.48133468628 thread: 140263362008768 threadName: Thread-5 processName: MainProcess process: 1563 - 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: 1754910614.0288877 msecs: 28.88774871826172 relativeCreated: 14234.551668167114 thread: 140263362008768 threadName: Thread-5 processName: MainProcess process: 1563 - 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: 1754910614.0552297 msecs: 55.22966384887695 relativeCreated: 14260.89358329773 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910614.079104 msecs: 79.10394668579102 relativeCreated: 14284.767866134644 thread: 140263362008768 threadName: Thread-5 processName: MainProcess process: 1563 - 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: 1754910614.079785 msecs: 79.78510856628418 relativeCreated: 14285.449028015137 thread: 140263362008768 threadName: Thread-5 processName: MainProcess process: 1563 - 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: 1754910614.256997 msecs: 256.99710845947266 relativeCreated: 14462.661027908325 thread: 140263362008768 threadName: Thread-6 processName: MainProcess process: 1563 - 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: 1754910614.2574868 msecs: 257.48682022094727 relativeCreated: 14463.1507396698 thread: 140263362008768 threadName: Thread-6 processName: MainProcess process: 1563 - 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: 1754910614.2575688 msecs: 257.5688362121582 relativeCreated: 14463.23275566101 thread: 140263362008768 threadName: Thread-6 processName: MainProcess process: 1563 - 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: 1754910614.2719736 msecs: 271.9736099243164 relativeCreated: 14477.637529373169 thread: 140263325488832 threadName: Thread-1 processName: MainProcess process: 1563 - 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: 1754910614.3077755 msecs: 307.77549743652344 relativeCreated: 14513.439416885376 thread: 140263362008768 threadName: Thread-6 processName: MainProcess process: 1563 - 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: 1754910614.3085678 msecs: 308.56776237487793 relativeCreated: 14514.23168182373 thread: 140263362008768 threadName: Thread-6 processName: MainProcess process: 1563📌 Teardown phase
duration:
0.00040230900049209595outcome:
passed
-
-
📄 test_utils_rangebar.py
↳ Function: test_full_progress_bar
-
✅ Test 387
📌 Setup phase
duration:
0.00044046202674508095outcome:
passed📌 Call phase
duration:
0.0002600080333650112outcome:
passed📌 Teardown phase
duration:
0.00019053788855671883outcome:
passed
↳ Function: test_half_progress_bar
-
✅ Test 388
📌 Setup phase
duration:
0.00029125576838850975outcome:
passed📌 Call phase
duration:
0.00021671410650014877outcome:
passed📌 Teardown phase
duration:
0.00017676595598459244outcome:
passed
↳ Function: test_zero_progress_bar
-
✅ Test 389
📌 Setup phase
duration:
0.00027541210874915123outcome:
passed📌 Call phase
duration:
0.00019423896446824074outcome:
passed📌 Teardown phase
duration:
0.0001562950201332569outcome:
passed
↳ Function: test_overflow_bar
-
✅ Test 390
📌 Setup phase
duration:
0.0002718470059335232outcome:
passed📌 Call phase
duration:
0.00018595904111862183outcome:
passed📌 Teardown phase
duration:
0.0001570107415318489outcome:
passed
↳ Function: test_underflow_bar
-
✅ Test 391
📌 Setup phase
duration:
0.000261843204498291outcome:
passed📌 Call phase
duration:
0.0001750551164150238outcome:
passed📌 Teardown phase
duration:
0.00015928270295262337outcome:
passed
↳ Function: test_repr
-
✅ Test 392
📌 Setup phase
duration:
0.0001242179423570633outcome:
passed📌 Call phase
duration:
0.00014416826888918877outcome:
passed📌 Teardown phase
duration:
0.0001128162257373333outcome:
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.00038844626396894455outcome:
passed📌 Call phase
duration:
0.00018958421424031258outcome:
passed📌 Teardown phase
duration:
0.00020924070850014687outcome:
passed -
✅ Test 394
params: value=10, expected_bar_part="█ "📌 Runtime Parameters
params: value: 10 expected_bar_part: █ id: 10-\u2588📌 Setup phase
duration:
0.0003637070767581463outcome:
passed📌 Call phase
duration:
0.00019903900101780891outcome:
passed📌 Teardown phase
duration:
0.0001858612522482872outcome:
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.0003773360513150692outcome:
passed📌 Call phase
duration:
0.00019008619710803032outcome:
passed📌 Teardown phase
duration:
0.0001879855990409851outcome:
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.00034793000668287277outcome:
passed📌 Call phase
duration:
0.00018987292423844337outcome:
passed📌 Teardown phase
duration:
0.00020152423530817032outcome:
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.00040593836456537247outcome:
passed📌 Call phase
duration:
0.00020114704966545105outcome:
passed📌 Teardown phase
duration:
0.00019495468586683273outcome:
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.0003643441013991833outcome:
passed📌 Call phase
duration:
0.00018695229664444923outcome:
passed📌 Teardown phase
duration:
0.00019635120406746864outcome:
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.00036084093153476715outcome:
passed📌 Call phase
duration:
0.00018543796613812447outcome:
passed📌 Teardown phase
duration:
0.00018706219270825386outcome:
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.00035706302151083946outcome:
passed📌 Call phase
duration:
0.0001889239065349102outcome:
passed📌 Teardown phase
duration:
0.00019730627536773682outcome:
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.00037463102489709854outcome:
passed📌 Call phase
duration:
0.00018991436809301376outcome:
passed📌 Teardown phase
duration:
0.00019779009744524956outcome:
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.0003584502264857292outcome:
passed📌 Call phase
duration:
0.0002075033262372017outcome:
passed📌 Teardown phase
duration:
0.0001894840970635414outcome:
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.0003680707886815071outcome:
passed📌 Call phase
duration:
0.00018565822392702103outcome:
passed📌 Teardown phase
duration:
0.00020694080740213394outcome:
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.00024778395891189575outcome:
passed📌 Call phase
duration:
0.0001686597242951393outcome:
passed📌 Teardown phase
duration:
0.00014875596389174461outcome:
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.0002306629903614521outcome:
passed📌 Call phase
duration:
0.00014411797747015953outcome:
passed📌 Teardown phase
duration:
0.00013846484944224358outcome:
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.00020963000133633614outcome:
passed📌 Call phase
duration:
0.00013659289106726646outcome:
passed📌 Teardown phase
duration:
0.00014301203191280365outcome:
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.00021775206550955772outcome:
passed📌 Call phase
duration:
0.00014891615137457848outcome:
passed📌 Teardown phase
duration:
0.00013466784730553627outcome:
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.00023976992815732956outcome:
passed📌 Call phase
duration:
0.00015689386054873466outcome:
passed📌 Teardown phase
duration:
0.00013826508074998856outcome:
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.00021136831492185593outcome:
passed📌 Call phase
duration:
0.0002117101103067398outcome:
passed📌 Teardown phase
duration:
0.00020235124975442886outcome:
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.0003522410988807678outcome:
passed📌 Call phase
duration:
0.00021818606182932854outcome:
passed📌 Teardown phase
duration:
0.0001450423151254654outcome:
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.0002277093008160591outcome:
passed📌 Call phase
duration:
0.00016955099999904633outcome:
passed📌 Teardown phase
duration:
0.00014091981574892998outcome:
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.00023692985996603966outcome:
passed📌 Call phase
duration:
0.00013792375102639198outcome:
passed📌 Teardown phase
duration:
0.00013511162251234055outcome:
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.00034028617665171623outcome:
passed📌 Call phase
duration:
0.0001479070633649826outcome:
passed📌 Teardown phase
duration:
0.00014094682410359383outcome:
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.00022418098524212837outcome:
passed📌 Call phase
duration:
0.00014363089576363564outcome:
passed📌 Teardown phase
duration:
0.00015904568135738373outcome:
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.0002245260402560234outcome:
passed📌 Call phase
duration:
0.000142744742333889outcome:
passed📌 Teardown phase
duration:
0.00014646165072917938outcome:
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.00022096280008554459outcome:
passed📌 Call phase
duration:
0.00014133471995592117outcome:
passed📌 Teardown phase
duration:
0.0001492309384047985outcome:
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.0002187187783420086outcome:
passed📌 Call phase
duration:
0.00014640111476182938outcome:
passed📌 Teardown phase
duration:
0.00013591907918453217outcome:
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.00020939623937010765outcome:
passed📌 Call phase
duration:
0.00013475073501467705outcome:
passed📌 Teardown phase
duration:
0.0001413188874721527outcome:
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.00022535677999258041outcome:
passed📌 Call phase
duration:
0.00015444308519363403outcome:
passed📌 Teardown phase
duration:
0.00013839686289429665outcome:
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.00022195791825652122outcome:
passed📌 Call phase
duration:
0.00014734361320734024outcome:
passed📌 Teardown phase
duration:
0.00014266371726989746outcome:
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.00021685613319277763outcome:
passed📌 Call phase
duration:
0.00015342561528086662outcome:
passed📌 Teardown phase
duration:
0.00014121504500508308outcome:
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.00022432394325733185outcome:
passed📌 Call phase
duration:
0.00013941805809736252outcome:
passed📌 Teardown phase
duration:
0.00013236887753009796outcome:
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.00023415079340338707outcome:
passed📌 Call phase
duration:
0.00014188699424266815outcome:
passed📌 Teardown phase
duration:
0.00013562897220253944outcome:
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.0002172267995774746outcome:
passed📌 Call phase
duration:
0.00013457098975777626outcome:
passed📌 Teardown phase
duration:
0.0001356750726699829outcome:
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.0002158191055059433outcome:
passed📌 Call phase
duration:
0.00013811420649290085outcome:
passed📌 Teardown phase
duration:
0.02042091405019164outcome:
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.00027287472039461136outcome:
passed📌 Call phase
duration:
0.00017049675807356834outcome:
passed📌 Teardown phase
duration:
0.00014217989519238472outcome:
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.00023955479264259338outcome:
passed📌 Call phase
duration:
0.0001451624557375908outcome:
passed📌 Teardown phase
duration:
0.00014140084385871887outcome:
passed
-
-
📄 test_utils_registry.py
↳ Function: test_metaclass_creates_weakset
-
✅ Test 428
📌 Setup phase
duration:
0.0001353491097688675outcome:
passed📌 Call phase
duration:
0.0006491891108453274outcome:
passed📌 Teardown phase
duration:
0.00012176483869552612outcome:
passed
↳ Function: test_metaclass_tracks_instances
-
✅ Test 429
📌 Setup phase
duration:
0.00011671194806694984outcome:
passed📌 Call phase
duration:
0.0002372809685766697outcome:
passed📌 Teardown phase
duration:
0.00010549090802669525outcome:
passed
↳ Function: test_registry_inheritance
-
✅ Test 430
📌 Setup phase
duration:
0.00021482398733496666outcome:
passed📌 Call phase
duration:
0.0005186609923839569outcome:
passed📌 Teardown phase
duration:
0.0001318110153079033outcome:
passed
↳ Function: test_instance_tracking
-
✅ Test 431
📌 Setup phase
duration:
0.00016942806541919708outcome:
passed📌 Call phase
duration:
0.0002098572440445423outcome:
passed📌 Teardown phase
duration:
0.0001294407993555069outcome:
passed
↳ Function: test_collect_instances_recursive
-
✅ Test 432
📌 Setup phase
duration:
0.0001748860813677311outcome:
passed📌 Call phase
duration:
0.0010989769361913204outcome:
passed📌 Teardown phase
duration:
0.00014441786333918571outcome:
passed
↳ Function: test_instances_function
-
✅ Test 433
📌 Setup phase
duration:
0.00018218671903014183outcome:
passed📌 Call phase
duration:
0.0009318259544670582outcome:
passed📌 Teardown phase
duration:
0.0001431717537343502outcome:
passed
↳ Function: test_non_registry_class_error
-
✅ Test 434
📌 Setup phase
duration:
0.00011912593618035316outcome:
passed📌 Call phase
duration:
0.00019857892766594887outcome:
passed📌 Teardown phase
duration:
0.00010500987991690636outcome:
passed
↳ Function: test_signature_preservation
-
✅ Test 435
📌 Setup phase
duration:
0.00011042319238185883outcome:
passed📌 Call phase
duration:
0.00022973539307713509outcome:
passed📌 Teardown phase
duration:
0.00011497596278786659outcome:
passed
-
-
📄 test_utils_richcfg.py
↳ Function: test_rich_inspector_outputs_more_than_builtin
-
✅ Test 436
📌 Setup phase
duration:
0.00019731884822249413outcome:
passed📌 Call phase
duration:
0.09267509402707219outcome:
passed📌 Teardown phase
duration:
0.0002159508876502514outcome:
passed
-
-
📄 test_utils_run_later.py
↳ Function: test_init_and_repr
-
✅ Test 437
📌 Setup phase
duration:
0.00015247194096446037outcome:
passed📌 Call phase
duration:
0.00021263910457491875outcome:
passed📌 Teardown phase
duration:
0.00011856388300657272outcome:
passed
↳ Function: test_call
-
✅ Test 438
📌 Setup phase
duration:
0.00012366287410259247outcome:
passed📌 Call phase
duration:
0.00015840213745832443outcome:
passed📌 Teardown phase
duration:
0.00011961488053202629outcome:
passed
↳ Function: test_matmul_with_string
-
✅ Test 439
📌 Setup phase
duration:
0.00012213084846735outcome:
passed📌 Call phase
duration:
0.00017231609672307968outcome:
passed📌 Teardown phase
duration:
0.00011217081919312477outcome:
passed
↳ Function: test_matmul_with_list
-
✅ Test 440
📌 Setup phase
duration:
0.00010891910642385483outcome:
passed📌 Call phase
duration:
0.00015044910833239555outcome:
passed📌 Teardown phase
duration:
0.0001131836324930191outcome:
passed
↳ Function: test_matmul_with_single_int
-
✅ Test 441
📌 Setup phase
duration:
0.00011055590584874153outcome:
passed📌 Call phase
duration:
0.0001495908945798874outcome:
passed📌 Teardown phase
duration:
9.740889072418213e-05outcome:
passed
↳ Function: test_run_at_future_triggered_and_logs
-
✅ Test 442
📌 Setup phase
duration:
0.00031038885936141014outcome:
passed📌 Call phase
duration:
0.2053098762407899outcome:
passed📌 Teardown phase
duration:
0.00028789183124899864outcome:
passed
↳ Function: test_run_at_already_past
-
✅ Test 443
📌 Setup phase
duration:
0.00033827777951955795outcome:
passed📌 Call phase
duration:
0.00032339710742235184outcome:
passed📌 Teardown phase
duration:
0.00019654305651783943outcome:
passed
↳ Function: test_run_in_future_triggered_and_logs
-
✅ Test 444
📌 Setup phase
duration:
0.0002785217948257923outcome:
passed📌 Call phase
duration:
0.20185251161456108outcome:
passed📌 Teardown phase
duration:
0.0002912059426307678outcome:
passed
↳ Function: test_run_in_past
-
✅ Test 445
📌 Setup phase
duration:
0.00031225522980093956outcome:
passed📌 Call phase
duration:
0.0003620698116719723outcome:
passed📌 Teardown phase
duration:
0.00017921626567840576outcome:
passed
↳ Function: test_run_later_with_seconds
-
✅ Test 446
📌 Setup phase
duration:
0.0002684248611330986outcome:
passed📌 Call phase
duration:
0.2017986560240388outcome:
passed📌 Teardown phase
duration:
0.0002953191287815571outcome:
passed
↳ Function: test_run_later_with_past_datetime
-
✅ Test 447
📌 Setup phase
duration:
0.0003099767491221428outcome:
passed📌 Call phase
duration:
0.00034601474180817604outcome:
passed📌 Teardown phase
duration:
0.00017543509602546692outcome:
passed
↳ Function: test_run_at_tqdm_multiple_updates
-
✅ Test 448
📌 Setup phase
duration:
0.0003407890908420086outcome:
passed📌 Call phase
duration:
0.20189881417900324outcome:
passed📌 Teardown phase
duration:
0.00034586386755108833outcome:
passed
↳ Function: test_today_basic
-
✅ Test 449
📌 Setup phase
duration:
0.00014266837388277054outcome:
passed📌 Call phase
duration:
0.0005829320289194584outcome:
passed📌 Teardown phase
duration:
0.0001211799681186676outcome:
passed
↳ Function: test_tomorrow_basic
-
✅ Test 450
📌 Setup phase
duration:
0.00011746538802981377outcome:
passed📌 Call phase
duration:
0.0003642737865447998outcome:
passed📌 Teardown phase
duration:
0.00012716790661215782outcome:
passed
↳ Function: test_yesterday_basic
-
✅ Test 451
📌 Setup phase
duration:
0.00011997390538454056outcome:
passed📌 Call phase
duration:
0.0003553689457476139outcome:
passed📌 Teardown phase
duration:
0.00011450285091996193outcome:
passed
↳ Function: test_today_matmul_string
-
✅ Test 452
📌 Setup phase
duration:
0.00011325208470225334outcome:
passed📌 Call phase
duration:
0.0003566918894648552outcome:
passed📌 Teardown phase
duration:
0.00011159805580973625outcome:
passed
↳ Function: test_tomorrow_matmul_list
-
✅ Test 453
📌 Setup phase
duration:
0.00011351192370057106outcome:
passed📌 Call phase
duration:
0.00033517414703965187outcome:
passed📌 Teardown phase
duration:
0.0001044287346303463outcome:
passed
↳ Function: test_yesterday_matmul_single
-
✅ Test 454
📌 Setup phase
duration:
0.00011452799662947655outcome:
passed📌 Call phase
duration:
0.0003368258476257324outcome:
passed📌 Teardown phase
duration:
0.00010873004794120789outcome:
passed
-
-
📄 test_utils_sendmail.py
↳ Function: test_sendmail_real_local_verbose
-
✅ Test 455
📌 Setup phase
duration:
0.00013137003406882286outcome:
passed📌 Call phase
duration:
1.8492158642038703outcome:
passed📌 Teardown phase
duration:
0.00032337429001927376outcome:
passed
-
-
📄 test_utils_shortcut.py
↳ Function: TestShortcutInitialization
-
✅ Test 456
📌 Setup phase
duration:
0.0004366561770439148outcome:
passed📌 Call phase
duration:
0.0002492000348865986outcome:
passed📌 Teardown phase
duration:
0.00017779506742954254outcome:
passed -
✅ Test 457
📌 Setup phase
duration:
0.000223665963858366outcome:
passed📌 Call phase
duration:
0.00016587786376476288outcome:
passed📌 Teardown phase
duration:
0.00013128714635968208outcome:
passed
↳ Function: test_run_method
-
✅ Test 458
📌 Setup phase
duration:
0.00042262813076376915outcome:
passed📌 Call phase
duration:
0.0007272986695170403outcome:
passed📌 Teardown phase
duration:
0.0002325880341231823outcome:
passed
↳ Function: test_repr_output
-
✅ Test 459
📌 Setup phase
duration:
0.00018906407058238983outcome:
passed📌 Call phase
duration:
0.00017574289813637733outcome:
passed📌 Teardown phase
duration:
0.0001400490291416645outcome:
passed
↳ Function: test_source_with_regular_function
-
✅ Test 460
📌 Setup phase
duration:
0.00017955945804715157outcome:
passed📌 Call phase
duration:
0.0006949054077267647outcome:
passed📌 Teardown phase
duration:
0.0001503736712038517outcome:
passed
↳ Function: test_source_error_handling
-
✅ Test 461
📌 Setup phase
duration:
0.00018635718151926994outcome:
passed📌 Call phase
duration:
0.001039622351527214outcome:
passed📌 Teardown phase
duration:
0.00016166362911462784outcome:
passed
↳ Function: test_as_shortcut_basic
-
✅ Test 462
📌 Setup phase
duration:
0.00020972779020667076outcome:
passed📌 Call phase
duration:
0.00016694003716111183outcome:
passed📌 Teardown phase
duration:
0.00013607461005449295outcome:
passed
↳ Function: test_as_shortcut_with_name
-
✅ Test 463
📌 Setup phase
duration:
0.00019066408276557922outcome:
passed📌 Call phase
duration:
0.00015472713857889175outcome:
passed📌 Teardown phase
duration:
0.00012454576790332794outcome:
passed
↳ Function: test_as_shortcut_factory_pattern
-
✅ Test 464
📌 Setup phase
duration:
0.0003156200982630253outcome:
passed📌 Call phase
duration:
0.00015306007117033005outcome:
passed📌 Teardown phase
duration:
0.00014291517436504364outcome:
passed
↳ Function: TestShortcutsSingleton
-
✅ Test 465
📌 Setup phase
duration:
0.0002889619208872318outcome:
passed📌 Call phase
duration:
0.00015304796397686005outcome:
passed📌 Teardown phase
duration:
0.00016340240836143494outcome:
passed -
✅ Test 466
📌 Setup phase
duration:
0.0003130747936666012outcome:
passed📌 Call phase
duration:
0.00024648895487189293outcome:
passed📌 Teardown phase
duration:
0.00014828192070126534outcome:
passed -
✅ Test 467
📌 Setup phase
duration:
0.0002540731802582741outcome:
passed📌 Call phase
duration:
0.00017376989126205444outcome:
passed📌 Teardown phase
duration:
0.00015169894322752953outcome:
passed -
✅ Test 468
📌 Setup phase
duration:
0.0002511008642613888outcome:
passed📌 Call phase
duration:
0.00021514808759093285outcome:
passed📌 Teardown phase
duration:
0.00015651993453502655outcome:
passed -
✅ Test 469
📌 Setup phase
duration:
0.0002525467425584793outcome:
passed📌 Call phase
duration:
0.00026000896468758583outcome:
passed📌 Teardown phase
duration:
0.00018760142847895622outcome:
passed
↳ Function: TestFullIntegration
-
✅ Test 470
📌 Setup phase
duration:
0.00040156999602913857outcome:
passed📌 Call phase
duration:
0.0007641259580850601outcome:
passed📌 Teardown phase
duration:
0.00024784496054053307outcome:
passed -
✅ Test 471
📌 Setup phase
duration:
0.0002601528540253639outcome:
passed📌 Call phase
duration:
0.00021724868565797806outcome:
passed📌 Teardown phase
duration:
0.0001507219858467579outcome:
passed
↳ Function: test_registry_inheritance
-
✅ Test 472
📌 Setup phase
duration:
0.00018303608521819115outcome:
passed📌 Call phase
duration:
0.0001472020521759987outcome:
passed📌 Teardown phase
duration:
0.00014771195128560066outcome:
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.0003041410818696022outcome:
passed📌 Call phase
duration:
0.0007039480842649937outcome:
passed📌 Teardown phase
duration:
0.00017985980957746506outcome:
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.00029802974313497543outcome:
passed📌 Call phase
duration:
0.0005093421787023544outcome:
passed📌 Teardown phase
duration:
0.00017224019393324852outcome:
passed -
✅ Test 475
params: test_input=[], expected=[], kwargs={}📌 Runtime Parameters
params: test_input: [] expected: [] kwargs: {} id: empty_case📌 Setup phase
duration:
0.00029118824750185013outcome:
passed📌 Call phase
duration:
0.00015066098421812057outcome:
passed📌 Teardown phase
duration:
0.00017424020916223526outcome:
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.00026877596974372864outcome:
passed📌 Call phase
duration:
0.0005913800559937954outcome:
passed📌 Teardown phase
duration:
0.00017909705638885498outcome:
passed -
✅ Test 477
params: test_input="z3", "C"], ["a1", "A"], ["m2", "B", expected=["A", "B", "C"], kwargs="{'sort_key': at 0x7f919e9ff4c0>}"📌 Runtime Parameters
params: test_input: - - z3 - C - - a1 - A - - m2 - B expected: - A - B - C kwargs: {'sort_key': <function <lambda> at 0x7f919e9ff4c0>} id: sort_id📌 Setup phase
duration:
0.0002837730571627617outcome:
passed📌 Call phase
duration:
0.0006031449884176254outcome:
passed📌 Teardown phase
duration:
0.00017510820180177689outcome:
passed -
✅ Test 478
params: test_input="3", "Charlie"], ["1", "alpha"], ["2", "Beta", expected=["alpha", "Beta", "Charlie"], kwargs="{'sort_key': at 0x7f919e9ff550>}"📌 Runtime Parameters
params: test_input: - - 3 - Charlie - - 1 - alpha - - 2 - Beta expected: - alpha - Beta - Charlie kwargs: {'sort_key': <function <lambda> at 0x7f919e9ff550>} id: sort_case_insensitive📌 Setup phase
duration:
0.00030158692970871925outcome:
passed📌 Call phase
duration:
0.0005714781582355499outcome:
passed📌 Teardown phase
duration:
0.0001782616600394249outcome:
passed -
✅ Test 479
params: test_input="1", "A"], ["2", "BB"], ["3", "CCC", expected=["A", "BB", "CCC"], kwargs="{'sort_key': at 0x7f919e9ff5e0>}"📌 Runtime Parameters
params: test_input: - - 1 - A - - 2 - BB - - 3 - CCC expected: - A - BB - CCC kwargs: {'sort_key': <function <lambda> at 0x7f919e9ff5e0>} id: sort_length📌 Setup phase
duration:
0.000303040724247694outcome:
passed📌 Call phase
duration:
0.003363527823239565outcome:
passed📌 Teardown phase
duration:
0.0001849532127380371outcome:
passed -
✅ Test 480
params: test_input="1", "A"], ["2", "B"], ["3", "C", expected=["C", "B", "A"], kwargs="{'sort_key': at 0x7f919e9ff670>}"📌 Runtime Parameters
params: test_input: - - 1 - A - - 2 - B - - 3 - C expected: - C - B - A kwargs: {'sort_key': <function <lambda> at 0x7f919e9ff670>} id: sort_reverse📌 Setup phase
duration:
0.00029136985540390015outcome:
passed📌 Call phase
duration:
0.0005502370186150074outcome:
passed📌 Teardown phase
duration:
0.00019039586186408997outcome:
passed
-
-
📄 test_utils_termtitle.py
↳ Function: test_terminal_title_with_tmux
-
✅ Test 481
📌 Setup phase
duration:
0.00014606071636080742outcome:
passed📌 Call phase
duration:
0.019415176939219236outcome:
passed📌 Teardown phase
duration:
0.00028719985857605934outcome:
passed
-
-
📄 test_utils_tqdm_mod.py
↳ Function: test_complete_progress_bar
-
✅ Test 482
📌 Setup phase
duration:
0.00017330190166831017outcome:
passed📌 Call phase
duration:
0.004156265873461962outcome:
passed📌 Teardown phase
duration:
0.00017309701070189476outcome:
passed
↳ Function: test_set_progress_multiple_points
-
✅ Test 483
📌 Setup phase
duration:
0.00012957677245140076outcome:
passed📌 Call phase
duration:
0.001809808425605297outcome:
passed📌 Teardown phase
duration:
0.0001371847465634346outcome:
passed
↳ Function: test_format_sizeof_alignment
-
✅ Test 484
📌 Setup phase
duration:
0.00014646071940660477outcome:
passed📌 Call phase
duration:
0.00016823597252368927outcome:
passed📌 Teardown phase
duration:
0.00010850699618458748outcome:
passed
↳ Function: test_custom_unit
-
✅ Test 486
📌 Setup phase
duration:
0.0001315581612288952outcome:
passed📌 Call phase
duration:
0.004884267691522837outcome:
passed📌 Teardown phase
duration:
0.00011776573956012726outcome:
passed
↳ Function: test_clamp_above_total
-
✅ Test 487
📌 Setup phase
duration:
0.0001505729742348194outcome:
passed📌 Call phase
duration:
0.0005605919286608696outcome:
passed📌 Teardown phase
duration:
0.00011498713865876198outcome:
passed
↳ Function: test_clamp_below_zero
-
✅ Test 488
📌 Setup phase
duration:
0.0001141219399869442outcome:
passed📌 Call phase
duration:
0.000685208011418581outcome:
passed📌 Teardown phase
duration:
0.00013098632916808128outcome:
passed
-
-
📄 test_utils_trinary.py
↳ Function: test_check_trinary_valid_values
-
✅ Test 489
📌 Setup phase
duration:
0.00013709301128983498outcome:
passed📌 Call phase
duration:
0.00017237477004528046outcome:
passed📌 Teardown phase
duration:
0.00011192867532372475outcome:
passed
↳ Function: test_check_trinary_invalid_value
-
✅ Test 490
📌 Setup phase
duration:
0.00011637760326266289outcome:
passed📌 Call phase
duration:
0.00045210588723421097outcome:
passed📌 Teardown phase
duration:
0.00012169592082500458outcome:
passed
↳ Function: test_check_trinary_with_custom_allowed_values
-
✅ Test 491
📌 Setup phase
duration:
0.0001131352037191391outcome:
passed📌 Call phase
duration:
0.00017094984650611877outcome:
passed📌 Teardown phase
duration:
0.00010110577568411827outcome:
passed
-
-
📄 test_utils_typecast.py
↳ Function: test_downcast_success
-
✅ Test 492
📌 Setup phase
duration:
0.000122907105833292outcome:
passed📌 Call phase
duration:
0.00017623091116547585outcome:
passed📌 Teardown phase
duration:
0.00010335678234696388outcome:
passed
↳ Function: test_upcast_success
-
✅ Test 493
📌 Setup phase
duration:
0.00011495687067508698outcome:
passed📌 Call phase
duration:
0.0001517459750175476outcome:
passed📌 Teardown phase
duration:
0.00010807905346155167outcome:
passed
↳ Function: test_downcast_invalid
-
✅ Test 494
📌 Setup phase
duration:
0.00012437673285603523outcome:
passed📌 Call phase
duration:
0.00039920490235090256outcome:
passed📌 Teardown phase
duration:
0.00011034496128559113outcome:
passed
↳ Function: test_upcast_invalid
-
✅ Test 495
📌 Setup phase
duration:
0.00011017406359314919outcome:
passed📌 Call phase
duration:
0.00018574995920062065outcome:
passed📌 Teardown phase
duration:
0.00011033890768885612outcome:
passed
↳ Function: test_object_identity_preserved
-
✅ Test 496
📌 Setup phase
duration:
0.00010916031897068024outcome:
passed📌 Call phase
duration:
0.00014366023242473602outcome:
passed📌 Teardown phase
duration:
0.0001012161374092102outcome:
passed
↳ Function: test_ensure_subclass_valid
-
✅ Test 497
📌 Setup phase
duration:
0.00011612009257078171outcome:
passed📌 Call phase
duration:
0.00013059377670288086outcome:
passed📌 Teardown phase
duration:
0.00010015210136771202outcome:
passed
↳ Function: test_ensure_subclass_invalid
-
✅ Test 498
📌 Setup phase
duration:
0.00011896109208464622outcome:
passed📌 Call phase
duration:
0.00017501087859272957outcome:
passed📌 Teardown phase
duration:
0.00010964320972561836outcome:
passed
↳ Function: test_cast_changes_class
-
✅ Test 499
📌 Setup phase
duration:
0.00011276593431830406outcome:
passed📌 Call phase
duration:
0.00016216514632105827outcome:
passed📌 Teardown phase
duration:
0.00011609494686126709outcome:
passed
↳ Function: test_cast_preserves_identity
-
✅ Test 500
📌 Setup phase
duration:
0.00011823838576674461outcome:
passed📌 Call phase
duration:
0.0001353202387690544outcome:
passed📌 Teardown phase
duration:
0.00011243904009461403outcome:
passed
-
-
📄 test_utils_utils.py
↳ Function: test_singleton_instance
-
✅ Test 501
📌 Setup phase
duration:
0.0001166192814707756outcome:
passed📌 Call phase
duration:
0.0001489422284066677outcome:
passed📌 Teardown phase
duration:
0.00011446932330727577outcome:
passed
↳ Function: test_singleton_identity
-
✅ Test 502
📌 Setup phase
duration:
0.0001158970408141613outcome:
passed📌 Call phase
duration:
0.00013409089297056198outcome:
passed📌 Teardown phase
duration:
0.00010164035484194756outcome:
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.00033201416954398155outcome:
passed📌 Call phase
duration:
0.0001621902920305729outcome:
passed📌 Teardown phase
duration:
0.000153461005538702outcome:
passed -
✅ Test 504
params: obj=true, expected="bool"📌 Runtime Parameters
params: obj: True expected: bool id: True-bool📌 Setup phase
duration:
0.00025224918499588966outcome:
passed📌 Call phase
duration:
0.00013686204329133034outcome:
passed📌 Teardown phase
duration:
0.000150398351252079outcome:
passed -
✅ Test 505
params: obj=42, expected="int"📌 Runtime Parameters
params: obj: 42 expected: int id: 42-int📌 Setup phase
duration:
0.0002448451705276966outcome:
passed📌 Call phase
duration:
0.0001371847465634346outcome:
passed📌 Teardown phase
duration:
0.00013517774641513824outcome:
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.00021507404744625092outcome:
passed📌 Call phase
duration:
0.00013956986367702484outcome:
passed📌 Teardown phase
duration:
0.0001469990238547325outcome:
passed -
✅ Test 507
params: obj="text", expected="str"📌 Runtime Parameters
params: obj: text expected: str id: text-str📌 Setup phase
duration:
0.00021934602409601212outcome:
passed📌 Call phase
duration:
0.00014011329039931297outcome:
passed📌 Teardown phase
duration:
0.00013526016846299171outcome:
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.00023900484666228294outcome:
passed📌 Call phase
duration:
0.00013855332508683205outcome:
passed📌 Teardown phase
duration:
0.00013885600492358208outcome:
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.0002236291766166687outcome:
passed📌 Call phase
duration:
0.00013229530304670334outcome:
passed📌 Teardown phase
duration:
0.0001435503363609314outcome:
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.0002224440686404705outcome:
passed📌 Call phase
duration:
0.00013520196080207825outcome:
passed📌 Teardown phase
duration:
0.00013526994735002518outcome:
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.0002282196655869484outcome:
passed📌 Call phase
duration:
0.000138196162879467outcome:
passed📌 Teardown phase
duration:
0.00014624092727899551outcome:
passed -
✅ Test 512
params: obj=" at 0x7f919ea1cdc0>", expected="function"📌 Runtime Parameters
params: obj: <function <lambda> at 0x7f919ea1cdc0> expected: function id: <lambda>-function📌 Setup phase
duration:
0.0003407043404877186outcome:
passed📌 Call phase
duration:
0.00015345774590969086outcome:
passed📌 Teardown phase
duration:
0.00014621717855334282outcome:
passed -
✅ Test 513
params: obj="", expected="function"📌 Runtime Parameters
params: obj: <function sample_function at 0x7f919ea1cd30> expected: function id: sample_function-function📌 Setup phase
duration:
0.00023211771622300148outcome:
passed📌 Call phase
duration:
0.00014355406165122986outcome:
passed📌 Teardown phase
duration:
0.0001423838548362255outcome:
passed -
✅ Test 514
params: obj=".nested at 0x7f919ea1ce50>", expected="function"📌 Runtime Parameters
params: obj: <function sample_function.<locals>.nested at 0x7f919ea1ce50> expected: function id: nested-function📌 Setup phase
duration:
0.00022560637444257736outcome:
passed📌 Call phase
duration:
0.00013978499919176102outcome:
passed📌 Teardown phase
duration:
0.00015011010691523552outcome:
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.00021370500326156616outcome:
passed📌 Call phase
duration:
0.00013228273019194603outcome:
passed📌 Teardown phase
duration:
0.00014442112296819687outcome:
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.00022174417972564697outcome:
passed📌 Call phase
duration:
0.00014438992366194725outcome:
passed📌 Teardown phase
duration:
0.00014590099453926086outcome:
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.00022216560319066048outcome:
passed📌 Call phase
duration:
0.00013586599379777908outcome:
passed📌 Teardown phase
duration:
0.00013685598969459534outcome:
passed -
✅ Test 518
params: obj="", expected="module"📌 Runtime Parameters
params: obj: <module 'sys' (built-in)> expected: module id: sys-module📌 Setup phase
duration:
0.0002368357963860035outcome:
passed📌 Call phase
duration:
0.00013625668361783028outcome:
passed📌 Teardown phase
duration:
0.000138893723487854outcome:
passed -
✅ Test 519
params: obj="", expected="type"📌 Runtime Parameters
params: obj: <class 'function'> expected: type id: function-type📌 Setup phase
duration:
0.00022152112796902657outcome:
passed📌 Call phase
duration:
0.00013429811224341393outcome:
passed📌 Teardown phase
duration:
0.000150392297655344outcome:
passed -
✅ Test 520
params: obj=" at 0x7f919e41cd60>", expected="generator"📌 Runtime Parameters
params: obj: <generator object <genexpr> at 0x7f919e41cd60> expected: generator id: <genexpr>-generator📌 Setup phase
duration:
0.00021764729171991348outcome:
passed📌 Call phase
duration:
0.00013664178550243378outcome:
passed📌 Teardown phase
duration:
0.0001397724263370037outcome:
passed -
✅ Test 521
params: obj="", expected="list_iterator"📌 Runtime Parameters
params: obj: <list_iterator object at 0x7f919ea0d3d0> expected: list_iterator id: obj18-list_iterator📌 Setup phase
duration:
0.00021948711946606636outcome:
passed📌 Call phase
duration:
0.00013968581333756447outcome:
passed📌 Teardown phase
duration:
0.00015619304031133652outcome:
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.0002344287931919098outcome:
passed📌 Call phase
duration:
0.000141143798828125outcome:
passed📌 Teardown phase
duration:
0.00013508228585124016outcome:
passed -
✅ Test 523
params: nums=[10, 20], expected=21📌 Runtime Parameters
params: nums: - 10 - 20 expected: 21 id: nums1-21📌 Setup phase
duration:
0.00023267976939678192outcome:
passed📌 Call phase
duration:
0.000136571004986763outcome:
passed📌 Teardown phase
duration:
0.00014037685468792915outcome:
passed -
✅ Test 524
params: nums=[], expected=0📌 Runtime Parameters
params: nums: [] expected: 0 id: nums2-0📌 Setup phase
duration:
0.00022355373948812485outcome:
passed📌 Call phase
duration:
0.00013087596744298935outcome:
passed📌 Teardown phase
duration:
0.00015300605446100235outcome:
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.0002704821527004242outcome:
passed📌 Call phase
duration:
0.0001515350304543972outcome:
passed📌 Teardown phase
duration:
0.00015077507123351097outcome:
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.00028263870626688004outcome:
passed📌 Call phase
duration:
0.0001410776749253273outcome:
passed📌 Teardown phase
duration:
0.00015128124505281448outcome:
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.0002577700652182102outcome:
passed📌 Call phase
duration:
0.00014065904542803764outcome:
passed📌 Teardown phase
duration:
0.0001667267642915249outcome:
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.00022313697263598442outcome:
passed📌 Call phase
duration:
0.0001389710232615471outcome:
passed📌 Teardown phase
duration:
0.00015258882194757462outcome:
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.0002257293090224266outcome:
passed📌 Call phase
duration:
0.00014733197167515755outcome:
passed📌 Teardown phase
duration:
0.0001347661018371582outcome:
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.00024297088384628296outcome:
passed📌 Call phase
duration:
0.00014396803453564644outcome:
passed📌 Teardown phase
duration:
0.00013977009803056717outcome:
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.00024139508605003357outcome:
passed📌 Call phase
duration:
0.00013912003487348557outcome:
passed📌 Teardown phase
duration:
0.00014030933380126953outcome:
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.0002176663838326931outcome:
passed📌 Call phase
duration:
0.00018153898417949677outcome:
passed📌 Teardown phase
duration:
0.00015118392184376717outcome:
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.0002211141400039196outcome:
passed📌 Call phase
duration:
0.00017429515719413757outcome:
passed📌 Teardown phase
duration:
0.00014438899233937263outcome:
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.00021927803754806519outcome:
passed📌 Call phase
duration:
0.00015659304335713387outcome:
passed📌 Teardown phase
duration:
0.00013739103451371193outcome:
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.00029703835025429726outcome:
passed📌 Call phase
duration:
0.0001628580503165722outcome:
passed📌 Teardown phase
duration:
0.00017091212794184685outcome:
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.0002703070640563965outcome:
passed📌 Call phase
duration:
0.00024439115077257156outcome:
passed📌 Teardown phase
duration:
0.0001599700190126896outcome:
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.00026652123779058456outcome:
passed📌 Call phase
duration:
0.0001459447667002678outcome:
passed📌 Teardown phase
duration:
0.00015323003754019737outcome:
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.00025594374164938927outcome:
passed📌 Call phase
duration:
0.00013535935431718826outcome:
passed📌 Teardown phase
duration:
0.00017267093062400818outcome:
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.00026898132637143135outcome:
passed📌 Call phase
duration:
0.00016362499445676804outcome:
passed📌 Teardown phase
duration:
0.00016129808500409126outcome:
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.0002658730372786522outcome:
passed📌 Call phase
duration:
0.00015099486336112022outcome:
passed📌 Teardown phase
duration:
0.00015168916434049606outcome:
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.0001903139054775238outcome:
passed📌 Call phase
duration:
0.0005000457167625427outcome:
passed📌 Teardown phase
duration:
0.0010559000074863434outcome:
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.00026030978187918663outcome:
passed📌 Call phase
duration:
0.0010128719732165337outcome:
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.0003069089725613594outcome:
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.00026674196124076843outcome:
passed📌 Call phase
duration:
0.0005845730192959309outcome:
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.000223435927182436outcome:
passed
-
-
📄 test_utils_elog.py
↳ Function: test_post_local
-
❌ Test 159
📌 Setup phase
duration:
0.00012399163097143173outcome:
passed📌 Call phase
duration:
0.011364512145519257outcome:
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 0x7f919e476ee0>: 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 0x7f919e344bb0> 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 0x7f919e3517c0> method = 'POST', url = '/demo/' body = b'--f510faeba7dca15d9c931def54e6f4ef\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--f510faeba7dca1...position: form-data; name="Text"; filename=""\r\n\r\nHello from local test\r\n--f510faeba7dca15d9c931def54e6f4ef--\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=f510faeba7dca15d9c931def54e6f4ef'} 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 0x7f919e344bb0> 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 0x7f919e344bb0>: 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 0x7f919e351040> 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 0x7f919e344bb0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e3517c0> _stacktrace = <traceback object at 0x7f919e478e40> 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 0x7f919e344bb0>: 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 0x7f919e344880> 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 0x7f919e351040> 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 0x7f919e344bb0>: 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 0x7f919e476ee0> 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 0x7f919e476610> 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 0x7f919e476ee0> 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 0x7f919e476ee0>: 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 0x7f919ed808b0> 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 0x7f919e476ee0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e476610> _stacktrace = <traceback object at 0x7f919e469ac0> 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 0x7f919e476ee0>: 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 0x7f919e344880>, 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 0x7f919ed808b0> 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 0x7f919e476ee0>: 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 0x7f919e344880>, 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 0x7f919e476ee0>: 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.00025259656831622124outcome:
passed
↳ Function: test_get_default_elog_instance_with_direct_password_and_real_check
-
❌ Test 160
📌 Setup phase
duration:
0.0001508546993136406outcome:
passed📌 Call phase
duration:
0.005447175819426775outcome:
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 0x7f919e40ba90>: 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 0x7f919e40ba90> 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 0x7f919d6b94c0> 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 0x7f919e40ba90> 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 0x7f919e40ba90>: 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 0x7f919d6b9e80> 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 0x7f919e40ba90>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919d6b94c0> _stacktrace = <traceback object at 0x7f919e591940> 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 0x7f919e40ba90>: 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 0x7f919d6b9e80> 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 0x7f919e40ba90>: 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.00023944396525621414outcome:
passed
↳ Function: test_get_default_elog_instance_asks_password_and_opens
-
❌ Test 161
📌 Setup phase
duration:
0.00014520902186632156outcome:
passed📌 Call phase
duration:
0.006148336920887232outcome:
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 0x7f919e49ab20>: 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 0x7f919e49ab20> 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 0x7f919e471040> 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 0x7f919e49ab20> 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 0x7f919e49ab20>: 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 0x7f919e471430> 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 0x7f919e49ab20>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e471040> _stacktrace = <traceback object at 0x7f919d6eaf40> 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 0x7f919e49ab20>: 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='140263389585520'> mock_getpass = <MagicMock name='getpass' id='140263407566912'> @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 0x7f919e471430> 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 0x7f919e49ab20>: 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.00024360092356801033outcome:
passed
↳ Function: test_get_default_elog_with_path_home
-
❌ Test 162
📌 Setup phase
duration:
0.00014445604756474495outcome:
passed📌 Call phase
duration:
0.007357545662671328outcome:
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 0x7f919d893e80>: 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 0x7f919d893e80> 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 0x7f919d8934c0> 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 0x7f919d893e80> 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 0x7f919d893e80>: 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 0x7f919e4a6df0> 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 0x7f919d893e80>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919d8934c0> _stacktrace = <traceback object at 0x7f919d8faac0> 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 0x7f919d893e80>: 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='140263389760672'> mock_getuser = <MagicMock name='getuser' id='140263311291776'> mock_getpass = <MagicMock name='getpass' id='140263386904992'> @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 0x7f919e4a6df0> 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 0x7f919d893e80>: 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.00022988207638263702outcome:
passed
↳ Function: test_post
-
❌ Test 163
📌 Setup phase
duration:
0.0001442250795662403outcome:
passed📌 Call phase
duration:
0.0072192479856312275outcome:
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 0x7f919ecccc70>: 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 0x7f919e954cd0> 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 0x7f919d6fbeb0> method = 'POST', url = '/demo/' body = b'--78bb5afebc53020aee4f11366a8263c2\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--78bb5afebc5302...-Disposition: form-data; name="Text"; filename=""\r\n\r\nThis is a message\r\n--78bb5afebc53020aee4f11366a8263c2--\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=78bb5afebc53020aee4f11366a8263c2'} 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 0x7f919e954cd0> 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 0x7f919e954cd0>: 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 0x7f919d6fb130> 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 0x7f919e954cd0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919d6fbeb0> _stacktrace = <traceback object at 0x7f919e2e3780> 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 0x7f919e954cd0>: 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 0x7f919d6fbcd0> message = 'This is a message', msg_id = None, reply = False attributes = {'Author': 'robot', 'When': 1754910607, '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': 1754910607, '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 0x7f919d6fb130> 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 0x7f919e954cd0>: 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 0x7f919ecccc70> 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 0x7f919e954100> 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 0x7f919ecccc70> 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 0x7f919ecccc70>: 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 0x7f919e954880> 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 0x7f919ecccc70>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e954100> _stacktrace = <traceback object at 0x7f919d6ea6c0> 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 0x7f919ecccc70>: 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 0x7f919d6fbcd0>, 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 0x7f919e954880> 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 0x7f919ecccc70>: 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, 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 0x7f919d6fbcd0>, 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 0x7f919ecccc70>: 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.0002472084015607834outcome:
passed
↳ Function: test_screenshot
-
❌ Test 164
📌 Setup phase
duration:
0.0001385682262480259outcome:
passed📌 Call phase
duration:
0.008548962883651257outcome:
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 0x7f919d5bb850>: 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 0x7f919e4853a0> 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 0x7f919e48a130> method = 'POST', url = '/demo/' body = b'--6fcf4b6fd681e4043f4fe95d638aa0dd\r\nContent-Disposition: form-data; name="Author"\r\n\r\nrobot\r\n--6fcf4b6fd681e4...-data; name="Text"; filename=""\r\n\r\nSCREENSHOT_INTEGRATION_TEST_MSG_456\r\n--6fcf4b6fd681e4043f4fe95d638aa0dd--\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=6fcf4b6fd681e4043f4fe95d638aa0dd'} 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 0x7f919e4853a0> 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 0x7f919e4853a0>: 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 0x7f919e48aeb0> 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 0x7f919e4853a0>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e48a130> _stacktrace = <traceback object at 0x7f919d793ec0> 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 0x7f919e4853a0>: 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 0x7f919e48a490> message = 'SCREENSHOT_INTEGRATION_TEST_MSG_456', msg_id = None, reply = False attributes = {'Author': 'robot', 'When': 1754910607, 'cmd': 'Submit', 'exp': 'demo', ...} attachments = ['/tmp/tmp70xyqh5d.png'], suppress_email_notification = False encoding = None, timeout = None, kwargs = {'Author': 'robot'} new_attachment_list = [('attfile0', ('tmp70xyqh5d.png', <_io.BufferedReader name='/tmp/tmp70xyqh5d.png'>)), ('Text', ('', b'SCREENSHOT_INTEGRATION_TEST_MSG_456'))] objects_to_close = [<_io.BufferedReader name='/tmp/tmp70xyqh5d.png'>] attributes_to_edit = {'Author': b'robot', 'When': 1754910607, '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 0x7f919e48aeb0> 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 0x7f919e4853a0>: 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 0x7f919d5bb850> 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 0x7f919e485190> 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 0x7f919d5bb850> 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 0x7f919d5bb850>: 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 0x7f919e485070> 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 0x7f919d5bb850>: Failed to establish a new connection: [Errno 111] Connection refused') _pool = <urllib3.connectionpool.HTTPConnectionPool object at 0x7f919e485190> _stacktrace = <traceback object at 0x7f919d6f8140> 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 0x7f919d5bb850>: 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 0x7f919e48a490>, 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 0x7f919e485070> 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 0x7f919d5bb850>: 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='140263388894832'> @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 0x7f919e48a490>, 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 0x7f919d5bb850>: 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.00023722276091575623outcome:
passed
-
-
📄 test_utils_hastepics.py
↳ Function: test_motor_init_strips_suffixes
-
❌ Test 218
📌 Setup phase
duration:
0.0003247777931392193outcome:
passed📌 Call phase
duration:
0.0035005160607397556outcome:
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.00019073998555541039outcome:
passed
↳ Function: test_disabled_removed_relative_to_upstream
-
❌ Test 220
📌 Setup phase
duration:
0.00013204384595155716outcome:
passed📌 Call phase
duration:
0.0012510698288679123outcome:
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.00015325192362070084outcome:
passed
↳ Function: test_speedup_motor_instantiation
-
❌ Test 224
📌 Setup phase
duration:
0.00018345797434449196outcome:
passed📌 Call phase
duration:
0.03667770139873028outcome:
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.00022495770826935768outcome:
passed
↳ Function: test_speedup_motor_PV
-
❌ Test 225
📌 Setup phase
duration:
0.0001796279102563858outcome:
passed📌 Call phase
duration:
0.03081021783873439outcome:
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.00021265307441353798outcome:
passed
-
-
📄 test_utils_logcfg.py
↳ Function: test_import_logging_once_per_module
-
❌ Test 241
📌 Setup phase
duration:
0.00014738086611032486outcome:
passed📌 Call phase
duration:
1.7367284172214568outcome:
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.0003582029603421688outcome:
passed
-
-
📄 test_utils_tqdm_mod.py
↳ Function: test_float_alignment_in_bar
-
❌ Test 485
📌 Setup phase
duration:
0.00011420901864767075outcome:
passed📌 Call phase
duration:
0.0016564461402595043outcome:
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.00015016086399555206outcome:
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