danielutils 1.1.1__tar.gz → 1.1.2__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 (284) hide show
  1. {danielutils-1.1.1/danielutils.egg-info → danielutils-1.1.2}/PKG-INFO +1 -1
  2. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/__init__.py +0 -1
  3. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/argument_info.py +5 -1
  4. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/class_info.py +187 -159
  5. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/decorator_info.py +1 -1
  6. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/file_info.py +1180 -1163
  7. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/function_info.py +518 -495
  8. {danielutils-1.1.1 → danielutils-1.1.2/danielutils.egg-info}/PKG-INFO +1 -1
  9. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/SOURCES.txt +0 -2
  10. {danielutils-1.1.1 → danielutils-1.1.2}/pyproject.toml +1 -1
  11. danielutils-1.1.1/danielutils/reflection/class_/__init__.py +0 -1
  12. danielutils-1.1.1/danielutils/reflection/class_/class_reflection.py +0 -252
  13. {danielutils-1.1.1 → danielutils-1.1.2}/LICENSE +0 -0
  14. {danielutils-1.1.1 → danielutils-1.1.2}/MANIFEST.in +0 -0
  15. {danielutils-1.1.1 → danielutils-1.1.2}/README.md +0 -0
  16. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/__init__.py +0 -0
  17. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/__init__.py +0 -0
  18. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/__init__.py +0 -0
  19. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database.py +0 -0
  20. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_definitions.py +0 -0
  21. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_exceptions.py +0 -0
  22. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_factory.py +0 -0
  23. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_initializer.py +0 -0
  24. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/database_models.py +0 -0
  25. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/dependencies.py +0 -0
  26. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/__init__.py +0 -0
  27. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/in_memory_database.py +0 -0
  28. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/persistent_in_memory_database.py +0 -0
  29. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/redis_database.py +0 -0
  30. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/db/implementations/sqlite_database.py +0 -0
  31. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
  32. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
  33. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/worker.py +0 -0
  34. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
  35. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/abstractions/repl.py +0 -0
  36. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/aliases.py +0 -0
  37. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/__init__.py +0 -0
  38. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_cmd.py +0 -0
  39. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_command.py +0 -0
  40. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_layered_command.py +0 -0
  41. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_retry_executor.py +0 -0
  42. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/async_worker_pool.py +0 -0
  43. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/time_strategy.py +0 -0
  44. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/async_/utils.py +0 -0
  45. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/__init__.py +0 -0
  46. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/counter.py +0 -0
  47. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/frange.py +0 -0
  48. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
  49. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
  50. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
  51. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
  52. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
  53. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
  54. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/colors.py +0 -0
  55. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/__init__.py +0 -0
  56. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/attr_context.py +0 -0
  57. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/multi_context.py +0 -0
  58. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/optional_context.py +0 -0
  59. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/state_context.py +0 -0
  60. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/context_managers/temporary_file.py +0 -0
  61. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/convenience.py +0 -0
  62. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/__init__.py +0 -0
  63. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/main_conversions.py +0 -0
  64. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
  65. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
  66. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
  67. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/custom_types.py +0 -0
  68. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/__init__.py +0 -0
  69. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/algorithms.py +0 -0
  70. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/comparer.py +0 -0
  71. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/default_dict.py +0 -0
  72. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/functions.py +0 -0
  73. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/__init__.py +0 -0
  74. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/binary_node.py +0 -0
  75. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/graph.py +0 -0
  76. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/multinode.py +0 -0
  77. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/graph/node.py +0 -0
  78. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/__init__.py +0 -0
  79. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/heap.py +0 -0
  80. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/max_heap.py +0 -0
  81. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/heap/min_heap.py +0 -0
  82. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/__init__.py +0 -0
  83. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/atomic_queue.py +0 -0
  84. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/priority_queue.py +0 -0
  85. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/queue/queue.py +0 -0
  86. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/stack.py +0 -0
  87. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/__init__.py +0 -0
  88. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
  89. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/data_structures/trees/binary_tree.py +0 -0
  90. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/date.py +0 -0
  91. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/date_time.py +0 -0
  92. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/__init__.py +0 -0
  93. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/atomic.py +0 -0
  94. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/attach.py +0 -0
  95. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/chain_decorators.py +0 -0
  96. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/decorate_conditionally.py +0 -0
  97. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/delay_call.py +0 -0
  98. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/deprecate.py +0 -0
  99. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/final.py +0 -0
  100. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/limit_recursion.py +0 -0
  101. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/memo.py +0 -0
  102. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/normalize_decorator.py +0 -0
  103. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/overload.py +0 -0
  104. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/partially_implemented.py +0 -0
  105. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/processify.py +0 -0
  106. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/property.py +0 -0
  107. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/singleton.py +0 -0
  108. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/threadify.py +0 -0
  109. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/timeout.py +0 -0
  110. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/total_ordering.py +0 -0
  111. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/decorators/validate.py +0 -0
  112. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/exceptions.py +0 -0
  113. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/__init__.py +0 -0
  114. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/areoneof.py +0 -0
  115. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/check_foreach.py +0 -0
  116. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/factorial.py +0 -0
  117. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/flatten.py +0 -0
  118. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/foreach.py +0 -0
  119. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/isoftype.py +0 -0
  120. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/isoneof.py +0 -0
  121. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/multiloop.py +0 -0
  122. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/parallel_for.py +0 -0
  123. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/partition.py +0 -0
  124. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/powerset.py +0 -0
  125. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/subseteq.py +0 -0
  126. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/functions/types_subseteq.py +0 -0
  127. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/__init__.py +0 -0
  128. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/conditional_generator.py +0 -0
  129. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/generator_from_stream.py +0 -0
  130. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/generators/join_generators.py +0 -0
  131. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/internet.py +0 -0
  132. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/io_.py +0 -0
  133. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/__init__.py +0 -0
  134. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/interfaces/__init__.py +0 -0
  135. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/interfaces/comparable.py +0 -0
  136. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/java/java_interface.py +0 -0
  137. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/__init__.py +0 -0
  138. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/__init__.py +0 -0
  139. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/__init__.py +0 -0
  140. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/file_logger.py +0 -0
  141. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/builtin_impls/print_logger.py +0 -0
  142. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/log_level.py +0 -0
  143. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/logger.py +0 -0
  144. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/_impl/logger_strategy_impl_base.py +0 -0
  145. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/logging_/utils.py +0 -0
  146. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/lombok/__init__.py +0 -0
  147. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/lombok/builder.py +0 -0
  148. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/__init__.py +0 -0
  149. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/constants.py +0 -0
  150. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/functions.py +0 -0
  151. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/math_print.py +0 -0
  152. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/math_/math_symbols.py +0 -0
  153. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/__init__.py +0 -0
  154. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/atomic_class_meta.py +0 -0
  155. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
  156. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/instance_cache_meta.py +0 -0
  157. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/interface.py +0 -0
  158. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/metaclasses/overload_meta.py +0 -0
  159. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/mock_/__init__.py +0 -0
  160. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/mock_/mock_module.py +0 -0
  161. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/path.py +0 -0
  162. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/print_.py +0 -0
  163. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/__init__.py +0 -0
  164. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/ascii_progress_bar.py +0 -0
  165. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/progress_bar.py +0 -0
  166. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/progress_bar/progress_bar_pool.py +0 -0
  167. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/__init__.py +0 -0
  168. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/dictable.py +0 -0
  169. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/evaluable.py +0 -0
  170. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/protocols/serializable.py +0 -0
  171. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/py.typed +0 -0
  172. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/random_.py +0 -0
  173. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/file/__init__.py +0 -0
  174. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/file/file_reflection.py +0 -0
  175. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/function/__init__.py +0 -0
  176. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/function/function_reflections.py +0 -0
  177. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/__init__.py +0 -0
  178. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/folder_info.py +0 -0
  179. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/info_classes/import_info.py +0 -0
  180. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/__init__.py +0 -0
  181. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/callstack.py +0 -0
  182. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/get_traceback.py +0 -0
  183. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/interpreter.py +0 -0
  184. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/is_debugging.py +0 -0
  185. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/os_.py +0 -0
  186. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/packages.py +0 -0
  187. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/python_version.py +0 -0
  188. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/signals.py +0 -0
  189. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/interpreter/tracer.py +0 -0
  190. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/__init__.py +0 -0
  191. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/lazy_module.py +0 -0
  192. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/module_reflections.py +0 -0
  193. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/reflection/module/package_reflection.py +0 -0
  194. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/__init__.py +0 -0
  195. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/__init__.py +0 -0
  196. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/constant_backoff.py +0 -0
  197. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/exponential_backoff.py +0 -0
  198. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/functional_backoff.py +0 -0
  199. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/linear_backoff.py +0 -0
  200. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/multiplicative_backoff.py +0 -0
  201. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategies/no_backoff.py +0 -0
  202. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/backoff_strategy.py +0 -0
  203. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/retry_executor/retry_executor.py +0 -0
  204. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/snippets/__init__.py +0 -0
  205. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/snippets/try_get.py +0 -0
  206. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/__init__.py +0 -0
  207. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/independent.py +0 -0
  208. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/layered_command.py +0 -0
  209. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/__init__.py +0 -0
  210. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/utils/__init__.py +0 -0
  211. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/utils/filetime.py +0 -0
  212. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/win32_ctime.py +0 -0
  213. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/system/windows/windows.py +0 -0
  214. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/__init__.py +0 -0
  215. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/__init__.py +0 -0
  216. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/always_teardown_testcase.py +0 -0
  217. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/testing/unittest_/auto_cwd_testcase.py +0 -0
  218. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/text.py +0 -0
  219. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/time.py +0 -0
  220. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/__init__.py +0 -0
  221. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/__init__.py +0 -0
  222. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/discreate_finite_automaton.py +0 -0
  223. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/__init__.py +0 -0
  224. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/language.py +0 -0
  225. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/languages/sat.py +0 -0
  226. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/computability_and_complexity/turing_machine.py +0 -0
  227. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/databases/__init__.py +0 -0
  228. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/databases/all.py +0 -0
  229. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/__init__.py +0 -0
  230. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/__init__.py +0 -0
  231. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/encoding.py +0 -0
  232. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/__init__.py +0 -0
  233. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/huffman.py +0 -0
  234. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/lossless_encoding.py +0 -0
  235. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/lzw.py +0 -0
  236. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossless/run_length.py +0 -0
  237. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossy/__init__.py +0 -0
  238. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/encoding/lossy/lossy_encoding.py +0 -0
  239. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/__init__.py +0 -0
  240. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/gaussian.py +0 -0
  241. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/gradient.py +0 -0
  242. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/hough.py +0 -0
  243. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/laplacian.py +0 -0
  244. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/image_proccesing/tansformations/transformation.py +0 -0
  245. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/linear_algebra/__init__.py +0 -0
  246. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/linear_algebra/matrix.py +0 -0
  247. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/__init__.py +0 -0
  248. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/__init__.py +0 -0
  249. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/activation_function.py +0 -0
  250. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/activation_functions/relu.py +0 -0
  251. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/machine_learning/neuron.py +0 -0
  252. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/__init__.py +0 -0
  253. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/observer.py +0 -0
  254. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/oop/strategy.py +0 -0
  255. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/__init__.py +0 -0
  256. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
  257. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
  258. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
  259. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
  260. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
  261. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
  262. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
  263. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
  264. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
  265. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
  266. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
  267. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/distributions.py +0 -0
  268. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/__init__.py +0 -0
  269. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
  270. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/expressions/probability_expression.py +0 -0
  271. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/__init__.py +0 -0
  272. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/covariance.py +0 -0
  273. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/expected_value.py +0 -0
  274. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/probability_function.py +0 -0
  275. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/funcs/variance.py +0 -0
  276. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/operator.py +0 -0
  277. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/protocols.py +0 -0
  278. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/supp.py +0 -0
  279. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/university/probability/transformation.py +0 -0
  280. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils/versioned_imports.py +0 -0
  281. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/dependency_links.txt +0 -0
  282. {danielutils-1.1.1 → danielutils-1.1.2}/danielutils.egg-info/top_level.txt +0 -0
  283. {danielutils-1.1.1 → danielutils-1.1.2}/setup.cfg +0 -0
  284. {danielutils-1.1.1 → danielutils-1.1.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: danielutils
3
- Version: 1.1.1
3
+ Version: 1.1.2
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
@@ -2,5 +2,4 @@ from .interpreter import * # this has to be first, the order matters!
2
2
  from .file import *
3
3
  from .function import *
4
4
  from .info_classes import *
5
- from .class_ import *
6
5
  from .module import *
@@ -77,9 +77,10 @@ class ArgumentInfo:
77
77
  kwargs, args, kwarg_only, pname, parameters, name, type, default_value = m.groups()
78
78
  type = None if type is None else type.strip()
79
79
  default_value = None if default_value is None else default_value.strip()
80
+
80
81
  return ArgumentInfo(
81
82
  name=name or pname or (args.strip("*") if args else None) or (
82
- kwargs.strip("*") if kwargs else None) or (kwarg_only.strip("/") if kwarg_only else None) or None,
83
+ kwargs.strip("*") if kwargs else None) or (kwarg_only if kwarg_only else None) or None,
83
84
  type=type,
84
85
  default=default_value,
85
86
  is_kwargs=kwargs is not None,
@@ -111,6 +112,9 @@ class ArgumentInfo:
111
112
  res = []
112
113
  for start, end in zip(indices[:-1], indices[1:]):
113
114
  substr = string[start + 1:end].strip()
115
+ # Skip standalone * (keyword-only separator)
116
+ if substr == "*":
117
+ continue
114
118
  res.append(ArgumentInfo._parse_one(substr))
115
119
  return res
116
120
 
@@ -1,159 +1,187 @@
1
- import logging
2
- import inspect
3
- import json
4
- import re
5
- from typing import List, Iterable, Type, TypeVar, Generic, get_origin
6
- from .function_info import FunctionInfo
7
- from .decorator_info import DecoratorInfo
8
- from .argument_info import ArgumentInfo
9
- from ...functions import isoftype
10
- from ...logging_.utils import get_logger
11
-
12
- logger = get_logger(__name__)
13
-
14
- T = TypeVar("T")
15
-
16
-
17
- class _A(Generic[T]):
18
- ...
19
-
20
-
21
- _GenericAlias = type(_A[int])
22
-
23
- del T, _A
24
-
25
-
26
- class ClassInfo:
27
- CLASS_DEFINITION_REGEX: re.Pattern = re.compile(
28
- r"(?P<decorations>[\s\S]*)?(^)?class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)", re.MULTILINE)
29
-
30
- # r"(?P<decorations>[\s\S]*)?^class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)"
31
-
32
- def __init__(self, cls: Type) -> None:
33
- logger.debug("Creating ClassInfo for: %s", cls)
34
- if isoftype(cls, _GenericAlias): # type:ignore
35
- logger.debug("Converting generic alias to origin type")
36
- cls = get_origin(cls) # type:ignore
37
- if not inspect.isclass(cls):
38
- error_msg = f"'{cls.__name__}' is not a class"
39
- logger.error("ClassInfo creation failed: %s", error_msg)
40
- raise TypeError(error_msg)
41
- self._cls = cls
42
- self._src_code: str = ""
43
- self._name: str = ""
44
- self._bases: List[ArgumentInfo] = []
45
- self._functions: List[FunctionInfo] = []
46
- self._decorations: List[DecoratorInfo] = []
47
- logger.debug("Parsing source code for class: %s", cls.__name__)
48
- self._parse_src_code()
49
- logger.info("ClassInfo created successfully for: %s", cls.__name__)
50
-
51
- def _parse_src_code(self) -> None:
52
- logger.debug("Parsing source code")
53
- self._src_code = inspect.getsource(self._cls)
54
- m = ClassInfo.CLASS_DEFINITION_REGEX.match(self._src_code)
55
- if m is None:
56
- logger.error("Failed to match class definition regex")
57
- raise SyntaxError()
58
- decorators, name, bases, _ = m.groupdict().values()
59
- logger.debug("Parsed class name: %s, bases: %s", name, bases)
60
- self._name = name
61
- self._bases = ArgumentInfo.from_str(bases)
62
- logger.debug("Parsed %s base classes", len(self._bases))
63
- self._parse_body()
64
-
65
- if decorators is not None:
66
- logger.debug("Parsing %s decorators", len(decorators.strip().splitlines()))
67
- for substr in decorators.strip().splitlines():
68
- self._decorations.append(
69
- DecoratorInfo.from_str(substr.strip()))
70
- logger.debug("Parsed %s decorators", len(self._decorations))
71
-
72
- def _parse_body(self) -> None:
73
- for attr in dir(self._cls):
74
- obj = getattr(self._cls, attr, None)
75
- if inspect.isbuiltin(obj):
76
- continue
77
- try:
78
- if inspect.isroutine(obj):
79
- inspect.getsource(obj)
80
- elif inspect.isdatadescriptor(obj):
81
- inspect.getsource(obj.fget) # type:ignore
82
- else:
83
- continue
84
- except:
85
- continue
86
-
87
- try:
88
- self._functions.append(FunctionInfo(
89
- obj, self._cls)) # type: ignore
90
- except Exception as e:
91
- raise Exception(
92
- f"Error parsing function '{attr}' of class '{self._name}': {e}", e) from e
93
-
94
- def __str__(self) -> str:
95
- body = json.dumps({
96
- "name": self.name,
97
- "bases": self.bases,
98
- "decorations": self.decorations,
99
- "static_methods": self.static_methods,
100
- "class_methods": self.class_methods,
101
- "instance_methods": self.instance_methods
102
- }, default=str, indent=4)[1:-1]
103
- return f"{self.__class__.__name__}({body})"
104
-
105
- def __repr__(self):
106
- return f"{self.__class__.__name__}(name=\"{self.name}\")"
107
-
108
- @property
109
- def name(self) -> str:
110
- return self._name
111
-
112
- @property
113
- def decorations(self) -> List[DecoratorInfo]:
114
- return self._decorations
115
-
116
- @property
117
- def bases(self) -> List[ArgumentInfo]:
118
- return self._bases
119
-
120
- @property
121
- def static_methods(self) -> Iterable[FunctionInfo]:
122
- return sorted(filter(lambda f: f.is_static_method, self._functions), key=lambda f: f.name)
123
-
124
- @property
125
- def class_methods(self) -> Iterable[FunctionInfo]:
126
- return sorted(filter(lambda f: f.is_class_method, self._functions), key=lambda f: f.name)
127
-
128
- @property
129
- def instance_methods(self) -> Iterable[FunctionInfo]:
130
- return sorted(filter(lambda f: f.is_instance_method, self._functions), key=lambda f: f.name)
131
-
132
- @property
133
- def inherited_methods(self) -> Iterable[FunctionInfo]:
134
- return sorted(filter(lambda f: f.is_inherited, self._functions), key=lambda f: f.name)
135
-
136
- @property
137
- def abstract_methods(self) -> Iterable[FunctionInfo]:
138
- return sorted(filter(lambda f: f.is_abstract, self._functions), key=lambda f: f.name)
139
-
140
- @property
141
- def functions(self) -> List[FunctionInfo]:
142
- return self._functions
143
-
144
- @property
145
- def properties(self):
146
- pass
147
-
148
- @property
149
- def instance_properties(self):
150
- pass
151
-
152
- @property
153
- def class_properties(self):
154
- pass
155
-
156
-
157
- __all__ = [
158
- "ClassInfo"
159
- ]
1
+ import logging
2
+ import inspect
3
+ import json
4
+ import re
5
+ from typing import List, Iterable, Type, TypeVar, Generic, get_origin
6
+ from .function_info import FunctionInfo
7
+ from .decorator_info import DecoratorInfo
8
+ from .argument_info import ArgumentInfo
9
+
10
+ from ...logging_.utils import get_logger
11
+
12
+ logger = get_logger(__name__)
13
+
14
+ T = TypeVar("T")
15
+
16
+
17
+ class _A(Generic[T]):
18
+ ...
19
+
20
+
21
+ _GenericAlias = type(_A[int])
22
+
23
+ del T, _A
24
+
25
+
26
+ class ClassInfo:
27
+ CLASS_DEFINITION_REGEX: re.Pattern = re.compile(
28
+ r"(?P<decorations>[\s\S]*)?(^)?class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)", re.MULTILINE)
29
+
30
+ # r"(?P<decorations>[\s\S]*)?^class (?P<name>\w[\w\d]*)(?:\((?P<bases>.*)\))?:(?P<body>[\s\S]+)"
31
+
32
+ def __init__(self, cls: Type) -> None:
33
+ logger.debug("Creating ClassInfo for: %s", cls)
34
+ if isinstance(cls, _GenericAlias):
35
+ logger.debug("Converting generic alias to origin type")
36
+ cls = get_origin(cls) # type:ignore
37
+ if not inspect.isclass(cls):
38
+ error_msg = f"'{getattr(cls, '__name__', type(cls).__name__)}' is not a class"
39
+ logger.error("ClassInfo creation failed: %s", error_msg)
40
+ raise TypeError(error_msg)
41
+ self._cls = cls
42
+ self._src_code: str = ""
43
+ self._name: str = ""
44
+ self._bases: List[ArgumentInfo] = []
45
+ self._functions: List[FunctionInfo] = []
46
+ self._decorations: List[DecoratorInfo] = []
47
+ logger.debug("Parsing source code for class: %s", cls.__name__)
48
+ self._parse_src_code()
49
+ logger.info("ClassInfo created successfully for: %s", cls.__name__)
50
+
51
+ def _parse_src_code(self) -> None:
52
+ logger.debug("Parsing source code")
53
+ try:
54
+ self._src_code = inspect.getsource(self._cls)
55
+ except (OSError, TypeError) as e:
56
+ logger.warning(
57
+ "Source code not available for class: %s - %s", self._cls.__name__, e)
58
+ self._src_code = ""
59
+ # Fall back to runtime introspection
60
+ self._name = self._cls.__name__
61
+ self._bases = []
62
+ self._parse_body()
63
+ return
64
+
65
+ m = ClassInfo.CLASS_DEFINITION_REGEX.match(self._src_code)
66
+ if m is None:
67
+ logger.warning(
68
+ "Failed to match class definition regex, falling back to runtime introspection")
69
+ # Fall back to runtime introspection
70
+ self._name = self._cls.__name__
71
+ self._bases = []
72
+ self._parse_body()
73
+ return
74
+
75
+ decorators, name, bases, _ = m.groupdict().values()
76
+ logger.debug("Parsed class name: %s, bases: %s", name, bases)
77
+ self._name = name
78
+ self._bases = ArgumentInfo.from_str(bases)
79
+ logger.debug("Parsed %s base classes", len(self._bases))
80
+ self._parse_body()
81
+
82
+ if decorators is not None:
83
+ logger.debug("Parsing %s decorators", len(
84
+ decorators.strip().splitlines()))
85
+ for substr in decorators.strip().splitlines():
86
+ try:
87
+ self._decorations.append(
88
+ DecoratorInfo.from_str(substr.strip()))
89
+ except ValueError as e:
90
+ logger.warning(
91
+ "Failed to parse decorator '%s': %s", substr.strip(), e)
92
+ # Skip invalid decorators
93
+ continue
94
+ logger.debug("Parsed %s decorators", len(self._decorations))
95
+
96
+ def _parse_body(self) -> None:
97
+ for attr in dir(self._cls):
98
+ obj = getattr(self._cls, attr, None)
99
+ if inspect.isbuiltin(obj):
100
+ continue
101
+ try:
102
+ if inspect.isroutine(obj):
103
+ inspect.getsource(obj)
104
+ elif inspect.isdatadescriptor(obj):
105
+ inspect.getsource(obj.fget) # type:ignore
106
+ else:
107
+ continue
108
+ except:
109
+ continue
110
+
111
+ try:
112
+ self._functions.append(FunctionInfo(
113
+ obj, self._cls)) # type: ignore
114
+ except TypeError as e:
115
+ # Skip functions that can't be parsed (e.g., lambda, built-ins)
116
+ logger.debug("Skipping function '%s': %s", attr, e)
117
+ continue
118
+ except Exception as e:
119
+ raise Exception(
120
+ f"Error parsing function '{attr}' of class '{self._name}': {e}", e) from e
121
+
122
+ def __str__(self) -> str:
123
+ body = json.dumps({
124
+ "name": self.name,
125
+ "bases": self.bases,
126
+ "decorations": self.decorations,
127
+ "static_methods": self.static_methods,
128
+ "class_methods": self.class_methods,
129
+ "instance_methods": self.instance_methods
130
+ }, default=str, indent=4)[1:-1]
131
+ return f"{self.__class__.__name__}({body})"
132
+
133
+ def __repr__(self):
134
+ return f"{self.__class__.__name__}(name=\"{self.name}\")"
135
+
136
+ @property
137
+ def name(self) -> str:
138
+ return self._name
139
+
140
+ @property
141
+ def decorations(self) -> List[DecoratorInfo]:
142
+ return self._decorations
143
+
144
+ @property
145
+ def bases(self) -> List[ArgumentInfo]:
146
+ return self._bases
147
+
148
+ @property
149
+ def static_methods(self) -> Iterable[FunctionInfo]:
150
+ return sorted(filter(lambda f: f.is_static_method, self._functions), key=lambda f: f.name)
151
+
152
+ @property
153
+ def class_methods(self) -> Iterable[FunctionInfo]:
154
+ return sorted(filter(lambda f: f.is_class_method, self._functions), key=lambda f: f.name)
155
+
156
+ @property
157
+ def instance_methods(self) -> Iterable[FunctionInfo]:
158
+ return sorted(filter(lambda f: f.is_instance_method, self._functions), key=lambda f: f.name)
159
+
160
+ @property
161
+ def inherited_methods(self) -> Iterable[FunctionInfo]:
162
+ return sorted(filter(lambda f: f.is_inherited, self._functions), key=lambda f: f.name)
163
+
164
+ @property
165
+ def abstract_methods(self) -> Iterable[FunctionInfo]:
166
+ return sorted(filter(lambda f: f.is_abstract, self._functions), key=lambda f: f.name)
167
+
168
+ @property
169
+ def functions(self) -> List[FunctionInfo]:
170
+ return self._functions
171
+
172
+ @property
173
+ def properties(self):
174
+ pass
175
+
176
+ @property
177
+ def instance_properties(self):
178
+ pass
179
+
180
+ @property
181
+ def class_properties(self):
182
+ pass
183
+
184
+
185
+ __all__ = [
186
+ "ClassInfo"
187
+ ]
@@ -7,7 +7,7 @@ from .argument_info import ArgumentInfo
7
7
 
8
8
  class DecoratorInfo:
9
9
  DECORATOR_INFO_REGEX: re.Pattern = re.compile(
10
- r"^@?(?P<name>\w[\w\d]*)(?:\((?P<arguments>.*)\))?")
10
+ r"^@?(?P<name>\w[\w\d]*)(?:\((?P<arguments>.*)\))?$")
11
11
 
12
12
  def __init__(self, name: str, arguments: List[ArgumentInfo]):
13
13
  self._name = name