funboost 42.0__py3-none-any.whl → 42.2__py3-none-any.whl

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.

funboost/__init__.py CHANGED
@@ -13,7 +13,7 @@ set_frame_config这个模块的 use_config_form_funboost_config_module() 是核
13
13
  这段注释说明和使用的用户无关,只和框架开发人员有关.
14
14
  '''
15
15
 
16
- __version__ = "42.0"
16
+ __version__ = "42.2"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -7,6 +7,7 @@ from functools import partial
7
7
 
8
8
  import celery
9
9
 
10
+ import nb_log
10
11
  from funboost.funboost_config_deafult import BrokerConnConfig,FunboostCommonConfig
11
12
  from funboost import ConcurrentModeEnum
12
13
  from funboost.core.loggers import get_funboost_file_logger,get_logger
@@ -109,4 +110,14 @@ class CeleryHelper:
109
110
  使用nb_log的日志来取代celery的日志
110
111
  """
111
112
  celery_app.conf.worker_hijack_root_logger = False
113
+ # logging.getLogger('celery').handlers=[]
114
+ # logging.getLogger('celery.worker.strategy').handlers = []
115
+ # logging.getLogger('celery.app.trace').handlers = []
116
+ # logging.getLogger('celery.worker').handlers = []
117
+ # logging.getLogger('celery.app').handlers = []
118
+ # logging.getLogger().handlers=[]
112
119
  get_logger('celery', log_level_int=log_level, log_filename=log_filename, formatter_template=formatter_template, )
120
+ get_logger(None, log_level_int=logging.WARNING, log_filename=log_filename, formatter_template=formatter_template, )
121
+ for name in ['celery','celery.worker.strategy','celery.app.trace','celery.worker','celery.app',None]:
122
+ nb_log.LogManager(name).prevent_add_handlers()
123
+ nb_log.LogManager(None).preset_log_level(logging.WARNING)
funboost/constant.py CHANGED
@@ -14,7 +14,7 @@ class BrokerEnum:
14
14
 
15
15
  MONGOMQ = 'MONGOMQ' # 使用mongo的表中的行模拟的 作为分布式消息队列,支持消费确认。
16
16
 
17
- SQLITE_QUEUE = 'sqlite3' # 使用基于sqlute3模拟消息队列,支持消费确认和持久化,但不支持跨机器共享任务,可以基于本机单机跨脚本和跨进程共享任务,好处是不需要安装中间件。
17
+ SQLITE_QUEUE = 'sqlite3' # 使用基于sqlite3模拟消息队列,支持消费确认和持久化,但不支持跨机器共享任务,可以基于本机单机跨脚本和跨进程共享任务,好处是不需要安装中间件。
18
18
  PERSISTQUEUE = SQLITE_QUEUE # PERSISTQUEUE的别名
19
19
 
20
20
  NSQ = 'NSQ' # 基于nsq作为分布式消息队列,支持消费确认。
@@ -626,8 +626,8 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
626
626
  if self.consumer_params.log_level <= logging.DEBUG:
627
627
  result_str_to_be_print = str(function_result_status.result)[:100] if len(str(function_result_status.result)) < 100 else str(function_result_status.result)[:100] + ' 。。。。。 '
628
628
  self.logger.debug(f' 函数 {self.consuming_function.__name__} '
629
- f'第{current_retry_times + 1}次 运行, 正确了,函数运行时间是 {round(time.time() - t_start, 4)} 秒,入参是 {function_only_params} '
630
- f' 结果是 {result_str_to_be_print}{self._get_concurrent_info()} ')
629
+ f'第{current_retry_times + 1}次 运行, 正确了,函数运行时间是 {round(time.time() - t_start, 4)} 秒,入参是 {function_only_params} , '
630
+ f'结果是 {result_str_to_be_print} {self._get_concurrent_info()} ')
631
631
  except BaseException as e:
632
632
  if isinstance(e, (ExceptionForRequeue,)): # mongo经常维护备份时候插入不了或挂了,或者自己主动抛出一个ExceptionForRequeue类型的错误会重新入队,不受指定重试次数逇约束。
633
633
  log_msg = f'函数 [{self.consuming_function.__name__}] 中发生错误 {type(e)} {e} 。消息重新放入当前队列 {self._queue_name}'
@@ -0,0 +1,24 @@
1
+ from django.db import close_old_connections
2
+
3
+
4
+ def close_old_connections_deco(f):
5
+ """
6
+ 如果是消费函数里面需要操作django orm,那么请写上 consumin_function_decorator=close_old_connections_deco
7
+ @boost(BoosterParams(queue_name='create_student_queue',
8
+ broker_kind=BrokerEnum.REDIS_ACK_ABLE,
9
+ consumin_function_decorator=close_old_connections_deco, # 如果gone away 一直好不了,可以加这个装饰器. django_celery django-apschrduler 这些源码中 也是调用了 close_old_connections_deco方法.
10
+
11
+ )
12
+ )
13
+ """
14
+
15
+ def _inner(*args, **kwargs):
16
+ close_old_connections()
17
+ try:
18
+ result = f(*args, **kwargs)
19
+ finally:
20
+ close_old_connections()
21
+
22
+ return result
23
+
24
+ return _inner
@@ -0,0 +1,114 @@
1
+ import copy
2
+ import functools
3
+ import json
4
+
5
+ from db_libs.sqla_lib import SqlaReflectHelper
6
+ from sqlalchemy import create_engine
7
+
8
+ from funboost import boost, FunctionResultStatus, funboost_config_deafult
9
+
10
+ """
11
+ -- 如果用户是先保存到mysql中而非mongodb,用户自己先创建表,用于保存函数消费状态和结果.
12
+
13
+ CREATE TABLE funboost_consume_results
14
+ (
15
+ _id VARCHAR(255),
16
+ `function` VARCHAR(255),
17
+ host_name VARCHAR(255),
18
+ host_process VARCHAR(255),
19
+ insert_minutes VARCHAR(255),
20
+ insert_time datetime,
21
+ insert_time_str VARCHAR(255),
22
+ msg_dict JSON,
23
+ params JSON,
24
+ params_str VARCHAR(255),
25
+ process_id BIGINT(20),
26
+ publish_time FLOAT,
27
+ publish_time_str VARCHAR(255),
28
+ queue_name VARCHAR(255),
29
+ result VARCHAR(255),
30
+ run_times INT,
31
+ script_name VARCHAR(255),
32
+ script_name_long VARCHAR(255),
33
+ success BOOLEAN,
34
+ task_id VARCHAR(255),
35
+ thread_id BIGINT(20),
36
+ time_cost FLOAT,
37
+ time_end FLOAT,
38
+ time_start FLOAT,
39
+ total_thread INT,
40
+ utime VARCHAR(255),
41
+ `exception` MEDIUMTEXT ,
42
+ rpc_result_expire_seconds BIGINT(20),
43
+ primary key (_id),
44
+ key idx_insert_time(insert_time),
45
+ key idx_queue_name_insert_time(queue_name,insert_time),
46
+ key idx_params_str(params_str)
47
+ )
48
+
49
+
50
+
51
+ """
52
+
53
+
54
+ def _gen_insert_sql_and_values_by_dict(dictx: dict):
55
+ key_list = [f'`{k}`' for k in dictx.keys()]
56
+ fields = ", ".join(key_list)
57
+
58
+ # 构建占位符字符串
59
+ placeholders = ", ".join(['%s'] * len(dictx))
60
+
61
+ # 构建插入语句
62
+ insert_sql = f"INSERT INTO funboost_consume_results ({fields}) VALUES ({placeholders})"
63
+
64
+ # 获取数据字典的值作为插入的值
65
+ values = tuple(dictx.values())
66
+ values_new = tuple([json.dumps(v) if isinstance(v, dict) else v for v in values])
67
+ return insert_sql, values_new
68
+
69
+
70
+ def _gen_insert_sqlalchemy(dictx: dict):
71
+ key_list = [f'`{k}`' for k in dictx.keys()]
72
+ fields = ", ".join(key_list)
73
+
74
+ value_list = dictx.keys()
75
+ value_list_2 = [f':{f}' for f in value_list]
76
+ values = ", ".join(value_list_2)
77
+
78
+ # 构建插入语句
79
+ insert_sql = f"INSERT INTO funboost_consume_results ({fields}) VALUES ({values})"
80
+
81
+ return insert_sql
82
+
83
+
84
+ @functools.lru_cache()
85
+ def get_sqla_helper():
86
+ enginex = create_engine(
87
+ funboost_config_deafult.BrokerConnConfig.SQLACHEMY_ENGINE_URL,
88
+ max_overflow=10, # 超过连接池大小外最多创建的连接
89
+ pool_size=50, # 连接池大小
90
+ pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
91
+ pool_recycle=3600, # 多久之后对线程池中的线程进行一次连接的回收(重置)
92
+ echo=True)
93
+ sqla_helper = SqlaReflectHelper(enginex)
94
+ t_funboost_consume_results = sqla_helper.base_classes.funboost_consume_results
95
+ return enginex, sqla_helper, t_funboost_consume_results
96
+
97
+
98
+ def save_result_status_to_sqlalchemy(function_result_status: FunctionResultStatus):
99
+ """ function_result_status变量上有各种丰富的信息 ,用户可以使用其中的信息
100
+ 用户自定义记录函数消费信息的钩子函数
101
+
102
+ 例如 @boost('test_user_custom', user_custom_record_process_info_func=save_result_status_to_sqlalchemy)
103
+ """
104
+ enginex, sqla_helper, t_funboost_consume_results = get_sqla_helper()
105
+
106
+ with sqla_helper.session as ss:
107
+ status_dict = function_result_status.get_status_dict()
108
+ status_dict_new = copy.copy(status_dict)
109
+ for k, v in status_dict.items():
110
+ if isinstance(v, dict):
111
+ status_dict_new[k] = json.dumps(v)
112
+ # sql = _gen_insert_sqlalchemy(status_dict) # 这种是sqlahemy sql方式插入.
113
+ # ss.execute(sql, status_dict_new)
114
+ ss.merge(t_funboost_consume_results(**status_dict_new)) # 这种是orm方式插入.
@@ -85,6 +85,24 @@ class BoosterFire(object):
85
85
  BoostersManager.get_booster(queue_anme).consume()
86
86
  ctrl_c_recv()
87
87
 
88
+ def consume_all_queues(self,):
89
+ """
90
+ 启动所有消息队列名的消费,无需指定队列名;
91
+ 例子: consume_all_queues
92
+ """
93
+ for queue_anme in BoostersManager.get_all_queues():
94
+ BoostersManager.get_booster(queue_anme).consume()
95
+ ctrl_c_recv()
96
+
97
+ def multi_process_consume_all_queues(self,process_num):
98
+ """
99
+ 启动所有消息队列名的消费,无需指定队列名,每个队列启动n个单独的消费进程;
100
+ 例子: multi_process_consume_all_queues 2
101
+ """
102
+ for queue_anme in BoostersManager.get_all_queues():
103
+ BoostersManager.get_booster(queue_anme).multi_process_consume(process_num)
104
+ ctrl_c_recv()
105
+
88
106
  def multi_process_consume(self, **queue_name__process_num):
89
107
  """
90
108
  使用多进程启动消费,每个队列开启多个单独的进程消费;
@@ -1,16 +1,22 @@
1
- class ExceptionForRetry(Exception):
1
+
2
+
3
+ class FunboostException(Exception):
4
+ """funboost 异常基类"""
5
+
6
+
7
+ class ExceptionForRetry(FunboostException):
2
8
  """为了重试的,抛出错误。只是定义了一个子类,用不用都可以,函数出任何类型错误了框架都会自动重试"""
3
9
 
4
10
 
5
- class ExceptionForRequeue(Exception):
11
+ class ExceptionForRequeue(FunboostException):
6
12
  """框架检测到此错误,重新放回当前队列中"""
7
13
 
8
14
 
9
- class ExceptionForPushToDlxqueue(Exception):
15
+ class ExceptionForPushToDlxqueue(FunboostException):
10
16
  """框架检测到ExceptionForPushToDlxqueue错误,发布到死信队列"""
11
17
 
12
18
 
13
- class BoostDecoParamsIsOldVersion(Exception):
19
+ class BoostDecoParamsIsOldVersion(FunboostException):
14
20
  new_version_change_hint = """
15
21
  你的@boost入参是老的方式,建议用新的入参方式,老入参方式不再支持函数入参代码自动补全了。
16
22
 
funboost/core/loggers.py CHANGED
@@ -42,7 +42,7 @@ class FunboostMetaTypeFileLogger(type):
42
42
 
43
43
  flogger = get_funboost_file_logger('funboost', )
44
44
 
45
- print(_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL'))
45
+ # print(_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL'))
46
46
  logger_prompt = get_funboost_file_logger('funboost.prompt', log_level_int=_try_get_user_funboost_common_config('FUNBOOST_PROMPT_LOG_LEVEL') or logging.DEBUG) # funboost框架的提示,用户自己可以设置日志级别
47
47
  nb_log.LogManager('_KeepAliveTimeThread').preset_log_level(_try_get_user_funboost_common_config('KEEPALIVETIMETHREAD_LOG_LEVEL') or logging.DEBUG)
48
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 42.0
3
+ Version: 42.2
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
@@ -74,7 +74,7 @@ Requires-Dist: confluent-kafka ==1.7.0 ; extra == 'all'
74
74
  Requires-Dist: celery ; extra == 'all'
75
75
  Requires-Dist: flower ; extra == 'all'
76
76
  Requires-Dist: nameko ==2.14.1 ; extra == 'all'
77
- Requires-Dist: sqlalchemy ==1.4.8 ; extra == 'all'
77
+ Requires-Dist: sqlalchemy ==1.4.13 ; extra == 'all'
78
78
  Requires-Dist: sqlalchemy-utils ==0.36.1 ; extra == 'all'
79
79
  Requires-Dist: dramatiq ==1.14.2 ; extra == 'all'
80
80
  Requires-Dist: huey ==2.4.5 ; extra == 'all'
@@ -86,7 +86,7 @@ Requires-Dist: confluent-kafka ==1.7.0 ; extra == 'extra_brokers'
86
86
  Requires-Dist: celery ; extra == 'extra_brokers'
87
87
  Requires-Dist: flower ; extra == 'extra_brokers'
88
88
  Requires-Dist: nameko ==2.14.1 ; extra == 'extra_brokers'
89
- Requires-Dist: sqlalchemy ==1.4.8 ; extra == 'extra_brokers'
89
+ Requires-Dist: sqlalchemy ==1.4.13 ; extra == 'extra_brokers'
90
90
  Requires-Dist: sqlalchemy-utils ==0.36.1 ; extra == 'extra_brokers'
91
91
  Requires-Dist: dramatiq ==1.14.2 ; extra == 'extra_brokers'
92
92
  Requires-Dist: huey ==2.4.5 ; extra == 'extra_brokers'
@@ -212,11 +212,15 @@ pip install funboost --upgrade
212
212
  [//]: # ()
213
213
  [//]: # ([img-46.png]&#40;https://postimg.cc/hfW0VhCX&#41;)
214
214
 
215
- funboosts示图:
215
+ funboost示图:
216
+ ![](https://i.niupic.com/images/2024/02/03/g3tr.png)
217
+
216
218
 
217
219
  [//]: # ([![img-46.png]&#40;https://i.postimg.cc/tC7mQxWN/img-46.png&#41;]&#40;https://postimg.cc/hfW0VhCX&#41;)
218
- 就是最普通的生产者消费者流程图
219
- ![](https://i.niupic.com/images/2023/12/18/dVaP.png)
220
+
221
+ [//]: # (就是最普通的生产者消费者流程图)
222
+
223
+ [//]: # (![]&#40;https://i.niupic.com/images/2023/12/18/dVaP.png&#41;)
220
224
 
221
225
  也就是这种非常普通的流程图,一样的意思
222
226
 
@@ -1,11 +1,11 @@
1
- funboost/__init__.py,sha256=q0UykVo38KJJ0cBlSEyUJCuV5h_zohVCPB5_M-NcsHo,3766
1
+ funboost/__init__.py,sha256=jbK_usCoKhBzDuzne46HhWlbx6ZRkD6-hT_JjmT3iKg,3766
2
2
  funboost/__init__old.py,sha256=07A1MLsxLtuRQQOIfDyphddOwNBrGe34enoHWAnjV14,20379
3
3
  funboost/__main__.py,sha256=-6Nogi666Y0LN8fVm3JmHGTOk8xEGWvotW_GDbSaZME,1065
4
- funboost/constant.py,sha256=VGwOZGP7U9Hq5--gPGT7mZFQ-a171gcxFYupJOMw7Y4,7162
4
+ funboost/constant.py,sha256=haAbx2cvTN9itPzBG4v3_ODIi1-RudvBj6s_QjniqjU,7162
5
5
  funboost/funboost_config_deafult.py,sha256=9F8xhjJqe32HNcDGVCTyaJRAv_2Ei2zDoKwNC-QJk5c,6053
6
6
  funboost/set_frame_config.py,sha256=bEsW4a4EuE3PpyypNuWSfsB-_bvT94pktJGKk4r-rlo,14328
7
7
  funboost/assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- funboost/assist/celery_helper.py,sha256=xp_t6DnQ57H40ovYGdL55Q5B1UojEy0WfMHZrvj7hDQ,4882
8
+ funboost/assist/celery_helper.py,sha256=ae8nbwHEulXa9gSKrNkW87SS8BZx7ZJwzWYY6hniE2g,5603
9
9
  funboost/assist/dramatiq_helper.py,sha256=9mUyfBMAJXzwvB8LwOmapn3rY30a6UXt3tNOfL6OXoM,2106
10
10
  funboost/assist/huey_helper.py,sha256=PuJHIzK5oRd5RzbuxLMHhWlkKO3J-ObRK0mrMs_iQWs,1770
11
11
  funboost/assist/rocketry_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -33,7 +33,7 @@ funboost/concurrent_pool/backup/async_pool_executor0223.py,sha256=RVUZiylUvpTm6U
33
33
  funboost/concurrent_pool/backup/async_pool_executor_back.py,sha256=KL6zEQaa1KkZOlAO85mCC1gwLm-YC5Ghn21IUom0UKM,9598
34
34
  funboost/concurrent_pool/backup/async_pool_executor_janus.py,sha256=OHMWJ9l3EYTpPpcrPrGGKd4K0tmQ2PN8HiX0Dta0EOo,5728
35
35
  funboost/consumers/__init__.py,sha256=ZXY_6Kut1VYNQiF5aWEgIWobsW1ht9YUP0TdRZRWFqI,126
36
- funboost/consumers/base_consumer.py,sha256=NWOdVDCumokgwXrWslx29fDdOrdRkXzodSa_88i2Jmw,72945
36
+ funboost/consumers/base_consumer.py,sha256=T-BgSzf3ttOBBtPbjb5g0sewzZOcXEpzpTzMTUdHfwk,72942
37
37
  funboost/consumers/celery_consumer.py,sha256=W25gbGyimf8KG5lLbtgar3Ix7F3O4cIRBLtRq8nJ0AE,9216
38
38
  funboost/consumers/confirm_mixin.py,sha256=eY6fNwx51Hn4bQSYRjyTRwOqfCGsikVnd2Ga_Ep31N4,6062
39
39
  funboost/consumers/dramatiq_consumer.py,sha256=ozmeAfeF0U-YNYHK4suQB0N264h5AZdfMH0O45Mh-8A,2229
@@ -75,26 +75,28 @@ funboost/consumers/udp_consumer.py,sha256=J-G1ZYktXZ_er_1fg3FdSPVl4V_eEIHZXlBadC
75
75
  funboost/consumers/zeromq_consumer.py,sha256=mRU1eC1OhhPnW6L9cQIztKcDg6bfVttsGRE-plC0AqE,4232
76
76
  funboost/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  funboost/contrib/api_publish_msg.py,sha256=bRbKXw4X1CSkBLFNtRREoivrelhQiEnCynxJHywSa4I,2448
78
+ funboost/contrib/django_db_deco.py,sha256=RJaRUYdVqS10gWqM4Ncs0Lngox52SUaqIIn5GK5a8Uo,865
78
79
  funboost/contrib/queue2queue.py,sha256=YlYY6AioaSQ_DlhsktF1gIzYAEpa6nWiILOA0yrQvXw,4906
79
80
  funboost/contrib/redis_consume_latest_msg_broker.py,sha256=ESortBZ2qu_4PBCa3e3FeL2k_PClZNb74_v55HV-BOg,1902
81
+ funboost/contrib/save_result_status_to_sqldb.py,sha256=AxvD7nHs4sjr9U0kwEZzyPKrsGdU_JzEgzzhh_V1_4w,4071
80
82
  funboost/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
83
  funboost/core/active_cousumer_info_getter.py,sha256=09fEc-BTEIRfDDfHmOvKnMjLjtOyp4edLsUlAXUR_Qs,4966
82
84
  funboost/core/booster.py,sha256=s7FNcKiGsTM6TEkcVO9EjQ0rfWL3XGN3yvpRAN7CGgI,13259
83
- funboost/core/exceptions.py,sha256=oXOEBBCoU8jJv1uyWrcItnGi778Hrx2c_tA5KAbRGy8,1201
85
+ funboost/core/exceptions.py,sha256=pLF7BkRJAfDiWp2_xGZqencmwdPiSQI1NENbImExknY,1311
84
86
  funboost/core/fabric_deploy_helper.py,sha256=KPjifNy1G1tDOT2eaR0X8hegot0HUk5vF-P1DnhxME4,8941
85
87
  funboost/core/func_params_model.py,sha256=jVPWke_UpwZ_Ik28_dL_j8h2dSrtYlEFTtUWMIw2KCA,17594
86
88
  funboost/core/function_result_status_config.py,sha256=PyjqAQOiwsLt28sRtH-eYRjiI3edPFO4Nde0ILFRReE,1764
87
89
  funboost/core/function_result_status_saver.py,sha256=Vw9f7YnLUb1xycPCa1aatzGOP21lOJgY7Diz03cqMKI,8969
88
90
  funboost/core/helper_funs.py,sha256=M9Ad9EzgHdP581X-vuFgCavJRoezLGXlXSFg7zyMWD0,1578
89
91
  funboost/core/kill_remote_task.py,sha256=MZ5vWLGt6SxyN76h5Lf_id9tyVUzjR-qXNyJwXaGlZY,8129
90
- funboost/core/loggers.py,sha256=98r1FWytlBsOufK-pLW9_LYinAbYU2TdXdjoGPYHkcc,2405
92
+ funboost/core/loggers.py,sha256=173aXdqE8nAe8t6OcVMNAFsCUClVrWQovdQhTAg9IyM,2407
91
93
  funboost/core/msg_result_getter.py,sha256=oZDuLDR5XQNzzvgDTsA7wroICToPwrkU9-OAaXXUQSk,8031
92
94
  funboost/core/muliti_process_enhance.py,sha256=0wgy8qnxfg_g-BtlKfysH6TZ9s97EWTdLFVWPAVUGw0,3601
93
95
  funboost/core/try_get_user_funboost_common_config.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
96
  funboost/core/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
97
  funboost/core/cli/discovery_boosters.py,sha256=G23pwJDNi5iQnkgOEzMlioaK-rPCaMx3RJpAcTT1_9g,2930
96
98
  funboost/core/cli/funboost_cli_user_templ.py,sha256=vII8IELLhlYpHZmfUsdt-UE699tOSBugkiFl90sOLKo,2109
97
- funboost/core/cli/funboost_fire.py,sha256=LUE_bUV3577RhJ6K1rP0kSv2cwLLqpRZqBotMjx_sqg,4573
99
+ funboost/core/cli/funboost_fire.py,sha256=aXp98CGozh1QgTVhL5RWEeae2DyjeTtZDs0EFPxrBJ8,5315
98
100
  funboost/factories/__init__.py,sha256=s7kKKjR1HU5eMjPD6r5b-SXTVMo1zBp2JjOAtkyt5Yo,178
99
101
  funboost/factories/broker_kind__publsiher_consumer_type_map.py,sha256=2fWuNVDOYbs8CCrQnQtWIc3wwQ5a9AOFEd7-cufj3I8,9630
100
102
  funboost/factories/consumer_factory.py,sha256=rPceMsUr2mrcFXL-_3kQGknNiADjfgTh9wXG1qd8yAw,1041
@@ -259,9 +261,9 @@ funboost/utils/pysnooper_ydf/utils.py,sha256=evSmGi_Oul7vSP47AJ0DLjFwoCYCfunJZ1m
259
261
  funboost/utils/pysnooper_ydf/variables.py,sha256=QejRDESBA06KG9OH4sBT4J1M55eaU29EIHg8K_igaXo,3693
260
262
  funboost/utils/times/__init__.py,sha256=Y4bQD3SIA_E7W2YvHq2Qdi0dGM4H2DxyFNdDOuFOq1w,2417
261
263
  funboost/utils/times/version.py,sha256=11XfnZVVzOgIhXXdeN_mYfdXThfrsbQHpA0wCjz-hpg,17
262
- funboost-42.0.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
263
- funboost-42.0.dist-info/METADATA,sha256=9BEEjoOoJ2_HTGBO7-p9phhg5LzQVnrq6OLB_GZrsrw,30388
264
- funboost-42.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
265
- funboost-42.0.dist-info/entry_points.txt,sha256=yMSSAGRzRAAhGyNNQHw24MooKlDZsaJ499_D6fPl58A,96
266
- funboost-42.0.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
267
- funboost-42.0.dist-info/RECORD,,
264
+ funboost-42.2.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
265
+ funboost-42.2.dist-info/METADATA,sha256=-Ejr8ipY45w6t4QOP3yt4nvsYpD35zQeayRqYXAVx1A,30477
266
+ funboost-42.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
267
+ funboost-42.2.dist-info/entry_points.txt,sha256=yMSSAGRzRAAhGyNNQHw24MooKlDZsaJ499_D6fPl58A,96
268
+ funboost-42.2.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
269
+ funboost-42.2.dist-info/RECORD,,