danielutils 1.1.25__tar.gz → 1.1.26__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 (294) hide show
  1. {danielutils-1.1.25/danielutils.egg-info → danielutils-1.1.26}/PKG-INFO +1 -1
  2. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/__init__.py +1 -1
  3. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database_definitions.py +2 -11
  4. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database_models.py +2 -11
  5. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/cli.py +2 -2
  6. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/core/__init__.py +2 -2
  7. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/core/discovery.py +7 -7
  8. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/core/execution.py +10 -10
  9. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/core/parser.py +6 -6
  10. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/core/runner.py +26 -26
  11. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/models.py +6 -6
  12. {danielutils-1.1.25 → danielutils-1.1.26/danielutils.egg-info}/PKG-INFO +1 -1
  13. {danielutils-1.1.25 → danielutils-1.1.26}/pyproject.toml +1 -1
  14. {danielutils-1.1.25 → danielutils-1.1.26}/LICENSE +0 -0
  15. {danielutils-1.1.25 → danielutils-1.1.26}/MANIFEST.in +0 -0
  16. {danielutils-1.1.25 → danielutils-1.1.26}/README.md +0 -0
  17. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/__init__.py +0 -0
  18. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/__init__.py +0 -0
  19. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database.py +0 -0
  20. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database_exceptions.py +0 -0
  21. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database_factory.py +0 -0
  22. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/database_initializer.py +0 -0
  23. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/dependencies.py +0 -0
  24. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/implementations/__init__.py +0 -0
  25. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/implementations/in_memory_database.py +0 -0
  26. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/implementations/persistent_in_memory_database.py +0 -0
  27. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/implementations/redis_database.py +0 -0
  28. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/db/implementations/sqlite_database.py +0 -0
  29. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
  30. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
  31. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/multiprogramming/worker.py +0 -0
  32. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
  33. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/abstractions/repl.py +0 -0
  34. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/aliases.py +0 -0
  35. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/__init__.py +0 -0
  36. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/async_cmd.py +0 -0
  37. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/async_command.py +0 -0
  38. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/async_layered_command.py +0 -0
  39. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/async_retry_executor.py +0 -0
  40. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/async_worker_pool.py +0 -0
  41. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/time_strategy.py +0 -0
  42. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/async_/utils.py +0 -0
  43. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/__init__.py +0 -0
  44. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/counter.py +0 -0
  45. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/frange.py +0 -0
  46. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
  47. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
  48. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
  49. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
  50. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
  51. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
  52. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/colors.py +0 -0
  53. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/__init__.py +0 -0
  54. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/attr_context.py +0 -0
  55. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/multi_context.py +0 -0
  56. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/optional_context.py +0 -0
  57. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/state_context.py +0 -0
  58. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/context_managers/temporary_file.py +0 -0
  59. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/convenience.py +0 -0
  60. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/conversions/__init__.py +0 -0
  61. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/conversions/main_conversions.py +0 -0
  62. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
  63. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
  64. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
  65. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/custom_types.py +0 -0
  66. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/__init__.py +0 -0
  67. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/algorithms.py +0 -0
  68. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/comparer.py +0 -0
  69. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/default_dict.py +0 -0
  70. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/functions.py +0 -0
  71. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/graph/__init__.py +0 -0
  72. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/graph/binary_node.py +0 -0
  73. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/graph/graph.py +0 -0
  74. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/graph/multinode.py +0 -0
  75. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/graph/node.py +0 -0
  76. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/heap/__init__.py +0 -0
  77. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/heap/heap.py +0 -0
  78. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/heap/max_heap.py +0 -0
  79. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/heap/min_heap.py +0 -0
  80. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/queue/__init__.py +0 -0
  81. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/queue/atomic_queue.py +0 -0
  82. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/queue/priority_queue.py +0 -0
  83. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/queue/queue.py +0 -0
  84. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/stack.py +0 -0
  85. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/trees/__init__.py +0 -0
  86. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
  87. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/data_structures/trees/binary_tree.py +0 -0
  88. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/date.py +0 -0
  89. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/date_time.py +0 -0
  90. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/__init__.py +0 -0
  91. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/atomic.py +0 -0
  92. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/attach.py +0 -0
  93. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/chain_decorators.py +0 -0
  94. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/decorate_conditionally.py +0 -0
  95. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/delay_call.py +0 -0
  96. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/deprecate.py +0 -0
  97. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/final.py +0 -0
  98. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/limit_recursion.py +0 -0
  99. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/memo.py +0 -0
  100. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/normalize_decorator.py +0 -0
  101. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/overload.py +0 -0
  102. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/partially_implemented.py +0 -0
  103. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/processify.py +0 -0
  104. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/property.py +0 -0
  105. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/singleton.py +0 -0
  106. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/threadify.py +0 -0
  107. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/timeout.py +0 -0
  108. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/total_ordering.py +0 -0
  109. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/decorators/validate.py +0 -0
  110. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/exceptions.py +0 -0
  111. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/__init__.py +0 -0
  112. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/areoneof.py +0 -0
  113. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/check_foreach.py +0 -0
  114. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/factorial.py +0 -0
  115. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/flatten.py +0 -0
  116. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/foreach.py +0 -0
  117. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/isoftype.py +0 -0
  118. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/isoneof.py +0 -0
  119. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/multiloop.py +0 -0
  120. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/parallel_for.py +0 -0
  121. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/partition.py +0 -0
  122. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/powerset.py +0 -0
  123. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/subseteq.py +0 -0
  124. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/functions/types_subseteq.py +0 -0
  125. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/generators/__init__.py +0 -0
  126. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/generators/conditional_generator.py +0 -0
  127. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/generators/generator_from_stream.py +0 -0
  128. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/generators/join_generators.py +0 -0
  129. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/internet.py +0 -0
  130. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/io_.py +0 -0
  131. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/java/__init__.py +0 -0
  132. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/java/interfaces/__init__.py +0 -0
  133. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/java/interfaces/comparable.py +0 -0
  134. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/java/java_interface.py +0 -0
  135. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/__init__.py +0 -0
  136. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/__init__.py +0 -0
  137. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/builtin_impls/__init__.py +0 -0
  138. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/builtin_impls/file_logger.py +0 -0
  139. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/builtin_impls/print_logger.py +0 -0
  140. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/log_level.py +0 -0
  141. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/logger.py +0 -0
  142. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/_impl/logger_strategy_impl_base.py +0 -0
  143. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/logging_/utils.py +0 -0
  144. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/lombok/__init__.py +0 -0
  145. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/lombok/builder.py +0 -0
  146. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/math_/__init__.py +0 -0
  147. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/math_/constants.py +0 -0
  148. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/math_/functions.py +0 -0
  149. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/math_/math_print.py +0 -0
  150. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/math_/math_symbols.py +0 -0
  151. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/__init__.py +0 -0
  152. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/atomic_class_meta.py +0 -0
  153. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
  154. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/instance_cache_meta.py +0 -0
  155. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/interface.py +0 -0
  156. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/metaclasses/overload_meta.py +0 -0
  157. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/mock_/__init__.py +0 -0
  158. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/mock_/mock_module.py +0 -0
  159. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/path.py +0 -0
  160. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/print_.py +0 -0
  161. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/progress_bar/__init__.py +0 -0
  162. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/progress_bar/ascii_progress_bar.py +0 -0
  163. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/progress_bar/progress_bar.py +0 -0
  164. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/progress_bar/progress_bar_pool.py +0 -0
  165. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/protocols/__init__.py +0 -0
  166. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/protocols/dictable.py +0 -0
  167. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/protocols/evaluable.py +0 -0
  168. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/protocols/serializable.py +0 -0
  169. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/py.typed +0 -0
  170. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/random_.py +0 -0
  171. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/__init__.py +0 -0
  172. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/declarations.py +0 -0
  173. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/file/__init__.py +0 -0
  174. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/file/file_reflection.py +0 -0
  175. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/function/__init__.py +0 -0
  176. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/function/function_reflections.py +0 -0
  177. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/__init__.py +0 -0
  178. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/argument_info.py +0 -0
  179. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/class_info.py +0 -0
  180. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/decorator_info.py +0 -0
  181. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/file_info.py +0 -0
  182. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/folder_info.py +0 -0
  183. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/function_info.py +0 -0
  184. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/info_classes/import_info.py +0 -0
  185. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/__init__.py +0 -0
  186. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/callstack.py +0 -0
  187. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/get_traceback.py +0 -0
  188. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/interpreter.py +0 -0
  189. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/is_debugging.py +0 -0
  190. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/os_.py +0 -0
  191. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/packages.py +0 -0
  192. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/python_version.py +0 -0
  193. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/signals.py +0 -0
  194. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/interpreter/tracer.py +0 -0
  195. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/module/__init__.py +0 -0
  196. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/module/lazy_module.py +0 -0
  197. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/module/module_reflections.py +0 -0
  198. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/reflection/module/package_reflection.py +0 -0
  199. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/__init__.py +0 -0
  200. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/__init__.py +0 -0
  201. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/constant_backoff.py +0 -0
  202. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/exponential_backoff.py +0 -0
  203. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/functional_backoff.py +0 -0
  204. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/linear_backoff.py +0 -0
  205. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/multiplicative_backoff.py +0 -0
  206. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategies/no_backoff.py +0 -0
  207. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/backoff_strategy.py +0 -0
  208. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/retry_executor/retry_executor.py +0 -0
  209. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/snippets/__init__.py +0 -0
  210. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/snippets/try_get.py +0 -0
  211. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/__init__.py +0 -0
  212. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/independent.py +0 -0
  213. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/layered_command.py +0 -0
  214. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/windows/__init__.py +0 -0
  215. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/windows/utils/__init__.py +0 -0
  216. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/windows/utils/filetime.py +0 -0
  217. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/windows/win32_ctime.py +0 -0
  218. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/system/windows/windows.py +0 -0
  219. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/testing/__init__.py +0 -0
  220. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/testing/unittest_/__init__.py +0 -0
  221. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/testing/unittest_/always_teardown_testcase.py +0 -0
  222. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/testing/unittest_/auto_cwd_testcase.py +0 -0
  223. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/text.py +0 -0
  224. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/time.py +0 -0
  225. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/__init__.py +0 -0
  226. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/tools/unittest_test_runner/__init__.py +0 -0
  227. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/__init__.py +0 -0
  228. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/__init__.py +0 -0
  229. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/discreate_finite_automaton.py +0 -0
  230. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/languages/__init__.py +0 -0
  231. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/languages/language.py +0 -0
  232. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/languages/sat.py +0 -0
  233. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/computability_and_complexity/turing_machine.py +0 -0
  234. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/databases/__init__.py +0 -0
  235. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/databases/all.py +0 -0
  236. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/__init__.py +0 -0
  237. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/__init__.py +0 -0
  238. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/encoding.py +0 -0
  239. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossless/__init__.py +0 -0
  240. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossless/huffman.py +0 -0
  241. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossless/lossless_encoding.py +0 -0
  242. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossless/lzw.py +0 -0
  243. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossless/run_length.py +0 -0
  244. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossy/__init__.py +0 -0
  245. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/encoding/lossy/lossy_encoding.py +0 -0
  246. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/__init__.py +0 -0
  247. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/gaussian.py +0 -0
  248. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/gradient.py +0 -0
  249. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/hough.py +0 -0
  250. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/laplacian.py +0 -0
  251. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/image_proccesing/tansformations/transformation.py +0 -0
  252. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/linear_algebra/__init__.py +0 -0
  253. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/linear_algebra/matrix.py +0 -0
  254. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/machine_learning/__init__.py +0 -0
  255. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/machine_learning/activation_functions/__init__.py +0 -0
  256. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/machine_learning/activation_functions/activation_function.py +0 -0
  257. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/machine_learning/activation_functions/relu.py +0 -0
  258. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/machine_learning/neuron.py +0 -0
  259. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/oop/__init__.py +0 -0
  260. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/oop/observer.py +0 -0
  261. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/oop/strategy.py +0 -0
  262. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/__init__.py +0 -0
  263. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
  264. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
  265. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
  266. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
  267. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
  268. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/bernoulli_sum.py +0 -0
  269. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
  270. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
  271. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
  272. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
  273. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
  274. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
  275. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/distributions.py +0 -0
  276. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/expressions/__init__.py +0 -0
  277. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
  278. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/expressions/probability_expression.py +0 -0
  279. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/funcs/__init__.py +0 -0
  280. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/funcs/covariance.py +0 -0
  281. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/funcs/expected_value.py +0 -0
  282. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/funcs/probability_function.py +0 -0
  283. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/funcs/variance.py +0 -0
  284. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/operator.py +0 -0
  285. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/protocols.py +0 -0
  286. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/supp.py +0 -0
  287. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/university/probability/transformation.py +0 -0
  288. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils/versioned_imports.py +0 -0
  289. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils.egg-info/SOURCES.txt +0 -0
  290. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils.egg-info/dependency_links.txt +0 -0
  291. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils.egg-info/requires.txt +0 -0
  292. {danielutils-1.1.25 → danielutils-1.1.26}/danielutils.egg-info/top_level.txt +0 -0
  293. {danielutils-1.1.25 → danielutils-1.1.26}/setup.cfg +0 -0
  294. {danielutils-1.1.25 → danielutils-1.1.26}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: danielutils
3
- Version: 1.1.25
3
+ Version: 1.1.26
4
4
  Summary: A comprehensive Python utilities library providing type-safe collections, async programming tools, database abstractions, retry executors, data structures, and developer productivity enhancements to streamline Python development workflows
5
5
  Author-email: danielnachumdev <danielnachumdev@gmail.com>
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- __version__ = "1.1.25"
1
+ __version__ = "1.1.26"
2
2
  """danielutils is a convenience library of functions decorators
3
3
  data-structures and more that make my development workflow faster
4
4
  """
@@ -1,8 +1,6 @@
1
1
  import json
2
2
  from typing import Dict, Any, List, Optional, Literal, Union, Type
3
3
  from enum import Enum
4
- from datetime import datetime, date, time
5
- from uuid import UUID
6
4
 
7
5
  try:
8
6
  from pydantic import BaseModel, Field, ConfigDict
@@ -39,23 +37,16 @@ class ColumnType(str, Enum):
39
37
  class BaseDBModel(BaseModel):
40
38
  """Base model with JSON serialization support"""
41
39
  model_config = ConfigDict(
42
- json_encoders={
43
- datetime: lambda v: v.isoformat(),
44
- date: lambda v: v.isoformat(),
45
- time: lambda v: v.isoformat(),
46
- UUID: lambda v: str(v),
47
- Enum: lambda v: v.value
48
- },
49
40
  arbitrary_types_allowed=True
50
41
  )
51
42
 
52
43
  def to_dict(self) -> Dict[str, Any]:
53
44
  """Convert model to dictionary"""
54
- return self.model_dump()
45
+ return self.model_dump(mode="json")
55
46
 
56
47
  def to_json(self) -> str:
57
48
  """Convert model to JSON string"""
58
- return json.dumps(self.to_dict())
49
+ return self.model_dump_json()
59
50
 
60
51
  @classmethod
61
52
  def from_json(cls, json_str: str) -> 'BaseDBModel':
@@ -1,8 +1,6 @@
1
1
  from typing import Dict, Any, List, Optional, Literal, Union
2
2
  from enum import Enum
3
3
  from pydantic import BaseModel, Field, ConfigDict
4
- from datetime import datetime, date, time
5
- from uuid import UUID
6
4
  import json
7
5
 
8
6
 
@@ -33,23 +31,16 @@ class ColumnType(str, Enum):
33
31
  class BaseDBModel(BaseModel):
34
32
  """Base model with JSON serialization support"""
35
33
  model_config = ConfigDict(
36
- json_encoders={
37
- datetime: lambda v: v.isoformat(),
38
- date: lambda v: v.isoformat(),
39
- time: lambda v: v.isoformat(),
40
- UUID: lambda v: str(v),
41
- Enum: lambda v: v.value
42
- },
43
34
  arbitrary_types_allowed=True
44
35
  )
45
36
 
46
37
  def to_dict(self) -> Dict[str, Any]:
47
38
  """Convert model to dictionary"""
48
- return self.model_dump()
39
+ return self.model_dump(mode="json")
49
40
 
50
41
  def to_json(self) -> str:
51
42
  """Convert model to JSON string"""
52
- return json.dumps(self.to_dict())
43
+ return self.model_dump_json()
53
44
 
54
45
  @classmethod
55
46
  def from_json(cls, json_str: str) -> 'BaseDBModel':
@@ -5,7 +5,7 @@ Command-line interface for the test runner using Google Fire.
5
5
  import logging
6
6
  import fire
7
7
  from typing import Optional, Literal
8
- from .core import TestRunner, VerboseLevel
8
+ from .core import UnittestRunner, VerboseLevel
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
@@ -34,7 +34,7 @@ def run_tests(python_path: Optional[str] = None,
34
34
  logger.info("Starting test run with parameters: python_path=%s, results_file=%s, skip_threshold=%d, force=%s, target=%s, verbose=%s",
35
35
  python_path, results_file, skip_threshold, force, target, verbose)
36
36
 
37
- runner = TestRunner(
37
+ runner = UnittestRunner(
38
38
  python_path=python_path,
39
39
  results_file=results_file,
40
40
  skip_threshold_hours=skip_threshold,
@@ -5,11 +5,11 @@ This package contains the core functionality split by responsibility:
5
5
  - discovery: Test discovery and structure analysis
6
6
  - execution: Test execution hierarchy
7
7
  - parser: Output parsing and result processing
8
- - runner: Main TestRunner orchestration
8
+ - runner: Main UnittestRunner orchestration
9
9
  - types: Type definitions and data structures
10
10
  """
11
11
 
12
- from .runner import TestRunner
12
+ from .runner import UnittestRunner
13
13
 
14
14
  # Define VerboseLevel here since it's a simple type alias
15
15
  from typing import Literal
@@ -7,18 +7,18 @@ import os
7
7
  import subprocess
8
8
  from pathlib import Path
9
9
  from typing import List, Dict, Optional, Tuple, Literal
10
- from ..models import TestDiscovery
10
+ from ..models import UnittestDiscovery
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
13
 
14
14
  VerboseLevel = Literal["module", "file", "class", "function"]
15
15
 
16
16
 
17
- class TestDiscoveryService:
17
+ class UnittestDiscoveryService:
18
18
  """Handles discovery of test structure and target parsing."""
19
19
 
20
20
  def __init__(self, python_path: str, verbose: VerboseLevel = "class"):
21
- logger.debug("Initializing TestDiscoveryService with python_path=%s, verbose=%s", python_path, verbose)
21
+ logger.debug("Initializing UnittestDiscoveryService with python_path=%s, verbose=%s", python_path, verbose)
22
22
  self._python_path = python_path
23
23
  self._verbose = verbose
24
24
 
@@ -107,7 +107,7 @@ class TestDiscoveryService:
107
107
 
108
108
  return sorted(test_modules)
109
109
 
110
- def discover_test_structure(self, test_modules: List[str]) -> TestDiscovery:
110
+ def discover_test_structure(self, test_modules: List[str]) -> UnittestDiscovery:
111
111
  """Discover the complete test structure for progress tracking."""
112
112
  logger.info("Discovering test structure for %d modules", len(test_modules))
113
113
  if self._verbose in ["module", "file", "class", "function"]:
@@ -192,7 +192,7 @@ class TestDiscoveryService:
192
192
  if self._verbose in ["module", "file", "class", "function"]:
193
193
  print(f" ✅ Discovery complete: {len(modules)} modules, {total_classes} classes, {total_functions} functions")
194
194
 
195
- discovery = TestDiscovery(
195
+ discovery = UnittestDiscovery(
196
196
  modules=modules,
197
197
  classes=classes,
198
198
  functions=functions,
@@ -254,7 +254,7 @@ class TestDiscoveryService:
254
254
  return module, class_name, function_name
255
255
 
256
256
  def create_focused_discovery(self, target_module: str, target_class: Optional[str],
257
- target_function: Optional[str], full_discovery: TestDiscovery) -> TestDiscovery:
257
+ target_function: Optional[str], full_discovery: UnittestDiscovery) -> UnittestDiscovery:
258
258
  """Create a focused test discovery based on target specification."""
259
259
  logger.debug("Creating focused discovery for target: %s.%s.%s", target_module, target_class or '', target_function or '')
260
260
  if self._verbose == "function":
@@ -312,7 +312,7 @@ class TestDiscoveryService:
312
312
  logger.info("Created focused discovery: %d modules, %d classes, %d functions",
313
313
  len(modules), total_classes, total_functions)
314
314
 
315
- return TestDiscovery(
315
+ return UnittestDiscovery(
316
316
  modules=modules,
317
317
  classes=classes,
318
318
  functions=functions,
@@ -7,27 +7,27 @@ import logging
7
7
  import time
8
8
  import subprocess
9
9
  from typing import List, Optional, Literal
10
- from ..models import TestFunctionState, TestResult, ModuleState
11
- from .parser import TestOutputParser
10
+ from ..models import UnittestFunctionState, UnittestResult, ModuleState
11
+ from .parser import UnittestOutputParser
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
15
  VerboseLevel = Literal["module", "file", "class", "function"]
16
16
 
17
17
 
18
- class TestExecutor:
18
+ class UnittestExecutor:
19
19
  """Handles hierarchical test execution with _run_test_function as the core."""
20
20
 
21
21
  def __init__(self, python_path: str, verbose: VerboseLevel = "class",
22
22
  test_discovery: Optional[object] = None):
23
- logger.debug("Initializing TestExecutor with python_path=%s, verbose=%s", python_path, verbose)
23
+ logger.debug("Initializing UnittestExecutor with python_path=%s, verbose=%s", python_path, verbose)
24
24
  self._python_path = python_path
25
25
  self._verbose = verbose
26
26
  self._test_discovery = test_discovery
27
- self._parser = TestOutputParser(verbose)
27
+ self._parser = UnittestOutputParser(verbose)
28
28
 
29
29
  def run_test_function(self, module_path: str, test_class: str, test_function: str,
30
- function_index: int = 0, total_functions: int = 0) -> TestFunctionState:
30
+ function_index: int = 0, total_functions: int = 0) -> UnittestFunctionState:
31
31
  """Run a single test function and return its state. This is the core execution context."""
32
32
  logger.debug("Running test function: %s.%s.%s", module_path, test_class, test_function)
33
33
  indent = " " # 8 spaces for function level
@@ -66,7 +66,7 @@ class TestExecutor:
66
66
  else:
67
67
  # Create a failed state if parsing failed
68
68
  logger.warning("Failed to parse test output for function: %s", test_function)
69
- error_state = TestFunctionState(
69
+ error_state = UnittestFunctionState(
70
70
  function_name=test_function,
71
71
  status="error",
72
72
  runtime=0.0,
@@ -82,7 +82,7 @@ class TestExecutor:
82
82
 
83
83
  except Exception as e:
84
84
  logger.error("Error running test function %s: %s", test_function, e)
85
- error_state = TestFunctionState(
85
+ error_state = UnittestFunctionState(
86
86
  function_name=test_function,
87
87
  status="error",
88
88
  runtime=0.0,
@@ -96,7 +96,7 @@ class TestExecutor:
96
96
  print(f"{indent} ⚠ {test_function} (error) - {e}")
97
97
  return error_state
98
98
 
99
- def run_test_class(self, module_path: str, test_class: str, class_index: int = 0, total_classes: int = 0) -> List[TestFunctionState]:
99
+ def run_test_class(self, module_path: str, test_class: str, class_index: int = 0, total_classes: int = 0) -> List[UnittestFunctionState]:
100
100
  """Run all test functions in a test class and return their states."""
101
101
  logger.debug("Running test class: %s.%s", module_path, test_class)
102
102
  indent = " " # 6 spaces for class level
@@ -162,7 +162,7 @@ class TestExecutor:
162
162
 
163
163
  return test_functions
164
164
 
165
- def run_test_file(self, module_path: str, file_index: int = 0, total_files: int = 0) -> List[TestFunctionState]:
165
+ def run_test_file(self, module_path: str, file_index: int = 0, total_files: int = 0) -> List[UnittestFunctionState]:
166
166
  """Run all test classes in a test file and return all test function states."""
167
167
  logger.debug("Running test file: %s", module_path)
168
168
  indent = " " # 4 spaces for file level
@@ -5,19 +5,19 @@ Output parsing and result processing functionality.
5
5
  import logging
6
6
  import time
7
7
  from typing import List, Tuple
8
- from ..models import TestFunctionState
8
+ from ..models import UnittestFunctionState
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
12
12
 
13
- class TestOutputParser:
13
+ class UnittestOutputParser:
14
14
  """Handles parsing of unittest output and creating test states."""
15
15
 
16
16
  def __init__(self, verbose: str = "class"):
17
- logger.debug("Initializing TestOutputParser with verbose=%s", verbose)
17
+ logger.debug("Initializing UnittestOutputParser with verbose=%s", verbose)
18
18
  self._verbose = verbose
19
19
 
20
- def parse_test_output(self, output_lines: List[str], stderr_lines: List[str]) -> Tuple[List[TestFunctionState], List[str], List[str]]:
20
+ def parse_test_output(self, output_lines: List[str], stderr_lines: List[str]) -> Tuple[List[UnittestFunctionState], List[str], List[str]]:
21
21
  """Parse unittest output to extract individual test function results."""
22
22
  logger.debug("Parsing test output: %d output lines, %d stderr lines", len(output_lines), len(stderr_lines))
23
23
  test_functions = []
@@ -114,7 +114,7 @@ class TestOutputParser:
114
114
  pass
115
115
 
116
116
  # Create test function state
117
- test_function = TestFunctionState(
117
+ test_function = UnittestFunctionState(
118
118
  function_name=test_name,
119
119
  status=status or "unknown",
120
120
  runtime=runtime,
@@ -146,7 +146,7 @@ class TestOutputParser:
146
146
  if match and int(match.group(1)) > 0:
147
147
  # This is a summary line, but we can't extract individual results
148
148
  # Just create a placeholder
149
- test_function = TestFunctionState(
149
+ test_function = UnittestFunctionState(
150
150
  function_name="unknown",
151
151
  status="unknown",
152
152
  runtime=0.0,
@@ -1,5 +1,5 @@
1
1
  """
2
- Main TestRunner orchestration functionality.
2
+ Main UnittestRunner orchestration functionality.
3
3
  """
4
4
 
5
5
  import logging
@@ -9,17 +9,17 @@ import time
9
9
  import json
10
10
  import subprocess
11
11
  from typing import List, Optional, Literal, Tuple
12
- from ..models import TestFunctionState, ModuleState, TestResult, TestRunSummary, TestDiscovery
13
- from .discovery import TestDiscoveryService
14
- from .execution import TestExecutor
15
- from .parser import TestOutputParser
12
+ from ..models import UnittestFunctionState, ModuleState, UnittestResult, UnittestRunSummary, UnittestDiscovery
13
+ from .discovery import UnittestDiscoveryService
14
+ from .execution import UnittestExecutor
15
+ from .parser import UnittestOutputParser
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
19
  VerboseLevel = Literal["module", "file", "class", "function"]
20
20
 
21
21
 
22
- class TestRunner:
22
+ class UnittestRunner:
23
23
  """Smart test runner that executes tests module by module and collects detailed statistics."""
24
24
 
25
25
  def __init__(self,
@@ -31,7 +31,7 @@ class TestRunner:
31
31
  target: Optional[str] = None,
32
32
  verbose: VerboseLevel = "class",
33
33
  show_function_results: bool = False):
34
- logger.info("Initializing TestRunner with python_path=%s, results_file=%s, skip_threshold_hours=%d, force_run=%s, target=%s, verbose=%s",
34
+ logger.info("Initializing UnittestRunner with python_path=%s, results_file=%s, skip_threshold_hours=%d, force_run=%s, target=%s, verbose=%s",
35
35
  python_path, results_file, skip_threshold_hours, force_run, target, verbose)
36
36
 
37
37
  self.python_path = python_path or sys.executable
@@ -61,12 +61,12 @@ class TestRunner:
61
61
 
62
62
  # Initialize services
63
63
  logger.debug("Initializing discovery service and parser")
64
- self.discovery_service = TestDiscoveryService(self.python_path, self.verbose)
65
- self.parser = TestOutputParser(self.verbose)
64
+ self.discovery_service = UnittestDiscoveryService(self.python_path, self.verbose)
65
+ self.parser = UnittestOutputParser(self.verbose)
66
66
 
67
67
  # Initialize state
68
- self.results: List[TestResult] = []
69
- self.previous_results: Optional[TestRunSummary] = None
68
+ self.results: List[UnittestResult] = []
69
+ self.previous_results: Optional[UnittestRunSummary] = None
70
70
  logger.debug("Loading previous results from: %s", self.results_file)
71
71
  self._load_previous_results()
72
72
 
@@ -90,7 +90,7 @@ class TestRunner:
90
90
  self.test_modules = self.discovery_service.discover_test_modules()
91
91
 
92
92
  logger.info("Discovered %d test modules", len(self.test_modules))
93
- self.test_discovery: Optional[TestDiscovery] = None
93
+ self.test_discovery: Optional[UnittestDiscovery] = None
94
94
  self._discover_test_structure()
95
95
 
96
96
  # Apply target filtering if specified
@@ -109,7 +109,7 @@ class TestRunner:
109
109
 
110
110
  # Initialize executor
111
111
  logger.debug("Initializing test executor")
112
- self.executor = TestExecutor(self.python_path, self.verbose, self.test_discovery)
112
+ self.executor = UnittestExecutor(self.python_path, self.verbose, self.test_discovery)
113
113
 
114
114
  def _discover_test_structure(self):
115
115
  """Discover the complete test structure for progress tracking."""
@@ -131,7 +131,7 @@ class TestRunner:
131
131
  with open(self.results_file, 'r') as f:
132
132
  data = json.load(f)
133
133
 
134
- # Convert results list from dicts to TestResult objects
134
+ # Convert results list from dicts to UnittestResult objects
135
135
  if 'results' in data and isinstance(data['results'], list):
136
136
  results = []
137
137
  logger.debug("Converting %d previous results from dicts to objects", len(data['results']))
@@ -139,15 +139,15 @@ class TestRunner:
139
139
  # Convert nested dicts to proper objects
140
140
  if 'module_state' in result_dict:
141
141
  module_state_dict = result_dict['module_state']
142
- # Convert test_functions dict to TestFunctionState objects
142
+ # Convert test_functions dict to UnittestFunctionState objects
143
143
  test_functions = {}
144
144
  if 'test_functions' in module_state_dict:
145
145
  for func_name, func_dict in module_state_dict['test_functions'].items():
146
- test_functions[func_name] = TestFunctionState(**func_dict)
146
+ test_functions[func_name] = UnittestFunctionState(**func_dict)
147
147
 
148
148
  # Create ModuleState objects
149
- initial_state = TestFunctionState(**module_state_dict['initial_state']) if module_state_dict.get('initial_state') else None
150
- current_state = TestFunctionState(**module_state_dict['current_state']) if module_state_dict.get('current_state') else None
149
+ initial_state = UnittestFunctionState(**module_state_dict['initial_state']) if module_state_dict.get('initial_state') else None
150
+ current_state = UnittestFunctionState(**module_state_dict['current_state']) if module_state_dict.get('current_state') else None
151
151
 
152
152
  module_state = ModuleState(
153
153
  initial_state=initial_state,
@@ -155,7 +155,7 @@ class TestRunner:
155
155
  test_functions=test_functions
156
156
  )
157
157
 
158
- result = TestResult(
158
+ result = UnittestResult(
159
159
  module_path=result_dict['module_path'],
160
160
  module_state=module_state,
161
161
  errors=result_dict.get('errors', []),
@@ -165,7 +165,7 @@ class TestRunner:
165
165
 
166
166
  data['results'] = results
167
167
 
168
- self.previous_results = TestRunSummary(**data)
168
+ self.previous_results = UnittestRunSummary(**data)
169
169
  logger.info("Successfully loaded previous results: %d modules, %d tests",
170
170
  self.previous_results.total_modules, self.previous_results.total_tests)
171
171
  except Exception as e:
@@ -216,7 +216,7 @@ class TestRunner:
216
216
  logger.debug("Module %s needs attention", module_path)
217
217
  return False, "Module needs attention"
218
218
 
219
- def _create_module_state(self, module_path: str, test_functions: List[TestFunctionState],
219
+ def _create_module_state(self, module_path: str, test_functions: List[UnittestFunctionState],
220
220
  total_runtime: float) -> ModuleState:
221
221
  """Create a ModuleState from test function results."""
222
222
  if not test_functions:
@@ -357,7 +357,7 @@ class TestRunner:
357
357
  logger.info("All test execution completed")
358
358
  self._print_final_summary()
359
359
 
360
- def _run_test_module(self, module_path: str) -> TestResult:
360
+ def _run_test_module(self, module_path: str) -> UnittestResult:
361
361
  """Run a single test module and collect detailed statistics."""
362
362
  logger.debug("Running test module: %s", module_path)
363
363
  if self.verbose in ["module", "file", "class", "function"]:
@@ -430,7 +430,7 @@ class TestRunner:
430
430
  current_state.errors < initial_state.errors
431
431
  )
432
432
 
433
- return TestResult(
433
+ return UnittestResult(
434
434
  module_path=module_path,
435
435
  initial_state=initial_state,
436
436
  current_state=current_state,
@@ -447,7 +447,7 @@ class TestRunner:
447
447
 
448
448
  # Create error state
449
449
  current_state = self._create_module_state(module_path, [], time.time() - start_time)
450
- return TestResult(
450
+ return UnittestResult(
451
451
  module_path=module_path,
452
452
  initial_state=initial_state,
453
453
  current_state=current_state,
@@ -463,7 +463,7 @@ class TestRunner:
463
463
 
464
464
  # Create error state
465
465
  current_state = self._create_module_state(module_path, [], time.time() - start_time)
466
- return TestResult(
466
+ return UnittestResult(
467
467
  module_path=module_path,
468
468
  initial_state=initial_state,
469
469
  current_state=current_state,
@@ -534,7 +534,7 @@ class TestRunner:
534
534
  total_execution_time = sum(r.current_state.total_runtime for r in self.results)
535
535
 
536
536
  # Create summary
537
- summary = TestRunSummary(
537
+ summary = UnittestRunSummary(
538
538
  timestamp=time.strftime('%Y-%m-%d %H:%M:%S'),
539
539
  python_executable=self.python_path,
540
540
  total_modules=total_modules,
@@ -8,7 +8,7 @@ import time
8
8
 
9
9
 
10
10
  @dataclass
11
- class TestFunctionState:
11
+ class UnittestFunctionState:
12
12
  """State of an individual test function."""
13
13
  function_name: str
14
14
  status: str # "passed", "failed", "skipped", "error", "unknown"
@@ -25,7 +25,7 @@ class TestFunctionState:
25
25
  class ModuleState:
26
26
  """State of a test module containing multiple test functions."""
27
27
  module_path: str
28
- test_functions: List[TestFunctionState]
28
+ test_functions: List[UnittestFunctionState]
29
29
  total_tests: int
30
30
  passed: int
31
31
  failed: int
@@ -43,7 +43,7 @@ class ModuleState:
43
43
 
44
44
 
45
45
  @dataclass
46
- class TestResult:
46
+ class UnittestResult:
47
47
  """Result of running a test module with initial and current states."""
48
48
  module_path: str
49
49
  initial_state: Optional[ModuleState]
@@ -54,7 +54,7 @@ class TestResult:
54
54
 
55
55
 
56
56
  @dataclass
57
- class TestRunSummary:
57
+ class UnittestRunSummary:
58
58
  """Summary of a complete test run across all modules."""
59
59
  timestamp: str
60
60
  python_executable: str
@@ -68,11 +68,11 @@ class TestRunSummary:
68
68
  total_errors: int
69
69
  success_rate: float
70
70
  total_execution_time: float
71
- results: List[TestResult]
71
+ results: List[UnittestResult]
72
72
 
73
73
 
74
74
  @dataclass
75
- class TestDiscovery:
75
+ class UnittestDiscovery:
76
76
  """Represents discovered test structure for progress tracking."""
77
77
  modules: List[str]
78
78
  classes: Dict[str, List[str]] # module -> list of classes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: danielutils
3
- Version: 1.1.25
3
+ Version: 1.1.26
4
4
  Summary: A comprehensive Python utilities library providing type-safe collections, async programming tools, database abstractions, retry executors, data structures, and developer productivity enhancements to streamline Python development workflows
5
5
  Author-email: danielnachumdev <danielnachumdev@gmail.com>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "danielutils"
7
- version = "1.1.25"
7
+ version = "1.1.26"
8
8
  authors = [
9
9
  { name = "danielnachumdev", email = "danielnachumdev@gmail.com" },
10
10
  ]
File without changes
File without changes
File without changes