funboost 40.9__py3-none-any.whl → 41.1__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 +2 -2
- funboost/assist/dramatiq_helper.py +2 -2
- funboost/concurrent_pool/flexible_thread_pool.py +2 -2
- funboost/consumers/base_consumer.py +5 -2
- funboost/core/booster.py +3 -2
- funboost/core/loggers.py +7 -5
- funboost/set_frame_config.py +1 -1
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/METADATA +1 -1
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/RECORD +13 -13
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/LICENSE +0 -0
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/WHEEL +0 -0
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/entry_points.txt +0 -0
- {funboost-40.9.dist-info → funboost-41.1.dist-info}/top_level.txt +0 -0
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__ = "
|
|
16
|
+
__version__ = "41.1"
|
|
17
17
|
|
|
18
18
|
from funboost.set_frame_config import show_frame_config
|
|
19
19
|
|
|
@@ -21,7 +21,7 @@ from funboost.set_frame_config import show_frame_config
|
|
|
21
21
|
from funboost.utils.dependency_packages_in_pythonpath import add_to_pythonpath # 这是把 dependency_packages_in_pythonpath 添加到 PYTHONPATH了。
|
|
22
22
|
from funboost.utils import monkey_patches
|
|
23
23
|
|
|
24
|
-
from funboost.core.loggers import get_logger, get_funboost_file_logger, FunboostFileLoggerMixin,
|
|
24
|
+
from funboost.core.loggers import get_logger, get_funboost_file_logger, FunboostFileLoggerMixin, FunboostMetaTypeFileLogger, flogger
|
|
25
25
|
from funboost.core.func_params_model import (BoosterParams, BoosterParamsComplete, FunctionResultStatusPersistanceConfig,
|
|
26
26
|
PriorityConsumingControlConfig, PublisherParams, BoosterParamsComplete)
|
|
27
27
|
from funboost.funboost_config_deafult import FunboostCommonConfig, BrokerConnConfig
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
-
from funboost.core.loggers import
|
|
2
|
+
from funboost.core.loggers import FunboostMetaTypeFileLogger
|
|
3
3
|
import dramatiq
|
|
4
4
|
from dramatiq.cli import main
|
|
5
5
|
from funboost.funboost_config_deafult import BrokerConnConfig
|
|
@@ -19,7 +19,7 @@ dramatiq.set_broker(broker)
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class DramatiqHelper(metaclass=
|
|
22
|
+
class DramatiqHelper(metaclass=FunboostMetaTypeFileLogger):
|
|
23
23
|
|
|
24
24
|
broker = dramatiq.get_broker()
|
|
25
25
|
to_be_start_work_celery_queue_name_set = set() # 存放需要worker运行的queue name。
|
|
@@ -15,7 +15,7 @@ import threading
|
|
|
15
15
|
from functools import wraps
|
|
16
16
|
|
|
17
17
|
from funboost.concurrent_pool import FunboostBaseConcurrentPool
|
|
18
|
-
from funboost.core.loggers import FunboostFileLoggerMixin,LoggerLevelSetterMixin,
|
|
18
|
+
from funboost.core.loggers import FunboostFileLoggerMixin,LoggerLevelSetterMixin,FunboostMetaTypeFileLogger
|
|
19
19
|
|
|
20
20
|
class FlexibleThreadPool(FunboostFileLoggerMixin, LoggerLevelSetterMixin,FunboostBaseConcurrentPool):
|
|
21
21
|
KEEP_ALIVE_TIME = 10
|
|
@@ -91,7 +91,7 @@ def sync_or_async_fun_deco(func):
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
# noinspection PyProtectedMember
|
|
94
|
-
class _KeepAliveTimeThread(threading.Thread,metaclass=
|
|
94
|
+
class _KeepAliveTimeThread(threading.Thread, metaclass=FunboostMetaTypeFileLogger):
|
|
95
95
|
def __init__(self, thread_pool: FlexibleThreadPool):
|
|
96
96
|
super().__init__()
|
|
97
97
|
self.pool = thread_pool
|
|
@@ -136,7 +136,10 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
|
|
|
136
136
|
self._run = self._async_run # 这里做了自动转化,使用async_run代替run
|
|
137
137
|
self.logger:logging.Logger
|
|
138
138
|
self._build_logger()
|
|
139
|
-
stdout_write(f'''{time.strftime("%H:%M:%S")} "{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0;37;44m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__}\033[0m\n''')
|
|
139
|
+
# stdout_write(f'''{time.strftime("%H:%M:%S")} "{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0;37;44m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__}\033[0m\n''')
|
|
140
|
+
print(f'''\033[0m
|
|
141
|
+
"{self.consumer_params.auto_generate_info['where_to_instantiate']}" \033[0m此行 实例化队列名 {self.queue_name} 的消费者, 类型为 {self.__class__} ''')
|
|
142
|
+
|
|
140
143
|
# only_print_on_main_process(f'{current_queue__info_dict["queue_name"]} 的消费者配置:\n', un_strict_json_dumps.dict2json(current_queue__info_dict))
|
|
141
144
|
|
|
142
145
|
# self._do_task_filtering = consumer_params.do_task_filtering
|
|
@@ -901,7 +904,7 @@ class ConcurrentModeDispatcher(FunboostFileLoggerMixin):
|
|
|
901
904
|
elif self._concurrent_mode == ConcurrentModeEnum.EVENTLET:
|
|
902
905
|
from funboost.concurrent_pool.custom_evenlet_pool_executor import evenlet_timeout_deco
|
|
903
906
|
self.timeout_deco = evenlet_timeout_deco
|
|
904
|
-
self.logger.info(f'{self.consumer} 设置并发模式 {self.consumer.consumer_params.concurrent_mode}')
|
|
907
|
+
# self.logger.info(f'{self.consumer} 设置并发模式 {self.consumer.consumer_params.concurrent_mode}')
|
|
905
908
|
|
|
906
909
|
def check_all_concurrent_mode(self):
|
|
907
910
|
if GlobalVars.global_concurrent_mode is not None and \
|
funboost/core/booster.py
CHANGED
|
@@ -29,6 +29,7 @@ class Booster:
|
|
|
29
29
|
"""
|
|
30
30
|
@boost 这是funboost框架最重要的一个函数,必须看懂BoosterParams里面的入参有哪些。
|
|
31
31
|
pydatinc pycharm编程代码补全,请安装 pydantic插件, 在pycharm的 file -> settings -> Plugins -> 输入 pydantic 搜索,点击安装 pydantic 插件.
|
|
32
|
+
(高版本的pycharm pydantic是内置支持代码补全的,由此可见,pydantic太好了,pycharm官方都来支持)
|
|
32
33
|
|
|
33
34
|
强烈建议所有入参放在 BoosterParams() 中,不要直接在BoosterParams之外传参.现在是兼容老的直接在@boost中传参方式.
|
|
34
35
|
"""
|
|
@@ -109,13 +110,13 @@ class Booster:
|
|
|
109
110
|
def _safe_push(self, *func_args, **func_kwargs):
|
|
110
111
|
""" 多进程安全的,在fork多进程(非spawn多进程)情况下,有的包多进程不能共用一个连接,例如kafka"""
|
|
111
112
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
112
|
-
consumer.publisher_of_same_queue.push(*func_args, **func_kwargs)
|
|
113
|
+
return consumer.publisher_of_same_queue.push(*func_args, **func_kwargs)
|
|
113
114
|
|
|
114
115
|
def _safe_publish(self, msg: typing.Union[str, dict], task_id=None,
|
|
115
116
|
priority_control_config: PriorityConsumingControlConfig = None):
|
|
116
117
|
""" 多进程安全的,在fork多进程(非spawn多进程)情况下,很多包跨线程/进程不能共享中间件连接,"""
|
|
117
118
|
consumer = BoostersManager.get_or_create_booster_by_queue_name(self.queue_name).consumer
|
|
118
|
-
consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
119
|
+
return consumer.publisher_of_same_queue.publish(msg=msg, task_id=task_id, priority_control_config=priority_control_config)
|
|
119
120
|
|
|
120
121
|
# noinspection PyMethodMayBeStatic
|
|
121
122
|
def multi_process_consume(self, process_num=1):
|
funboost/core/loggers.py
CHANGED
|
@@ -7,18 +7,19 @@ import logging
|
|
|
7
7
|
LOG_FILE_NAME = 'funboost.log'
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def get_funboost_file_logger(name, *, log_level_int: int = None, **kwargs):
|
|
10
|
+
def get_funboost_file_logger(name, *, log_level_int: int = None, **kwargs) -> logging.Logger:
|
|
11
11
|
"""日志自动写入 funboost.log文件中,不需要亲自指定文件名"""
|
|
12
12
|
kwargs['log_filename'] = LOG_FILE_NAME
|
|
13
|
+
kwargs['error_log_filename'] = nb_log.generate_error_file_name(log_filename=LOG_FILE_NAME)
|
|
13
14
|
return nb_log.get_logger(name, log_level_int=log_level_int, **kwargs, )
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class FunboostFileLoggerMixin(nb_log.LoggerMixin):
|
|
17
|
-
"""给对象添加一个logger
|
|
18
|
+
"""给对象添加一个logger树形命名空间是类本身,写入funboost.log"""
|
|
18
19
|
subclass_logger_dict = {}
|
|
19
20
|
|
|
20
21
|
@property
|
|
21
|
-
def logger(self):
|
|
22
|
+
def logger(self) -> logging.Logger:
|
|
22
23
|
logger_name_key = self.logger_full_name + '3'
|
|
23
24
|
if logger_name_key not in self.subclass_logger_dict:
|
|
24
25
|
logger_var = get_funboost_file_logger(self.logger_full_name)
|
|
@@ -28,14 +29,14 @@ class FunboostFileLoggerMixin(nb_log.LoggerMixin):
|
|
|
28
29
|
return self.subclass_logger_dict[logger_name_key]
|
|
29
30
|
|
|
30
31
|
|
|
31
|
-
class
|
|
32
|
+
class FunboostMetaTypeFileLogger(type):
|
|
32
33
|
"""
|
|
33
34
|
给类添加一个属性.名空间是类本身,写入funboost.log
|
|
34
35
|
"""
|
|
35
36
|
|
|
36
37
|
def __init__(cls, name, bases, attrs):
|
|
37
38
|
super().__init__(name, bases, attrs)
|
|
38
|
-
cls.logger = get_funboost_file_logger(name)
|
|
39
|
+
cls.logger:logging.Logger = get_funboost_file_logger(name)
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
flogger = get_funboost_file_logger('funboost', )
|
|
@@ -46,3 +47,4 @@ develop_logger = get_logger('funboost_develop', log_level_int=logging.WARNING, l
|
|
|
46
47
|
if __name__ == '__main__':
|
|
47
48
|
logger1 = get_funboost_file_logger('name1')
|
|
48
49
|
logger1.info('啦啦啦啦啦啦啦')
|
|
50
|
+
logger1.error('错错错')
|
funboost/set_frame_config.py
CHANGED
|
@@ -135,7 +135,7 @@ def use_config_form_funboost_config_module():
|
|
|
135
135
|
# nb_print(m.__dict__.items())
|
|
136
136
|
only_print_on_main_process(f'分布式函数调度框架 读取到\n "{m.__file__}:1" 文件里面的变量作为优先配置了\n')
|
|
137
137
|
if not hasattr(m,'BrokerConnConfig'):
|
|
138
|
-
raise EnvironmentError(f'funboost 30.0版本升级了配置文件,中间件配置写成了类,请删除原来老的funboost_config.py
|
|
138
|
+
raise EnvironmentError(f'funboost 30.0版本升级了配置文件,中间件配置写成了类,请删除原来老的funboost_config.py配置文件:\n "{m.__file__}:1"')
|
|
139
139
|
funboost_config_deafult.BrokerConnConfig.update_cls_attribute(**m.BrokerConnConfig().get_dict())
|
|
140
140
|
funboost_config_deafult.FunboostCommonConfig.update_cls_attribute(**m.FunboostCommonConfig().get_dict())
|
|
141
141
|
# funboost_config_deafult.BoostDecoratorDefaultParams.update_cls_attribute(**m.BoostDecoratorDefaultParams().get_dict())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: funboost
|
|
3
|
-
Version:
|
|
3
|
+
Version: 41.1
|
|
4
4
|
Summary: pip install funboost,python全功能分布式函数调度框架,。支持python所有类型的并发模式和一切知名消息队列中间件,支持celery框架整体作为funboost中间件,python函数加速器,框架包罗万象,一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 方便 快速 强大,相见恨晚
|
|
5
5
|
Home-page: https://github.com/ydf0509/funboost
|
|
6
6
|
Author: bfzs
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
funboost/__init__.py,sha256=
|
|
1
|
+
funboost/__init__.py,sha256=RZcUbz2ISQw_OJWDMXvPdqyXX302LqQ3zStcCP0Z8ME,3765
|
|
2
2
|
funboost/__init__old.py,sha256=cSzw-ZQqtAAp5_-7eONXQT5fwz_JbZlRjDQPASDLUHk,20378
|
|
3
3
|
funboost/__main__.py,sha256=-6Nogi666Y0LN8fVm3JmHGTOk8xEGWvotW_GDbSaZME,1065
|
|
4
4
|
funboost/constant.py,sha256=VGwOZGP7U9Hq5--gPGT7mZFQ-a171gcxFYupJOMw7Y4,7162
|
|
5
5
|
funboost/funboost_config_deafult.py,sha256=Ux1mWZeJdiJSlza_bubHWcaB9sLeZSp-4RQulWxVp3U,5295
|
|
6
|
-
funboost/set_frame_config.py,sha256=
|
|
6
|
+
funboost/set_frame_config.py,sha256=MmTsPFx91N0UGp1UKyQMnw-Ma9tdyAzMy61dIyO4Nhs,14012
|
|
7
7
|
funboost/assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
funboost/assist/celery_helper.py,sha256=xp_t6DnQ57H40ovYGdL55Q5B1UojEy0WfMHZrvj7hDQ,4882
|
|
9
|
-
funboost/assist/dramatiq_helper.py,sha256=
|
|
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
|
|
12
12
|
funboost/assist/rq_helper.py,sha256=HYvQ7VqIMx7dAVZZhtqQmGReCJavEuc1BQPYvfm1EvY,1549
|
|
@@ -25,14 +25,14 @@ funboost/concurrent_pool/custom_gevent_pool_executor.py,sha256=k8M5o-8fhrASJyhzI
|
|
|
25
25
|
funboost/concurrent_pool/custom_threadpool_executor.py,sha256=i3OGtOjk5GOGvGjEMdYVzFVscSVPRFWmEe1yZeZLsCQ,11872
|
|
26
26
|
funboost/concurrent_pool/custom_threadpool_executor000.py,sha256=jJLXy3h-bELap6nZA6yLtdozzTWcvCtZ7IY6MTqLEAM,9317
|
|
27
27
|
funboost/concurrent_pool/fixed_thread_pool.py,sha256=JzaqjuHn6ffo1gZRVJEy5Te5NdCJt7heTmsVZT_AiBg,1609
|
|
28
|
-
funboost/concurrent_pool/flexible_thread_pool.py,sha256=
|
|
28
|
+
funboost/concurrent_pool/flexible_thread_pool.py,sha256=5HwRdbkwUP4NekXwFVchqmplvV4oxLTVPFj3U8I8oBk,5697
|
|
29
29
|
funboost/concurrent_pool/single_thread_executor.py,sha256=rRrqDGmJxxtKBUxigUl1WATLXTGODpmtNoVOF8vRt_w,468
|
|
30
30
|
funboost/concurrent_pool/backup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
funboost/concurrent_pool/backup/async_pool_executor0223.py,sha256=RVUZiylUvpTm6Um0PHAdDD2s7RVRXz8gHykYfktqLdI,9578
|
|
32
32
|
funboost/concurrent_pool/backup/async_pool_executor_back.py,sha256=KL6zEQaa1KkZOlAO85mCC1gwLm-YC5Ghn21IUom0UKM,9598
|
|
33
33
|
funboost/concurrent_pool/backup/async_pool_executor_janus.py,sha256=OHMWJ9l3EYTpPpcrPrGGKd4K0tmQ2PN8HiX0Dta0EOo,5728
|
|
34
34
|
funboost/consumers/__init__.py,sha256=ZXY_6Kut1VYNQiF5aWEgIWobsW1ht9YUP0TdRZRWFqI,126
|
|
35
|
-
funboost/consumers/base_consumer.py,sha256=
|
|
35
|
+
funboost/consumers/base_consumer.py,sha256=uYtys1dIJ5U14vj0YjvLT8255XN6Jg6p63l6ePYXdyg,71726
|
|
36
36
|
funboost/consumers/celery_consumer.py,sha256=MhWINKnm1BWMg34ecK9veLzUvKMu4SZyuMMVy-gwqS0,9215
|
|
37
37
|
funboost/consumers/confirm_mixin.py,sha256=eY6fNwx51Hn4bQSYRjyTRwOqfCGsikVnd2Ga_Ep31N4,6062
|
|
38
38
|
funboost/consumers/dramatiq_consumer.py,sha256=ozmeAfeF0U-YNYHK4suQB0N264h5AZdfMH0O45Mh-8A,2229
|
|
@@ -78,7 +78,7 @@ funboost/contrib/queue2queue.py,sha256=YlYY6AioaSQ_DlhsktF1gIzYAEpa6nWiILOA0yrQv
|
|
|
78
78
|
funboost/contrib/redis_consume_latest_msg_broker.py,sha256=ESortBZ2qu_4PBCa3e3FeL2k_PClZNb74_v55HV-BOg,1902
|
|
79
79
|
funboost/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
80
|
funboost/core/active_cousumer_info_getter.py,sha256=09fEc-BTEIRfDDfHmOvKnMjLjtOyp4edLsUlAXUR_Qs,4966
|
|
81
|
-
funboost/core/booster.py,sha256=
|
|
81
|
+
funboost/core/booster.py,sha256=fu9AZJgbF6Ru6xbMUJ31QH_xqvCBrXHNqgfd6Hinqf8,13123
|
|
82
82
|
funboost/core/exceptions.py,sha256=5kit_SScZUw3VDCtlFFFX2lX7kdE7_8aODs9Cjrdpbk,1213
|
|
83
83
|
funboost/core/fabric_deploy_helper.py,sha256=KPjifNy1G1tDOT2eaR0X8hegot0HUk5vF-P1DnhxME4,8941
|
|
84
84
|
funboost/core/func_params_model.py,sha256=s5ic2Pf--scmX3l0Xs97fjVNLEtlnBehGmrXU7JPc9U,16596
|
|
@@ -86,7 +86,7 @@ funboost/core/function_result_status_config.py,sha256=PyjqAQOiwsLt28sRtH-eYRjiI3
|
|
|
86
86
|
funboost/core/function_result_status_saver.py,sha256=Vv_Oq3a37K_Q-LbtMR-nWzzRiIPaOUvheaQoG5JvmbQ,8921
|
|
87
87
|
funboost/core/helper_funs.py,sha256=SKSMKytJTOFQJsuMKWJ-_mQg6e_Bgpq1ANDzjjBAcio,1192
|
|
88
88
|
funboost/core/kill_remote_task.py,sha256=MZ5vWLGt6SxyN76h5Lf_id9tyVUzjR-qXNyJwXaGlZY,8129
|
|
89
|
-
funboost/core/loggers.py,sha256=
|
|
89
|
+
funboost/core/loggers.py,sha256=_vptyDIidnD6Xt4wqi3atbbhUufm1Aa-LPgB8Exbtp8,1881
|
|
90
90
|
funboost/core/msg_result_getter.py,sha256=XOYykp25uwwaS6-EXbd9NrLruQtNiH2_QkyZij97SdU,7933
|
|
91
91
|
funboost/core/muliti_process_enhance.py,sha256=0wgy8qnxfg_g-BtlKfysH6TZ9s97EWTdLFVWPAVUGw0,3601
|
|
92
92
|
funboost/core/show_funboost_flag.py,sha256=6C_0yV8QvS1LFReCi_kx2ot9u_jwKf6NgA6Li3NiyYI,5696
|
|
@@ -258,9 +258,9 @@ funboost/utils/pysnooper_ydf/utils.py,sha256=evSmGi_Oul7vSP47AJ0DLjFwoCYCfunJZ1m
|
|
|
258
258
|
funboost/utils/pysnooper_ydf/variables.py,sha256=QejRDESBA06KG9OH4sBT4J1M55eaU29EIHg8K_igaXo,3693
|
|
259
259
|
funboost/utils/times/__init__.py,sha256=Y4bQD3SIA_E7W2YvHq2Qdi0dGM4H2DxyFNdDOuFOq1w,2417
|
|
260
260
|
funboost/utils/times/version.py,sha256=11XfnZVVzOgIhXXdeN_mYfdXThfrsbQHpA0wCjz-hpg,17
|
|
261
|
-
funboost-
|
|
262
|
-
funboost-
|
|
263
|
-
funboost-
|
|
264
|
-
funboost-
|
|
265
|
-
funboost-
|
|
266
|
-
funboost-
|
|
261
|
+
funboost-41.1.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
|
|
262
|
+
funboost-41.1.dist-info/METADATA,sha256=YYJuig2G78s1oy6KsRHXnYUjtD8VYOlBd4zO68hOk1s,30417
|
|
263
|
+
funboost-41.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
264
|
+
funboost-41.1.dist-info/entry_points.txt,sha256=yMSSAGRzRAAhGyNNQHw24MooKlDZsaJ499_D6fPl58A,96
|
|
265
|
+
funboost-41.1.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
|
|
266
|
+
funboost-41.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|