funboost 44.5__tar.gz → 44.7__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.

Potentially problematic release.


This version of funboost might be problematic. Click here for more details.

Files changed (256) hide show
  1. {funboost-44.5/funboost.egg-info → funboost-44.7}/PKG-INFO +1 -1
  2. {funboost-44.5 → funboost-44.7}/funboost/__init__.py +3 -2
  3. {funboost-44.5 → funboost-44.7}/funboost/constant.py +2 -0
  4. {funboost-44.5 → funboost-44.7}/funboost/consumers/base_consumer.py +8 -2
  5. funboost-44.7/funboost/consumers/empty_consumer.py +26 -0
  6. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_consumer.py +5 -5
  7. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_consumer_ack_able.py +4 -2
  8. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_stream_consumer.py +3 -2
  9. {funboost-44.5 → funboost-44.7}/funboost/core/current_task.py +9 -2
  10. funboost-44.7/funboost/core/funboost_current_task_context_thread.py +12 -0
  11. {funboost-44.5 → funboost-44.7}/funboost/core/func_params_model.py +10 -2
  12. {funboost-44.5 → funboost-44.7}/funboost/factories/broker_kind__publsiher_consumer_type_map.py +3 -1
  13. {funboost-44.5 → funboost-44.7}/funboost/factories/consumer_factory.py +9 -1
  14. {funboost-44.5 → funboost-44.7}/funboost/factories/publisher_factotry.py +10 -1
  15. funboost-44.7/funboost/publishers/empty_publisher.py +31 -0
  16. {funboost-44.5 → funboost-44.7}/funboost/set_frame_config.py +1 -1
  17. funboost-44.7/funboost/utils/class_utils.py +51 -0
  18. {funboost-44.5 → funboost-44.7}/funboost/utils/decorators.py +1 -1
  19. {funboost-44.5 → funboost-44.7}/funboost/utils/simple_data_class.py +17 -0
  20. funboost-44.7/funboost/utils/str_utils.py +51 -0
  21. {funboost-44.5 → funboost-44.7/funboost.egg-info}/PKG-INFO +1 -1
  22. {funboost-44.5 → funboost-44.7}/funboost.egg-info/SOURCES.txt +5 -0
  23. {funboost-44.5 → funboost-44.7}/LICENSE +0 -0
  24. {funboost-44.5 → funboost-44.7}/MANIFEST.in +0 -0
  25. {funboost-44.5 → funboost-44.7}/README.md +0 -0
  26. {funboost-44.5 → funboost-44.7}/funboost/__init__old.py +0 -0
  27. {funboost-44.5 → funboost-44.7}/funboost/__main__.py +0 -0
  28. {funboost-44.5 → funboost-44.7}/funboost/assist/__init__.py +0 -0
  29. {funboost-44.5 → funboost-44.7}/funboost/assist/celery_helper.py +0 -0
  30. {funboost-44.5 → funboost-44.7}/funboost/assist/dramatiq_helper.py +0 -0
  31. {funboost-44.5 → funboost-44.7}/funboost/assist/huey_helper.py +0 -0
  32. {funboost-44.5 → funboost-44.7}/funboost/assist/rocketry_helper.py +0 -0
  33. {funboost-44.5 → funboost-44.7}/funboost/assist/rq_helper.py +0 -0
  34. {funboost-44.5 → funboost-44.7}/funboost/assist/rq_windows_worker.py +0 -0
  35. {funboost-44.5 → funboost-44.7}/funboost/beggar_version_implementation/beggar_redis_consumer.py +0 -0
  36. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/__init__.py +0 -0
  37. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/async_helper.py +0 -0
  38. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/async_pool_executor.py +0 -0
  39. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/backup/__init__.py +0 -0
  40. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/backup/async_pool_executor0223.py +0 -0
  41. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/backup/async_pool_executor_back.py +0 -0
  42. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/backup/async_pool_executor_janus.py +0 -0
  43. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/base_pool_type.py +0 -0
  44. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/bounded_processpoolexcutor_gt_py37.py +0 -0
  45. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/bounded_processpoolexcutor_py36.py +0 -0
  46. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/bounded_threadpoolexcutor.py +0 -0
  47. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/concurrent_pool_with_multi_process.py +0 -0
  48. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/custom_evenlet_pool_executor.py +0 -0
  49. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/custom_gevent_pool_executor.py +0 -0
  50. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/custom_threadpool_executor.py +0 -0
  51. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/custom_threadpool_executor000.py +0 -0
  52. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/fixed_thread_pool.py +0 -0
  53. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/flexible_thread_pool.py +0 -0
  54. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/pool_commons.py +0 -0
  55. {funboost-44.5 → funboost-44.7}/funboost/concurrent_pool/single_thread_executor.py +0 -0
  56. {funboost-44.5 → funboost-44.7}/funboost/consumers/__init__.py +0 -0
  57. {funboost-44.5 → funboost-44.7}/funboost/consumers/celery_consumer.py +0 -0
  58. {funboost-44.5 → funboost-44.7}/funboost/consumers/confirm_mixin.py +0 -0
  59. {funboost-44.5 → funboost-44.7}/funboost/consumers/dramatiq_consumer.py +0 -0
  60. {funboost-44.5 → funboost-44.7}/funboost/consumers/http_consumer.py +0 -0
  61. {funboost-44.5 → funboost-44.7}/funboost/consumers/http_consumer000.py +0 -0
  62. {funboost-44.5 → funboost-44.7}/funboost/consumers/httpsqs_consumer.py +0 -0
  63. {funboost-44.5 → funboost-44.7}/funboost/consumers/huey_consumer.py +0 -0
  64. {funboost-44.5 → funboost-44.7}/funboost/consumers/kafka_consumer.py +0 -0
  65. {funboost-44.5 → funboost-44.7}/funboost/consumers/kafka_consumer_manually_commit.py +0 -0
  66. {funboost-44.5 → funboost-44.7}/funboost/consumers/kombu_consumer.py +0 -0
  67. {funboost-44.5 → funboost-44.7}/funboost/consumers/local_python_queue_consumer.py +0 -0
  68. {funboost-44.5 → funboost-44.7}/funboost/consumers/memory_deque_consumer.py +0 -0
  69. {funboost-44.5 → funboost-44.7}/funboost/consumers/mongomq_consumer.py +0 -0
  70. {funboost-44.5 → funboost-44.7}/funboost/consumers/mqtt_consumer.py +0 -0
  71. {funboost-44.5 → funboost-44.7}/funboost/consumers/nameko_consumer.py +0 -0
  72. {funboost-44.5 → funboost-44.7}/funboost/consumers/nats_consumer.py +0 -0
  73. {funboost-44.5 → funboost-44.7}/funboost/consumers/nsq_consumer.py +0 -0
  74. {funboost-44.5 → funboost-44.7}/funboost/consumers/peewee_conusmer.py +0 -0
  75. {funboost-44.5 → funboost-44.7}/funboost/consumers/persist_queue_consumer.py +0 -0
  76. {funboost-44.5 → funboost-44.7}/funboost/consumers/pulsar_consumer.py +0 -0
  77. {funboost-44.5 → funboost-44.7}/funboost/consumers/rabbitmq_amqpstorm_consumer.py +0 -0
  78. {funboost-44.5 → funboost-44.7}/funboost/consumers/rabbitmq_pika_consumer.py +0 -0
  79. {funboost-44.5 → funboost-44.7}/funboost/consumers/rabbitmq_pika_consumerv0.py +0 -0
  80. {funboost-44.5 → funboost-44.7}/funboost/consumers/rabbitmq_rabbitpy_consumer.py +0 -0
  81. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_brpoplpush_consumer.py +0 -0
  82. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_consumer_ack_using_timeout.py +0 -0
  83. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_consumer_priority.py +0 -0
  84. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_consumer_simple.py +0 -0
  85. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_filter.py +0 -0
  86. {funboost-44.5 → funboost-44.7}/funboost/consumers/redis_pubsub_consumer.py +0 -0
  87. {funboost-44.5 → funboost-44.7}/funboost/consumers/rocketmq_consumer.py +0 -0
  88. {funboost-44.5 → funboost-44.7}/funboost/consumers/rq_consumer.py +0 -0
  89. {funboost-44.5 → funboost-44.7}/funboost/consumers/sqlachemy_consumer.py +0 -0
  90. {funboost-44.5 → funboost-44.7}/funboost/consumers/tcp_consumer.py +0 -0
  91. {funboost-44.5 → funboost-44.7}/funboost/consumers/txt_file_consumer.py +0 -0
  92. {funboost-44.5 → funboost-44.7}/funboost/consumers/udp_consumer.py +0 -0
  93. {funboost-44.5 → funboost-44.7}/funboost/consumers/zeromq_consumer.py +0 -0
  94. {funboost-44.5 → funboost-44.7}/funboost/contrib/__init__.py +0 -0
  95. {funboost-44.5 → funboost-44.7}/funboost/contrib/api_publish_msg.py +0 -0
  96. {funboost-44.5 → funboost-44.7}/funboost/contrib/django_db_deco.py +0 -0
  97. {funboost-44.5 → funboost-44.7}/funboost/contrib/queue2queue.py +0 -0
  98. {funboost-44.5 → funboost-44.7}/funboost/contrib/redis_consume_latest_msg_broker.py +0 -0
  99. {funboost-44.5 → funboost-44.7}/funboost/contrib/save_result_status_to_sqldb.py +0 -0
  100. {funboost-44.5 → funboost-44.7}/funboost/core/__init__.py +0 -0
  101. {funboost-44.5 → funboost-44.7}/funboost/core/active_cousumer_info_getter.py +0 -0
  102. {funboost-44.5 → funboost-44.7}/funboost/core/booster.py +0 -0
  103. {funboost-44.5 → funboost-44.7}/funboost/core/cli/__init__.py +0 -0
  104. {funboost-44.5 → funboost-44.7}/funboost/core/cli/discovery_boosters.py +0 -0
  105. {funboost-44.5 → funboost-44.7}/funboost/core/cli/funboost_cli_user_templ.py +0 -0
  106. {funboost-44.5 → funboost-44.7}/funboost/core/cli/funboost_fire.py +0 -0
  107. {funboost-44.5 → funboost-44.7}/funboost/core/exceptions.py +0 -0
  108. {funboost-44.5 → funboost-44.7}/funboost/core/fabric_deploy_helper.py +0 -0
  109. {funboost-44.5 → funboost-44.7}/funboost/core/funboost_config_getter.py +0 -0
  110. {funboost-44.5 → funboost-44.7}/funboost/core/funboost_time.py +0 -0
  111. {funboost-44.5 → funboost-44.7}/funboost/core/function_result_status_config.py +0 -0
  112. {funboost-44.5 → funboost-44.7}/funboost/core/function_result_status_saver.py +0 -0
  113. {funboost-44.5 → funboost-44.7}/funboost/core/helper_funs.py +0 -0
  114. {funboost-44.5 → funboost-44.7}/funboost/core/kill_remote_task.py +0 -0
  115. {funboost-44.5 → funboost-44.7}/funboost/core/lazy_impoter.py +0 -0
  116. {funboost-44.5 → funboost-44.7}/funboost/core/loggers.py +0 -0
  117. {funboost-44.5 → funboost-44.7}/funboost/core/msg_result_getter.py +0 -0
  118. {funboost-44.5 → funboost-44.7}/funboost/core/muliti_process_enhance.py +0 -0
  119. {funboost-44.5 → funboost-44.7}/funboost/core/task_id_logger.py +0 -0
  120. {funboost-44.5 → funboost-44.7}/funboost/factories/__init__.py +0 -0
  121. {funboost-44.5 → funboost-44.7}/funboost/funboost_config_deafult.py +0 -0
  122. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/__pycache__/functions.cpython-39.pyc +0 -0
  123. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/app.py +0 -0
  124. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/functions.py +0 -0
  125. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/assets/css/custom.css +0 -0
  126. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/assets/css/jquery.mCustomScrollbar.min.css +0 -0
  127. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/assets/img/user.jpg +0 -0
  128. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/assets/js/custom.js +0 -0
  129. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/assets/js/jquery.mCustomScrollbar.concat.min.js +0 -0
  130. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/css/style.css +0 -0
  131. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/images/bg.jpg +0 -0
  132. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/images/password.png +0 -0
  133. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/images/tick.png +0 -0
  134. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/images/user.png +0 -0
  135. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/static/js/jquery-1.11.0.min.js +0 -0
  136. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/templates/index.html +0 -0
  137. {funboost-44.5 → funboost-44.7}/funboost/function_result_web/templates/login.html +0 -0
  138. {funboost-44.5 → funboost-44.7}/funboost/publishers/__init__.py +0 -0
  139. {funboost-44.5 → funboost-44.7}/funboost/publishers/base_publisher.py +0 -0
  140. {funboost-44.5 → funboost-44.7}/funboost/publishers/celery_publisher.py +0 -0
  141. {funboost-44.5 → funboost-44.7}/funboost/publishers/celery_publisher000.py +0 -0
  142. {funboost-44.5 → funboost-44.7}/funboost/publishers/confluent_kafka_publisher.py +0 -0
  143. {funboost-44.5 → funboost-44.7}/funboost/publishers/dramatiq_publisher.py +0 -0
  144. {funboost-44.5 → funboost-44.7}/funboost/publishers/http_publisher.py +0 -0
  145. {funboost-44.5 → funboost-44.7}/funboost/publishers/httpsqs_publisher.py +0 -0
  146. {funboost-44.5 → funboost-44.7}/funboost/publishers/huey_publisher.py +0 -0
  147. {funboost-44.5 → funboost-44.7}/funboost/publishers/kafka_publisher.py +0 -0
  148. {funboost-44.5 → funboost-44.7}/funboost/publishers/kombu_publisher.py +0 -0
  149. {funboost-44.5 → funboost-44.7}/funboost/publishers/local_python_queue_publisher.py +0 -0
  150. {funboost-44.5 → funboost-44.7}/funboost/publishers/meomory_deque_publisher.py +0 -0
  151. {funboost-44.5 → funboost-44.7}/funboost/publishers/mongomq_publisher.py +0 -0
  152. {funboost-44.5 → funboost-44.7}/funboost/publishers/mqtt_publisher.py +0 -0
  153. {funboost-44.5 → funboost-44.7}/funboost/publishers/nameko_publisher.py +0 -0
  154. {funboost-44.5 → funboost-44.7}/funboost/publishers/nats_publisher.py +0 -0
  155. {funboost-44.5 → funboost-44.7}/funboost/publishers/nsq_publisher.py +0 -0
  156. {funboost-44.5 → funboost-44.7}/funboost/publishers/peewee_publisher.py +0 -0
  157. {funboost-44.5 → funboost-44.7}/funboost/publishers/persist_queue_publisher.py +0 -0
  158. {funboost-44.5 → funboost-44.7}/funboost/publishers/pulsar_publisher.py +0 -0
  159. {funboost-44.5 → funboost-44.7}/funboost/publishers/rabbitmq_amqpstorm_publisher.py +0 -0
  160. {funboost-44.5 → funboost-44.7}/funboost/publishers/rabbitmq_pika_publisher.py +0 -0
  161. {funboost-44.5 → funboost-44.7}/funboost/publishers/rabbitmq_rabbitpy_publisher.py +0 -0
  162. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_publisher.py +0 -0
  163. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_publisher_lpush.py +0 -0
  164. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_publisher_priority.py +0 -0
  165. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_publisher_simple.py +0 -0
  166. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_pubsub_publisher.py +0 -0
  167. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_queue_flush_mixin.py +0 -0
  168. {funboost-44.5 → funboost-44.7}/funboost/publishers/redis_stream_publisher.py +0 -0
  169. {funboost-44.5 → funboost-44.7}/funboost/publishers/rocketmq_publisher.py +0 -0
  170. {funboost-44.5 → funboost-44.7}/funboost/publishers/rq_publisher.py +0 -0
  171. {funboost-44.5 → funboost-44.7}/funboost/publishers/sqla_queue_publisher.py +0 -0
  172. {funboost-44.5 → funboost-44.7}/funboost/publishers/tcp_publisher.py +0 -0
  173. {funboost-44.5 → funboost-44.7}/funboost/publishers/txt_file_publisher.py +0 -0
  174. {funboost-44.5 → funboost-44.7}/funboost/publishers/udp_publisher.py +0 -0
  175. {funboost-44.5 → funboost-44.7}/funboost/publishers/zeromq_publisher.py +0 -0
  176. {funboost-44.5 → funboost-44.7}/funboost/queues/__init__.py +0 -0
  177. {funboost-44.5 → funboost-44.7}/funboost/queues/peewee_queue.py +0 -0
  178. {funboost-44.5 → funboost-44.7}/funboost/queues/sqla_queue.py +0 -0
  179. {funboost-44.5 → funboost-44.7}/funboost/timing_job/__init__.py +0 -0
  180. {funboost-44.5 → funboost-44.7}/funboost/timing_job/apscheduler_use_mysql_store.py +0 -0
  181. {funboost-44.5 → funboost-44.7}/funboost/timing_job/apscheduler_use_redis_store.py +0 -0
  182. {funboost-44.5 → funboost-44.7}/funboost/utils/__init__.py +0 -0
  183. {funboost-44.5 → funboost-44.7}/funboost/utils/apscheduler_monkey.py +0 -0
  184. {funboost-44.5 → funboost-44.7}/funboost/utils/block_exit.py +0 -0
  185. {funboost-44.5 → funboost-44.7}/funboost/utils/bulk_operation.py +0 -0
  186. {funboost-44.5 → funboost-44.7}/funboost/utils/ctrl_c_end.py +0 -0
  187. {funboost-44.5 → funboost-44.7}/funboost/utils/custom_pysnooper.py +0 -0
  188. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/__init__.py +0 -0
  189. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/__init__.py +0 -0
  190. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/lock.py +0 -0
  191. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/mongomq.py +0 -0
  192. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/mongomq0000.py +0 -0
  193. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/test.py +0 -0
  194. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages/mongomq/utils.py +0 -0
  195. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/__init__.py +0 -0
  196. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/__init__.cpython-39.pyc +0 -0
  197. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/__pycache__/add_to_pythonpath.cpython-39.pyc +0 -0
  198. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/add_to_pythonpath.py +0 -0
  199. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__init__.py +0 -0
  200. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/__init__.cpython-39.pyc +0 -0
  201. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/client.cpython-39.pyc +0 -0
  202. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/compat.cpython-39.pyc +0 -0
  203. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/connection.cpython-39.pyc +0 -0
  204. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/exceptions.cpython-39.pyc +0 -0
  205. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/lock.cpython-39.pyc +0 -0
  206. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/__pycache__/utils.cpython-39.pyc +0 -0
  207. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/client.py +0 -0
  208. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/compat.py +0 -0
  209. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/connection.py +0 -0
  210. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/exceptions.py +0 -0
  211. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/lock.py +0 -0
  212. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/log.py +0 -0
  213. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/py.typed +0 -0
  214. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/readme.md +0 -0
  215. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/sentinel.py +0 -0
  216. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/aioredis/utils.py +0 -0
  217. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/StoppableThread.py +0 -0
  218. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__init__.py +0 -0
  219. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/StoppableThread.cpython-39.pyc +0 -0
  220. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/__init__.cpython-39.pyc +0 -0
  221. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/dafunc.cpython-39.pyc +0 -0
  222. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/exceptions.cpython-39.pyc +0 -0
  223. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/__pycache__/py3_raise.cpython-39.pyc +0 -0
  224. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/dafunc.py +0 -0
  225. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/exceptions.py +0 -0
  226. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py2_raise.py +0 -0
  227. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/func_timeout/py3_raise.py +0 -0
  228. {funboost-44.5 → funboost-44.7}/funboost/utils/dependency_packages_in_pythonpath/readme.md +0 -0
  229. {funboost-44.5 → funboost-44.7}/funboost/utils/develop_log.py +0 -0
  230. {funboost-44.5 → funboost-44.7}/funboost/utils/expire_lock.py +0 -0
  231. {funboost-44.5 → funboost-44.7}/funboost/utils/json_helper.py +0 -0
  232. {funboost-44.5 → funboost-44.7}/funboost/utils/mongo_util.py +0 -0
  233. {funboost-44.5 → funboost-44.7}/funboost/utils/monkey_color_log.py +0 -0
  234. {funboost-44.5 → funboost-44.7}/funboost/utils/monkey_patches.py +0 -0
  235. {funboost-44.5 → funboost-44.7}/funboost/utils/mqtt_util.py +0 -0
  236. {funboost-44.5 → funboost-44.7}/funboost/utils/paramiko_util.py +0 -0
  237. {funboost-44.5 → funboost-44.7}/funboost/utils/pysnooper_ydf/__init__.py +0 -0
  238. {funboost-44.5 → funboost-44.7}/funboost/utils/pysnooper_ydf/pycompat.py +0 -0
  239. {funboost-44.5 → funboost-44.7}/funboost/utils/pysnooper_ydf/tracer.py +0 -0
  240. {funboost-44.5 → funboost-44.7}/funboost/utils/pysnooper_ydf/utils.py +0 -0
  241. {funboost-44.5 → funboost-44.7}/funboost/utils/pysnooper_ydf/variables.py +0 -0
  242. {funboost-44.5 → funboost-44.7}/funboost/utils/rabbitmq_factory.py +0 -0
  243. {funboost-44.5 → funboost-44.7}/funboost/utils/redis_manager.py +0 -0
  244. {funboost-44.5 → funboost-44.7}/funboost/utils/redis_manager_old.py +0 -0
  245. {funboost-44.5 → funboost-44.7}/funboost/utils/resource_monitoring.py +0 -0
  246. {funboost-44.5 → funboost-44.7}/funboost/utils/restart_python.py +0 -0
  247. {funboost-44.5 → funboost-44.7}/funboost/utils/time_util.py +0 -0
  248. {funboost-44.5 → funboost-44.7}/funboost/utils/times/__init__.py +0 -0
  249. {funboost-44.5 → funboost-44.7}/funboost/utils/times/version.py +0 -0
  250. {funboost-44.5 → funboost-44.7}/funboost/utils/un_strict_json_dumps.py +0 -0
  251. {funboost-44.5 → funboost-44.7}/funboost.egg-info/dependency_links.txt +0 -0
  252. {funboost-44.5 → funboost-44.7}/funboost.egg-info/entry_points.txt +0 -0
  253. {funboost-44.5 → funboost-44.7}/funboost.egg-info/requires.txt +0 -0
  254. {funboost-44.5 → funboost-44.7}/funboost.egg-info/top_level.txt +0 -0
  255. {funboost-44.5 → funboost-44.7}/setup.cfg +0 -0
  256. {funboost-44.5 → funboost-44.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 44.5
3
+ Version: 44.7
4
4
  Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
13
13
  这段注释说明和使用的用户无关,只和框架开发人员有关.
14
14
  '''
15
15
 
16
- __version__ = "44.5"
16
+ __version__ = "44.7"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -31,12 +31,13 @@ from funboost.utils.paramiko_util import ParamikoFolderUploader
31
31
 
32
32
  from funboost.consumers.base_consumer import (wait_for_possible_has_finish_all_tasks_by_conusmer_list,
33
33
  FunctionResultStatus, AbstractConsumer)
34
-
34
+ from funboost.consumers.empty_consumer import EmptyConsumer
35
35
  from funboost.core.exceptions import ExceptionForRetry, ExceptionForRequeue, ExceptionForPushToDlxqueue
36
36
  from funboost.core.active_cousumer_info_getter import ActiveCousumerProcessInfoGetter
37
37
  from funboost.core.msg_result_getter import HasNotAsyncResult, ResultFromMongo
38
38
  from funboost.publishers.base_publisher import (PriorityConsumingControlConfig,
39
39
  AbstractPublisher, AsyncResult, AioAsyncResult)
40
+ from funboost.publishers.empty_publisher import EmptyPublisher
40
41
  from funboost.factories.broker_kind__publsiher_consumer_type_map import register_custom_broker
41
42
  from funboost.factories.publisher_factotry import get_publisher
42
43
  from funboost.factories.consumer_factory import get_consumer
@@ -1,5 +1,7 @@
1
1
  # coding= utf-8
2
2
  class BrokerEnum:
3
+ EMPTY = 'empty' # 空的实现,需要搭配 boost入参的 consumer_override_cls 和 publisher_override_cls使用,或者被继承。
4
+
3
5
  RABBITMQ_AMQPSTORM = 'RABBITMQ_AMQPSTORM' # 使用 amqpstorm 包操作rabbitmq 作为 分布式消息队列,支持消费确认.强烈推荐这个作为funboost中间件。
4
6
  RABBITMQ = RABBITMQ_AMQPSTORM
5
7
 
@@ -562,6 +562,9 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
562
562
  """
563
563
  self._do_not_delete_extra_from_msg = True
564
564
 
565
+ def user_custom_record_process_info_func(self,current_function_result_status:FunctionResultStatus): # 这个可以继承
566
+ pass
567
+
565
568
  # noinspection PyProtectedMember
566
569
  def _run(self, kw: dict, ):
567
570
  # print(kw)
@@ -633,7 +636,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
633
636
  self._current_time_for_execute_task_times_every_unit_time = time.time()
634
637
  self._consuming_function_cost_time_total_every_unit_time = 0
635
638
  self._execute_task_times_every_unit_time = 0
636
-
639
+ self.user_custom_record_process_info_func(current_function_result_status) # 两种方式都可以自定义,记录结果.
637
640
  if self.consumer_params.user_custom_record_process_info_func:
638
641
  self.consumer_params.user_custom_record_process_info_func(current_function_result_status)
639
642
  except BaseException as e:
@@ -657,7 +660,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
657
660
  try:
658
661
  function_run = self.consuming_function
659
662
  if self._consuming_function_is_asyncio:
663
+ fct._fct_local_data._asyncio_use_thread_concurrent_mode = True
660
664
  function_run = sync_or_async_fun_deco(function_run)
665
+ else:
666
+ fct._fct_local_data._asynco_use_thread_concurrent_mode = False
661
667
  function_timeout = self._get_priority_conf(kw, 'function_timeout')
662
668
  function_run = function_run if self.consumer_params.consumin_function_decorator is None else self.consumer_params.consumin_function_decorator(function_run)
663
669
  function_run = function_run if not function_timeout else self._concurrent_mode_dispatcher.timeout_deco(
@@ -823,7 +829,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
823
829
  try:
824
830
  corotinue_obj = self.consuming_function(**function_only_params)
825
831
  if not asyncio.iscoroutine(corotinue_obj):
826
- log_msg = f'''当前设置的并发模式为 async 并发模式,但消费函数不是异步协程函数,请不要把消费函数 {self.consuming_function.__name__} 的 concurrent_mode 设置为 4'''
832
+ log_msg = f'''当前设置的并发模式为 async 并发模式,但消费函数不是异步协程函数,请不要把消费函数 {self.consuming_function.__name__} 的 concurrent_mode 设置错误'''
827
833
  # self.logger.critical(msg=f'{log_msg} \n')
828
834
  # self.error_file_logger.critical(msg=f'{log_msg} \n')
829
835
  self.logger.critical(msg=log_msg)
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ # @Author : ydf
3
+ # @Time : 2023/8/8 0008 13:32
4
+
5
+ import abc
6
+ from funboost.consumers.base_consumer import AbstractConsumer
7
+
8
+
9
+ class EmptyConsumer(AbstractConsumer, metaclass=abc.ABCMeta):
10
+ """
11
+ 空的消费者没实现,空的实现,需要搭配 boost入参的 consumer_override_cls 和 publisher_override_cls使用,或者被继承。
12
+ """
13
+ def custom_init(self):
14
+ pass
15
+
16
+ @abc.abstractmethod
17
+ def _shedual_task(self):
18
+ raise NotImplemented('not realization')
19
+
20
+ @abc.abstractmethod
21
+ def _confirm_consume(self, kw):
22
+ raise NotImplemented('not realization')
23
+
24
+ @abc.abstractmethod
25
+ def _requeue(self, kw):
26
+ raise NotImplemented('not realization')
@@ -17,20 +17,20 @@ class RedisConsumer(AbstractConsumer, RedisMixin):
17
17
  redis作为中间件实现的,使用redis list 结构实现的。
18
18
  这个如果消费脚本在运行时候随意反复重启或者非正常关闭或者消费宕机,会丢失大批任务。高可靠需要用rabbitmq或者redis_ack_able或者redis_stream的中间件方式。
19
19
 
20
- 这个是复杂版,一次性拉取100个,简单版在 funboost/consumers/redis_consumer_simple.py
20
+ 这个是复杂版,一次性拉取100个,减少和redis的交互,简单版在 funboost/consumers/redis_consumer_simple.py
21
21
  """
22
22
 
23
- BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'redis_bulk_push':1} #redis_bulk_push 是否redis批量推送
23
+ BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'redis_bulk_push':1,'pull_msg_batch_size':100} #redis_bulk_push 是否redis批量推送
24
24
 
25
25
  # noinspection DuplicatedCode
26
26
  def _shedual_task(self):
27
+ pull_msg_batch_size = self.consumer_params.broker_exclusive_config['pull_msg_batch_size']
27
28
  while True:
28
29
  # if False:
29
30
  # pass
30
31
  with self.redis_db_frame.pipeline() as p:
31
- get_msg_batch_size = 100
32
- p.lrange(self._queue_name, 0, get_msg_batch_size - 1)
33
- p.ltrim(self._queue_name, get_msg_batch_size, -1)
32
+ p.lrange(self._queue_name, 0, pull_msg_batch_size- 1)
33
+ p.ltrim(self._queue_name, pull_msg_batch_size, -1)
34
34
  task_str_list = p.execute()[0]
35
35
  if task_str_list:
36
36
  # self.logger.debug(f'从redis的 [{self._queue_name}] 队列中 取出的消息是: {task_str_list} ')
@@ -99,6 +99,7 @@ class RedisConsumerAckAble(ConsumerConfirmMixinWithTheHelpOfRedisByHearbeat, Abs
99
99
  # print(script_4(keys=["text_pipelien1","text_pipelien1b"]))
100
100
  """
101
101
 
102
+ BROKER_EXCLUSIVE_CONFIG_DEFAULT = { 'pull_msg_batch_size': 100}
102
103
 
103
104
  def _shedual_task000(self):
104
105
  # 可以采用lua脚本,也可以采用redis的watch配合pipeline使用。比代码分两行pop和zadd比还能减少一次io交互,还能防止丢失小概率一个任务。
@@ -122,8 +123,9 @@ class RedisConsumerAckAble(ConsumerConfirmMixinWithTheHelpOfRedisByHearbeat, Abs
122
123
  time.sleep(0.5)
123
124
 
124
125
  def _shedual_task(self):
125
- lua = '''
126
- local task_list = redis.call("lrange", KEYS[1],0,99)
126
+ pull_msg_batch_size = self.consumer_params.broker_exclusive_config['pull_msg_batch_size']
127
+ lua = f'''
128
+ local task_list = redis.call("lrange", KEYS[1],0,{pull_msg_batch_size-1})
127
129
  redis.call("ltrim", KEYS[1],100,-1)
128
130
  if (#task_list > 0) then
129
131
  for task_index,task_value in ipairs(task_list)
@@ -14,7 +14,7 @@ class RedisStreamConsumer(AbstractConsumer, RedisMixin):
14
14
  redis 的 stream 结构 作为中间件实现的。需要redis 5.0以上,redis stream结构 是redis的消息队列,概念类似kafka,功能远超 list结构。
15
15
  """
16
16
  GROUP = 'funboost_group'
17
- BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'group': 'funboost_group'}
17
+ BROKER_EXCLUSIVE_CONFIG_DEFAULT = {'group': 'funboost_group','pull_msg_batch_size': 100}
18
18
 
19
19
  def custom_init(self):
20
20
  self.group = self.consumer_params.broker_exclusive_config['group'] or self.GROUP
@@ -33,6 +33,7 @@ class RedisStreamConsumer(AbstractConsumer, RedisMixin):
33
33
  self.keep_circulating(60, block=False)(self._requeue_tasks_which_unconfirmed)()
34
34
 
35
35
  def _shedual_task(self):
36
+ pull_msg_batch_size = self.consumer_params.broker_exclusive_config['pull_msg_batch_size']
36
37
 
37
38
  try:
38
39
  self.redis_db_frame.xgroup_create(self._queue_name,self.group , id=0, mkstream=True)
@@ -41,7 +42,7 @@ class RedisStreamConsumer(AbstractConsumer, RedisMixin):
41
42
  while True:
42
43
  # redis服务端必须是5.0以上,并且确保这个键的类型是stream不能是list数据结构。
43
44
  results = self.redis_db_frame.xreadgroup(self.group, self.consumer_identification,
44
- {self.queue_name: ">"}, count=100, block=60 * 1000)
45
+ {self.queue_name: ">"}, count=pull_msg_batch_size, block=60 * 1000)
45
46
  if results:
46
47
  # self.logger.debug(f'从redis的 [{self._queue_name}] stream 中 取出的消息是: {results} ')
47
48
  self._print_message_get_from_broker( results)
@@ -54,7 +54,7 @@ class __ThreadCurrentTask:
54
54
 
55
55
 
56
56
  _fct_local_data = threading.local()
57
-
57
+ _fct_local_data._asyncio_use_thread_concurrent_mode = False
58
58
 
59
59
  @property
60
60
  def function_params(self):
@@ -146,7 +146,14 @@ class __AsyncioCurrentTask:
146
146
  asyncio_current_task = __AsyncioCurrentTask()
147
147
 
148
148
  def funboost_current_task():
149
- return asyncio_current_task if is_asyncio_environment() else thread_current_task
149
+ if is_asyncio_environment():
150
+ if getattr(__ThreadCurrentTask._fct_local_data,'_asyncio_use_thread_concurrent_mode',None) is True:
151
+ # 如果用户使用的是默认的ConcurrentModeEnum.THREADING并发模式,那么也使用线程获取上下文
152
+ return thread_current_task
153
+ else:
154
+ return asyncio_current_task
155
+ else:
156
+ return thread_current_task
150
157
 
151
158
 
152
159
  def get_current_taskid():
@@ -0,0 +1,12 @@
1
+ # import threading
2
+ #
3
+ # from funboost.core.current_task import thread_current_task
4
+ #
5
+ #
6
+ # class FctThread(threading.Thread):
7
+ # thread_current_task__dict_key = 'thread_current_task__dict'
8
+ #
9
+ #
10
+ # def run(self):
11
+ # thread_current_task._fct_local_data.__dict__.update(getattr(self,self.thread_current_task__dict_key)) # 把funboost的消费线程上下文需要传递到线程上下文里面来.
12
+ # super().run()
@@ -178,13 +178,18 @@ class BoosterParams(BaseJsonAbleModel):
178
178
 
179
179
  consuming_function: typing.Callable = None # 消费函数,在@boost时候不用指定,因为装饰器知道下面的函数.
180
180
 
181
- broker_kind: str = BrokerEnum.PERSISTQUEUE # 中间件选型见3.1章节 https://funboost.readthedocs.io/zh/latest/articles/c3.html
181
+ broker_kind: str = BrokerEnum.SQLITE_QUEUE # 中间件选型见3.1章节 https://funboost.readthedocs.io/zh/latest/articles/c3.html
182
182
 
183
183
  broker_exclusive_config: dict = {} # 加上一个不同种类中间件非通用的配置,不同中间件自身独有的配置,不是所有中间件都兼容的配置,因为框架支持30种消息队列,消息队列不仅仅是一般的先进先出queue这么简单的概念,
184
184
  # 例如kafka支持消费者组,rabbitmq也支持各种独特概念例如各种ack机制 复杂路由机制,有的中间件原生能支持消息优先级有的中间件不支持,每一种消息队列都有独特的配置参数意义,可以通过这里传递。每种中间件能传递的键值对可以看consumer类的 BROKER_EXCLUSIVE_CONFIG_DEFAULT
185
185
 
186
186
  should_check_publish_func_params: bool = True # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字, 如果消费函数你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
187
187
 
188
+ consumer_override_cls: typing.Optional[typing.Type] = None # 使用 consumer_override_cls 和 publisher_override_cls 来自定义重写或新增消费者 发布者,见文档4.21b介绍,
189
+ publisher_override_cls: typing.Optional[typing.Type] = None
190
+
191
+ # func_params_is_pydantic_model: bool = False # funboost 兼容支持 函数娼还是 pydantic model类型,funboost在发布之前和取出来时候自己转化。
192
+
188
193
  auto_generate_info: dict = {} # 自动生成的信息,不需要用户主动传参.
189
194
 
190
195
  @root_validator(skip_on_failure=True)
@@ -245,6 +250,7 @@ class PriorityConsumingControlConfig(BaseJsonAbleModel):
245
250
  misfire_grace_time: typing.Union[int, None] = None
246
251
  other_extra_params: dict = None # 其他参数, 例如消息优先级 , priority_control_config=PriorityConsumingControlConfig(other_extra_params={'priroty': priorityxx}),
247
252
 
253
+
248
254
  @root_validator(skip_on_failure=True)
249
255
  def cehck_values(cls, values: dict):
250
256
  if values['countdown'] and values['eta']:
@@ -266,6 +272,8 @@ class PublisherParams(BaseJsonAbleModel):
266
272
  broker_kind: str = None
267
273
  broker_exclusive_config: dict = {}
268
274
  should_check_publish_func_params: bool = True # 消息发布时候是否校验消息发布内容,比如有的人发布消息,函数只接受a,b两个入参,他去传2个入参,或者传参不存在的参数名字, 如果消费函数你非要写*args,**kwargs,那就需要关掉发布消息时候的函数入参检查
275
+ publisher_override_cls: typing.Optional[typing.Type] = None
276
+ # func_params_is_pydantic_model: bool = False # funboost 兼容支持 函数娼还是 pydantic model类型,funboost在发布之前和取出来时候自己转化。
269
277
 
270
278
 
271
279
  if __name__ == '__main__':
@@ -277,4 +285,4 @@ if __name__ == '__main__':
277
285
  # print(PriorityConsumingControlConfig().get_str_dict())
278
286
 
279
287
  print(BoosterParams(queue_name='3213', specify_concurrent_pool=FlexibleThreadPool(100)).json_pre())
280
- print(PublisherParams.schema_json())
288
+ print(PublisherParams.schema_json())
@@ -1,6 +1,6 @@
1
1
  import typing
2
2
 
3
-
3
+ from funboost.publishers.empty_publisher import EmptyPublisher
4
4
  from funboost.publishers.http_publisher import HTTPPublisher
5
5
  from funboost.publishers.nats_publisher import NatsPublisher
6
6
  from funboost.publishers.peewee_publisher import PeeweePublisher
@@ -25,6 +25,7 @@ from funboost.publishers.redis_stream_publisher import RedisStreamPublisher
25
25
  from funboost.publishers.mqtt_publisher import MqttPublisher
26
26
  from funboost.publishers.httpsqs_publisher import HttpsqsPublisher
27
27
 
28
+ from funboost.consumers.empty_consumer import EmptyConsumer
28
29
  from funboost.consumers.redis_consumer_priority import RedisPriorityConsumer
29
30
  from funboost.consumers.redis_pubsub_consumer import RedisPbSubConsumer
30
31
  from funboost.consumers.http_consumer import HTTPConsumer
@@ -80,6 +81,7 @@ broker_kind__publsiher_consumer_type_map = {
80
81
  BrokerEnum.PEEWEE: (PeeweePublisher, PeeweeConsumer),
81
82
  BrokerEnum.REDIS_PUBSUB: (RedisPubSubPublisher, RedisPbSubConsumer),
82
83
  BrokerEnum.REIDS_ACK_USING_TIMEOUT: (RedisPublisher, RedisConsumerAckUsingTimeout),
84
+ BrokerEnum.EMPTY:(EmptyPublisher,EmptyConsumer),
83
85
 
84
86
  }
85
87
 
@@ -20,4 +20,12 @@ def get_consumer(boost_params: BoosterParams) -> AbstractConsumer:
20
20
 
21
21
  if boost_params.broker_kind not in broker_kind__publsiher_consumer_type_map:
22
22
  raise ValueError(f'设置的中间件种类数字不正确,你设置的值是 {boost_params.broker_kind} ')
23
- return broker_kind__publsiher_consumer_type_map[boost_params.broker_kind][1](boost_params)
23
+ consumer_cls = broker_kind__publsiher_consumer_type_map[boost_params.broker_kind][1]
24
+ if not boost_params.consumer_override_cls:
25
+ return consumer_cls(boost_params)
26
+ else:
27
+ ConsumerClsOverride = type(f'{consumer_cls.__name__}__{boost_params.consumer_override_cls.__name__}', (boost_params.consumer_override_cls, consumer_cls, AbstractConsumer), {})
28
+ # class ConsumerClsOverride(boost_params.consumer_override_cls, consumer_cls, AbstractConsumer):
29
+ # pass
30
+
31
+ return ConsumerClsOverride(boost_params)
@@ -32,4 +32,13 @@ def get_publisher(publisher_params: PublisherParams) -> AbstractPublisher:
32
32
  regist_to_funboost(broker_kind) # 动态注册中间件到框架是为了延迟导入,用户没安装不需要的第三方包不报错。
33
33
  if broker_kind not in broker_kind__publsiher_consumer_type_map:
34
34
  raise ValueError(f'设置的中间件种类数字不正确,你设置的值是 {broker_kind} ')
35
- return broker_kind__publsiher_consumer_type_map[broker_kind][0](publisher_params)
35
+ publisher_cls = broker_kind__publsiher_consumer_type_map[broker_kind][0]
36
+ if not publisher_params.publisher_override_cls:
37
+ return publisher_cls(publisher_params)
38
+ else:
39
+ PublsiherClsOverride = type(f'{publisher_cls.__name__}__{publisher_params.publisher_override_cls.__name__}', (publisher_params.publisher_override_cls, publisher_cls, AbstractPublisher), {})
40
+ # class PublsiherClsOverride(publisher_params.publisher_override_cls, publisher_cls, AbstractPublisher):
41
+ # pass
42
+
43
+ return PublsiherClsOverride(publisher_params)
44
+
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+ # @Author : ydf
3
+ # @Time : 2023/8/8 0008 12:12
4
+
5
+ import abc
6
+ from funboost.publishers.base_publisher import AbstractPublisher
7
+
8
+
9
+ class EmptyPublisher(AbstractPublisher, metaclass=abc.ABCMeta):
10
+ """
11
+ 空的发布者,空的实现,需要搭配 boost入参的 consumer_override_cls 和 publisher_override_cls使用,或者被继承。
12
+ """
13
+
14
+ def custom_init(self):
15
+ pass
16
+
17
+ @abc.abstractmethod
18
+ def concrete_realization_of_publish(self, msg: str):
19
+ raise NotImplemented('not realization')
20
+
21
+ @abc.abstractmethod
22
+ def clear(self):
23
+ raise NotImplemented('not realization')
24
+
25
+ @abc.abstractmethod
26
+ def get_message_count(self):
27
+ raise NotImplemented('not realization')
28
+
29
+ @abc.abstractmethod
30
+ def close(self):
31
+ raise NotImplemented('not realization')
@@ -98,7 +98,7 @@ def show_frame_config():
98
98
  # only_print_on_main_process(f'{var_name}: {var_value[0]}{"*" * (len(var_value) - 2)}{var_value[-1]}')
99
99
  # else:
100
100
  # only_print_on_main_process(f'{var_name}: {var_value}')
101
- logger_prompt.debug(f'''读取的 BrokerConnConfig 配置是:\n {funboost_config_deafult.BrokerConnConfig().get_json(indent=None)} ''')
101
+ logger_prompt.debug(f'''读取的 BrokerConnConfig 配置是:\n {funboost_config_deafult.BrokerConnConfig().get_pwd_enc_json(indent=4)} ''')
102
102
 
103
103
  logger_prompt.debug(f'''读取的 FunboostCommonConfig 配置是:\n {funboost_config_deafult.FunboostCommonConfig().get_json(indent=None)} ''')
104
104
 
@@ -0,0 +1,51 @@
1
+ #
2
+ #
3
+ # # def get_child_custom_attr(child_cls:type,):
4
+ # # __dict = child_cls.__dict__
5
+ #
6
+ # def merge_cls(cls1:type,cls2:type):
7
+ # class Cls(cls2):
8
+ # pass
9
+ # for k,v in cls1.__dict__.items():
10
+ # if k.startswith('__') and k.endswith('__'):
11
+ # continue
12
+ # print(k,v)
13
+ # setattr(Cls,k,v)
14
+ # return Cls
15
+ #
16
+ #
17
+ # if __name__ == '__main__':
18
+ # class Parent:
19
+ # attr1=1
20
+ # def method_from_parent(self):
21
+ # print('method_from_parent')
22
+ #
23
+ # def method_from_parent2(self):
24
+ # print('method_from_parent2')
25
+ #
26
+ #
27
+ # class Child(Parent):
28
+ # attr1=2
29
+ # attr2=22
30
+ #
31
+ # def method_from_parent2(self):
32
+ # print('method_from_parent2chile')
33
+ # def method_from_child(self:Parent):
34
+ # print('method_from_child')
35
+ #
36
+ # class Child2(Parent,Parent):
37
+ # attr1 = 3
38
+ #
39
+ # class Child2b(Child2):
40
+ # attr1 = '2b'
41
+ #
42
+ #
43
+ # class Child2New(Child2b,Child):
44
+ # pass
45
+ #
46
+ #
47
+ # print(Child2().method_from_parent2())
48
+ # print(Child2New().method_from_parent2())
49
+ #
50
+ #
51
+ #
@@ -509,7 +509,7 @@ def cached_method_result_for_instance(fun):
509
509
 
510
510
 
511
511
  class FunctionResultCacher:
512
- logger = LogManager('FunctionResultChche').get_logger_and_add_handlers()
512
+ logger = LogManager('FunctionResultChche').get_logger_and_add_handlers(log_level_int=20)
513
513
  func_result_dict = {}
514
514
  """
515
515
  {
@@ -1,7 +1,10 @@
1
+ import json
2
+
1
3
  import copy
2
4
  import typing
3
5
 
4
6
  from funboost.utils import json_helper
7
+ from funboost.utils.str_utils import PwdEnc, StrHelper
5
8
 
6
9
 
7
10
  class DataClassBase:
@@ -34,6 +37,20 @@ class DataClassBase:
34
37
  def get_json(self,indent=4):
35
38
  return json_helper.dict_to_un_strict_json(self.get_dict(),indent=indent)
36
39
 
40
+ def get_pwd_enc_json(self,indent=4):
41
+ """防止打印密码明文,泄漏密码"""
42
+ dict_new = {}
43
+ for k, v in self.get_dict().items():
44
+ # only_print_on_main_process(f'{k} : {v}')
45
+ if isinstance(v, (bool, tuple, dict, float, int)):
46
+ dict_new[k] = v
47
+ else:
48
+ v_enc =PwdEnc.enc_broker_uri(str(v))
49
+ if StrHelper(k).judge_contains_str_list(['pwd', 'pass_word', 'password', 'passwd', 'pass']):
50
+ v_enc = PwdEnc.enc_pwd(v_enc)
51
+ dict_new[k] = v_enc
52
+ return json.dumps(dict_new, ensure_ascii=False, indent=indent)
53
+
37
54
  @classmethod
38
55
  def update_cls_attribute(cls,**kwargs):
39
56
  for k ,v in kwargs.items():
@@ -0,0 +1,51 @@
1
+ import re
2
+
3
+
4
+ class PwdEnc:
5
+
6
+ @classmethod
7
+ def enc_broker_uri(cls, uri: str):
8
+ protocol_split_list = uri.split('://')
9
+ if len(protocol_split_list) != 2:
10
+ return uri
11
+ user_pass__ip_port_split_list = protocol_split_list[1].split('@')
12
+ if len(user_pass__ip_port_split_list) != 2:
13
+ return uri
14
+ user__pass_split_list = user_pass__ip_port_split_list[0].split(':')
15
+ if len(user__pass_split_list) != 2:
16
+ return uri
17
+ user = user__pass_split_list[0]
18
+ pwd = user__pass_split_list[1]
19
+ pwd_enc = cls.enc_pwd(pwd)
20
+ return f'{protocol_split_list[0]}://{user}:{pwd_enc}@{user_pass__ip_port_split_list[1]}'
21
+
22
+ @staticmethod
23
+ def enc_pwd(pwd: str, plain_len=3):
24
+ pwd_enc = pwd
25
+ if len(pwd_enc) > plain_len:
26
+ pwd_enc = f'{pwd_enc[:plain_len]}{"*" * (len(pwd_enc) - plain_len)}'
27
+ return pwd_enc
28
+
29
+
30
+ class StrHelper:
31
+ def __init__(self, strx: str):
32
+ self.strx = strx
33
+
34
+ def judge_contains_str_list(self, str_list: list, ignore_case=True):
35
+ for str1 in str_list:
36
+ if str1 in self.strx:
37
+ return True
38
+ if ignore_case:
39
+ if str1.lower() in self.strx.lower():
40
+ return True
41
+ return False
42
+
43
+
44
+ if __name__ == '__main__':
45
+ str1 = "amqp://admin:abc234@108.55.33.99:5672/"
46
+ str2 = "redis://:myRedisPass1234@127.0.0.1:6379/0"
47
+ print(PwdEnc.enc_broker_uri(str1))
48
+ print(PwdEnc.enc_broker_uri(str2))
49
+ print(PwdEnc.enc_pwd('465460dsdsd'))
50
+
51
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 44.5
3
+ Version: 44.7
4
4
  Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚
5
5
  Home-page: https://github.com/ydf0509/funboost
6
6
  Author: bfzs
@@ -47,6 +47,7 @@ funboost/consumers/base_consumer.py
47
47
  funboost/consumers/celery_consumer.py
48
48
  funboost/consumers/confirm_mixin.py
49
49
  funboost/consumers/dramatiq_consumer.py
50
+ funboost/consumers/empty_consumer.py
50
51
  funboost/consumers/http_consumer.py
51
52
  funboost/consumers/http_consumer000.py
52
53
  funboost/consumers/httpsqs_consumer.py
@@ -97,6 +98,7 @@ funboost/core/current_task.py
97
98
  funboost/core/exceptions.py
98
99
  funboost/core/fabric_deploy_helper.py
99
100
  funboost/core/funboost_config_getter.py
101
+ funboost/core/funboost_current_task_context_thread.py
100
102
  funboost/core/funboost_time.py
101
103
  funboost/core/func_params_model.py
102
104
  funboost/core/function_result_status_config.py
@@ -138,6 +140,7 @@ funboost/publishers/celery_publisher.py
138
140
  funboost/publishers/celery_publisher000.py
139
141
  funboost/publishers/confluent_kafka_publisher.py
140
142
  funboost/publishers/dramatiq_publisher.py
143
+ funboost/publishers/empty_publisher.py
141
144
  funboost/publishers/http_publisher.py
142
145
  funboost/publishers/httpsqs_publisher.py
143
146
  funboost/publishers/huey_publisher.py
@@ -180,6 +183,7 @@ funboost/utils/__init__.py
180
183
  funboost/utils/apscheduler_monkey.py
181
184
  funboost/utils/block_exit.py
182
185
  funboost/utils/bulk_operation.py
186
+ funboost/utils/class_utils.py
183
187
  funboost/utils/ctrl_c_end.py
184
188
  funboost/utils/custom_pysnooper.py
185
189
  funboost/utils/decorators.py
@@ -197,6 +201,7 @@ funboost/utils/redis_manager_old.py
197
201
  funboost/utils/resource_monitoring.py
198
202
  funboost/utils/restart_python.py
199
203
  funboost/utils/simple_data_class.py
204
+ funboost/utils/str_utils.py
200
205
  funboost/utils/time_util.py
201
206
  funboost/utils/un_strict_json_dumps.py
202
207
  funboost/utils/dependency_packages/__init__.py
File without changes
File without changes
File without changes
File without changes
File without changes