danielutils 0.9.90__tar.gz → 0.9.91__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 (238) hide show
  1. {danielutils-0.9.90/danielutils.egg-info → danielutils-0.9.91}/PKG-INFO +1 -1
  2. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/__init__.py +2 -1
  3. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/aliases.py +6 -7
  4. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/progress_bar/ascii_progress_bar.py +2 -3
  5. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/progress_bar/progress_bar.py +6 -1
  6. danielutils-0.9.91/danielutils/retry_executor/__init__.py +3 -0
  7. danielutils-0.9.91/danielutils/retry_executor/backoff_strategies/__init__.py +3 -0
  8. danielutils-0.9.91/danielutils/retry_executor/backoff_strategies/constant_backoff.py +19 -0
  9. danielutils-0.9.91/danielutils/retry_executor/backoff_strategies/exponential_backoff.py +21 -0
  10. danielutils-0.9.91/danielutils/retry_executor/backoff_strategies/no_backoff.py +12 -0
  11. danielutils-0.9.91/danielutils/retry_executor/backoff_strategy.py +22 -0
  12. danielutils-0.9.91/danielutils/retry_executor/retry_executor.py +37 -0
  13. danielutils-0.9.91/danielutils/testing/__init__.py +1 -0
  14. danielutils-0.9.91/danielutils/testing/unittest_/__init__.py +2 -0
  15. danielutils-0.9.91/danielutils/testing/unittest_/always_teardown_testcase.py +37 -0
  16. danielutils-0.9.91/danielutils/testing/unittest_/auto_cwd_testcase.py +49 -0
  17. {danielutils-0.9.90 → danielutils-0.9.91/danielutils.egg-info}/PKG-INFO +1 -1
  18. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils.egg-info/SOURCES.txt +11 -0
  19. {danielutils-0.9.90 → danielutils-0.9.91}/pyproject.toml +1 -1
  20. {danielutils-0.9.90 → danielutils-0.9.91}/LICENSE +0 -0
  21. {danielutils-0.9.90 → danielutils-0.9.91}/MANIFEST.in +0 -0
  22. {danielutils-0.9.90 → danielutils-0.9.91}/README.md +0 -0
  23. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/__init__.py +0 -0
  24. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/database/__init__.py +0 -0
  25. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/database/cached_database.py +0 -0
  26. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/database/database.py +0 -0
  27. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/database/redis_database.py +0 -0
  28. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
  29. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
  30. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/multiprogramming/worker.py +0 -0
  31. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
  32. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/abstractions/repl.py +0 -0
  33. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/__init__.py +0 -0
  34. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/counter.py +0 -0
  35. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/frange.py +0 -0
  36. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
  37. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
  38. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
  39. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
  40. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
  41. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
  42. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/colors.py +0 -0
  43. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/__init__.py +0 -0
  44. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/attr_context.py +0 -0
  45. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/multi_context.py +0 -0
  46. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/optional_context.py +0 -0
  47. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/state_context.py +0 -0
  48. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/context_managers/temporary_file.py +0 -0
  49. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/convenience.py +0 -0
  50. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/conversions/__init__.py +0 -0
  51. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/conversions/main_conversions.py +0 -0
  52. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
  53. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
  54. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
  55. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/custom_types.py +0 -0
  56. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/__init__.py +0 -0
  57. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/algorithms.py +0 -0
  58. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/comparer.py +0 -0
  59. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/default_dict.py +0 -0
  60. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/functions.py +0 -0
  61. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/graph/__init__.py +0 -0
  62. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/graph/binary_node.py +0 -0
  63. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/graph/graph.py +0 -0
  64. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/graph/multinode.py +0 -0
  65. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/graph/node.py +0 -0
  66. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/heap/__init__.py +0 -0
  67. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/heap/heap.py +0 -0
  68. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/heap/max_heap.py +0 -0
  69. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/heap/min_heap.py +0 -0
  70. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/queue/__init__.py +0 -0
  71. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/queue/atomic_queue.py +0 -0
  72. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/queue/priority_queue.py +0 -0
  73. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/queue/queue.py +0 -0
  74. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/stack.py +0 -0
  75. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/trees/__init__.py +0 -0
  76. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
  77. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/data_structures/trees/binary_tree.py +0 -0
  78. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/date.py +0 -0
  79. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/date_time.py +0 -0
  80. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/__init__.py +0 -0
  81. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/atomic.py +0 -0
  82. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/attach.py +0 -0
  83. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/chain_decorators.py +0 -0
  84. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/decorate_conditionally.py +0 -0
  85. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/delay_call.py +0 -0
  86. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/deprecate.py +0 -0
  87. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/final.py +0 -0
  88. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/limit_recursion.py +0 -0
  89. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/memo.py +0 -0
  90. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/overload.py +0 -0
  91. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/partially_implemented.py +0 -0
  92. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/processify.py +0 -0
  93. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/property.py +0 -0
  94. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/singleton.py +0 -0
  95. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/threadify.py +0 -0
  96. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/timeout.py +0 -0
  97. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/total_ordering.py +0 -0
  98. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/decorators/validate.py +0 -0
  99. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/exceptions.py +0 -0
  100. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/file_specifications/__init__.py +0 -0
  101. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/__init__.py +0 -0
  102. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/areoneof.py +0 -0
  103. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/check_foreach.py +0 -0
  104. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/factorial.py +0 -0
  105. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/flatten.py +0 -0
  106. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/foreach.py +0 -0
  107. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/isoftype.py +0 -0
  108. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/isoneof.py +0 -0
  109. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/multiloop.py +0 -0
  110. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/parallel_for.py +0 -0
  111. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/partition.py +0 -0
  112. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/powerset.py +0 -0
  113. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/subseteq.py +0 -0
  114. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/functions/types_subseteq.py +0 -0
  115. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/generators/__init__.py +0 -0
  116. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/generators/conditional_generator.py +0 -0
  117. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/generators/generator_from_stream.py +0 -0
  118. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/generators/join_generators.py +0 -0
  119. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/internet.py +0 -0
  120. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/io_.py +0 -0
  121. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/math_/__init__.py +0 -0
  122. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/math_/constants.py +0 -0
  123. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/math_/functions.py +0 -0
  124. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/math_/math_print.py +0 -0
  125. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/math_/math_symbols.py +0 -0
  126. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/__init__.py +0 -0
  127. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/atomic_class_meta.py +0 -0
  128. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
  129. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/instance_cache_meta.py +0 -0
  130. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/interface.py +0 -0
  131. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/metaclasses/overload_meta.py +0 -0
  132. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/mock_/__init__.py +0 -0
  133. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/mock_/mock_database.py +0 -0
  134. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/mock_/mock_module.py +0 -0
  135. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/path.py +0 -0
  136. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/print_.py +0 -0
  137. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/progress_bar/__init__.py +0 -0
  138. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/progress_bar/progress_bar_pool.py +0 -0
  139. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/protocols/__init__.py +0 -0
  140. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/protocols/dictable.py +0 -0
  141. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/protocols/evaluable.py +0 -0
  142. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/protocols/serializable.py +0 -0
  143. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/py.typed +0 -0
  144. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/__init__.py +0 -0
  145. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/class_/__init__.py +0 -0
  146. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/class_/class_reflection.py +0 -0
  147. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/file/__init__.py +0 -0
  148. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/file/file_reflection.py +0 -0
  149. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/function/__init__.py +0 -0
  150. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/function/function_reflections.py +0 -0
  151. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/__init__.py +0 -0
  152. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/callstack.py +0 -0
  153. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/get_traceback.py +0 -0
  154. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/os_.py +0 -0
  155. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/packages.py +0 -0
  156. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/python_version.py +0 -0
  157. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/signals.py +0 -0
  158. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/interpreter/tracer.py +0 -0
  159. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/module/__init__.py +0 -0
  160. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/module/module_reflections.py +0 -0
  161. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/reflection/module/package_reflection.py +0 -0
  162. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/snippets/__init__.py +0 -0
  163. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/snippets/try_get.py +0 -0
  164. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/__init__.py +0 -0
  165. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/independent.py +0 -0
  166. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/layered_command.py +0 -0
  167. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/windows/__init__.py +0 -0
  168. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/windows/utils/__init__.py +0 -0
  169. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/windows/utils/filetime.py +0 -0
  170. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/windows/win32_ctime.py +0 -0
  171. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/system/windows/windows.py +0 -0
  172. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/text.py +0 -0
  173. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/time.py +0 -0
  174. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/__init__.py +0 -0
  175. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/__init__.py +0 -0
  176. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/discreate_finite_automaton.py +0 -0
  177. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/languages/__init__.py +0 -0
  178. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/languages/language.py +0 -0
  179. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/languages/sat.py +0 -0
  180. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/computability_and_complexity/turing_machine.py +0 -0
  181. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/databases/__init__.py +0 -0
  182. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/databases/all.py +0 -0
  183. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/__init__.py +0 -0
  184. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/__init__.py +0 -0
  185. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/encoding.py +0 -0
  186. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossless/__init__.py +0 -0
  187. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossless/huffman.py +0 -0
  188. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossless/lossless_encoding.py +0 -0
  189. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossless/lzw.py +0 -0
  190. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossless/run_length.py +0 -0
  191. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossy/__init__.py +0 -0
  192. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/encoding/lossy/lossy_encoding.py +0 -0
  193. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/__init__.py +0 -0
  194. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/gaussian.py +0 -0
  195. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/gradient.py +0 -0
  196. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/hough.py +0 -0
  197. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/laplacian.py +0 -0
  198. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/image_proccesing/tansformations/transformation.py +0 -0
  199. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/linear_algebra/__init__.py +0 -0
  200. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/linear_algebra/matrix.py +0 -0
  201. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/machine_learning/__init__.py +0 -0
  202. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/machine_learning/activation_functions/__init__.py +0 -0
  203. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/machine_learning/activation_functions/activation_function.py +0 -0
  204. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/machine_learning/activation_functions/relu.py +0 -0
  205. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/machine_learning/neuron.py +0 -0
  206. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/oop/__init__.py +0 -0
  207. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/oop/observer.py +0 -0
  208. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/oop/strategy.py +0 -0
  209. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/__init__.py +0 -0
  210. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
  211. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
  212. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
  213. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
  214. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
  215. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
  216. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
  217. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
  218. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
  219. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
  220. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
  221. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/distributions.py +0 -0
  222. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/expressions/__init__.py +0 -0
  223. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
  224. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/expressions/probability_expression.py +0 -0
  225. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/funcs/__init__.py +0 -0
  226. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/funcs/covariance.py +0 -0
  227. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/funcs/expected_value.py +0 -0
  228. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/funcs/probability_function.py +0 -0
  229. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/funcs/variance.py +0 -0
  230. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/operator.py +0 -0
  231. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/protocols.py +0 -0
  232. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/supp.py +0 -0
  233. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/university/probability/transformation.py +0 -0
  234. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils/versioned_imports.py +0 -0
  235. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils.egg-info/dependency_links.txt +0 -0
  236. {danielutils-0.9.90 → danielutils-0.9.91}/danielutils.egg-info/top_level.txt +0 -0
  237. {danielutils-0.9.90 → danielutils-0.9.91}/setup.cfg +0 -0
  238. {danielutils-0.9.90 → danielutils-0.9.91}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: danielutils
3
- Version: 0.9.90
3
+ Version: 0.9.91
4
4
  Summary: A python utils library for things I find useful
5
5
  Author-email: danielnachumdev <danielnachumdev@gmail.com>
6
6
  License: MIT License
@@ -40,4 +40,5 @@ from .generators import *
40
40
  from .university import *
41
41
  from .mock_ import *
42
42
  from .context_managers import *
43
- from .file_specifications import *
43
+ from .file_specifications import *
44
+ from .testing import *
@@ -150,16 +150,15 @@ T = TypeVar("T")
150
150
 
151
151
  Supplier = Callable[[], T]
152
152
  Runnable = Supplier[None]
153
-
153
+ Consumer = Callable[[T], None]
154
154
  UnaryFunction = Callable[[U], T]
155
- UnaryOperator = UnaryFunction[T, T]
156
- Predicate = UnaryFunction[T, bool]
157
- Consumer = UnaryFunction[T, None]
155
+ UnaryOperator = Callable[[T], T]
156
+ Predicate = Callable[[T], bool]
158
157
 
159
158
  BinaryFunction = Callable[[A, B], T]
160
- BinaryOperator = BinaryFunction[T, T, T]
161
- Comparator = BinaryFunction[A, B, int]
162
- BinaryConsumer = BinaryFunction[T, T, None]
159
+ BinaryOperator = Callable[[T, T], T]
160
+ Comparator = Callable[[A, B], int]
161
+ BinaryConsumer = Callable[[T, T], None]
163
162
 
164
163
  __all__ = [
165
164
  "UnaryFunction",
@@ -26,12 +26,11 @@ class AsciiProgressBar(ProgressBar):
26
26
  total_ = len(iterator)
27
27
  if total is not None:
28
28
  total_ = total
29
- ProgressBar.__init__(self, total_, position)
29
+ ProgressBar.__init__(self, total_, position, desc=desc)
30
30
  self.iterator: Iterator = iterator
31
31
  self.pool: ProgressBarPool = pool
32
32
  self.num_bars: int = num_bars
33
33
  self.leave: bool = leave
34
- self.desc: str = desc
35
34
  self.initial_value: float = 0
36
35
  self.current_value: float = 0
37
36
  self.ncols: int = ncols
@@ -95,7 +94,7 @@ class AsciiProgressBar(ProgressBar):
95
94
  bprint(to_print)
96
95
  self.prev_print = to_print
97
96
 
98
- def update(self, amount: float = 1, refresh: bool = False):
97
+ def update(self, amount: float = 1, refresh: bool = False): # type:ignore
99
98
  self.prev_value = self.current_value
100
99
  self.current_value = min(
101
100
  self.current_value + amount, self.total) # type:ignore
@@ -20,7 +20,9 @@ class ProgressBar(ABC):
20
20
  DEFAULT_BAR_FORMAT = "{desc}: {percentage:3.0f}%|{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}"
21
21
 
22
22
  @abstractmethod
23
- def __init__(self, total, position: int, unit="it", bar_format: str = DEFAULT_BAR_FORMAT, **kwargs) -> None:
23
+ def __init__(self, total, position: int, unit="it", bar_format: str = DEFAULT_BAR_FORMAT, *, desc: str,
24
+ **kwargs) -> None:
25
+ self.desc: str = desc
24
26
  self.total = total
25
27
  self.position = position
26
28
  self.unit = unit
@@ -51,6 +53,9 @@ class ProgressBar(ABC):
51
53
  """A function to reset the progress-bar's progress
52
54
  """
53
55
 
56
+ @abstractmethod
57
+ def __iter__(self): ...
58
+
54
59
 
55
60
  try:
56
61
  from tqdm import tqdm
@@ -0,0 +1,3 @@
1
+ from .backoff_strategies import *
2
+ from .backoff_strategy import *
3
+ from .retry_executor import *
@@ -0,0 +1,3 @@
1
+ from .no_backoff import *
2
+ from .constant_backoff import *
3
+ from .exponential_backoff import *
@@ -0,0 +1,19 @@
1
+ from ..backoff_strategy import BackOffStrategy
2
+
3
+
4
+ class ConstantBackOffStrategy(BackOffStrategy):
5
+ """
6
+ will always back off exactly the same amount of time
7
+
8
+ :param delay: The amount of milliseconds to sleep
9
+ """
10
+
11
+ def __init__(self, delay: int) -> None:
12
+ if not delay >= 0:
13
+ raise ValueError("delay must be positive")
14
+ super().__init__(lambda: delay)
15
+
16
+
17
+ __all__ = [
18
+ "ConstantBackOffStrategy"
19
+ ]
@@ -0,0 +1,21 @@
1
+ from ..backoff_strategy import BackOffStrategy
2
+
3
+
4
+ class ExponentialBackOffStrategy(BackOffStrategy):
5
+ def __init__(self, initial: int, multiplier: float) -> None:
6
+ if not initial >= 0:
7
+ raise ValueError("initial must be positive")
8
+ if not multiplier >= 0:
9
+ raise ValueError("multiplier must be positive")
10
+ prev: float = 1.0
11
+
12
+ def inner() -> int:
13
+ nonlocal prev
14
+ return initial ** (prev := prev * multiplier)
15
+
16
+ super().__init__(inner)
17
+
18
+
19
+ __all__ = [
20
+ "ExponentialBackOffStrategy"
21
+ ]
@@ -0,0 +1,12 @@
1
+ from ..backoff_strategy import BackOffStrategy
2
+
3
+
4
+ class NoBackOffStrategy(BackOffStrategy):
5
+
6
+ def __init__(self) -> None:
7
+ super().__init__(lambda: 0)
8
+
9
+
10
+ __all__ = [
11
+ 'NoBackOffStrategy',
12
+ ]
@@ -0,0 +1,22 @@
1
+ from danielutils import Supplier
2
+
3
+
4
+ class BackOffStrategy:
5
+ """
6
+ A class to create a common abstraction for backoff strategies
7
+ """
8
+
9
+ def __init__(self, supp: Supplier[int]) -> None:
10
+ self._supp = supp
11
+
12
+ def get_backoff(self) -> int:
13
+ """
14
+
15
+ :return: amount of milliseconds to sleep
16
+ """
17
+ return self._supp()
18
+
19
+
20
+ __all__ = [
21
+ "BackOffStrategy"
22
+ ]
@@ -0,0 +1,37 @@
1
+ import time
2
+ from typing import Generic, TypeVar, Optional
3
+
4
+ from danielutils import Supplier, Consumer
5
+ from .backoff_strategies import ConstantBackOffStrategy
6
+
7
+ from .backoff_strategy import BackOffStrategy
8
+
9
+ T = TypeVar("T")
10
+
11
+
12
+ class RetryExecutor(Generic[T]):
13
+ def __init__(self, backoff_strategy: BackOffStrategy = ConstantBackOffStrategy(200)) -> None:
14
+ self._backoff_strategy = backoff_strategy
15
+
16
+ def execute(self, supp: Supplier[T], max_retries: int = 5,
17
+ exception_callback: Optional[Consumer[Exception]] = None) -> Optional[T]:
18
+
19
+ for i in range(max_retries):
20
+
21
+ try:
22
+ return supp()
23
+ except Exception as e:
24
+ if exception_callback:
25
+ exception_callback(e)
26
+
27
+ if i != max_retries - 1:
28
+ self._sleep()
29
+ return None
30
+
31
+ def _sleep(self) -> None:
32
+ time.sleep(self._backoff_strategy.get_backoff())
33
+
34
+
35
+ __all__ = [
36
+ "RetryExecutor",
37
+ ]
@@ -0,0 +1 @@
1
+ from .unittest_ import *
@@ -0,0 +1,2 @@
1
+ from .always_teardown_testcase import *
2
+ from .auto_cwd_testcase import *
@@ -0,0 +1,37 @@
1
+ import functools
2
+ import unittest
3
+ from typing import Optional, Callable
4
+ from unittest import TestResult
5
+
6
+
7
+ class AlwaysTeardownTestCase(unittest.TestCase):
8
+ """
9
+ SafeTestCase makes sure that tearDown / cleanup methods are always run when
10
+ They should be.
11
+ """
12
+
13
+ def run(self, result=None) -> Optional[TestResult]:
14
+ test_method = getattr(self, self._testMethodName)
15
+ wrapped_test = self._cleanup_wrapper(test_method, KeyboardInterrupt)
16
+ setattr(self, self._testMethodName, wrapped_test)
17
+
18
+ self.setUp = self._cleanup_wrapper(self.setUp, BaseException)
19
+
20
+ return super().run(result)
21
+
22
+ def _cleanup_wrapper(self, method: Callable, exception) -> Callable:
23
+ @functools.wraps(method)
24
+ def wrapper(*args, **kwargs):
25
+ try:
26
+ return method(*args, **kwargs)
27
+ except exception:
28
+ self.tearDown()
29
+ self.doCleanups()
30
+ raise
31
+
32
+ return wrapper
33
+
34
+
35
+ __all__ = [
36
+ "AlwaysTeardownTestCase"
37
+ ]
@@ -0,0 +1,49 @@
1
+ import functools
2
+ import os
3
+ import unittest
4
+ from typing import Optional, Callable
5
+
6
+ from danielutils import create_directory, get_current_working_directory, set_current_working_directory, delete_directory
7
+
8
+
9
+ def improved_setup(func: Callable) -> Callable:
10
+ @functools.wraps(func)
11
+ def wrapper(self):
12
+ self.test_folder = f"./{self.__class__.__name__}_test_folder"
13
+ create_directory(self.test_folder)
14
+ self.prev_cwd = get_current_working_directory()
15
+ set_current_working_directory(os.path.join(self.prev_cwd, self.test_folder))
16
+ if func is not None:
17
+ func(self)
18
+
19
+ return wrapper
20
+
21
+
22
+ def improved_teardown(func: Callable) -> Callable:
23
+ @functools.wraps(func)
24
+ def wrapper(self):
25
+ if func is not None:
26
+ func(self)
27
+ set_current_working_directory(self.prev_cwd)
28
+ delete_directory(self.test_folder)
29
+
30
+ return wrapper
31
+
32
+
33
+ class AutoCWDTestCase(unittest.TestCase):
34
+ @staticmethod
35
+ def _dummy():
36
+ pass
37
+
38
+ @classmethod
39
+ def __init_subclass__(cls, **kwargs):
40
+ dct = dict(cls.__dict__)
41
+ impl_setUp = dct.get("setUp", cls._dummy)
42
+ impl_tearDown = dct.get("tearDown", cls._dummy)
43
+ setattr(cls, "setUp", improved_setup(impl_setUp))
44
+ setattr(cls, "tearDown", improved_teardown(impl_tearDown))
45
+
46
+
47
+ __all__ = [
48
+ 'AutoCWDTestCase'
49
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: danielutils
3
- Version: 0.9.90
3
+ Version: 0.9.91
4
4
  Summary: A python utils library for things I find useful
5
5
  Author-email: danielnachumdev <danielnachumdev@gmail.com>
6
6
  License: MIT License
@@ -153,6 +153,13 @@ danielutils/reflection/interpreter/tracer.py
153
153
  danielutils/reflection/module/__init__.py
154
154
  danielutils/reflection/module/module_reflections.py
155
155
  danielutils/reflection/module/package_reflection.py
156
+ danielutils/retry_executor/__init__.py
157
+ danielutils/retry_executor/backoff_strategy.py
158
+ danielutils/retry_executor/retry_executor.py
159
+ danielutils/retry_executor/backoff_strategies/__init__.py
160
+ danielutils/retry_executor/backoff_strategies/constant_backoff.py
161
+ danielutils/retry_executor/backoff_strategies/exponential_backoff.py
162
+ danielutils/retry_executor/backoff_strategies/no_backoff.py
156
163
  danielutils/snippets/__init__.py
157
164
  danielutils/snippets/try_get.py
158
165
  danielutils/system/__init__.py
@@ -163,6 +170,10 @@ danielutils/system/windows/win32_ctime.py
163
170
  danielutils/system/windows/windows.py
164
171
  danielutils/system/windows/utils/__init__.py
165
172
  danielutils/system/windows/utils/filetime.py
173
+ danielutils/testing/__init__.py
174
+ danielutils/testing/unittest_/__init__.py
175
+ danielutils/testing/unittest_/always_teardown_testcase.py
176
+ danielutils/testing/unittest_/auto_cwd_testcase.py
166
177
  danielutils/university/__init__.py
167
178
  danielutils/university/computability_and_complexity/__init__.py
168
179
  danielutils/university/computability_and_complexity/discreate_finite_automaton.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "danielutils"
7
- version = "0.9.90"
7
+ version = "0.9.91"
8
8
  authors = [
9
9
  { name = "danielnachumdev", email = "danielnachumdev@gmail.com" },
10
10
  ]
File without changes
File without changes
File without changes