danielutils 1.0.31__tar.gz → 1.0.35__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 (267) hide show
  1. {danielutils-1.0.31/danielutils.egg-info → danielutils-1.0.35}/PKG-INFO +1 -1
  2. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/__init__.py +2 -1
  3. danielutils-1.0.35/danielutils/async_/__init__.py +4 -0
  4. danielutils-1.0.35/danielutils/async_/async_retry_executor_base.py +90 -0
  5. danielutils-1.0.35/danielutils/async_/async_worker_pool_base.py +65 -0
  6. danielutils-1.0.35/danielutils/async_/time_strategy.py +61 -0
  7. danielutils-1.0.35/danielutils/async_/utils.py +32 -0
  8. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/__init__.py +2 -1
  9. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/final.py +2 -0
  10. danielutils-1.0.35/danielutils/decorators/normalize_decorator.py +55 -0
  11. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/partition.py +1 -1
  12. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/class_info.py +11 -2
  13. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/function_info.py +6 -0
  14. {danielutils-1.0.31 → danielutils-1.0.35/danielutils.egg-info}/PKG-INFO +1 -1
  15. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils.egg-info/SOURCES.txt +6 -2
  16. {danielutils-1.0.31 → danielutils-1.0.35}/pyproject.toml +1 -1
  17. {danielutils-1.0.31 → danielutils-1.0.35}/LICENSE +0 -0
  18. {danielutils-1.0.31 → danielutils-1.0.35}/MANIFEST.in +0 -0
  19. {danielutils-1.0.31 → danielutils-1.0.35}/README.md +0 -0
  20. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/__init__.py +0 -0
  21. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/database/__init__.py +0 -0
  22. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/database/cached_database.py +0 -0
  23. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/database/database.py +0 -0
  24. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/database/redis_database.py +0 -0
  25. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
  26. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
  27. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/multiprogramming/worker.py +0 -0
  28. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
  29. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/abstractions/repl.py +0 -0
  30. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/aliases.py +0 -0
  31. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/__init__.py +0 -0
  32. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/counter.py +0 -0
  33. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/frange.py +0 -0
  34. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
  35. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
  36. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
  37. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
  38. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
  39. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
  40. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/colors.py +0 -0
  41. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/__init__.py +0 -0
  42. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/attr_context.py +0 -0
  43. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/multi_context.py +0 -0
  44. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/optional_context.py +0 -0
  45. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/state_context.py +0 -0
  46. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/context_managers/temporary_file.py +0 -0
  47. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/convenience.py +0 -0
  48. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/conversions/__init__.py +0 -0
  49. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/conversions/main_conversions.py +0 -0
  50. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
  51. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
  52. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
  53. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/custom_types.py +0 -0
  54. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/__init__.py +0 -0
  55. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/algorithms.py +0 -0
  56. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/comparer.py +0 -0
  57. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/default_dict.py +0 -0
  58. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/functions.py +0 -0
  59. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/graph/__init__.py +0 -0
  60. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/graph/binary_node.py +0 -0
  61. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/graph/graph.py +0 -0
  62. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/graph/multinode.py +0 -0
  63. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/graph/node.py +0 -0
  64. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/heap/__init__.py +0 -0
  65. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/heap/heap.py +0 -0
  66. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/heap/max_heap.py +0 -0
  67. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/heap/min_heap.py +0 -0
  68. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/queue/__init__.py +0 -0
  69. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/queue/atomic_queue.py +0 -0
  70. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/queue/priority_queue.py +0 -0
  71. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/queue/queue.py +0 -0
  72. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/stack.py +0 -0
  73. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/trees/__init__.py +0 -0
  74. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
  75. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/data_structures/trees/binary_tree.py +0 -0
  76. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/date.py +0 -0
  77. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/date_time.py +0 -0
  78. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/atomic.py +0 -0
  79. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/attach.py +0 -0
  80. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/chain_decorators.py +0 -0
  81. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/decorate_conditionally.py +0 -0
  82. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/delay_call.py +0 -0
  83. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/deprecate.py +0 -0
  84. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/limit_recursion.py +0 -0
  85. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/memo.py +0 -0
  86. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/overload.py +0 -0
  87. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/partially_implemented.py +0 -0
  88. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/processify.py +0 -0
  89. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/property.py +0 -0
  90. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/singleton.py +0 -0
  91. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/threadify.py +0 -0
  92. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/timeout.py +0 -0
  93. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/total_ordering.py +0 -0
  94. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/decorators/validate.py +0 -0
  95. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/exceptions.py +0 -0
  96. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/file_specifications/__init__.py +0 -0
  97. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/__init__.py +0 -0
  98. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/areoneof.py +0 -0
  99. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/check_foreach.py +0 -0
  100. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/factorial.py +0 -0
  101. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/flatten.py +0 -0
  102. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/foreach.py +0 -0
  103. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/isoftype.py +0 -0
  104. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/isoneof.py +0 -0
  105. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/multiloop.py +0 -0
  106. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/parallel_for.py +0 -0
  107. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/powerset.py +0 -0
  108. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/subseteq.py +0 -0
  109. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/functions/types_subseteq.py +0 -0
  110. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/generators/__init__.py +0 -0
  111. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/generators/conditional_generator.py +0 -0
  112. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/generators/generator_from_stream.py +0 -0
  113. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/generators/join_generators.py +0 -0
  114. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/internet.py +0 -0
  115. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/io_.py +0 -0
  116. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/java/__init__.py +0 -0
  117. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/java/interfaces/__init__.py +0 -0
  118. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/java/interfaces/comparable.py +0 -0
  119. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/java/java_interface.py +0 -0
  120. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/__init__.py +0 -0
  121. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/builtin_impls/__init__.py +0 -0
  122. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/builtin_impls/file_logger.py +0 -0
  123. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/builtin_impls/print_logger.py +0 -0
  124. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/log_level.py +0 -0
  125. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/logger.py +0 -0
  126. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/logging_/logger_strategy_impl_base.py +0 -0
  127. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/lombok/__init__.py +0 -0
  128. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/lombok/builder.py +0 -0
  129. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/math_/__init__.py +0 -0
  130. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/math_/constants.py +0 -0
  131. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/math_/functions.py +0 -0
  132. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/math_/math_print.py +0 -0
  133. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/math_/math_symbols.py +0 -0
  134. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/__init__.py +0 -0
  135. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/atomic_class_meta.py +0 -0
  136. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
  137. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/instance_cache_meta.py +0 -0
  138. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/interface.py +0 -0
  139. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/metaclasses/overload_meta.py +0 -0
  140. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/mock_/__init__.py +0 -0
  141. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/mock_/mock_database.py +0 -0
  142. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/mock_/mock_module.py +0 -0
  143. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/path.py +0 -0
  144. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/print_.py +0 -0
  145. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/progress_bar/__init__.py +0 -0
  146. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/progress_bar/ascii_progress_bar.py +0 -0
  147. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/progress_bar/progress_bar.py +0 -0
  148. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/progress_bar/progress_bar_pool.py +0 -0
  149. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/protocols/__init__.py +0 -0
  150. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/protocols/dictable.py +0 -0
  151. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/protocols/evaluable.py +0 -0
  152. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/protocols/serializable.py +0 -0
  153. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/py.typed +0 -0
  154. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/random_.py +0 -0
  155. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/__init__.py +0 -0
  156. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/argument_info.py +0 -0
  157. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/class_/__init__.py +0 -0
  158. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/class_/class_reflection.py +0 -0
  159. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/decoration_info.py +0 -0
  160. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/file/__init__.py +0 -0
  161. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/file/file_reflection.py +0 -0
  162. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/function/__init__.py +0 -0
  163. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/function/function_reflections.py +0 -0
  164. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/__init__.py +0 -0
  165. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/callstack.py +0 -0
  166. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/get_traceback.py +0 -0
  167. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/interpreter.py +0 -0
  168. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/is_debugging.py +0 -0
  169. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/os_.py +0 -0
  170. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/packages.py +0 -0
  171. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/python_version.py +0 -0
  172. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/signals.py +0 -0
  173. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/interpreter/tracer.py +0 -0
  174. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/module/__init__.py +0 -0
  175. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/module/module_reflections.py +0 -0
  176. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/reflection/module/package_reflection.py +0 -0
  177. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/__init__.py +0 -0
  178. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/__init__.py +0 -0
  179. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/constant_backoff.py +0 -0
  180. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/exponential_backoff.py +0 -0
  181. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/functional_backoff.py +0 -0
  182. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/linear_backoff.py +0 -0
  183. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/multiplicative_backoff.py +0 -0
  184. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategies/no_backoff.py +0 -0
  185. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/backoff_strategy.py +0 -0
  186. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/retry_executor/retry_executor.py +0 -0
  187. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/snippets/__init__.py +0 -0
  188. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/snippets/try_get.py +0 -0
  189. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/__init__.py +0 -0
  190. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/independent.py +0 -0
  191. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/layered_command.py +0 -0
  192. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/windows/__init__.py +0 -0
  193. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/windows/utils/__init__.py +0 -0
  194. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/windows/utils/filetime.py +0 -0
  195. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/windows/win32_ctime.py +0 -0
  196. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/system/windows/windows.py +0 -0
  197. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/testing/__init__.py +0 -0
  198. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/testing/unittest_/__init__.py +0 -0
  199. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/testing/unittest_/always_teardown_testcase.py +0 -0
  200. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/testing/unittest_/auto_cwd_testcase.py +0 -0
  201. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/text.py +0 -0
  202. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/time.py +0 -0
  203. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/__init__.py +0 -0
  204. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/__init__.py +0 -0
  205. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/discreate_finite_automaton.py +0 -0
  206. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/languages/__init__.py +0 -0
  207. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/languages/language.py +0 -0
  208. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/languages/sat.py +0 -0
  209. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/computability_and_complexity/turing_machine.py +0 -0
  210. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/databases/__init__.py +0 -0
  211. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/databases/all.py +0 -0
  212. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/__init__.py +0 -0
  213. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/__init__.py +0 -0
  214. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/encoding.py +0 -0
  215. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossless/__init__.py +0 -0
  216. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossless/huffman.py +0 -0
  217. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossless/lossless_encoding.py +0 -0
  218. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossless/lzw.py +0 -0
  219. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossless/run_length.py +0 -0
  220. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossy/__init__.py +0 -0
  221. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/encoding/lossy/lossy_encoding.py +0 -0
  222. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/__init__.py +0 -0
  223. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/gaussian.py +0 -0
  224. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/gradient.py +0 -0
  225. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/hough.py +0 -0
  226. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/laplacian.py +0 -0
  227. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/image_proccesing/tansformations/transformation.py +0 -0
  228. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/linear_algebra/__init__.py +0 -0
  229. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/linear_algebra/matrix.py +0 -0
  230. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/machine_learning/__init__.py +0 -0
  231. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/machine_learning/activation_functions/__init__.py +0 -0
  232. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/machine_learning/activation_functions/activation_function.py +0 -0
  233. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/machine_learning/activation_functions/relu.py +0 -0
  234. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/machine_learning/neuron.py +0 -0
  235. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/oop/__init__.py +0 -0
  236. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/oop/observer.py +0 -0
  237. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/oop/strategy.py +0 -0
  238. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/__init__.py +0 -0
  239. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
  240. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
  241. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
  242. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
  243. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
  244. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
  245. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
  246. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
  247. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
  248. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
  249. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
  250. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/distributions.py +0 -0
  251. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/expressions/__init__.py +0 -0
  252. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
  253. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/expressions/probability_expression.py +0 -0
  254. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/funcs/__init__.py +0 -0
  255. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/funcs/covariance.py +0 -0
  256. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/funcs/expected_value.py +0 -0
  257. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/funcs/probability_function.py +0 -0
  258. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/funcs/variance.py +0 -0
  259. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/operator.py +0 -0
  260. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/protocols.py +0 -0
  261. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/supp.py +0 -0
  262. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/university/probability/transformation.py +0 -0
  263. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils/versioned_imports.py +0 -0
  264. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils.egg-info/dependency_links.txt +0 -0
  265. {danielutils-1.0.31 → danielutils-1.0.35}/danielutils.egg-info/top_level.txt +0 -0
  266. {danielutils-1.0.31 → danielutils-1.0.35}/setup.cfg +0 -0
  267. {danielutils-1.0.31 → danielutils-1.0.35}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: danielutils
3
- Version: 1.0.31
3
+ Version: 1.0.35
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
@@ -46,4 +46,5 @@ from .retry_executor import *
46
46
  from .java import *
47
47
  from .random_ import *
48
48
  from .lombok import *
49
- from .logging_ import *
49
+ from .logging_ import *
50
+ from .async_ import *
@@ -0,0 +1,4 @@
1
+ from .async_worker_pool_base import *
2
+ from .async_worker_pool_base import *
3
+ from .time_strategy import *
4
+ from .utils import *
@@ -0,0 +1,90 @@
1
+ import asyncio
2
+ import functools
3
+ import json
4
+ from datetime import datetime
5
+ from typing import Literal, Optional, Any, Mapping, Iterable, Callable, Coroutine
6
+
7
+ from ..custom_types import Supplier
8
+ from ..decorators import normalize_decorator
9
+ from .time_strategy import LinearTimeStrategy, ConstantTimeStrategy
10
+ from ..versioned_imports import ParamSpec
11
+
12
+ P = ParamSpec("P")
13
+
14
+
15
+ class AsyncRetryExecutorBase:
16
+ def __init__(
17
+ self,
18
+ timeout_strategy: Supplier[float] = LinearTimeStrategy(30, 5),
19
+ delay_strategy: Supplier[float] = ConstantTimeStrategy(0)
20
+ ) -> None:
21
+ self.timeout_strategy = timeout_strategy
22
+ self.delay_strategy = delay_strategy
23
+
24
+ def is_transient(self, e: Exception) -> bool:
25
+ """
26
+ This function will return true if the exception that was raised at a specific attempt should be ignored and we should try again with respet to the amount of retries left
27
+ Args:
28
+ e: exception caught
29
+
30
+ Returns:
31
+ boolean
32
+ """
33
+ return False
34
+
35
+ async def execute(
36
+ self,
37
+ func: Callable[P, Coroutine],
38
+ *,
39
+ args: Optional[Iterable] = None,
40
+ kwargs: Optional[Mapping] = None,
41
+ max_tries: int = 5
42
+ ) -> Optional[Any]:
43
+ args = list(args) if args else []
44
+ kwargs = dict(kwargs) if kwargs else {}
45
+ for i in range(1, max_tries + 1):
46
+ timeout = self.timeout_strategy()
47
+ delay = self.delay_strategy()
48
+ try:
49
+ return await asyncio.wait_for(func(*args, **kwargs), timeout=timeout)
50
+ except Exception as e:
51
+ if self.is_transient(e):
52
+ self.warn(f"Failed attempt {i}/{max_tries}", function=func, args=args, kwargs=kwargs, exception=e,
53
+ timestamp=datetime.now().isoformat())
54
+ if i < max_tries - 1 and delay > 0:
55
+ await asyncio.sleep(delay)
56
+ else:
57
+ raise e
58
+ self.error("Failed all attempts", function=func, args=args, kwargs=kwargs, timestamp=datetime.now().isoformat())
59
+ raise RuntimeError(f"Failed all attempts")
60
+
61
+ def log(self, level: Literal["INFO", "WARNING", "ERROR"], message: str, **kwargs) -> None:
62
+ kwargs["level"] = level
63
+ kwargs["message"] = message
64
+ print(json.dumps(kwargs, default=str))
65
+
66
+ def info(self, message: str, **kwargs) -> None:
67
+ self.log("INFO", message, **kwargs)
68
+
69
+ def warn(self, message: str, **kwargs) -> None:
70
+ self.log("WARNING", message, **kwargs)
71
+
72
+ def error(self, message: str, **kwargs) -> None:
73
+ self.log("ERROR", message, **kwargs)
74
+
75
+
76
+ @normalize_decorator
77
+ def with_async_retry(func, *retry_executor_args, max_tries: int = 5, **retry_executor_kwargs):
78
+ retry_executor = AsyncRetryExecutorBase(*retry_executor_args, **retry_executor_kwargs)
79
+
80
+ @functools.wraps(func)
81
+ async def wrapper(*args, **kwargs):
82
+ return await retry_executor.execute(func, args=args, kwargs=kwargs, max_tries=max_tries)
83
+
84
+ return wrapper
85
+
86
+
87
+ __all__ = [
88
+ "AsyncRetryExecutorBase",
89
+ "with_async_retry"
90
+ ]
@@ -0,0 +1,65 @@
1
+ import asyncio
2
+ import json
3
+ from typing import Callable, Literal, Optional, Coroutine
4
+
5
+ from .async_retry_executor_base import AsyncRetryExecutorBase
6
+
7
+
8
+ class AsyncWorkerPoolBase:
9
+ def __init__(self, num_workers: int, retry_executor: Optional[AsyncRetryExecutorBase] = None) -> None:
10
+ self.num_workers = num_workers
11
+ self.queue = asyncio.Queue()
12
+ self.workers = []
13
+ self.retry_executor = retry_executor
14
+
15
+ async def worker(self, worker_id) -> None:
16
+ """Worker coroutine that continuously fetches and executes tasks from the queue."""
17
+ count = 0
18
+ while True:
19
+ task = await self.queue.get()
20
+ if task is None: # Sentinel value to shut down the worker
21
+ break
22
+ count += 1
23
+ func, args, kwargs = task
24
+ self.info(f"Worker {worker_id} started with task {count}")
25
+ if self.retry_executor:
26
+ await self.retry_executor.execute(func, args=args, kwargs=kwargs)
27
+ else:
28
+ await func(*args, **kwargs)
29
+ self.info(f"Worker {worker_id} finished with task {count}")
30
+ self.queue.task_done()
31
+ self.info(f"Worker {worker_id} done.")
32
+
33
+ async def start(self) -> None:
34
+ """Starts the worker pool."""
35
+ self.workers = [asyncio.create_task(self.worker(i + 1)) for i in range(self.num_workers)]
36
+
37
+ async def submit(self, func: Callable[..., Coroutine[None, None, None]], *args, **kwargs) -> None:
38
+ """Submit a new task to the queue."""
39
+ await self.queue.put((func, args, kwargs))
40
+
41
+ async def join(self) -> None:
42
+ """Stops the worker pool by waiting for all tasks to complete and shutting down workers."""
43
+ await self.queue.join() # Wait until all tasks are processed
44
+ for _ in range(self.num_workers):
45
+ await self.queue.put(None) # Send sentinel values to stop workers
46
+ await asyncio.gather(*self.workers) # Wait for workers to finish
47
+
48
+ def log(self, level: Literal["INFO", "WARNING", "ERROR"], message: str, **kwargs) -> None:
49
+ kwargs["level"] = level
50
+ kwargs["message"] = message
51
+ print(json.dumps(kwargs, default=str))
52
+
53
+ def info(self, message: str, **kwargs) -> None:
54
+ self.log("INFO", message, **kwargs)
55
+
56
+ def warn(self, message: str, **kwargs) -> None:
57
+ self.log("WARNING", message, **kwargs)
58
+
59
+ def error(self, message: str, **kwargs) -> None:
60
+ self.log("ERROR", message, **kwargs)
61
+
62
+
63
+ __all__ = [
64
+ "AsyncWorkerPoolBase",
65
+ ]
@@ -0,0 +1,61 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class TimeStrategy(ABC):
5
+ @abstractmethod
6
+ def next(self): ...
7
+
8
+ def __call__(self, *args, **kwargs):
9
+ return self.next()
10
+
11
+ @abstractmethod
12
+ def reset(self): ...
13
+
14
+
15
+ class ConstantTimeStrategy(TimeStrategy):
16
+ def __init__(self, timeout: float):
17
+ self.timeout = timeout
18
+
19
+ def next(self) -> float:
20
+ return self.timeout
21
+
22
+ def reset(self) -> None:
23
+ pass # No state to reset
24
+
25
+
26
+ class LinearTimeStrategy(TimeStrategy):
27
+ def __init__(self, base_timeout: float, step: float):
28
+ self.base_timeout = base_timeout
29
+ self.step = step
30
+ self.current_timeout = base_timeout
31
+
32
+ def next(self) -> float:
33
+ timeout = self.current_timeout
34
+ self.current_timeout += self.step
35
+ return timeout
36
+
37
+ def reset(self) -> None:
38
+ self.current_timeout = self.base_timeout
39
+
40
+
41
+ class MultiplicativeTimeStrategy(TimeStrategy):
42
+ def __init__(self, base_timeout: float, factor: float):
43
+ self.base_timeout = base_timeout
44
+ self.factor = factor
45
+ self.current_timeout = base_timeout
46
+
47
+ def next(self) -> float:
48
+ timeout = self.current_timeout
49
+ self.current_timeout *= self.factor
50
+ return timeout
51
+
52
+ def reset(self) -> None:
53
+ self.current_timeout = self.base_timeout
54
+
55
+
56
+ __all__ = [
57
+ "TimeStrategy",
58
+ "ConstantTimeStrategy",
59
+ "LinearTimeStrategy",
60
+ "MultiplicativeTimeStrategy"
61
+ ]
@@ -0,0 +1,32 @@
1
+ import asyncio
2
+ from asyncio import Task
3
+ from typing import List, Coroutine, Any, Tuple, Optional, Set
4
+
5
+
6
+ async def return_first(coros: List[Coroutine], timeout: Optional[int] = None) -> List[Tuple[int, Any]]:
7
+ tasks: List[Task] = [asyncio.create_task(coro) for coro in coros]
8
+ result: Tuple[Set[Task], Set[Task]] = await asyncio.wait(tasks, timeout=timeout,
9
+ return_when=asyncio.FIRST_COMPLETED)
10
+ done: Set[Task] = result[0]
11
+ # pending: Set[Task] = result[1]
12
+
13
+ res = []
14
+ for task in done:
15
+ res.append((tasks.index(task), task.result()))
16
+
17
+ return res
18
+
19
+
20
+ async def return_all(coros: List[Coroutine], timeout: Optional[int] = None) -> List[Any]:
21
+ tasks: List[Task] = [asyncio.create_task(coro) for coro in coros]
22
+ result: Tuple[Set[Task], Set[Task]] = await asyncio.wait(tasks, timeout=timeout,
23
+ return_when=asyncio.ALL_COMPLETED)
24
+ done: Set[Task] = result[0]
25
+
26
+ return [task.result() for task in done]
27
+
28
+
29
+ __all__ = [
30
+ "return_first",
31
+ "return_all",
32
+ ]
@@ -14,4 +14,5 @@ from .deprecate import *
14
14
  from .processify import *
15
15
  from .singleton import *
16
16
  from .total_ordering import *
17
- from .final import *
17
+ from .final import *
18
+ from .normalize_decorator import *
@@ -7,6 +7,7 @@ def final(cls: type) -> type:
7
7
  Returns:
8
8
  marked class
9
9
  """
10
+
10
11
  def __init__subclass__(*args, **kwargs):
11
12
  raise TypeError(f"'{cls.__qualname__}' is final. Can't create subclasses")
12
13
 
@@ -18,6 +19,7 @@ class Final:
18
19
  """
19
20
  A parent class to make direct child a Final class. will add expected behaviour.
20
21
  """
22
+
21
23
  def __new__(cls, *args, **kwargs):
22
24
  if cls is Final:
23
25
  raise TypeError("Can't instantiate 'Final'")
@@ -0,0 +1,55 @@
1
+ import functools
2
+ from typing import Callable, Any
3
+
4
+
5
+ def normalize_decorator(decorator: Callable[..., Any]) -> Callable[..., Any]:
6
+ """
7
+
8
+ Args:
9
+ decorator: a function that is used as a decorator and you want to be used with "normalized" arguments
10
+
11
+ Returns:
12
+ object:
13
+ The normalized version of the decorator
14
+
15
+ Example:
16
+
17
+ Do
18
+ ```python
19
+ @normalize_decorator
20
+ def validate(func, strict:bool = False):
21
+ @functools.wraps(func)
22
+ def wrapper(*args, **kwargs):
23
+ # do stuff
24
+ return func(*args, **kwargs)
25
+ return wrapper
26
+ ```
27
+
28
+ instead of
29
+ ```python
30
+ def validate(strict_or_func: Optional[Union[bool,Callable]] = None):
31
+ strict = False # default value
32
+ def deco(func):
33
+ @functools.wraps(func)
34
+ def wrapper(*args, **kwargs):
35
+ # do stuff
36
+ return func(*args, **kwargs)
37
+ return wrapper
38
+ if isinstance(strict_or_func, bool):
39
+ strict = strict_or_func
40
+ return deco
41
+ return deco(strict_or_func)
42
+ """
43
+ @functools.wraps(decorator)
44
+ def wrapper(*args, **kwargs):
45
+ if args and callable(args[0]):
46
+ return decorator(args[0], *args[1:], **kwargs)
47
+ else:
48
+ return lambda func: decorator(func, *args, **kwargs)
49
+
50
+ return wrapper
51
+
52
+
53
+ __all__ = [
54
+ "normalize_decorator",
55
+ ]
@@ -4,7 +4,7 @@ from typing import List, Generator, Tuple, Union
4
4
  def partitions(n: int, k: int) -> Generator[List[int], None, None]:
5
5
  from ..decorators import memo_generator
6
6
 
7
- @memo_generator()
7
+ @memo_generator
8
8
  def helper(n: int, target_sum: int, current_sum: int, topLevel: int, arr: Union[List[int], Tuple[int]]) -> \
9
9
  Generator[List[int], None, None]:
10
10
  arr = list(arr)
@@ -1,4 +1,5 @@
1
1
  import inspect
2
+ import json
2
3
  import re
3
4
  from typing import Optional, List, Iterable, Type, TypeVar, Generic, get_origin
4
5
  from .function_info import FunctionInfo
@@ -67,7 +68,15 @@ class ClassInfo:
67
68
  self._functions.append(FunctionInfo(obj, self._cls))
68
69
 
69
70
  def __str__(self) -> str:
70
- return f"{self.__class__.__name__}(name=\"{self.name}\", bases={self.bases}, decorations={self.decorations}, static_methods={self.static_methods}, class_methods={self.class_methods}, isntance_methods={self.instance_methods})"
71
+ body = json.dumps({
72
+ "name": self.name,
73
+ "bases": self.bases,
74
+ "decorations": self.decorations,
75
+ "static_methods": self.static_methods,
76
+ "class_methods": self.class_methods,
77
+ "instance_methods": self.instance_methods
78
+ }, default=str, indent=4)[1:-1]
79
+ return f"{self.__class__.__name__}({body})"
71
80
 
72
81
  def __repr__(self):
73
82
  return f"{self.__class__.__name__}(name=\"{self.name}\")"
@@ -97,7 +106,7 @@ class ClassInfo:
97
106
  return sorted(filter(lambda f: f.is_instance_method, self._functions), key=lambda f: f.name)
98
107
 
99
108
  @property
100
- def inherited_methods(self)->Iterable[FunctionInfo]:
109
+ def inherited_methods(self) -> Iterable[FunctionInfo]:
101
110
  return sorted(filter(lambda f: f.is_inherited, self._functions), key=lambda f: f.name)
102
111
 
103
112
  @property
@@ -1,4 +1,5 @@
1
1
  import inspect
2
+ import json
2
3
  import re
3
4
  from typing import Type, Optional, List, Callable
4
5
  from .decoration_info import DecorationInfo
@@ -46,6 +47,11 @@ class FunctionInfo:
46
47
  self._return_type = return_type
47
48
 
48
49
  def __str__(self) -> str:
50
+ # body = json.dumps({
51
+ # "name": self.name,
52
+ # "decorators": self.decorators,
53
+ # "arguments": self.arguments
54
+ # }, default=str, indent=4)
49
55
  return f"{self.__class__.__name__}(name=\"{self.name}\", decorators={self.decorators}, arguments={self.arguments})"
50
56
 
51
57
  def __repr__(self) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: danielutils
3
- Version: 1.0.31
3
+ Version: 1.0.35
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
@@ -3,8 +3,6 @@ MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
5
  setup.py
6
- ./LICENSE
7
- ./README.md
8
6
  danielutils/__init__.py
9
7
  danielutils/aliases.py
10
8
  danielutils/colors.py
@@ -36,6 +34,11 @@ danielutils/abstractions/multiprogramming/__init__.py
36
34
  danielutils/abstractions/multiprogramming/multi_id.py
37
35
  danielutils/abstractions/multiprogramming/worker.py
38
36
  danielutils/abstractions/multiprogramming/worker_pool.py
37
+ danielutils/async_/__init__.py
38
+ danielutils/async_/async_retry_executor_base.py
39
+ danielutils/async_/async_worker_pool_base.py
40
+ danielutils/async_/time_strategy.py
41
+ danielutils/async_/utils.py
39
42
  danielutils/better_builtins/__init__.py
40
43
  danielutils/better_builtins/counter.py
41
44
  danielutils/better_builtins/frange.py
@@ -88,6 +91,7 @@ danielutils/decorators/deprecate.py
88
91
  danielutils/decorators/final.py
89
92
  danielutils/decorators/limit_recursion.py
90
93
  danielutils/decorators/memo.py
94
+ danielutils/decorators/normalize_decorator.py
91
95
  danielutils/decorators/overload.py
92
96
  danielutils/decorators/partially_implemented.py
93
97
  danielutils/decorators/processify.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "danielutils"
7
- version = "1.0.31"
7
+ version = "1.0.35"
8
8
  authors = [
9
9
  { name = "danielnachumdev", email = "danielnachumdev@gmail.com" },
10
10
  ]
File without changes
File without changes
File without changes