funboost 44.1__py3-none-any.whl → 44.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.

Files changed (34) hide show
  1. funboost/__init__.py +1 -1
  2. funboost/consumers/base_consumer.py +10 -7
  3. funboost/consumers/http_consumer.py +9 -9
  4. funboost/consumers/kafka_consumer.py +12 -14
  5. funboost/consumers/kafka_consumer_manually_commit.py +10 -13
  6. funboost/consumers/mqtt_consumer.py +3 -2
  7. funboost/consumers/nats_consumer.py +5 -4
  8. funboost/consumers/nsq_consumer.py +6 -4
  9. funboost/consumers/zeromq_consumer.py +12 -11
  10. funboost/core/funboost_config_getter.py +7 -0
  11. funboost/core/funboost_time.py +28 -0
  12. funboost/core/helper_funs.py +21 -9
  13. funboost/core/lazy_impoter.py +86 -4
  14. funboost/core/loggers.py +1 -1
  15. funboost/function_result_web/app.py +3 -0
  16. funboost/function_result_web/functions.py +0 -1
  17. funboost/publishers/base_publisher.py +4 -7
  18. funboost/publishers/confluent_kafka_publisher.py +9 -12
  19. funboost/publishers/kafka_publisher.py +5 -11
  20. funboost/publishers/mqtt_publisher.py +3 -2
  21. funboost/publishers/nats_publisher.py +2 -2
  22. funboost/publishers/nsq_publisher.py +4 -6
  23. funboost/publishers/zeromq_publisher.py +3 -3
  24. funboost/set_frame_config.py +1 -1
  25. funboost/utils/bulk_operation.py +3 -2
  26. funboost/utils/decorators.py +0 -2
  27. funboost/utils/resource_monitoring.py +10 -9
  28. {funboost-44.1.dist-info → funboost-44.2.dist-info}/METADATA +34 -17
  29. {funboost-44.1.dist-info → funboost-44.2.dist-info}/RECORD +33 -32
  30. funboost/core/try_get_user_funboost_common_config.py +0 -0
  31. {funboost-44.1.dist-info → funboost-44.2.dist-info}/LICENSE +0 -0
  32. {funboost-44.1.dist-info → funboost-44.2.dist-info}/WHEEL +0 -0
  33. {funboost-44.1.dist-info → funboost-44.2.dist-info}/entry_points.txt +0 -0
  34. {funboost-44.1.dist-info → funboost-44.2.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__ = "44.1"
16
+ __version__ = "44.2"
17
17
 
18
18
  from funboost.set_frame_config import show_frame_config
19
19
 
@@ -49,7 +49,7 @@ from funboost.concurrent_pool.single_thread_executor import SoloExecutor
49
49
 
50
50
  from funboost.core.function_result_status_saver import ResultPersistenceHelper, FunctionResultStatus, RunStatus
51
51
 
52
- from funboost.core.helper_funs import delete_keys_and_return_new_dict, get_publish_time, generate_task_id
52
+ from funboost.core.helper_funs import delete_keys_and_return_new_dict, get_publish_time, MsgGenerater
53
53
 
54
54
  from funboost.concurrent_pool.async_helper import simple_run_in_executor
55
55
  from funboost.concurrent_pool.async_pool_executor import AsyncPoolExecutor
@@ -383,8 +383,11 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
383
383
  """
384
384
  raise NotImplementedError
385
385
 
386
- def _auto_fill_msg(self, msg: dict):
387
- """填充消息,消息没有使用funboost来发送,并且没有extra相关字段时候"""
386
+ def convert_msg_before_run(self, msg: dict):
387
+ """
388
+ 转换消息,消息没有使用funboost来发送,并且没有extra相关字段时候
389
+ 用户也可以按照4.21文档,继承任意Consumer类,并实现这个方法 convert_msg_before_run,先转换消息.
390
+ """
388
391
  """ 一般消息至少包含这样
389
392
  {
390
393
  "a": 42,
@@ -405,11 +408,11 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
405
408
  msg['extra'] = {'is_auto_fill_extra': True}
406
409
  extra = msg['extra']
407
410
  if 'task_id' not in extra:
408
- extra['task_id'] = generate_task_id(self._queue_name)
411
+ extra['task_id'] = MsgGenerater.generate_task_id(self._queue_name)
409
412
  if 'publish_time' not in extra:
410
- extra['publish_time'] = round(time.time(), 4)
413
+ extra['publish_time'] = MsgGenerater.generate_publish_time()
411
414
  if 'publish_time_format':
412
- extra['publish_time_format'] = time.strftime('%Y-%m-%d %H:%M:%S')
415
+ extra['publish_time_format'] = MsgGenerater.generate_publish_time_format()
413
416
 
414
417
  def _submit_task(self, kw):
415
418
  while 1: # 这一块的代码为支持暂停消费。
@@ -426,7 +429,7 @@ class AbstractConsumer(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
426
429
  self._requeue(kw)
427
430
  time.sleep(self.time_interval_for_check_do_not_run_time)
428
431
  return
429
- self._auto_fill_msg(kw['body'])
432
+ self.convert_msg_before_run(kw['body'])
430
433
  function_only_params = delete_keys_and_return_new_dict(kw['body'], )
431
434
  if self._get_priority_conf(kw, 'do_task_filtering') and self._redis_filter.check_value_exists(
432
435
  function_only_params): # 对函数的参数进行检查,过滤已经执行过并且成功的任务。
@@ -4,11 +4,11 @@
4
4
  import asyncio
5
5
  import json
6
6
 
7
- from aiohttp import web
8
- from aiohttp.web_request import Request
7
+ # from aiohttp import web
8
+ # from aiohttp.web_request import Request
9
9
 
10
10
  from funboost.consumers.base_consumer import AbstractConsumer
11
-
11
+ from funboost.core.lazy_impoter import AioHttpImporter
12
12
 
13
13
  class HTTPConsumer(AbstractConsumer, ):
14
14
  """
@@ -38,26 +38,26 @@ class HTTPConsumer(AbstractConsumer, ):
38
38
  #
39
39
  # flask_app.run('0.0.0.0', port=self._port,debug=False)
40
40
 
41
- routes = web.RouteTableDef()
41
+ routes = AioHttpImporter().web.RouteTableDef()
42
42
 
43
43
  # noinspection PyUnusedLocal
44
44
  @routes.get('/')
45
45
  async def hello(request):
46
- return web.Response(text="Hello, from funboost")
46
+ return AioHttpImporter().web.Response(text="Hello, from funboost")
47
47
 
48
48
  @routes.post('/queue')
49
- async def recv_msg(request: Request):
49
+ async def recv_msg(request: AioHttpImporter().Request):
50
50
  data = await request.post()
51
51
  msg = data['msg']
52
52
  kw = {'body': json.loads(msg)}
53
53
  self._submit_task(kw)
54
- return web.Response(text="finish")
54
+ return AioHttpImporter().web.Response(text="finish")
55
55
 
56
- app = web.Application()
56
+ app = AioHttpImporter().web.Application()
57
57
  app.add_routes(routes)
58
58
  loop = asyncio.new_event_loop()
59
59
  asyncio.set_event_loop(loop)
60
- web.run_app(app, host='0.0.0.0', port=self._port, )
60
+ AioHttpImporter().web.run_app(app, host='0.0.0.0', port=self._port, )
61
61
 
62
62
  def _confirm_consume(self, kw):
63
63
  pass # 没有确认消费的功能。
@@ -3,16 +3,14 @@
3
3
  # @Time : 2022/8/8 0008 13:32
4
4
  import json
5
5
  # noinspection PyPackageRequirements
6
- from kafka import KafkaConsumer as OfficialKafkaConsumer, KafkaProducer, KafkaAdminClient
7
- # noinspection PyPackageRequirements
8
- from kafka.admin import NewTopic
9
- # noinspection PyPackageRequirements
10
- from kafka.errors import TopicAlreadyExistsError
6
+
11
7
  from funboost.constant import BrokerEnum
12
8
  from funboost.consumers.base_consumer import AbstractConsumer
9
+ from funboost.core.lazy_impoter import KafkaPythonImporter
13
10
  from funboost.funboost_config_deafult import BrokerConnConfig
14
11
  # from nb_log import get_logger
15
12
  from funboost.core.loggers import get_funboost_file_logger
13
+
16
14
  # LogManager('kafka').get_logger_and_add_handlers(30)
17
15
  get_funboost_file_logger('kafka', log_level_int=30)
18
16
 
@@ -36,18 +34,18 @@ class KafkaConsumer(AbstractConsumer):
36
34
 
37
35
  def _shedual_task(self):
38
36
  try:
39
- admin_client = KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
40
- admin_client.create_topics([NewTopic(self._queue_name, 10, 1)])
37
+ admin_client = KafkaPythonImporter().KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
38
+ admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 1)])
41
39
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
42
- except TopicAlreadyExistsError:
40
+ except KafkaPythonImporter().TopicAlreadyExistsError:
43
41
  pass
44
42
 
45
- self._producer = KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
46
- consumer = OfficialKafkaConsumer(self._queue_name, bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS,
47
- group_id=self.consumer_params.broker_exclusive_config["group_id"],
48
- enable_auto_commit=True,
49
- auto_offset_reset=self.consumer_params.broker_exclusive_config["auto_offset_reset"],
50
- )
43
+ self._producer = KafkaPythonImporter().KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
44
+ consumer = KafkaPythonImporter().OfficialKafkaConsumer(self._queue_name, bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS,
45
+ group_id=self.consumer_params.broker_exclusive_config["group_id"],
46
+ enable_auto_commit=True,
47
+ auto_offset_reset=self.consumer_params.broker_exclusive_config["auto_offset_reset"],
48
+ )
51
49
  # auto_offset_reset (str): A policy for resetting offsets on
52
50
  # OffsetOutOfRange errors: 'earliest' will move to the oldest
53
51
  # available message, 'latest' will move to the most recent. Any
@@ -10,13 +10,10 @@ from collections import defaultdict, OrderedDict
10
10
  import time
11
11
 
12
12
  # noinspection PyPackageRequirements
13
- from kafka import KafkaProducer, KafkaAdminClient
13
+ # pip install kafka-python==2.0.2
14
14
 
15
- # noinspection PyPackageRequirements
16
- from kafka.admin import NewTopic
17
- # noinspection PyPackageRequirements
18
- from kafka.errors import TopicAlreadyExistsError
19
15
  from funboost.consumers.base_consumer import AbstractConsumer
16
+ from funboost.core.lazy_impoter import KafkaPythonImporter
20
17
  from funboost.funboost_config_deafult import BrokerConnConfig
21
18
  from confluent_kafka.cimpl import TopicPartition
22
19
  from confluent_kafka import Consumer as ConfluentConsumer # 这个包在win下不好安装,用户用这个中间件的时候自己再想办法安装。win用户需要安装c++ 14.0以上环境。
@@ -39,13 +36,13 @@ class KafkaConsumerManuallyCommit(AbstractConsumer):
39
36
  def _shedual_task(self):
40
37
 
41
38
  try:
42
- admin_client = KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
43
- admin_client.create_topics([NewTopic(self._queue_name, 10, 1)])
39
+ admin_client = KafkaPythonImporter().KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
40
+ admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 1)])
44
41
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
45
- except TopicAlreadyExistsError:
42
+ except KafkaPythonImporter().TopicAlreadyExistsError:
46
43
  pass
47
44
 
48
- self._producer = KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
45
+ self._producer = KafkaPythonImporter().KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
49
46
  # consumer 配置 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
50
47
  self._confluent_consumer = ConfluentConsumer({
51
48
  'bootstrap.servers': ','.join(BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS),
@@ -130,14 +127,14 @@ class SaslPlainKafkaConsumer(KafkaConsumerManuallyCommit):
130
127
  def _shedual_task(self):
131
128
 
132
129
  try:
133
- admin_client = KafkaAdminClient(
130
+ admin_client = KafkaPythonImporter().KafkaAdminClient(
134
131
  **BrokerConnConfig.KFFKA_SASL_CONFIG)
135
- admin_client.create_topics([NewTopic(self._queue_name, 10, 1)])
132
+ admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 1)])
136
133
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
137
- except TopicAlreadyExistsError:
134
+ except KafkaPythonImporter().TopicAlreadyExistsError:
138
135
  pass
139
136
 
140
- self._producer = KafkaProducer(
137
+ self._producer = KafkaPythonImporter().KafkaProducer(
141
138
  **BrokerConnConfig.KFFKA_SASL_CONFIG)
142
139
  # consumer 配置 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
143
140
  self._confluent_consumer = ConfluentConsumer({
@@ -5,8 +5,9 @@ import json
5
5
  # import time
6
6
  from funboost.constant import BrokerEnum
7
7
  from funboost.consumers.base_consumer import AbstractConsumer
8
+ from funboost.core.lazy_impoter import PahoMqttImporter
8
9
  from funboost.funboost_config_deafult import BrokerConnConfig
9
- import paho.mqtt.client as mqtt
10
+ # import paho.mqtt.client as mqtt
10
11
 
11
12
 
12
13
  class MqttConsumer(AbstractConsumer):
@@ -23,7 +24,7 @@ class MqttConsumer(AbstractConsumer):
23
24
 
24
25
  # noinspection DuplicatedCode
25
26
  def _shedual_task(self):
26
- client = mqtt.Client()
27
+ client = PahoMqttImporter().mqtt.Client()
27
28
  # client.username_pw_set('admin', password='public')
28
29
  client.on_connect = self._on_connect
29
30
  client.on_message = self._on_message
@@ -1,7 +1,8 @@
1
1
  import json
2
- from pynats import NATSClient, NATSMessage # noqa
3
- from funboost.constant import BrokerEnum
2
+ # from pynats import NATSClient, NATSMessage # noqa
3
+
4
4
  from funboost.consumers.base_consumer import AbstractConsumer
5
+ from funboost.core.lazy_impoter import NatsImporter
5
6
  from funboost.funboost_config_deafult import BrokerConnConfig
6
7
 
7
8
 
@@ -13,10 +14,10 @@ class NatsConsumer(AbstractConsumer):
13
14
 
14
15
  def _shedual_task(self):
15
16
  # print(88888888888888)
16
- nats_client = NATSClient(BrokerConnConfig.NATS_URL, socket_timeout=600, socket_keepalive=True)
17
+ nats_client = NatsImporter().NATSClient(BrokerConnConfig.NATS_URL, socket_timeout=600, socket_keepalive=True)
17
18
  nats_client.connect()
18
19
 
19
- def callback(msg: NATSMessage):
20
+ def callback(msg: NatsImporter().NATSMessage):
20
21
  # print(type(msg))
21
22
  # print(msg.reply)
22
23
  # print(f"Received a message with subject {msg.subject}: {msg.payload}")
@@ -2,8 +2,10 @@
2
2
  # @Author : ydf
3
3
  # @Time : 2022/8/8 0008 13:32
4
4
  import json
5
- from gnsq import Consumer, Message
6
- from funboost.constant import BrokerEnum
5
+
6
+ from funboost.core.lazy_impoter import GnsqImporter
7
+ # from gnsq import Consumer, Message
8
+
7
9
  from funboost.funboost_config_deafult import BrokerConnConfig
8
10
  from funboost.consumers.base_consumer import AbstractConsumer
9
11
  # from nb_log import LogManager
@@ -19,11 +21,11 @@ class NsqConsumer(AbstractConsumer):
19
21
 
20
22
 
21
23
  def _shedual_task(self):
22
- consumer = Consumer(self._queue_name, 'frame_channel', BrokerConnConfig.NSQD_TCP_ADDRESSES,
24
+ consumer = GnsqImporter().Consumer(self._queue_name, 'frame_channel', BrokerConnConfig.NSQD_TCP_ADDRESSES,
23
25
  max_in_flight=self.consumer_params.concurrent_num, heartbeat_interval=60, timeout=600, ) # heartbeat_interval 不能设置为600
24
26
 
25
27
  @consumer.on_message.connect
26
- def handler(consumerx: Consumer, message: Message):
28
+ def handler(consumerx: GnsqImporter().Consumer, message: GnsqImporter().Message):
27
29
  # 第一条消息不能并发,第一条消息之后可以并发。
28
30
  self._print_message_get_from_broker('nsq', message.body.decode())
29
31
  # self.logger.debug(f'从nsq的 [{self._queue_name}] 主题中 取出的消息是: {message.body.decode()}')
@@ -4,10 +4,11 @@ import os
4
4
  import socket
5
5
  import json
6
6
  # import time
7
- import zmq
7
+ # import zmq
8
8
  import multiprocessing
9
9
  from funboost.constant import BrokerEnum
10
10
  from funboost.consumers.base_consumer import AbstractConsumer
11
+ from funboost.core.lazy_impoter import ZmqImporter
11
12
  # from nb_log import get_logger
12
13
  from funboost.core.loggers import get_funboost_file_logger
13
14
 
@@ -32,17 +33,17 @@ logger_zeromq_broker = get_funboost_file_logger('zeromq_broker')
32
33
  # noinspection PyUnresolvedReferences
33
34
  def start_broker(port_router: int, port_dealer: int):
34
35
  try:
35
- context = zmq.Context()
36
+ context = ZmqImporter().zmq.Context()
36
37
  # noinspection PyUnresolvedReferences
37
- frontend = context.socket(zmq.ROUTER)
38
- backend = context.socket(zmq.DEALER)
38
+ frontend = context.socket(ZmqImporter().zmq.ROUTER)
39
+ backend = context.socket(ZmqImporter().zmq.DEALER)
39
40
  frontend.bind(f"tcp://*:{port_router}")
40
41
  backend.bind(f"tcp://*:{port_dealer}")
41
42
 
42
43
  # Initialize poll set
43
- poller = zmq.Poller()
44
- poller.register(frontend, zmq.POLLIN)
45
- poller.register(backend, zmq.POLLIN)
44
+ poller = ZmqImporter().zmq.Poller()
45
+ poller.register(frontend, ZmqImporter().zmq.POLLIN)
46
+ poller.register(backend, ZmqImporter().zmq.POLLIN)
46
47
  logger_zeromq_broker.info(f'broker 绑定端口 {port_router} {port_dealer} 成功')
47
48
 
48
49
  # Switch messages between sockets
@@ -50,11 +51,11 @@ def start_broker(port_router: int, port_dealer: int):
50
51
  while True:
51
52
  socks = dict(poller.poll()) # 轮询器 循环接收
52
53
 
53
- if socks.get(frontend) == zmq.POLLIN:
54
+ if socks.get(frontend) == ZmqImporter().zmq.POLLIN:
54
55
  message = frontend.recv_multipart()
55
56
  backend.send_multipart(message)
56
57
 
57
- if socks.get(backend) == zmq.POLLIN:
58
+ if socks.get(backend) == ZmqImporter().zmq.POLLIN:
58
59
  message = backend.recv_multipart()
59
60
  frontend.send_multipart(message)
60
61
  except BaseException as e:
@@ -87,9 +88,9 @@ class ZeroMqConsumer(AbstractConsumer):
87
88
  # noinspection DuplicatedCode
88
89
  def _shedual_task(self):
89
90
  self.start_broker_queue_name_as_port()
90
- context = zmq.Context()
91
+ context = ZmqImporter().zmq.Context()
91
92
  # noinspection PyUnresolvedReferences
92
- zsocket = context.socket(zmq.REP)
93
+ zsocket = context.socket(ZmqImporter().zmq.REP)
93
94
  zsocket.connect(f"tcp://localhost:{int(self._queue_name) + 1}")
94
95
 
95
96
  while True:
@@ -0,0 +1,7 @@
1
+ def _try_get_user_funboost_common_config(funboost_common_conf_field:str):
2
+ try:
3
+ import funboost_config # 第一次启动funboost前还没这个文件,或者还没有初始化配置之前,就要使用使用配置.
4
+ return getattr(funboost_config.FunboostCommonConfig,funboost_common_conf_field)
5
+ except Exception as e:
6
+ print(e)
7
+ return None
@@ -0,0 +1,28 @@
1
+ import pytz
2
+ import time
3
+
4
+ import datetime
5
+
6
+ import typing
7
+
8
+ from nb_time import NbTime
9
+ from funboost.funboost_config_deafult import FunboostCommonConfig
10
+
11
+ class FunboostTime(NbTime):
12
+ default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE
13
+ def get_time_zone_str(self,time_zone: typing.Union[str, datetime.tzinfo,None] = None):
14
+ return time_zone or self.default_time_zone or FunboostCommonConfig.TIMEZONE or self.get_localzone_name()
15
+
16
+
17
+
18
+ if __name__ == '__main__':
19
+ print(NbTime())
20
+ for i in range(100000):
21
+ # print(generate_publish_time())
22
+ # print(generate_publish_time_format())
23
+ # generate_publish_time()
24
+ # generate_publish_time_format()
25
+
26
+ datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).strftime(NbTime.FORMATTER_DATETIME_NO_ZONE)
27
+ datetime.datetime.now(tz=pytz.timezone(FunboostCommonConfig.TIMEZONE)).timestamp()
28
+ print(NbTime())
@@ -2,6 +2,8 @@ import copy
2
2
  import time
3
3
  import uuid
4
4
 
5
+ from funboost.core.funboost_time import FunboostTime
6
+
5
7
 
6
8
  def get_publish_time(paramsx: dict):
7
9
  """
@@ -37,13 +39,23 @@ def block_python_main_thread_exit():
37
39
  run_forever = block_python_main_thread_exit
38
40
 
39
41
 
40
- def _try_get_user_funboost_common_config(funboost_common_conf_field:str):
41
- try:
42
- import funboost_config # 第一次启动funboost前还没这个文件,或者还没有初始化配置之前,就要使用使用配置.
43
- return getattr(funboost_config.FunboostCommonConfig,funboost_common_conf_field)
44
- except Exception as e:
45
- print(e)
46
- return None
42
+ class MsgGenerater:
43
+ @staticmethod
44
+ def generate_task_id(queue_name:str) -> str:
45
+ return f'{queue_name}_result:{uuid.uuid4()}'
46
+
47
+ @staticmethod
48
+ def generate_publish_time() -> float:
49
+ return round(FunboostTime().timestamp,4)
50
+
51
+ @staticmethod
52
+ def generate_publish_time_format() -> str:
53
+ return FunboostTime().get_str()
54
+
55
+ @classmethod
56
+ def generate_pulish_time_and_task_id(cls,queue_name:str,task_id=None):
57
+ extra_params = {'task_id': task_id or cls.generate_task_id(queue_name), 'publish_time': cls.generate_publish_time(),
58
+ 'publish_time_format': cls.generate_publish_time_format()}
59
+ return extra_params
60
+
47
61
 
48
- def generate_task_id(queue_name:str):
49
- return f'{queue_name}_result:{uuid.uuid4()}'
@@ -2,8 +2,11 @@ import abc
2
2
 
3
3
  from funboost.utils.decorators import cached_method_result, singleton, SingletonBaseNew, SingletonBaseCustomInit
4
4
 
5
+ """
6
+ 延迟导入
7
+ 或者使用时候再pip安装
8
+ """
5
9
 
6
- # @singleton # 不方便代码补全
7
10
 
8
11
  class LazyImpoter(SingletonBaseNew):
9
12
  """
@@ -79,20 +82,99 @@ class EventletImporter:
79
82
  self.patcher = patcher
80
83
  self.Timeout = Timeout
81
84
 
85
+
82
86
  @singleton
83
87
  class PeeweeImporter:
84
88
  def __init__(self):
85
- '''pip install peewee == 3.17'''
89
+ """pip install peewee == 3.17"""
86
90
  from peewee import ModelSelect, Model, BigAutoField, CharField, DateTimeField, MySQLDatabase
87
91
  from playhouse.shortcuts import model_to_dict, dict_to_model
88
92
  self.ModelSelect = ModelSelect
89
93
  self.Model = Model
90
94
  self.BigAutoField = BigAutoField
91
95
  self.CharField = CharField
92
- self.DateTimeField =DateTimeField
96
+ self.DateTimeField = DateTimeField
93
97
  self.MySQLDatabase = MySQLDatabase
94
98
  self.model_to_dict = model_to_dict
95
- self.dict_to_model =dict_to_model
99
+ self.dict_to_model = dict_to_model
100
+
101
+
102
+ @singleton
103
+ class AioHttpImporter:
104
+
105
+ def __init__(self):
106
+ """pip install aiohttp==3.8.3"""
107
+ from aiohttp import web
108
+ from aiohttp.web_request import Request
109
+ self.web = web
110
+ self.Request = Request
111
+
112
+
113
+ @singleton
114
+ class NatsImporter:
115
+ def __init__(self):
116
+ """pip install nats-python """
117
+ from pynats import NATSClient, NATSMessage
118
+ self.NATSClient = NATSClient
119
+ self.NATSMessage = NATSMessage
120
+
121
+ @singleton
122
+ class GnsqImporter:
123
+ def __init__(self):
124
+ """pip install gnsq==1.0.1"""
125
+ from gnsq import Consumer, Message
126
+ from gnsq import Producer, NsqdHTTPClient
127
+ from gnsq.errors import NSQHttpError
128
+ self.Consumer = Consumer
129
+ self.Message = Message
130
+ self.Producer = Producer
131
+ self.NsqdHTTPClient = NsqdHTTPClient
132
+ self.NSQHttpError = NSQHttpError
133
+
134
+ @singleton
135
+ class ElasticsearchImporter:
136
+ def __init__(self):
137
+ """pip install elasticsearch """
138
+ from elasticsearch import helpers
139
+ self.helpers = helpers
140
+
141
+
142
+ @singleton
143
+ class PsutilImporter:
144
+ def __init__(self):
145
+ """pip install psutil"""
146
+ import psutil
147
+ self.psutil = psutil
148
+
149
+ @singleton
150
+ class PahoMqttImporter:
151
+ def __init__(self):
152
+ """pip install paho-mqtt"""
153
+ import paho.mqtt.client as mqtt
154
+ self.mqtt = mqtt
155
+
156
+ @singleton
157
+ class ZmqImporter:
158
+ def __init__(self):
159
+ """pip install zmq pyzmq"""
160
+ import zmq
161
+ self.zmq = zmq
162
+
163
+ @singleton
164
+ class KafkaPythonImporter:
165
+ def __init__(self):
166
+ """pip install kafka-python==2.0.2"""
167
+
168
+ from kafka import KafkaConsumer as OfficialKafkaConsumer, KafkaProducer, KafkaAdminClient
169
+ from kafka.admin import NewTopic
170
+ from kafka.errors import TopicAlreadyExistsError
171
+
172
+ self.OfficialKafkaConsumer = OfficialKafkaConsumer
173
+ self.KafkaProducer = KafkaProducer
174
+ self.KafkaAdminClient = KafkaAdminClient
175
+ self.NewTopic = NewTopic
176
+ self.TopicAlreadyExistsError = TopicAlreadyExistsError
177
+
96
178
 
97
179
  if __name__ == '__main__':
98
180
  for i in range(10000):
funboost/core/loggers.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import nb_log
2
- from funboost.core.helper_funs import _try_get_user_funboost_common_config
2
+ from funboost.core.funboost_config_getter import _try_get_user_funboost_common_config
3
3
 
4
4
  # noinspection PyUnresolvedReferences
5
5
  from nb_log import get_logger, LoggerLevelSetterMixin, nb_log_config_default
@@ -5,6 +5,9 @@
5
5
  import datetime
6
6
  import json
7
7
 
8
+ """
9
+ pip install Flask flask_bootstrap flask_wtf wtforms flask_login
10
+ """
8
11
  from flask import render_template, Flask, request, url_for, jsonify, flash, redirect
9
12
  from flask_bootstrap import Bootstrap
10
13
  from flask_wtf import FlaskForm
@@ -5,7 +5,6 @@ import datetime
5
5
  import json
6
6
  from pprint import pprint
7
7
  import time
8
- from flask import jsonify
9
8
  import copy
10
9
  from funboost import nb_print
11
10
  from funboost.utils import time_util, decorators, LoggerMixin
@@ -9,17 +9,15 @@ import json
9
9
  import logging
10
10
  import multiprocessing
11
11
  import threading
12
- import uuid
13
12
  import time
14
13
  import typing
15
14
  from functools import wraps
16
15
  from threading import Lock
17
- import datetime
18
16
  import amqpstorm
19
17
 
20
18
  import nb_log
21
19
  from funboost.core.func_params_model import PublisherParams, PriorityConsumingControlConfig
22
- from funboost.core.helper_funs import generate_task_id
20
+ from funboost.core.helper_funs import MsgGenerater
23
21
  from funboost.core.loggers import develop_logger
24
22
 
25
23
  from pikav1.exceptions import AMQPError as PikaAMQPError
@@ -28,7 +26,7 @@ from pikav1.exceptions import AMQPError as PikaAMQPError
28
26
  from funboost.core.loggers import LoggerLevelSetterMixin, FunboostFileLoggerMixin, get_logger
29
27
  from funboost.core.msg_result_getter import AsyncResult, AioAsyncResult
30
28
  from funboost.core.task_id_logger import TaskIdLogger
31
- from funboost.utils import decorators, time_util
29
+ from funboost.utils import decorators
32
30
  from funboost.funboost_config_deafult import BrokerConnConfig, FunboostCommonConfig
33
31
 
34
32
  RedisAsyncResult = AsyncResult # 别名
@@ -191,9 +189,8 @@ class AbstractPublisher(LoggerLevelSetterMixin, metaclass=abc.ABCMeta, ):
191
189
  raw_extra = msg['extra']
192
190
  if self.publish_params_checker and self.publisher_params.should_check_publish_func_params:
193
191
  self.publish_params_checker.check_params(msg_function_kw)
194
- task_id = task_id or generate_task_id(self._queue_name)
195
- extra_params = {'task_id': task_id, 'publish_time': round(time.time(), 4),
196
- 'publish_time_format': time.strftime('%Y-%m-%d %H:%M:%S')}
192
+ task_id = task_id or MsgGenerater.generate_task_id(self._queue_name)
193
+ extra_params = MsgGenerater.generate_pulish_time_and_task_id(self._queue_name, task_id=task_id)
197
194
  if priority_control_config:
198
195
  extra_params.update(priority_control_config.dict(exclude_none=True))
199
196
  extra_params.update(raw_extra)
@@ -4,6 +4,8 @@
4
4
 
5
5
  import os
6
6
 
7
+ from funboost.core.lazy_impoter import KafkaPythonImporter
8
+
7
9
  if os.name == 'nt':
8
10
  """
9
11
  为了保险起见,这样做一下,设置一下path,否则anaconda安装的python可能出现 ImportError: DLL load failed while importing cimpl: 找不到指定的模块。
@@ -24,12 +26,7 @@ if os.name == 'nt':
24
26
 
25
27
  import atexit
26
28
  import time
27
- # noinspection PyPackageRequirements
28
- from kafka import KafkaProducer, KafkaAdminClient
29
- # noinspection PyPackageRequirements
30
- from kafka.admin import NewTopic
31
- # noinspection PyPackageRequirements
32
- from kafka.errors import TopicAlreadyExistsError
29
+
33
30
  from confluent_kafka import Producer as ConfluentProducer
34
31
  from funboost.funboost_config_deafult import BrokerConnConfig
35
32
  from funboost.publishers.base_publisher import AbstractPublisher
@@ -45,10 +42,10 @@ class ConfluentKafkaPublisher(AbstractPublisher, ):
45
42
 
46
43
  # self._producer = KafkaProducer(bootstrap_servers=funboost_config_deafult.KAFKA_BOOTSTRAP_SERVERS)
47
44
  try:
48
- admin_client = KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
49
- admin_client.create_topics([NewTopic(self._queue_name, 10, 1)])
45
+ admin_client = KafkaPythonImporter().KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
46
+ admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 1)])
50
47
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
51
- except TopicAlreadyExistsError:
48
+ except KafkaPythonImporter().TopicAlreadyExistsError:
52
49
  pass
53
50
  except BaseException as e:
54
51
  self.logger.exception(e)
@@ -92,10 +89,10 @@ class SaslPlainKafkaPublisher(ConfluentKafkaPublisher):
92
89
  def custom_init(self):
93
90
  # self._producer = KafkaProducer(bootstrap_servers=funboost_config_deafult.KAFKA_BOOTSTRAP_SERVERS)
94
91
  try:
95
- admin_client = KafkaAdminClient(**BrokerConnConfig.KFFKA_SASL_CONFIG)
96
- admin_client.create_topics([NewTopic(self._queue_name, 10, 1)])
92
+ admin_client = KafkaPythonImporter().KafkaAdminClient(**BrokerConnConfig.KFFKA_SASL_CONFIG)
93
+ admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 1)])
97
94
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
98
- except TopicAlreadyExistsError:
95
+ except KafkaPythonImporter().TopicAlreadyExistsError:
99
96
  pass
100
97
  except BaseException as e:
101
98
  self.logger.exception(e)
@@ -5,13 +5,7 @@
5
5
  # noinspection PyPackageRequirements
6
6
  import atexit
7
7
 
8
- # noinspection PyPackageRequirements
9
- from kafka import KafkaProducer, KafkaAdminClient
10
- # noinspection PyPackageRequirements
11
- from kafka.admin import NewTopic
12
- # noinspection PyPackageRequirements
13
- from kafka.errors import TopicAlreadyExistsError
14
-
8
+ from funboost.core.lazy_impoter import KafkaPythonImporter
15
9
  from funboost.funboost_config_deafult import BrokerConnConfig
16
10
  from funboost.publishers.base_publisher import AbstractPublisher
17
11
 
@@ -23,12 +17,12 @@ class KafkaPublisher(AbstractPublisher, ):
23
17
 
24
18
  # noinspection PyAttributeOutsideInit
25
19
  def custom_init(self):
26
- self._producer = KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
27
- self._admin_client = KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
20
+ self._producer = KafkaPythonImporter().KafkaProducer(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
21
+ self._admin_client = KafkaPythonImporter().KafkaAdminClient(bootstrap_servers=BrokerConnConfig.KAFKA_BOOTSTRAP_SERVERS)
28
22
  try:
29
- self._admin_client.create_topics([NewTopic(self._queue_name, 10, 2)])
23
+ self._admin_client.create_topics([KafkaPythonImporter().NewTopic(self._queue_name, 10, 2)])
30
24
  # admin_client.create_partitions({self._queue_name: NewPartitions(total_count=16)})
31
- except TopicAlreadyExistsError:
25
+ except KafkaPythonImporter().TopicAlreadyExistsError:
32
26
  pass
33
27
  except BaseException as e:
34
28
  self.logger.exception(e)
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # @Author : ydf
3
3
  # @Time : 2022/8/8 0008 12:12
4
+ from funboost.core.lazy_impoter import PahoMqttImporter
4
5
  from funboost.publishers.base_publisher import AbstractPublisher
5
6
  from funboost.funboost_config_deafult import BrokerConnConfig
6
7
 
@@ -53,7 +54,7 @@ client.loop_forever() # 保持连接
53
54
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
54
55
  """
55
56
 
56
- import paho.mqtt.client as mqtt
57
+ # import paho.mqtt.client as mqtt
57
58
 
58
59
 
59
60
  # def on_connect(client, userdata, flags, rc):
@@ -71,7 +72,7 @@ class MqttPublisher(AbstractPublisher, ):
71
72
 
72
73
  # noinspection PyAttributeOutsideInit
73
74
  def custom_init(self):
74
- client = mqtt.Client()
75
+ client = PahoMqttImporter().mqtt.Client()
75
76
  # client.username_pw_set('admin', password='public')
76
77
  client.on_connect = self._on_connect
77
78
  client.on_socket_close = self._on_socket_close
@@ -1,4 +1,4 @@
1
- from pynats import NATSClient # noqa
1
+ from funboost.core.lazy_impoter import NatsImporter
2
2
  from funboost.publishers.base_publisher import AbstractPublisher
3
3
  from funboost.funboost_config_deafult import BrokerConnConfig
4
4
 
@@ -10,7 +10,7 @@ class NatsPublisher(AbstractPublisher, ):
10
10
 
11
11
  # noinspection PyAttributeOutsideInit
12
12
  def custom_init(self):
13
- self.nats_client = NATSClient(BrokerConnConfig.NATS_URL)
13
+ self.nats_client = NatsImporter().NATSClient(BrokerConnConfig.NATS_URL)
14
14
  self.nats_client.connect()
15
15
 
16
16
  def concrete_realization_of_publish(self, msg):
@@ -1,9 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # @Author : ydf
3
3
  # @Time : 2022/8/19 0008 12:12
4
-
5
- from gnsq import Producer, NsqdHTTPClient
6
- from gnsq.errors import NSQHttpError
4
+ from funboost.core.lazy_impoter import GnsqImporter
7
5
  from funboost.publishers.base_publisher import AbstractPublisher
8
6
  from funboost.funboost_config_deafult import BrokerConnConfig
9
7
 
@@ -15,8 +13,8 @@ class NsqPublisher(AbstractPublisher, ):
15
13
 
16
14
  # noinspection PyAttributeOutsideInit
17
15
  def custom_init(self):
18
- self._nsqd_cleint = NsqdHTTPClient(BrokerConnConfig.NSQD_HTTP_CLIENT_HOST, BrokerConnConfig.NSQD_HTTP_CLIENT_PORT)
19
- self._producer = Producer(BrokerConnConfig.NSQD_TCP_ADDRESSES)
16
+ self._nsqd_cleint = GnsqImporter().NsqdHTTPClient(BrokerConnConfig.NSQD_HTTP_CLIENT_HOST, BrokerConnConfig.NSQD_HTTP_CLIENT_PORT)
17
+ self._producer = GnsqImporter().Producer(BrokerConnConfig.NSQD_TCP_ADDRESSES)
20
18
  self._producer.start()
21
19
 
22
20
  def concrete_realization_of_publish(self, msg):
@@ -26,7 +24,7 @@ class NsqPublisher(AbstractPublisher, ):
26
24
  def clear(self):
27
25
  try:
28
26
  self._nsqd_cleint.empty_topic(self._queue_name)
29
- except NSQHttpError as e:
27
+ except GnsqImporter().NSQHttpError as e:
30
28
  self.logger.exception(e) # 不能清除一个不存在的topoc会报错,和其他消息队列中间件不同。
31
29
  self.logger.warning(f'清除 {self._queue_name} topic中的消息成功')
32
30
 
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # @Author : ydf
3
- import zmq
3
+ from funboost.core.lazy_impoter import ZmqImporter
4
4
  from funboost.publishers.base_publisher import AbstractPublisher
5
5
 
6
6
 
@@ -10,8 +10,8 @@ class ZeroMqPublisher(AbstractPublisher):
10
10
  zeromq 中间件的发布者,zeromq基于socket代码,不会持久化,且不需要安装软件。
11
11
  """
12
12
  def custom_init(self):
13
- context = zmq.Context()
14
- socket = context.socket(zmq.REQ)
13
+ context = ZmqImporter().zmq.Context()
14
+ socket = context.socket(ZmqImporter().zmq.REQ)
15
15
  socket.connect(f"tcp://localhost:{int(self._queue_name)}")
16
16
  self.socket =socket
17
17
  self.logger.warning('框架使用 zeromq 中间件方式,必须先启动消费者(消费者会顺便启动broker) ,只有启动了服务端才能发布任务')
@@ -12,7 +12,7 @@ import json
12
12
  from pathlib import Path
13
13
  from shutil import copyfile
14
14
 
15
- from funboost.core.helper_funs import _try_get_user_funboost_common_config
15
+ from funboost.core.funboost_config_getter import _try_get_user_funboost_common_config
16
16
  from funboost.core.loggers import flogger, get_funboost_file_logger, logger_prompt
17
17
  from nb_log import nb_print, stderr_write, stdout_write
18
18
  from nb_log.monkey_print import is_main_process, only_print_on_main_process
@@ -9,7 +9,7 @@
9
9
  import atexit
10
10
  import re
11
11
  import os
12
- from elasticsearch import helpers
12
+ # from elasticsearch import helpers
13
13
  from threading import Thread
14
14
  from typing import Union
15
15
  import abc
@@ -20,6 +20,7 @@ import unittest
20
20
  from pymongo import UpdateOne, InsertOne, UpdateMany, collection, MongoClient
21
21
  import redis
22
22
 
23
+ from funboost.core.lazy_impoter import ElasticsearchImporter
23
24
  from funboost.utils.redis_manager import RedisMixin
24
25
  from funboost.utils.time_util import DatetimeConverter
25
26
  from funboost.utils import LoggerMixin, decorators
@@ -153,7 +154,7 @@ class ElasticBulkHelper(BaseBulkHelper):
153
154
  break
154
155
  if request_list:
155
156
  # self.base_object.bulk_write(request_list, ordered=False)
156
- helpers.bulk(self.base_object, request_list)
157
+ ElasticsearchImporter().helpers.bulk(self.base_object, request_list)
157
158
  if self._is_print_log:
158
159
  self.logger.info(f'【{self.base_object}】 批量插入的任务数量是 {count} 消耗的时间是 {round(time.time() - t_start, 6)}')
159
160
  self._current_time = time.time()
@@ -6,8 +6,6 @@ import logging
6
6
  import random
7
7
  import uuid
8
8
  from typing import TypeVar
9
-
10
- from flask import request as flask_request
11
9
  # noinspection PyUnresolvedReferences
12
10
  from contextlib import contextmanager
13
11
  import functools
@@ -7,7 +7,8 @@ import socket
7
7
  import sys
8
8
  import threading
9
9
  import time
10
- import psutil
10
+
11
+ from funboost.core.lazy_impoter import PsutilImporter
11
12
  from funboost.utils import LoggerLevelSetterMixin, LoggerMixin, decorators
12
13
  from funboost.utils.mongo_util import MongoMixin
13
14
 
@@ -59,10 +60,10 @@ print(psutil.virtual_memory())
59
60
 
60
61
  class ResourceMonitor(LoggerMixin, LoggerLevelSetterMixin, MongoMixin):
61
62
  # ResourceMonitor(is_save_info_to_mongo=True).set_log_level(20).start_build_info_loop_on_daemon_thread(60)
62
- cpu_count = psutil.cpu_count()
63
+ cpu_count = PsutilImporter().psutil.cpu_count()
63
64
  host_name = socket.gethostname()
64
65
 
65
- def __init__(self, process=psutil.Process(), is_save_info_to_mongo=False, mongo_col='default'):
66
+ def __init__(self, process=PsutilImporter().psutil.Process(), is_save_info_to_mongo=False, mongo_col='default'):
66
67
  self.process = process
67
68
  self.logger.setLevel(20)
68
69
  self.all_info = {}
@@ -84,22 +85,22 @@ class ResourceMonitor(LoggerMixin, LoggerLevelSetterMixin, MongoMixin):
84
85
  return result
85
86
 
86
87
  def get_os_cpu_percpu(self):
87
- result = psutil.cpu_percent(1, percpu=True)
88
+ result = PsutilImporter().psutil.cpu_percent(1, percpu=True)
88
89
  self.logger.debug(result)
89
90
  return result
90
91
 
91
92
  def get_os_cpu_totalcpu(self):
92
- result = round(psutil.cpu_percent(1, percpu=False) * self.cpu_count, 2)
93
+ result = round(PsutilImporter().psutil.cpu_percent(1, percpu=False) * self.cpu_count, 2)
93
94
  self.logger.debug(result)
94
95
  return result
95
96
 
96
97
  def get_os_cpu_avaragecpu(self):
97
- result = psutil.cpu_percent(1, percpu=False)
98
+ result = PsutilImporter().psutil.cpu_percent(1, percpu=False)
98
99
  self.logger.debug(result)
99
100
  return result
100
101
 
101
102
  def get_os_virtual_memory(self) -> dict:
102
- memory_tuple = psutil.virtual_memory()
103
+ memory_tuple = PsutilImporter().psutil.virtual_memory()
103
104
  self.logger.debug(memory_tuple)
104
105
  return {
105
106
  'total': self.divide_1m(memory_tuple[0]),
@@ -108,9 +109,9 @@ class ResourceMonitor(LoggerMixin, LoggerLevelSetterMixin, MongoMixin):
108
109
  }
109
110
 
110
111
  def get_os_net_info(self):
111
- result1 = psutil.net_io_counters(pernic=False)
112
+ result1 = PsutilImporter().psutil.net_io_counters(pernic=False)
112
113
  time.sleep(1)
113
- result2 = psutil.net_io_counters(pernic=False)
114
+ result2 = PsutilImporter().psutil.net_io_counters(pernic=False)
114
115
  speed_dict = dict()
115
116
  speed_dict['up_speed'] = self.divide_1m(result2[0] - result1[0])
116
117
  speed_dict['down_speed'] = self.divide_1m(result2[1] - result1[1])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: funboost
3
- Version: 44.1
3
+ Version: 44.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
@@ -28,22 +28,13 @@ Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  Requires-Dist: nb-log (>=12.6)
30
30
  Requires-Dist: nb-libs (>=0.9)
31
+ Requires-Dist: nb-time (>=1.8)
31
32
  Requires-Dist: pymongo (==4.3.3)
32
33
  Requires-Dist: AMQPStorm (==2.10.6)
33
34
  Requires-Dist: rabbitpy (==2.0.1)
34
35
  Requires-Dist: decorator (==5.1.1)
35
- Requires-Dist: Flask
36
- Requires-Dist: flask-bootstrap
37
- Requires-Dist: flask-wtf
38
- Requires-Dist: wtforms
39
- Requires-Dist: flask-login
40
36
  Requires-Dist: tomorrow3 (==1.1.0)
41
37
  Requires-Dist: persist-queue (>=0.4.2)
42
- Requires-Dist: elasticsearch
43
- Requires-Dist: kafka-python (==2.0.2)
44
- Requires-Dist: requests
45
- Requires-Dist: gnsq (==1.0.1)
46
- Requires-Dist: psutil
47
38
  Requires-Dist: apscheduler (==3.10.1)
48
39
  Requires-Dist: pikav0
49
40
  Requires-Dist: pikav1
@@ -51,15 +42,9 @@ Requires-Dist: redis2
51
42
  Requires-Dist: redis3
52
43
  Requires-Dist: redis5
53
44
  Requires-Dist: redis
54
- Requires-Dist: rocketmq
55
- Requires-Dist: zmq
56
- Requires-Dist: pyzmq
57
- Requires-Dist: paho-mqtt
58
45
  Requires-Dist: setuptools-rust
59
46
  Requires-Dist: fabric2 (==2.6.0)
60
- Requires-Dist: nats-python
61
47
  Requires-Dist: nb-filelock
62
- Requires-Dist: aiohttp (==3.8.3)
63
48
  Requires-Dist: pysnooper
64
49
  Requires-Dist: deprecated
65
50
  Requires-Dist: cryptography
@@ -78,6 +63,19 @@ Requires-Dist: dramatiq (==1.14.2) ; extra == 'all'
78
63
  Requires-Dist: huey (==2.4.5) ; extra == 'all'
79
64
  Requires-Dist: rq (==1.15.0) ; extra == 'all'
80
65
  Requires-Dist: kombu ; extra == 'all'
66
+ Requires-Dist: eventlet (==0.33.3) ; extra == 'all'
67
+ Requires-Dist: gevent (==22.10.2) ; extra == 'all'
68
+ Requires-Dist: elasticsearch ; extra == 'all'
69
+ Requires-Dist: gnsq (==1.0.1) ; extra == 'all'
70
+ Requires-Dist: psutil ; extra == 'all'
71
+ Requires-Dist: peewee (==3.17.3) ; extra == 'all'
72
+ Requires-Dist: nats-python ; extra == 'all'
73
+ Requires-Dist: aiohttp (==3.8.3) ; extra == 'all'
74
+ Requires-Dist: paho-mqtt ; extra == 'all'
75
+ Requires-Dist: rocketmq ; extra == 'all'
76
+ Requires-Dist: zmq ; extra == 'all'
77
+ Requires-Dist: pyzmq ; extra == 'all'
78
+ Requires-Dist: kafka-python (==2.0.2) ; extra == 'all'
81
79
  Requires-Dist: pulsar-client (==3.1.0) ; (python_version >= "3.7") and extra == 'all'
82
80
  Provides-Extra: extra_brokers
83
81
  Requires-Dist: confluent-kafka (==1.7.0) ; extra == 'extra_brokers'
@@ -90,7 +88,26 @@ Requires-Dist: dramatiq (==1.14.2) ; extra == 'extra_brokers'
90
88
  Requires-Dist: huey (==2.4.5) ; extra == 'extra_brokers'
91
89
  Requires-Dist: rq (==1.15.0) ; extra == 'extra_brokers'
92
90
  Requires-Dist: kombu ; extra == 'extra_brokers'
91
+ Requires-Dist: eventlet (==0.33.3) ; extra == 'extra_brokers'
92
+ Requires-Dist: gevent (==22.10.2) ; extra == 'extra_brokers'
93
+ Requires-Dist: elasticsearch ; extra == 'extra_brokers'
94
+ Requires-Dist: gnsq (==1.0.1) ; extra == 'extra_brokers'
95
+ Requires-Dist: psutil ; extra == 'extra_brokers'
96
+ Requires-Dist: peewee (==3.17.3) ; extra == 'extra_brokers'
97
+ Requires-Dist: nats-python ; extra == 'extra_brokers'
98
+ Requires-Dist: aiohttp (==3.8.3) ; extra == 'extra_brokers'
99
+ Requires-Dist: paho-mqtt ; extra == 'extra_brokers'
100
+ Requires-Dist: rocketmq ; extra == 'extra_brokers'
101
+ Requires-Dist: zmq ; extra == 'extra_brokers'
102
+ Requires-Dist: pyzmq ; extra == 'extra_brokers'
103
+ Requires-Dist: kafka-python (==2.0.2) ; extra == 'extra_brokers'
93
104
  Requires-Dist: pulsar-client (==3.1.0) ; (python_version >= "3.7") and extra == 'extra_brokers'
105
+ Provides-Extra: flask
106
+ Requires-Dist: flask ; extra == 'flask'
107
+ Requires-Dist: flask-bootstrap ; extra == 'flask'
108
+ Requires-Dist: flask-wtf ; extra == 'flask'
109
+ Requires-Dist: wtforms ; extra == 'flask'
110
+ Requires-Dist: flask-login ; extra == 'flask'
94
111
 
95
112
 
96
113
 
@@ -1,9 +1,9 @@
1
- funboost/__init__.py,sha256=Xdo13xgVdtep0qKEbFnZ2p4CQ_MSvm_3oHfcsKivvo0,3834
1
+ funboost/__init__.py,sha256=bkCu2I-moaLBScwB72STB_G-Kt76vJ3XynmiKZHDfYU,3834
2
2
  funboost/__init__old.py,sha256=07A1MLsxLtuRQQOIfDyphddOwNBrGe34enoHWAnjV14,20379
3
3
  funboost/__main__.py,sha256=-6Nogi666Y0LN8fVm3JmHGTOk8xEGWvotW_GDbSaZME,1065
4
4
  funboost/constant.py,sha256=Yxt3WJt9D8ybcrgiojOy0qjnq5mffwTnTJplerGL0Oo,7188
5
5
  funboost/funboost_config_deafult.py,sha256=rwfHVttpqWX5tGoO7MdiCquHSrK-z56U81df-jnavlc,6613
6
- funboost/set_frame_config.py,sha256=bEsW4a4EuE3PpyypNuWSfsB-_bvT94pktJGKk4r-rlo,14328
6
+ funboost/set_frame_config.py,sha256=fnc9yIWTxVnqFrUQrXTGPWBzHgPNebsf-xnzYpktY9U,14339
7
7
  funboost/assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  funboost/assist/celery_helper.py,sha256=EOxsl-y65JPwHrmL0LTGAj1nKLbS0qyRbuXcJ0xo9wc,5721
9
9
  funboost/assist/dramatiq_helper.py,sha256=9mUyfBMAJXzwvB8LwOmapn3rY30a6UXt3tNOfL6OXoM,2106
@@ -33,24 +33,24 @@ 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=C8dVVMcFQCrgn59ZAzzTDQvhvhvQQ5-KM0mPQLTfj8U,75829
36
+ funboost/consumers/base_consumer.py,sha256=X1XmLsLjXgpdCPetC_pk87OXjXwAjgsmOqPN3K70IVs,76025
37
37
  funboost/consumers/celery_consumer.py,sha256=9gtz7nlZkmv3ErmaseT0_Q__ltSPx-fOcwi-TMPoaLA,9220
38
38
  funboost/consumers/confirm_mixin.py,sha256=eY6fNwx51Hn4bQSYRjyTRwOqfCGsikVnd2Ga_Ep31N4,6062
39
39
  funboost/consumers/dramatiq_consumer.py,sha256=ozmeAfeF0U-YNYHK4suQB0N264h5AZdfMH0O45Mh-8A,2229
40
- funboost/consumers/http_consumer.py,sha256=3HF8tsH90fUPX3iOmVid_nqW_7hZCFaL7feOkuAM36U,2025
40
+ funboost/consumers/http_consumer.py,sha256=FWhzkTAfDn7NyDKWVDaOfxy317ekz1o5HiMmsqHPgzg,2191
41
41
  funboost/consumers/http_consumer000.py,sha256=NXOSiN1qpLAJfJkuF6SjFpWQ28YxMDULzWCBTNMwYe8,4463
42
42
  funboost/consumers/httpsqs_consumer.py,sha256=oqGpAaA29f96i9FIah2dQy7eW5tFVBY82UISG1nOFY8,1183
43
43
  funboost/consumers/huey_consumer.py,sha256=cW10ZPxdZQzUuJwdqQpJIRPTj2vCbZS0uXFJ7L8bpa4,1843
44
- funboost/consumers/kafka_consumer.py,sha256=x1nu5cKnq6tjOdUwluEhNMAtMjJfTUyiWUhIOrUbuFA,4325
45
- funboost/consumers/kafka_consumer_manually_commit.py,sha256=yOMdLSrHoDUPAvCoxW0eMQApCG4to86Rv4PeKp5wyGM,9584
44
+ funboost/consumers/kafka_consumer.py,sha256=8gJauUVpVDu_xrTg3jNevVzLqv3Ry4n0JIyn89t68tI,4336
45
+ funboost/consumers/kafka_consumer_manually_commit.py,sha256=r4kkCQpoBXRvnb95BkeqECQd_a_koV3Fox2nFuO50_A,9644
46
46
  funboost/consumers/kombu_consumer.py,sha256=DGineDPCHYVfvSraFqOi3IKIKvsFvMGldA_Pwfr70Nk,10272
47
47
  funboost/consumers/local_python_queue_consumer.py,sha256=jNYohp7IW1d8BT8weHE_6R11fvMFnMOFd8HE7kW8_yg,1305
48
48
  funboost/consumers/memory_deque_consumer.py,sha256=hmd6DaEytYDVHfNaJp0eEBKXARshNiYiOnP55VypfLM,1276
49
49
  funboost/consumers/mongomq_consumer.py,sha256=eXqn3o3FFRwVAGIs-z67R8T616PMgBwgVzCtg2cTUXA,1194
50
- funboost/consumers/mqtt_consumer.py,sha256=4d2Zx8le6Iox8_btmSFyBWoKJhC_V3ca3ZUxCAGI5h0,2231
50
+ funboost/consumers/mqtt_consumer.py,sha256=iqDPW4eqScDpR-mIYPzwop60eG1Lxoh_SCm5PAV_6yk,2309
51
51
  funboost/consumers/nameko_consumer.py,sha256=Qhl2FmrIjzjXLkIdMLQdhZ8GmrhiuoEss7cwGHCFT7c,2213
52
- funboost/consumers/nats_consumer.py,sha256=XlyaWPWzC2Zz2Sq6tHjcDgxWMurYhRWtjGOKXPuMuz0,1086
53
- funboost/consumers/nsq_consumer.py,sha256=Sh_ir4oHKe7Af6IT5Q_qeJxz_G0Fs7GT1II1ORih5bw,1547
52
+ funboost/consumers/nats_consumer.py,sha256=Ppsu08qARfpdZPYrKLJSlEsGgcCe8kETIEkrQ1d3azM,1131
53
+ funboost/consumers/nsq_consumer.py,sha256=jmocB6Lzh-cwG-ScRMZlv3BWsolheFIQJR9EQYZ8CZM,1609
54
54
  funboost/consumers/peewee_conusmer.py,sha256=SXqC4goDtDxG-nYJ0S8A3CfsiEK4pSIYYx0H6assMF4,1248
55
55
  funboost/consumers/persist_queue_consumer.py,sha256=ngAC8jvme3hRhNyf-cIWFj2pb88CTUDcWQfxFLgKSDA,1107
56
56
  funboost/consumers/pulsar_consumer.py,sha256=DA_UINnLjQJowcgAj7DQcyUZJOMu5ksapzxorVqxC8g,2472
@@ -72,7 +72,7 @@ funboost/consumers/sqlachemy_consumer.py,sha256=vofeoKri4ERRhQBlzOstXriDDlZAwyET
72
72
  funboost/consumers/tcp_consumer.py,sha256=hgjcXOtHyGBDS_h_p0gbOtF__Ba6DS1Chk5P9nc6Its,2045
73
73
  funboost/consumers/txt_file_consumer.py,sha256=MlCv9INF6DkLgdU4NsNWynHq1Tgs10a2Hp6Bn56vlIA,1343
74
74
  funboost/consumers/udp_consumer.py,sha256=J-G1ZYktXZ_er_1fg3FdSPVl4V_eEIHZXlBadCNpJmE,1643
75
- funboost/consumers/zeromq_consumer.py,sha256=mRU1eC1OhhPnW6L9cQIztKcDg6bfVttsGRE-plC0AqE,4232
75
+ funboost/consumers/zeromq_consumer.py,sha256=InC7MphVxA4esGsFYCtPE_EYqpKcFeigqR5CzQ-2LH0,4426
76
76
  funboost/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  funboost/contrib/api_publish_msg.py,sha256=8khUiOjbiaTuNlOU4_FMBYYNLkwHssPw-vnlE0iixVk,2480
78
78
  funboost/contrib/django_db_deco.py,sha256=RJaRUYdVqS10gWqM4Ncs0Lngox52SUaqIIn5GK5a8Uo,865
@@ -85,17 +85,18 @@ funboost/core/booster.py,sha256=BMSrQbpvIfhigzHjloFwHb7mlw69bvk48RJN43dDiTQ,1591
85
85
  funboost/core/current_task.py,sha256=rAIQVLqYqtlHVRkjl17yki-mqvuMb640ssGmto4RSdA,4864
86
86
  funboost/core/exceptions.py,sha256=pLF7BkRJAfDiWp2_xGZqencmwdPiSQI1NENbImExknY,1311
87
87
  funboost/core/fabric_deploy_helper.py,sha256=foieeqlNySuU9axJzNF6TavPjIUSYBx9UO3syVKUiyY,9999
88
+ funboost/core/funboost_config_getter.py,sha256=TDccp5pQamkoJXkwyPwGsQGDJY8ej8ZT8L8RESSAD2w,382
89
+ funboost/core/funboost_time.py,sha256=h_cpGnad96hCX7eET5K13jr6LXCiSuFv04eIbsuivJQ,948
88
90
  funboost/core/func_params_model.py,sha256=UWpPujyCj5xwsu6kqjSneDmekNTWkqt0AoLlEDl2RmA,19173
89
91
  funboost/core/function_result_status_config.py,sha256=PyjqAQOiwsLt28sRtH-eYRjiI3edPFO4Nde0ILFRReE,1764
90
92
  funboost/core/function_result_status_saver.py,sha256=UdokGSwU630t70AZnT9Ecj7GpYXORBDivlc9kadoI2E,9172
91
- funboost/core/helper_funs.py,sha256=k5HttGoz-E9doLBFz0P0b8SCiCWXuk3ZYD_A-tAfn0Q,1682
93
+ funboost/core/helper_funs.py,sha256=m8OJVJ_U_Wp0roHYrKIrHnihcVzTM8jactGx8m6JdfA,1972
92
94
  funboost/core/kill_remote_task.py,sha256=MZ5vWLGt6SxyN76h5Lf_id9tyVUzjR-qXNyJwXaGlZY,8129
93
- funboost/core/lazy_impoter.py,sha256=k0qZs39VL5qb7FspMt0x1noxqh3RIzt_czlFBwcyvKA,2722
94
- funboost/core/loggers.py,sha256=173aXdqE8nAe8t6OcVMNAFsCUClVrWQovdQhTAg9IyM,2407
95
+ funboost/core/lazy_impoter.py,sha256=bfge5s9_4BGzrifX7p54Wc1Cm7mfI7l1OD9I3Zw4iB0,4867
96
+ funboost/core/loggers.py,sha256=63GtTPocskAW5tvQSUJzGEEUZ4Gs1kznLs7Tn0H5zAQ,2418
95
97
  funboost/core/msg_result_getter.py,sha256=oZDuLDR5XQNzzvgDTsA7wroICToPwrkU9-OAaXXUQSk,8031
96
98
  funboost/core/muliti_process_enhance.py,sha256=64rkVa5Eel-0EY2B7lc1dQTRwX4ehARVvcxQVDa6jr0,3568
97
99
  funboost/core/task_id_logger.py,sha256=lR19HQcX6Pp8laURCD656xNpF_JP6nLB3zUKI69EWzE,864
98
- funboost/core/try_get_user_funboost_common_config.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
100
  funboost/core/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
101
  funboost/core/cli/discovery_boosters.py,sha256=UOtmbAsRduMe8Xe6NHJ11c3w7BbsxmqfOIdcWmK_qpE,3926
101
102
  funboost/core/cli/funboost_cli_user_templ.py,sha256=XUpKLxRKtYfebPUM8wii64kB0HW8L7j9LnRpT0xCfQI,2243
@@ -104,8 +105,8 @@ funboost/factories/__init__.py,sha256=s7kKKjR1HU5eMjPD6r5b-SXTVMo1zBp2JjOAtkyt5Y
104
105
  funboost/factories/broker_kind__publsiher_consumer_type_map.py,sha256=2fWuNVDOYbs8CCrQnQtWIc3wwQ5a9AOFEd7-cufj3I8,9630
105
106
  funboost/factories/consumer_factory.py,sha256=rPceMsUr2mrcFXL-_3kQGknNiADjfgTh9wXG1qd8yAw,1041
106
107
  funboost/factories/publisher_factotry.py,sha256=JOvECeovdDRXWvh_dqnNoXX-A3M9vUjVRMCpaCl_R_Q,2040
107
- funboost/function_result_web/app.py,sha256=DhUZFi083KILEc5WGCGkuYQ9fiHa8nB6curt6TSa7EQ,4975
108
- funboost/function_result_web/functions.py,sha256=dXGUD9H62RdE6DN53tVm16tjEUNLD52Sg9YC5Loh6G4,7541
108
+ funboost/function_result_web/app.py,sha256=WFAsAoPqCVeTxKS31UvkAhuRqUurg-j8D3c9RtHZEyY,5059
109
+ funboost/function_result_web/functions.py,sha256=qIyzwxj6GgxsCuXdEBKcFkpBEGwDbLI8hGlm6xddJOc,7514
109
110
  funboost/function_result_web/__pycache__/app.cpython-37.pyc,sha256=p-jwU7xf31KOJhmhNXqj6J79PTxjMbiTU16gAotpSEw,4045
110
111
  funboost/function_result_web/__pycache__/functions.cpython-37.pyc,sha256=vEXI6a8iSONHTW49VOpm9kaaoW4xGuP4JpxlrIXHHzs,4117
111
112
  funboost/function_result_web/static/assets/css/custom.css,sha256=3brvjy2aBOTIXcTUK4NV6dX5wFRqx6K2aLu_jQn63jM,7674
@@ -122,23 +123,23 @@ funboost/function_result_web/static/js/jquery-1.11.0.min.js,sha256=ryQZ3RXgnqkTz
122
123
  funboost/function_result_web/templates/index.html,sha256=YM0582Q4t2da-xBf3Ga0McIfcsT9H98rjZck-irMkGo,20387
123
124
  funboost/function_result_web/templates/login.html,sha256=q37dj7O0LeyiV38Zd5P1Qn_qmhjdFomuYTRY1Yk48Bo,2007
124
125
  funboost/publishers/__init__.py,sha256=xqBHlvsJQVPfbdvP84G0LHmVB7-pFBS7vDnX1Uo9pVY,131
125
- funboost/publishers/base_publisher.py,sha256=81Lj8atdD9_Hyh4cGJCa84zhxKQzqV13x2bax58fQwc,15176
126
+ funboost/publishers/base_publisher.py,sha256=Y0pzWgvJi1v3UrSrOewPsWpxnKgfUseV6pP28dXL5G0,15081
126
127
  funboost/publishers/celery_publisher.py,sha256=uc9N1uLW74skUCw8dsnvxORM2O3cy4SiI7tUZRmvkHA,2336
127
128
  funboost/publishers/celery_publisher000.py,sha256=2XLOyU2__vlIUTi5L15uf0BJqAIjxbc3kCLIRDSOY9w,3966
128
- funboost/publishers/confluent_kafka_publisher.py,sha256=gC4SUk6I_7zjSngcbTI7oTJ7sza3oE3PE19KQkwCpn4,4802
129
+ funboost/publishers/confluent_kafka_publisher.py,sha256=B4rF6gljixOMyN6L2eL1gzqTv97uoy7TTzgKUhHljEQ,4749
129
130
  funboost/publishers/dramatiq_publisher.py,sha256=IH9F-Ps1r94WDu2a7cZbJqWlBgblDbEcpjGj2rl-9WE,1413
130
131
  funboost/publishers/http_publisher.py,sha256=pS3z_AVqH6h4PAgqB7usihvzLJP5ZzfPKQRMQfHrJHQ,753
131
132
  funboost/publishers/httpsqs_publisher.py,sha256=PS6h8-mn3wYFfMOsPt4tal8p0yZgYgrYYO9ZnIl9CwU,2737
132
133
  funboost/publishers/huey_publisher.py,sha256=9HBrsqTO61iPB1nI5fYOQNPuOaX4I4Wmb1BRNODAE_0,1118
133
- funboost/publishers/kafka_publisher.py,sha256=6yb7eW1zOV7zhvaJJonZN0_k4XLVSJ8-J_mZt2MNfXA,2163
134
+ funboost/publishers/kafka_publisher.py,sha256=5qOkNl1SFh4TQaVg0hJSF2ms7T76bkpF6ZtjjLaW8Vg,2060
134
135
  funboost/publishers/kombu_publisher.py,sha256=Z0JKF_-xKJSTc21jqhIwphDUHUPO2X3wVojt-rHhDlM,5415
135
136
  funboost/publishers/local_python_queue_publisher.py,sha256=Do0eE2smI81jNxNiRcMP8lpZcekAfjgwMNMdEagQzVA,3555
136
137
  funboost/publishers/meomory_deque_publisher.py,sha256=0q6WKQ8ohnhlXDgXkxWGsImZCnwB12nFD6kUjldRQiw,1303
137
138
  funboost/publishers/mongomq_publisher.py,sha256=xQr3KMQEKksX4OEvzPlCl8v1VeBHaoZtYw2QujOUyGo,1874
138
- funboost/publishers/mqtt_publisher.py,sha256=YG6EHIG-PEH8TIzvpVRgl7noUU7mejc3fw8VHWvgVDU,3053
139
+ funboost/publishers/mqtt_publisher.py,sha256=nL-pweqL8lkoRUliNKQtdXgryG0wZO7iIvjFdr1it1s,3131
139
140
  funboost/publishers/nameko_publisher.py,sha256=aTcoYdEd6WWi2cbzMDYC6_GgFT31W9c6nIl-nX9YnJI,1682
140
- funboost/publishers/nats_publisher.py,sha256=l04P73rRDPdLipAbqB4lvY0HbRTtz8pzVUNlKodq3XA,786
141
- funboost/publishers/nsq_publisher.py,sha256=iG_bMcjWQ-lF_RpQj1DuAUP7TwoOOFFhJPSDP8iNVIw,1298
141
+ funboost/publishers/nats_publisher.py,sha256=_hnYc9qev8T1ddRC2TcdShoLnqLgFK7SoxNOs740WPM,815
142
+ funboost/publishers/nsq_publisher.py,sha256=ySUUyfAMRPSozWYGzAgOMCR_MF0J1iZTDFVU1DzrY5A,1313
142
143
  funboost/publishers/peewee_publisher.py,sha256=RsYAqBKf_ZLxkGJeZPWExzG4cpUac7weCeNhcSQ9hZc,1095
143
144
  funboost/publishers/persist_queue_publisher.py,sha256=wuKUU3DRiDy4Ab67m9_0ee65uXhqHtfnVWY43JuQFdY,2594
144
145
  funboost/publishers/pulsar_publisher.py,sha256=-Qka_oTtpiBMEzu8oqQJteVbGuWpDHd0sgQoNd7N_2k,1248
@@ -158,7 +159,7 @@ funboost/publishers/sqla_queue_publisher.py,sha256=UgE9eFIzykzpb8ewrFlM4MBx17KMg
158
159
  funboost/publishers/tcp_publisher.py,sha256=qMecOpgVqwTy-VYyevv4mCR6H5bQhCirRbJmcJIaFCE,1335
159
160
  funboost/publishers/txt_file_publisher.py,sha256=dqrfBt1ejjwJbwFS3UqPo4VFDCa6NWbBWRqV2QNB-RI,1390
160
161
  funboost/publishers/udp_publisher.py,sha256=TOiKrhmCMjx4teqIgdUwRic0lxyK2cupinafsz--wzY,1194
161
- funboost/publishers/zeromq_publisher.py,sha256=tZStCARZVznYKN5vUEt65hy5WRsVkNsMC5rdyy9JdeM,956
162
+ funboost/publishers/zeromq_publisher.py,sha256=SHFzSLPLkoht9Ey-q894g59sCuu6IM603xDV0JD4CrY,1024
162
163
  funboost/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
164
  funboost/queues/peewee_queue.py,sha256=FrwegrilkHZG6Y1cGdl5Bt_UtA25f7m5TJQJMZ9YnJI,5280
164
165
  funboost/queues/sqla_queue.py,sha256=b-2QPvvuMxklm41ibZhGKehaAV9trXBQFCOHzgThx_s,11080
@@ -168,10 +169,10 @@ funboost/timing_job/apscheduler_use_redis_store.py,sha256=lAx0W5Sop008k2O6JZKOdf
168
169
  funboost/utils/__init__.py,sha256=rAyXE7lgCo_3VdMvGrIJiqsTHv2nZPTJDTj1f6s_KgE,586
169
170
  funboost/utils/apscheduler_monkey.py,sha256=CcUISbqX6nMWSxr_QjZ26IvvhUk_ojYZWRaKenpsKfE,3124
170
171
  funboost/utils/block_exit.py,sha256=BnfxNYo3lnmhk686RAEoc4u3D4RU_iEMMMgu5L8gIuI,96
171
- funboost/utils/bulk_operation.py,sha256=u1cBL9qo3G-Pvr75coMg5p6EQxDkc8Iuf4C_PJI7BJQ,10013
172
+ funboost/utils/bulk_operation.py,sha256=B4FBxlz5f4oqlKDWqer7axn4gnDSfsYoMW2zSUCnGcQ,10101
172
173
  funboost/utils/ctrl_c_end.py,sha256=FgT9An-qsUA5gW-V-UKWqOh5shC7C_uvTFn0fS7i8GI,439
173
174
  funboost/utils/custom_pysnooper.py,sha256=7yXLKEMY_JjPRRt0Y0N-wV2CFhILlYNh40Y6uRBUaj8,5923
174
- funboost/utils/decorators.py,sha256=AbZ3SkAJMGG6BrWGI-Zcz7GJqONjjGtxu8y1QUZGT8c,26127
175
+ funboost/utils/decorators.py,sha256=J8dwJr2XnXu9r93nv3u2nHGuZANImOEU22LeWLE9xOY,26081
175
176
  funboost/utils/develop_log.py,sha256=Wsx0ongGjTit5xqgk1BztYlVEkC6d0-Y7GENXLedVqY,271
176
177
  funboost/utils/expire_lock.py,sha256=AOkd1KlvZeIwQaz8ZoKxLpGxWgqQ4mfNHcFphh04o8Q,4732
177
178
  funboost/utils/json_helper.py,sha256=HDdtLyZBGpWbUm7vmTypKXd8K-Hb-9BaxpdmRlKMYUI,1849
@@ -183,7 +184,7 @@ funboost/utils/paramiko_util.py,sha256=Abtid-dnM2OxK6tByaA3nhpgRxpkWRYWvdziV8rE7
183
184
  funboost/utils/rabbitmq_factory.py,sha256=ifDCn2RxSGL4MccmktJc5FYQhAcboCgHBlEo3WGpq3g,2910
184
185
  funboost/utils/redis_manager.py,sha256=iG3e9k3oedtKcGwDnjKA0hUFsk_MSlvVM2C3m3K97Y4,3657
185
186
  funboost/utils/redis_manager_old.py,sha256=c3RBXN6dM3kjVBqkCdotpZuYmFs4d9emfp5iJgC61Us,5516
186
- funboost/utils/resource_monitoring.py,sha256=vf1htYa3a4wlMfQqksvIINMw8laiXwG5N8NXU2Zm3qQ,5532
187
+ funboost/utils/resource_monitoring.py,sha256=EWq7hqQLM2hYpbkv4sVw9YcpHLxfg8arcGz-QXw9lf0,5710
187
188
  funboost/utils/restart_python.py,sha256=bFbV0_24ajL8hBwVRLxWe9v9kTwiX1fGLhXRroNnmgQ,1418
188
189
  funboost/utils/simple_data_class.py,sha256=CPiiywEAUSK4eKIxGlzOua1ZSkO_sVsMt157i8MwWO0,1543
189
190
  funboost/utils/time_util.py,sha256=smWhB0fdxgazBYI-t2E61mcIlBk78GcVnl2M8Ko8jVQ,5533
@@ -264,9 +265,9 @@ funboost/utils/pysnooper_ydf/utils.py,sha256=evSmGi_Oul7vSP47AJ0DLjFwoCYCfunJZ1m
264
265
  funboost/utils/pysnooper_ydf/variables.py,sha256=QejRDESBA06KG9OH4sBT4J1M55eaU29EIHg8K_igaXo,3693
265
266
  funboost/utils/times/__init__.py,sha256=Y4bQD3SIA_E7W2YvHq2Qdi0dGM4H2DxyFNdDOuFOq1w,2417
266
267
  funboost/utils/times/version.py,sha256=11XfnZVVzOgIhXXdeN_mYfdXThfrsbQHpA0wCjz-hpg,17
267
- funboost-44.1.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
268
- funboost-44.1.dist-info/METADATA,sha256=e5hgtVoqXtpVfRr6pezo3UHGYkXQnNncgiE5-vX1QmA,30183
269
- funboost-44.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
270
- funboost-44.1.dist-info/entry_points.txt,sha256=BQMqRALuw-QT9x2d7puWaUHriXfy3wIzvfzF61AnSSI,97
271
- funboost-44.1.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
272
- funboost-44.1.dist-info/RECORD,,
268
+ funboost-44.2.dist-info/LICENSE,sha256=9EPP2ktG_lAPB8PjmWV-c9BiaJHc_FP6pPLcUrUwx0E,11562
269
+ funboost-44.2.dist-info/METADATA,sha256=wH1HetVBjgbVv8EaDqYaGw8_jrxG46Kh9Z-ESr54eKc,31351
270
+ funboost-44.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
271
+ funboost-44.2.dist-info/entry_points.txt,sha256=BQMqRALuw-QT9x2d7puWaUHriXfy3wIzvfzF61AnSSI,97
272
+ funboost-44.2.dist-info/top_level.txt,sha256=K8WuKnS6MRcEWxP1NvbmCeujJq6TEfbsB150YROlRw0,9
273
+ funboost-44.2.dist-info/RECORD,,
File without changes