nano-dev-utils 1.4.2__tar.gz → 1.4.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/workspace.xml +201 -184
  2. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/PKG-INFO +20 -11
  3. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/README.md +19 -10
  4. nano_dev_utils-1.4.4/benchmark/benchtest.py +53 -0
  5. nano_dev_utils-1.4.4/benchmark/win_tree_wrapper.py +52 -0
  6. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/pyproject.toml +1 -1
  7. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/common.py +4 -0
  8. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/file_tree_display.py +8 -14
  9. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/timers.py +65 -43
  10. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_common.py +12 -5
  11. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_file_tree_display.py +37 -36
  12. nano_dev_utils-1.4.4/tests/test_timers/__init__.py +3 -0
  13. nano_dev_utils-1.4.4/tests/test_timers/test_duration_formatter.py +158 -0
  14. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_timers/test_timer.py +20 -20
  15. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/uv.lock +242 -242
  16. nano_dev_utils-1.4.2/tests/test_timers/test_duration_formatter.py +0 -152
  17. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.gitignore +0 -0
  18. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/.gitignore +0 -0
  19. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/encodings.xml +0 -0
  20. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  21. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/misc.xml +0 -0
  22. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/modules.xml +0 -0
  23. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/nano_dev_utils.iml +0 -0
  24. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.idea/vcs.xml +0 -0
  25. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/.pre-commit-config.yaml +0 -0
  26. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/LICENSE +0 -0
  27. {nano_dev_utils-1.4.2/tests → nano_dev_utils-1.4.4/benchmark}/__init__.py +0 -0
  28. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/ruff.toml +0 -0
  29. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/__init__.py +0 -0
  30. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/dynamic_importer.py +0 -0
  31. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/src/nano_dev_utils/release_ports.py +0 -0
  32. {nano_dev_utils-1.4.2/tests/test_timers → nano_dev_utils-1.4.4/tests}/__init__.py +0 -0
  33. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_dynamic_importer.py +0 -0
  34. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_release_ports.py +0 -0
  35. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_timers/conftest.py +0 -0
  36. {nano_dev_utils-1.4.2 → nano_dev_utils-1.4.4}/tests/test_timers/test_timers_async.py +0 -0
@@ -4,11 +4,10 @@
4
4
  <option name="autoReloadType" value="SELECTIVE" />
5
5
  </component>
6
6
  <component name="ChangeListManager">
7
- <list default="true" id="1859e23b-7665-4b92-98cc-65e07a208923" name="Changes" comment="Allow an optional printout to console in addition to logger.&#10;README updates in this regard.&#10;&#10;Bumped minor to v1.4.1">
7
+ <list default="true" id="1859e23b-7665-4b92-98cc-65e07a208923" name="Changes" comment="minor update v1.4.3">
8
+ <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
9
+ <change beforePath="$PROJECT_DIR$/benchmark/benchtest.py" beforeDir="false" afterPath="$PROJECT_DIR$/benchmark/benchtest.py" afterDir="false" />
8
10
  <change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" afterDir="false" />
9
- <change beforePath="$PROJECT_DIR$/src/nano_dev_utils/timers.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/nano_dev_utils/timers.py" afterDir="false" />
10
- <change beforePath="$PROJECT_DIR$/tests/test_timers/test_duration_formatter.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/test_timers/test_duration_formatter.py" afterDir="false" />
11
- <change beforePath="$PROJECT_DIR$/tests/test_timers/test_timer.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/test_timers/test_timer.py" afterDir="false" />
12
11
  <change beforePath="$PROJECT_DIR$/uv.lock" beforeDir="false" afterPath="$PROJECT_DIR$/uv.lock" afterDir="false" />
13
12
  </list>
14
13
  <option name="SHOW_DIALOG" value="false" />
@@ -27,7 +26,7 @@
27
26
  <option name="PUSH_AUTO_UPDATE" value="true" />
28
27
  <option name="RECENT_BRANCH_BY_REPOSITORY">
29
28
  <map>
30
- <entry key="$PROJECT_DIR$" value="master" />
29
+ <entry key="$PROJECT_DIR$" value="YD_Benchmarks" />
31
30
  </map>
32
31
  </option>
33
32
  <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
@@ -43,45 +42,46 @@
43
42
  <option name="showLibraryContents" value="true" />
44
43
  <option name="showMembers" value="true" />
45
44
  </component>
46
- <component name="PropertiesComponent">{
47
- &quot;keyToString&quot;: {
48
- &quot;Python tests.Python tests in test_dynamic_importer.py.executor&quot;: &quot;Run&quot;,
49
- &quot;Python tests.Python tests in test_file_tree_display.py.executor&quot;: &quot;Run&quot;,
50
- &quot;Python tests.Python tests in test_release_ports.py.executor&quot;: &quot;Run&quot;,
51
- &quot;Python tests.Python tests in test_timer.py.executor&quot;: &quot;Run&quot;,
52
- &quot;Python tests.Python tests in test_timers (1).executor&quot;: &quot;Run&quot;,
53
- &quot;Python tests.Python tests in test_timers.executor&quot;: &quot;Run&quot;,
54
- &quot;Python tests.Python tests in test_timers_async.py.executor&quot;: &quot;Run&quot;,
55
- &quot;Python tests.Python tests in testing_duration_formatter.py.executor&quot;: &quot;Run&quot;,
56
- &quot;Python tests.Python tests in tests.executor&quot;: &quot;Run&quot;,
57
- &quot;Python tests.test_timer prev.executor&quot;: &quot;Run&quot;,
58
- &quot;Python.ftd_main.executor&quot;: &quot;Run&quot;,
59
- &quot;Python.test_timer.executor&quot;: &quot;Run&quot;,
60
- &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
61
- &quot;git-widget-placeholder&quot;: &quot;FI-Timer&quot;,
62
- &quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
63
- &quot;last_opened_file_path&quot;: &quot;C:/Workspaces/review1&quot;,
64
- &quot;settings.editor.selected.configurable&quot;: &quot;com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable&quot;,
65
- &quot;two.files.diff.last.used.file&quot;: &quot;C:/Workspaces/review1/tools/file_tree_display/tests/test_file_tree_display.py&quot;
45
+ <component name="PropertiesComponent"><![CDATA[{
46
+ "keyToString": {
47
+ "Python tests.Python tests in test_dynamic_importer.py.executor": "Run",
48
+ "Python tests.Python tests in test_file_tree_display.py.executor": "Run",
49
+ "Python tests.Python tests in test_release_ports.py.executor": "Run",
50
+ "Python tests.Python tests in test_timer.py.executor": "Run",
51
+ "Python tests.Python tests in test_timers (1).executor": "Run",
52
+ "Python tests.Python tests in test_timers.executor": "Run",
53
+ "Python tests.Python tests in test_timers_async.py.executor": "Run",
54
+ "Python tests.Python tests in testing_duration_formatter.py.executor": "Run",
55
+ "Python tests.Python tests in tests.executor": "Run",
56
+ "Python tests.test_timer prev.executor": "Run",
57
+ "Python.benchtest.executor": "Run",
58
+ "Python.ftd_main.executor": "Run",
59
+ "Python.test_timer.executor": "Run",
60
+ "RunOnceActivity.ShowReadmeOnStart": "true",
61
+ "git-widget-placeholder": "master",
62
+ "ignore.virus.scanning.warn.message": "true",
63
+ "last_opened_file_path": "C:/GitHubWS/nano_dev_utils/benchmark",
64
+ "settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable",
65
+ "two.files.diff.last.used.file": "C:/Workspaces/review1/tools/file_tree_display/tests/test_file_tree_display.py"
66
66
  }
67
- }</component>
67
+ }]]></component>
68
68
  <component name="RecentsManager">
69
69
  <key name="CopyFile.RECENT_KEYS">
70
+ <recent name="C:\GitHubWS\nano_dev_utils\benchmark" />
70
71
  <recent name="C:\GitHubWS\nano_dev_utils\src\nano_dev_utils" />
71
72
  <recent name="C:\GitHubWS\nano_dev_utils\tests\test_timers" />
72
73
  <recent name="C:\GitHubWS\nano_dev_utils\tests\test_timer" />
73
74
  <recent name="C:\GitHubWS\nano_dev_utils\tests" />
74
- <recent name="C:\GitHubWS\nano_dev_utils" />
75
75
  </key>
76
76
  <key name="MoveFile.RECENT_KEYS">
77
+ <recent name="C:\GitHubWS\nano_dev_utils" />
77
78
  <recent name="C:\GitHubWS\nano_dev_utils\src\nano_dev_utils" />
78
79
  <recent name="C:\GitHubWS\nano_dev_utils\tests\test_timers" />
79
80
  <recent name="C:\GitHubWS\nano_dev_utils\tests" />
80
- <recent name="C:\GitHubWS\nano_dev_utils" />
81
81
  </key>
82
82
  </component>
83
- <component name="RunManager" selected="Python tests.Python tests in tests">
84
- <configuration name="ftd_bench" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
83
+ <component name="RunManager" selected="Python.benchtest">
84
+ <configuration name="benchtest" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
85
85
  <module name="nano_dev_utils" />
86
86
  <option name="ENV_FILES" value="" />
87
87
  <option name="INTERPRETER_OPTIONS" value="" />
@@ -90,11 +90,11 @@
90
90
  <env name="PYTHONUNBUFFERED" value="1" />
91
91
  </envs>
92
92
  <option name="SDK_HOME" value="" />
93
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/src/nano_dev_utils" />
93
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/benchmark" />
94
94
  <option name="IS_MODULE_SDK" value="true" />
95
95
  <option name="ADD_CONTENT_ROOTS" value="true" />
96
96
  <option name="ADD_SOURCE_ROOTS" value="true" />
97
- <option name="SCRIPT_NAME" value="C:\GitHubWS\nano_dev_utils\src\nano_dev_utils\ftd_bench.py" />
97
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/benchmark/benchtest.py" />
98
98
  <option name="PARAMETERS" value="" />
99
99
  <option name="SHOW_COMMAND_LINE" value="false" />
100
100
  <option name="EMULATE_TERMINAL" value="false" />
@@ -164,7 +164,7 @@
164
164
  <method v="2" />
165
165
  </configuration>
166
166
  <list>
167
- <item itemvalue="Python.ftd_bench" />
167
+ <item itemvalue="Python.benchtest" />
168
168
  <item itemvalue="Python tests.Python tests in test_dynamic_importer.py" />
169
169
  <item itemvalue="Python tests.Python tests in test_file_tree_display.py" />
170
170
  <item itemvalue="Python tests.Python tests in test_timers" />
@@ -172,11 +172,11 @@
172
172
  </list>
173
173
  <recent_temporary>
174
174
  <list>
175
+ <item itemvalue="Python.benchtest" />
175
176
  <item itemvalue="Python tests.Python tests in tests" />
176
- <item itemvalue="Python tests.Python tests in test_timers" />
177
177
  <item itemvalue="Python tests.Python tests in test_file_tree_display.py" />
178
+ <item itemvalue="Python tests.Python tests in test_timers" />
178
179
  <item itemvalue="Python tests.Python tests in test_dynamic_importer.py" />
179
- <item itemvalue="Python.ftd_bench" />
180
180
  </list>
181
181
  </recent_temporary>
182
182
  </component>
@@ -196,134 +196,6 @@
196
196
  <option name="presentableId" value="Default" />
197
197
  <updated>1746126505743</updated>
198
198
  </task>
199
- <task id="LOCAL-00055" summary="README updates related to exposed instances">
200
- <option name="closed" value="true" />
201
- <created>1761700369016</created>
202
- <option name="number" value="00055" />
203
- <option name="presentableId" value="LOCAL-00055" />
204
- <option name="project" value="LOCAL" />
205
- <updated>1761700369016</updated>
206
- </task>
207
- <task id="LOCAL-00056" summary="v1.1.2&#10;dynamic_importer.py:&#10;adding update method&#10;&#10;release_ports.py&#10;+flexible init">
208
- <option name="closed" value="true" />
209
- <created>1761700719843</created>
210
- <option name="number" value="00056" />
211
- <option name="presentableId" value="LOCAL-00056" />
212
- <option name="project" value="LOCAL" />
213
- <updated>1761700719843</updated>
214
- </task>
215
- <task id="LOCAL-00057" summary="v1.1.2: all object instances exposed&#10;additional methods (update and init wrapper) for importer and ports_release">
216
- <option name="closed" value="true" />
217
- <created>1761701044755</created>
218
- <option name="number" value="00057" />
219
- <option name="presentableId" value="LOCAL-00057" />
220
- <option name="project" value="LOCAL" />
221
- <updated>1761701044755</updated>
222
- </task>
223
- <task id="LOCAL-00058" summary="Addint imports file_tree_display">
224
- <option name="closed" value="true" />
225
- <created>1761702026964</created>
226
- <option name="number" value="00058" />
227
- <option name="presentableId" value="LOCAL-00058" />
228
- <option name="project" value="LOCAL" />
229
- <updated>1761702026964</updated>
230
- </task>
231
- <task id="LOCAL-00059" summary="improving file_tree_display.py implementation&#10;&#10;removing old consts file">
232
- <option name="closed" value="true" />
233
- <created>1761702129430</created>
234
- <option name="number" value="00059" />
235
- <option name="presentableId" value="LOCAL-00059" />
236
- <option name="project" value="LOCAL" />
237
- <updated>1761702129430</updated>
238
- </task>
239
- <task id="LOCAL-00060" summary="file_tree_display.py:&#10;+init(self, *args, **kwargs)&#10;unit tests code refactor and improvements.">
240
- <option name="closed" value="true" />
241
- <created>1761702755192</created>
242
- <option name="number" value="00060" />
243
- <option name="presentableId" value="LOCAL-00060" />
244
- <option name="project" value="LOCAL" />
245
- <updated>1761702755192</updated>
246
- </task>
247
- <task id="LOCAL-00061" summary="ongoing refactor">
248
- <option name="closed" value="true" />
249
- <created>1761736405549</created>
250
- <option name="number" value="00061" />
251
- <option name="presentableId" value="LOCAL-00061" />
252
- <option name="project" value="LOCAL" />
253
- <updated>1761736405549</updated>
254
- </task>
255
- <task id="LOCAL-00062" summary="ongoing refactor">
256
- <option name="closed" value="true" />
257
- <created>1761737723282</created>
258
- <option name="number" value="00062" />
259
- <option name="presentableId" value="LOCAL-00062" />
260
- <option name="project" value="LOCAL" />
261
- <updated>1761737723282</updated>
262
- </task>
263
- <task id="LOCAL-00063" summary="eliminated the warning raised by async test due to a coroutine leakage">
264
- <option name="closed" value="true" />
265
- <created>1761738281462</created>
266
- <option name="number" value="00063" />
267
- <option name="presentableId" value="LOCAL-00063" />
268
- <option name="project" value="LOCAL" />
269
- <updated>1761738281462</updated>
270
- </task>
271
- <task id="LOCAL-00064" summary="timeit: +docstring&#10;update: minor typing polish">
272
- <option name="closed" value="true" />
273
- <created>1761738809870</created>
274
- <option name="number" value="00064" />
275
- <option name="presentableId" value="LOCAL-00064" />
276
- <option name="project" value="LOCAL" />
277
- <updated>1761738809870</updated>
278
- </task>
279
- <task id="LOCAL-00065" summary=".">
280
- <option name="closed" value="true" />
281
- <created>1761739346814</created>
282
- <option name="number" value="00065" />
283
- <option name="presentableId" value="LOCAL-00065" />
284
- <option name="project" value="LOCAL" />
285
- <updated>1761739346814</updated>
286
- </task>
287
- <task id="LOCAL-00066" summary=".">
288
- <option name="closed" value="true" />
289
- <created>1761742788639</created>
290
- <option name="number" value="00066" />
291
- <option name="presentableId" value="LOCAL-00066" />
292
- <option name="project" value="LOCAL" />
293
- <updated>1761742788639</updated>
294
- </task>
295
- <task id="LOCAL-00067" summary="improving time unites handler (faster)">
296
- <option name="closed" value="true" />
297
- <created>1761746130529</created>
298
- <option name="number" value="00067" />
299
- <option name="presentableId" value="LOCAL-00067" />
300
- <option name="project" value="LOCAL" />
301
- <updated>1761746130529</updated>
302
- </task>
303
- <task id="LOCAL-00068" summary="ruff linter update">
304
- <option name="closed" value="true" />
305
- <created>1761746187138</created>
306
- <option name="number" value="00068" />
307
- <option name="presentableId" value="LOCAL-00068" />
308
- <option name="project" value="LOCAL" />
309
- <updated>1761746187138</updated>
310
- </task>
311
- <task id="LOCAL-00069" summary="+fast multi-unit time duration converter and formatter">
312
- <option name="closed" value="true" />
313
- <created>1761748339362</created>
314
- <option name="number" value="00069" />
315
- <option name="presentableId" value="LOCAL-00069" />
316
- <option name="project" value="LOCAL" />
317
- <updated>1761748339362</updated>
318
- </task>
319
- <task id="LOCAL-00070" summary="message formatter: using local verbose and changing to static method">
320
- <option name="closed" value="true" />
321
- <created>1761748675961</created>
322
- <option name="number" value="00070" />
323
- <option name="presentableId" value="LOCAL-00070" />
324
- <option name="project" value="LOCAL" />
325
- <updated>1761748675961</updated>
326
- </task>
327
199
  <task id="LOCAL-00071" summary="ongoing updates">
328
200
  <option name="closed" value="true" />
329
201
  <created>1761749373855</created>
@@ -588,7 +460,135 @@
588
460
  <option name="project" value="LOCAL" />
589
461
  <updated>1762093698362</updated>
590
462
  </task>
591
- <option name="localTasksCounter" value="104" />
463
+ <task id="LOCAL-00104" summary="+blank space before time unit&#10;&#10;Bumped minor to v1.4.2">
464
+ <option name="closed" value="true" />
465
+ <created>1762096472993</created>
466
+ <option name="number" value="00104" />
467
+ <option name="presentableId" value="LOCAL-00104" />
468
+ <option name="project" value="LOCAL" />
469
+ <updated>1762096472993</updated>
470
+ </task>
471
+ <task id="LOCAL-00105" summary="+link to PYPI package&#10;Benchmark data, Tree(a built-in windows utility) vs my FTD">
472
+ <option name="closed" value="true" />
473
+ <created>1762135842965</created>
474
+ <option name="number" value="00105" />
475
+ <option name="presentableId" value="LOCAL-00105" />
476
+ <option name="project" value="LOCAL" />
477
+ <updated>1762135842965</updated>
478
+ </task>
479
+ <task id="LOCAL-00106" summary="applying precision upon request">
480
+ <option name="closed" value="true" />
481
+ <created>1762136721863</created>
482
+ <option name="number" value="00106" />
483
+ <option name="presentableId" value="LOCAL-00106" />
484
+ <option name="project" value="LOCAL" />
485
+ <updated>1762136721863</updated>
486
+ </task>
487
+ <task id="LOCAL-00107" summary="timers refactor">
488
+ <option name="closed" value="true" />
489
+ <created>1762138590329</created>
490
+ <option name="number" value="00107" />
491
+ <option name="presentableId" value="LOCAL-00107" />
492
+ <option name="project" value="LOCAL" />
493
+ <updated>1762138590329</updated>
494
+ </task>
495
+ <task id="LOCAL-00108" summary="renaming + docstring updates">
496
+ <option name="closed" value="true" />
497
+ <created>1762162557303</created>
498
+ <option name="number" value="00108" />
499
+ <option name="presentableId" value="LOCAL-00108" />
500
+ <option name="project" value="LOCAL" />
501
+ <updated>1762162557303</updated>
502
+ </task>
503
+ <task id="LOCAL-00109" summary="docstring rephrase; code linting &amp; formatting">
504
+ <option name="closed" value="true" />
505
+ <created>1762162961435</created>
506
+ <option name="number" value="00109" />
507
+ <option name="presentableId" value="LOCAL-00109" />
508
+ <option name="project" value="LOCAL" />
509
+ <updated>1762162961435</updated>
510
+ </task>
511
+ <task id="LOCAL-00110" summary="removed methods that are now obsolete">
512
+ <option name="closed" value="true" />
513
+ <created>1762163648421</created>
514
+ <option name="number" value="00110" />
515
+ <option name="presentableId" value="LOCAL-00110" />
516
+ <option name="project" value="LOCAL" />
517
+ <updated>1762163648421</updated>
518
+ </task>
519
+ <task id="LOCAL-00111" summary="_check_timeout changed to static;&#10;improved formatting">
520
+ <option name="closed" value="true" />
521
+ <created>1762165957757</created>
522
+ <option name="number" value="00111" />
523
+ <option name="presentableId" value="LOCAL-00111" />
524
+ <option name="project" value="LOCAL" />
525
+ <updated>1762165957757</updated>
526
+ </task>
527
+ <task id="LOCAL-00112" summary="duration formatter: improved unit tests">
528
+ <option name="closed" value="true" />
529
+ <created>1762169854461</created>
530
+ <option name="number" value="00112" />
531
+ <option name="presentableId" value="LOCAL-00112" />
532
+ <option name="project" value="LOCAL" />
533
+ <updated>1762169854461</updated>
534
+ </task>
535
+ <task id="LOCAL-00113" summary="reformat">
536
+ <option name="closed" value="true" />
537
+ <created>1762170443081</created>
538
+ <option name="number" value="00113" />
539
+ <option name="presentableId" value="LOCAL-00113" />
540
+ <option name="project" value="LOCAL" />
541
+ <updated>1762170443081</updated>
542
+ </task>
543
+ <task id="LOCAL-00114" summary="+ wrapper for Tree (MS Windows utility that visualizes folder structure)">
544
+ <option name="closed" value="true" />
545
+ <created>1762172657234</created>
546
+ <option name="number" value="00114" />
547
+ <option name="presentableId" value="LOCAL-00114" />
548
+ <option name="project" value="LOCAL" />
549
+ <updated>1762172657234</updated>
550
+ </task>
551
+ <task id="LOCAL-00115" summary="bugfix str2file (create parent if doesn't exist)">
552
+ <option name="closed" value="true" />
553
+ <created>1762176931574</created>
554
+ <option name="number" value="00115" />
555
+ <option name="presentableId" value="LOCAL-00115" />
556
+ <option name="project" value="LOCAL" />
557
+ <updated>1762176931574</updated>
558
+ </task>
559
+ <task id="LOCAL-00116" summary="FTD unit tests refactor,&#10;completing coverage for file_tree_display method">
560
+ <option name="closed" value="true" />
561
+ <created>1762180145497</created>
562
+ <option name="number" value="00116" />
563
+ <option name="presentableId" value="LOCAL-00116" />
564
+ <option name="project" value="LOCAL" />
565
+ <updated>1762180145497</updated>
566
+ </task>
567
+ <task id="LOCAL-00117" summary="tiny reformatting and renaming">
568
+ <option name="closed" value="true" />
569
+ <created>1762180180185</created>
570
+ <option name="number" value="00117" />
571
+ <option name="presentableId" value="LOCAL-00117" />
572
+ <option name="project" value="LOCAL" />
573
+ <updated>1762180180185</updated>
574
+ </task>
575
+ <task id="LOCAL-00118" summary="+improved error handling for win_tree_wrapper&#10;+benchtest code, comparing my FTD module to MS-Windows Tree (focusing on running time)">
576
+ <option name="closed" value="true" />
577
+ <created>1762180401037</created>
578
+ <option name="number" value="00118" />
579
+ <option name="presentableId" value="LOCAL-00118" />
580
+ <option name="project" value="LOCAL" />
581
+ <updated>1762180401037</updated>
582
+ </task>
583
+ <task id="LOCAL-00119" summary="minor update v1.4.3">
584
+ <option name="closed" value="true" />
585
+ <created>1762181821368</created>
586
+ <option name="number" value="00119" />
587
+ <option name="presentableId" value="LOCAL-00119" />
588
+ <option name="project" value="LOCAL" />
589
+ <updated>1762181821368</updated>
590
+ </task>
591
+ <option name="localTasksCounter" value="120" />
592
592
  <servers />
593
593
  </component>
594
594
  <component name="Vcs.Log.Tabs.Properties">
@@ -599,7 +599,7 @@
599
599
  <list>
600
600
  <RecentGroup>
601
601
  <option name="FILTER_VALUES">
602
- <option value="origin/FI" />
602
+ <option value="origin/YD_Benchmarks" />
603
603
  </option>
604
604
  </RecentGroup>
605
605
  <RecentGroup>
@@ -607,6 +607,11 @@
607
607
  <option value="origin/master" />
608
608
  </option>
609
609
  </RecentGroup>
610
+ <RecentGroup>
611
+ <option name="FILTER_VALUES">
612
+ <option value="origin/FI" />
613
+ </option>
614
+ </RecentGroup>
610
615
  </list>
611
616
  </value>
612
617
  </entry>
@@ -616,30 +621,25 @@
616
621
  <map>
617
622
  <entry key="MAIN">
618
623
  <value>
619
- <State />
624
+ <State>
625
+ <option name="FILTERS">
626
+ <map>
627
+ <entry key="branch">
628
+ <value>
629
+ <list>
630
+ <option value="origin/YD_Benchmarks" />
631
+ </list>
632
+ </value>
633
+ </entry>
634
+ </map>
635
+ </option>
636
+ </State>
620
637
  </value>
621
638
  </entry>
622
639
  </map>
623
640
  </option>
624
641
  </component>
625
642
  <component name="VcsManagerConfiguration">
626
- <MESSAGE value="timer -&gt; timer_mock" />
627
- <MESSAGE value="ruff." />
628
- <MESSAGE value="test_timer unit tests complete" />
629
- <MESSAGE value="bumped version to 1.2.0" />
630
- <MESSAGE value="+uv.lock" />
631
- <MESSAGE value="aysnc_sleep_mocker -&gt; moved to conftest; &#10;uv lock sync with v1.2.1" />
632
- <MESSAGE value="async_sleep_mocker -&gt; moved to conftest;&#10;uv lock sync with v1.2.1" />
633
- <MESSAGE value="async_sleep_mocker -&gt; moved to conftest;&#10;uv lock sync with v1.2.1" />
634
- <MESSAGE value="async_sleep_mocker -&gt; conftest;&#10;uv lock sync with v1.2.1" />
635
- <MESSAGE value="+str2file function (instead of buffer2file method) + unit tests." />
636
- <MESSAGE value="minor update" />
637
- <MESSAGE value="test_common refactor;&#10;minor update" />
638
- <MESSAGE value="file_tree_display.py additional features: &#10;Style control&#10;Flexible sorting &#10;Improved recursive DFS method build_tree" />
639
- <MESSAGE value="bumped to v1.3.0; synced uv.lock" />
640
- <MESSAGE value="typo correction" />
641
- <MESSAGE value="+PredicateBuilder: creates predicate functions" />
642
- <MESSAGE value="README updates IAW recends mods" />
643
643
  <MESSAGE value="bumped to v1.4.0" />
644
644
  <MESSAGE value="+build" />
645
645
  <MESSAGE value="Readme updates" />
@@ -648,6 +648,23 @@
648
648
  <MESSAGE value="+printout testing (WIP)" />
649
649
  <MESSAGE value="Pyright corrections;&#10;Timer unit tests - improved code" />
650
650
  <MESSAGE value="Allow an optional printout to console in addition to logger.&#10;README updates in this regard.&#10;&#10;Bumped minor to v1.4.1" />
651
- <option name="LAST_COMMIT_MESSAGE" value="Allow an optional printout to console in addition to logger.&#10;README updates in this regard.&#10;&#10;Bumped minor to v1.4.1" />
651
+ <MESSAGE value="+blank space before time unit&#10;&#10;Bumped minor to v1.4.2" />
652
+ <MESSAGE value="+link to PYPI package&#10;Benchmark data, Tree(a built-in windows utility) vs my FTD" />
653
+ <MESSAGE value="applying precision upon request" />
654
+ <MESSAGE value="timers refactor" />
655
+ <MESSAGE value="renaming + docstring updates" />
656
+ <MESSAGE value="docstring rephrase; code linting &amp; formatting" />
657
+ <MESSAGE value="removed methods that are now obsolete" />
658
+ <MESSAGE value="_check_timeout changed to static;&#10;improved formatting" />
659
+ <MESSAGE value="duration formatter: improved unit tests" />
660
+ <MESSAGE value="reformat" />
661
+ <MESSAGE value="+ wrapper for Tree (MS Windows utility that visualizes folder structure)" />
662
+ <MESSAGE value="bugfix str2file (create parent if doesn't exist)" />
663
+ <MESSAGE value="FTD unit tests refactor,&#10;completing coverage for file_tree_display method" />
664
+ <MESSAGE value="tiny reformatting and renaming" />
665
+ <MESSAGE value="+improved error handling for win_tree_wrapper&#10;+benchtest code, comparing my FTD module to MS-Windows Tree (focusing on running time)&#10;+updating bench results (FTD is very stable twice as fast)" />
666
+ <MESSAGE value="+improved error handling for win_tree_wrapper&#10;+benchtest code, comparing my FTD module to MS-Windows Tree (focusing on running time)" />
667
+ <MESSAGE value="minor update v1.4.3" />
668
+ <option name="LAST_COMMIT_MESSAGE" value="minor update v1.4.3" />
652
669
  </component>
653
670
  </project>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nano_dev_utils
3
- Version: 1.4.2
3
+ Version: 1.4.4
4
4
  Summary: A collection of small Python utilities for developers.
5
5
  Project-URL: Homepage, https://github.com/yaronday/nano_utils
6
6
  Project-URL: Issues, https://github.com/yaronday/nano_utils/issues
@@ -17,6 +17,7 @@ Description-Content-Type: text/markdown
17
17
  # nano_dev_utils
18
18
 
19
19
  A collection of small Python utilities for developers.
20
+ [PYPI package: nano-dev-utils](https://pypi.org/project/nano-dev-utils)
20
21
 
21
22
  ## Modules
22
23
 
@@ -58,7 +59,7 @@ import time
58
59
  import logging
59
60
  from nano_dev_utils import timer
60
61
 
61
- # This timer version uses a logger but also allows printing (if enabled), so it has to be configured in your app, for instance:
62
+ # if printout is not enabled, a logger must be configured in order to see timing results
62
63
  logging.basicConfig(filename='timer example.log',
63
64
  level=logging.INFO, # DEBUG, WARNING, ERROR, CRITICAL
64
65
  format='%(asctime)s - %(levelname)s: %(message)s',
@@ -156,8 +157,7 @@ It supports Windows, Linux, and macOS.
156
157
  import logging
157
158
  from nano_dev_utils import ports_release, PortsRelease
158
159
 
159
-
160
- # configure the logger
160
+
161
161
  logging.basicConfig(filename='port release.log',
162
162
  level=logging.INFO, # DEBUG, WARNING, ERROR, CRITICAL
163
163
  format='%(asctime)s - %(levelname)s: %(message)s',
@@ -196,20 +196,29 @@ Output can be displayed in the console or saved to a file.
196
196
 
197
197
  ## Benchmarks
198
198
 
199
- As measured on a dataset of 10553 files, 1235 folders (ca. 16 GB) using Python 3.10 on SSD.
200
- Avg. time was measured over 10 runs per configuration.
199
+ A measurement on an unfiltered, high-depth dataset of 10553 files, 1235 folders (ca. 16 GB) using Python 3.10 on SSD.
200
+ Avg. time was measured over 20 runs per configuration, using `timeit` decorator I've implemented in this package.
201
+
202
+ Comparing FileTreeDisplay (FTD) with
203
+ [win_tree_wrapper](https://github.com/yaronday/nano_dev_utils/blob/master/benchmark/win_tree_wrapper.py)
204
+ (Windows [Tree](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tree)
205
+ wrapper which I've implemented for this purpose):
206
+
207
+ 03-11-2025 17:10:06 - INFO: ftd_run took 182.155 ms (avg. over 20 runs)
208
+ 03-11-2025 17:10:14 - INFO: win_tree_cmd took 406.849 ms (avg. over 20 runs)
201
209
 
202
- | Tool | Time (s) |
203
- |-----------------|----------|
204
- | FileTreeDisplay | 0.198 |
205
- | Seedir | 4.378 |
210
+ | Tool | Time (s) |
211
+ |--------|----------|
212
+ | FTD | 0.182 |
213
+ | Tree | 0.407 |
206
214
 
215
+ [Benchtest code](https://github.com/yaronday/nano_dev_utils/blob/master/benchmark/benchtest.py)
207
216
 
208
217
 
209
218
  #### Class Overview
210
219
 
211
220
  **`FileTreeDisplay`**
212
- Constructs and manages the visual representation of a directory structure.
221
+ Constructs and manages the visual representation of a folder structure of a path or of a disk drive.
213
222
 
214
223
  **Initialization Parameters**
215
224
 
@@ -1,6 +1,7 @@
1
1
  # nano_dev_utils
2
2
 
3
3
  A collection of small Python utilities for developers.
4
+ [PYPI package: nano-dev-utils](https://pypi.org/project/nano-dev-utils)
4
5
 
5
6
  ## Modules
6
7
 
@@ -42,7 +43,7 @@ import time
42
43
  import logging
43
44
  from nano_dev_utils import timer
44
45
 
45
- # This timer version uses a logger but also allows printing (if enabled), so it has to be configured in your app, for instance:
46
+ # if printout is not enabled, a logger must be configured in order to see timing results
46
47
  logging.basicConfig(filename='timer example.log',
47
48
  level=logging.INFO, # DEBUG, WARNING, ERROR, CRITICAL
48
49
  format='%(asctime)s - %(levelname)s: %(message)s',
@@ -140,8 +141,7 @@ It supports Windows, Linux, and macOS.
140
141
  import logging
141
142
  from nano_dev_utils import ports_release, PortsRelease
142
143
 
143
-
144
- # configure the logger
144
+
145
145
  logging.basicConfig(filename='port release.log',
146
146
  level=logging.INFO, # DEBUG, WARNING, ERROR, CRITICAL
147
147
  format='%(asctime)s - %(levelname)s: %(message)s',
@@ -180,20 +180,29 @@ Output can be displayed in the console or saved to a file.
180
180
 
181
181
  ## Benchmarks
182
182
 
183
- As measured on a dataset of 10553 files, 1235 folders (ca. 16 GB) using Python 3.10 on SSD.
184
- Avg. time was measured over 10 runs per configuration.
183
+ A measurement on an unfiltered, high-depth dataset of 10553 files, 1235 folders (ca. 16 GB) using Python 3.10 on SSD.
184
+ Avg. time was measured over 20 runs per configuration, using `timeit` decorator I've implemented in this package.
185
+
186
+ Comparing FileTreeDisplay (FTD) with
187
+ [win_tree_wrapper](https://github.com/yaronday/nano_dev_utils/blob/master/benchmark/win_tree_wrapper.py)
188
+ (Windows [Tree](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tree)
189
+ wrapper which I've implemented for this purpose):
190
+
191
+ 03-11-2025 17:10:06 - INFO: ftd_run took 182.155 ms (avg. over 20 runs)
192
+ 03-11-2025 17:10:14 - INFO: win_tree_cmd took 406.849 ms (avg. over 20 runs)
185
193
 
186
- | Tool | Time (s) |
187
- |-----------------|----------|
188
- | FileTreeDisplay | 0.198 |
189
- | Seedir | 4.378 |
194
+ | Tool | Time (s) |
195
+ |--------|----------|
196
+ | FTD | 0.182 |
197
+ | Tree | 0.407 |
190
198
 
199
+ [Benchtest code](https://github.com/yaronday/nano_dev_utils/blob/master/benchmark/benchtest.py)
191
200
 
192
201
 
193
202
  #### Class Overview
194
203
 
195
204
  **`FileTreeDisplay`**
196
- Constructs and manages the visual representation of a directory structure.
205
+ Constructs and manages the visual representation of a folder structure of a path or of a disk drive.
197
206
 
198
207
  **Initialization Parameters**
199
208