sycommon-python-lib 0.1.56b6__py3-none-any.whl → 0.1.56b7__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.
@@ -9,7 +9,6 @@ import os
9
9
  import yaml
10
10
  import time
11
11
  import atexit
12
- import random
13
12
 
14
13
  from sycommon.config.Config import Config, SingletonMeta
15
14
  from sycommon.logging.kafka_log import SYLogger
@@ -30,9 +29,6 @@ class NacosService(metaclass=SingletonMeta):
30
29
  self._client_initialized = False # 客户端初始化状态
31
30
  self._shutdown_event = threading.Event()
32
31
 
33
- # 添加可重入锁用于状态同步
34
- self._state_lock = threading.RLock()
35
-
36
32
  # 配置参数
37
33
  self.max_retries = self.nacos_config.get('maxRetries', 5)
38
34
  self.retry_delay = self.nacos_config.get('retryDelay', 5)
@@ -62,6 +58,15 @@ class NacosService(metaclass=SingletonMeta):
62
58
  self.real_ip = self.get_service_ip(self.host)
63
59
  self._long_term_retry_count = 0 # 长期重试计数器
64
60
 
61
+ # 监控线程相关
62
+ self._monitor_thread_started = False
63
+ self._monitor_thread_lock = threading.Lock()
64
+ self._state_lock = threading.RLock()
65
+
66
+ # 验证相关
67
+ self._verify_lock = threading.Lock()
68
+ self._last_verify_time = 0
69
+
65
70
  # 轮询索引,用于在所有实例中进行轮询选择
66
71
  self._round_robin_index = 0
67
72
  self._round_robin_lock = threading.Lock() # 保护轮询索引的线程安全
@@ -90,7 +95,6 @@ class NacosService(metaclass=SingletonMeta):
90
95
 
91
96
  self.max_heartbeat_timeout = self.nacos_config.get(
92
97
  'maxHeartbeatTimeout', 30)
93
- self._last_successful_heartbeat = time.time()
94
98
  # 连接监控检查间隔(新增配置,默认30秒,避免硬编码)
95
99
  self.connection_check_interval = self.nacos_config.get(
96
100
  'connectionCheckInterval', 30)
@@ -259,28 +263,50 @@ class NacosService(metaclass=SingletonMeta):
259
263
  return False
260
264
 
261
265
  def verify_registration(self):
262
- """多次验证服务是否成功注册"""
263
- success_count = 0
264
- SYLogger.info(
265
- f"nacos:开始验证服务注册状态,共验证 {self.registration_verify_count} 次")
266
+ """多次验证服务是否成功注册(加锁防止重复执行)"""
267
+ # 新增:线程级别的单次执行锁(避免同一轮循环重复调用)
268
+ if self._verify_lock.locked():
269
+ SYLogger.warning("nacos:注册验证已在执行中,跳过重复调用")
270
+ return self.registered
271
+
272
+ with self._verify_lock:
273
+ # 冷却时间控制(避免短时间重复验证,15秒内不重复)
274
+ current_time = time.time()
275
+ if current_time - self._last_verify_time < self.heartbeat_interval:
276
+ return True
266
277
 
267
- for i in range(self.registration_verify_count):
268
- if self.check_service_registered():
269
- success_count += 1
270
- else:
271
- SYLogger.warning(f"nacos:第 {i+1} 次验证未找到注册实例")
278
+ success_count = 0
279
+ verify_count = self.registration_verify_count
280
+ SYLogger.info(
281
+ f"nacos:开始验证服务注册状态,共验证 {verify_count} 次,间隔 {self.registration_verify_interval} 秒")
272
282
 
273
- if i < self.registration_verify_count - 1:
274
- time.sleep(self.registration_verify_interval)
283
+ self._last_verify_time = current_time # 更新最后验证时间
275
284
 
276
- if success_count >= self.registration_verify_count / 2:
277
- SYLogger.info(
278
- f"nacos:服务注册验证成功,{success_count}/{self.registration_verify_count} 次验证通过")
279
- return True
280
- else:
281
- SYLogger.error(
282
- f"nacos:服务注册验证失败,仅 {success_count}/{self.registration_verify_count} 次验证通过")
283
- return False
285
+ for i in range(verify_count):
286
+ # 调用去重后的 check_service_registered
287
+ if self.check_service_registered():
288
+ success_count += 1
289
+
290
+ if i < verify_count - 1:
291
+ # 可中断的等待,替代 sleep
292
+ self._shutdown_event.wait(
293
+ self.registration_verify_interval)
294
+ if self._shutdown_event.is_set():
295
+ SYLogger.warning("nacos:应用正在关闭,终止注册验证")
296
+ break
297
+
298
+ # 验证结果判断
299
+ pass_threshold = verify_count / 2
300
+ result = success_count >= pass_threshold
301
+
302
+ if result:
303
+ SYLogger.info(
304
+ f"nacos:服务注册验证成功,{success_count}/{verify_count} 次验证通过")
305
+ else:
306
+ SYLogger.error(
307
+ f"nacos:服务注册验证失败,仅 {success_count}/{verify_count} 次验证通过")
308
+
309
+ return result
284
310
 
285
311
  def register_with_retry(self):
286
312
  """带重试机制的服务注册(基于实例列表检查)"""
@@ -517,11 +543,10 @@ class NacosService(metaclass=SingletonMeta):
517
543
  f"nacos:服务未注册,跳过心跳 - 线程ID: {thread_ident}")
518
544
  consecutive_fail = 0
519
545
  else:
520
- # 发送心跳(10秒超时)
546
+ # 发送心跳(15秒超时)
521
547
  success = self.send_heartbeat()
522
548
  if success:
523
549
  consecutive_fail = 0
524
- self._last_successful_heartbeat = current_time
525
550
  SYLogger.info(
526
551
  f"nacos:心跳发送成功 - 时间: {current_time:.3f}, "
527
552
  f"间隔: {self.heartbeat_interval}秒"
@@ -541,16 +566,12 @@ class NacosService(metaclass=SingletonMeta):
541
566
  SYLogger.error(
542
567
  f"nacos:心跳异常: {str(e)}, 连续失败: {consecutive_fail}次")
543
568
 
544
- # 计算下次执行时间(当前时间 + 配置间隔),确保间隔稳定
545
- next_run_time = current_time + self.heartbeat_interval
546
- sleep_time = max(0, next_run_time - time.time()
547
- ) # 避免负数(处理耗时超过间隔的情况)
548
- self._shutdown_event.wait(sleep_time) # 精准休眠至下次执行时间
569
+ self._shutdown_event.wait(self.heartbeat_interval)
549
570
 
550
571
  SYLogger.info(f"nacos:心跳循环已停止 - 线程ID: {thread_ident}")
551
572
 
552
573
  def send_heartbeat(self):
553
- """发送心跳并添加10秒超时控制(替换线程池实现)"""
574
+ """发送心跳并添加10秒超时控制(仅保留核心逻辑,移除重复日志)"""
554
575
  if not self.ensure_client_connected():
555
576
  SYLogger.warning("nacos:客户端未连接,心跳发送失败")
556
577
  return False
@@ -585,9 +606,6 @@ class NacosService(metaclass=SingletonMeta):
585
606
  self._client_initialized = False # 强制重连
586
607
  return False
587
608
 
588
- # 检查心跳结果
589
- if result_list[0]:
590
- self._last_successful_heartbeat = time.time()
591
609
  return result_list[0]
592
610
 
593
611
  def _send_heartbeat_internal(self):
@@ -616,59 +634,60 @@ class NacosService(metaclass=SingletonMeta):
616
634
  return self.ensure_client_connected()
617
635
 
618
636
  def monitor_connection(self):
619
- """优化的连接监控线程,缩短检查间隔"""
637
+ """优化的连接监控线程(彻底去重)"""
638
+ # 单例锁:防止重复启动
639
+ with self._monitor_thread_lock:
640
+ if self._shutdown_event.is_set() or self._monitor_thread_started:
641
+ SYLogger.warning("nacos:监控线程已启动/已关闭,拒绝重复启动")
642
+ return
643
+ self._monitor_thread_started = True
644
+
620
645
  check_interval = self.connection_check_interval
621
- thread_start_time = time.time()
622
- check_counter = 0
646
+ SYLogger.info(
647
+ f"nacos:连接监控线程启动 - 线程ID: {threading.current_thread().ident}")
623
648
 
624
649
  while not self._shutdown_event.is_set():
625
650
  try:
626
- current_time = time.time()
627
-
628
- SYLogger.info(
629
- f"nacos:连接监控线程运行中,检查间隔: {check_interval}s")
630
-
631
- # 检查客户端连接状态
632
- if not self.ensure_client_connected():
633
- SYLogger.warning("nacos:检测到Nacos客户端连接丢失,尝试重新初始化")
634
- self._initialize_client() # 尝试重新初始化客户端
635
-
636
- # 检查服务注册状态
637
- current_registered = self.check_service_registered()
638
-
639
- # 带锁更新注册状态
640
- with self._state_lock:
641
- if current_registered != self.registered:
642
- if current_registered:
643
- self.registered = True
644
- SYLogger.info(f"nacos:服务实例已重新注册")
645
- else:
646
- self.registered = False
647
- SYLogger.warning(f"nacos:服务实例未注册,尝试重新注册")
648
- # 启动临时线程执行重新注册(替换原线程池)
649
- retry_thread = threading.Thread(
650
- target=self.register_with_retry,
651
- daemon=True,
652
- name="NacosRetryRegisterThread"
653
- )
654
- retry_thread.start()
655
-
656
- # 20%的概率执行深度检查
657
- if random.random() < 0.2:
658
- self.verify_registration()
659
-
660
- # 每小时重置一次内部状态
661
- if current_time - thread_start_time > 3600:
662
- SYLogger.info("nacos:连接监控线程已运行1小时,重置内部状态")
663
- thread_start_time = current_time
664
- check_counter = 0
665
-
666
- check_counter += 1
667
- # 休眠指定时间
651
+ # 步骤1:检查客户端连接(仅在连接断开时重试)
652
+ if not self._client_initialized:
653
+ SYLogger.warning("nacos:客户端未连接,尝试重新初始化")
654
+ self.ensure_client_connected()
655
+ else:
656
+ # 步骤2:检查注册状态(仅检查一次,不重复调用)
657
+ current_registered = self.check_service_registered()
658
+
659
+ # 步骤3:仅在注册状态变化时,才触发验证+重新注册
660
+ with self._state_lock:
661
+ if current_registered != self.registered:
662
+ self.registered = current_registered
663
+ if not current_registered:
664
+ SYLogger.warning("nacos:服务实例未注册,触发单次重新注册")
665
+ # 启动单次重试线程(非循环)
666
+ retry_thread = threading.Thread(
667
+ target=self.register,
668
+ args=(True,),
669
+ daemon=True,
670
+ name="NacosSingleRetryThread"
671
+ )
672
+ retry_thread.start()
673
+ else:
674
+ # 仅在「从未注册→已注册」时验证一次
675
+ SYLogger.info("nacos:服务实例已注册,触发单次验证")
676
+ self.verify_registration()
677
+
678
+ # 优化2:固定休眠,避免逻辑耗时导致的间隔混乱
668
679
  self._shutdown_event.wait(check_interval)
680
+
669
681
  except Exception as e:
670
- SYLogger.error(f"nacos:连接监控异常: {e}")
671
- time.sleep(self.retry_delay)
682
+ SYLogger.error(f"nacos:连接监控异常: {str(e)}")
683
+ # 异常时缩短休眠,快速恢复
684
+ self._shutdown_event.wait(5)
685
+
686
+ # 线程退出重置标记
687
+ with self._monitor_thread_lock:
688
+ self._monitor_thread_started = False
689
+ SYLogger.info(
690
+ f"nacos:连接监控线程退出 - 线程ID: {threading.current_thread().ident}")
672
691
 
673
692
  def get_service_ip(self, config_ip):
674
693
  """获取服务实际IP地址"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.56b6
3
+ Version: 0.1.56b7
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -21,6 +21,7 @@ Requires-Dist: psutil>=7.1.3
21
21
  Requires-Dist: pydantic>=2.12.5
22
22
  Requires-Dist: python-dotenv>=1.2.1
23
23
  Requires-Dist: pyyaml>=6.0.3
24
+ Requires-Dist: sentry-sdk[fastapi]>=2.48.0
24
25
  Requires-Dist: sqlalchemy[asyncio]>=2.0.45
25
26
  Requires-Dist: starlette>=0.50.0
26
27
  Requires-Dist: uvicorn>=0.40.0
@@ -1,12 +1,13 @@
1
1
  command/cli.py,sha256=bP2LCLkRvfETIwWkVD70q5xFxMI4D3BpH09Ws1f-ENc,5849
2
2
  sycommon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- sycommon/services.py,sha256=pioA4E2RrV6nyAY8EuETUt4mKzCYoxD1rTMYCcppqjE,11581
4
- sycommon/config/Config.py,sha256=XWXcE_6RaoB9og0Q6ylQs4oW-lX9mhblr-wWq7S2dVY,3157
3
+ sycommon/services.py,sha256=vcO2vbe2U1CA4ykLdH1rnxgqUIouukE-wTRsjRl2kBI,11683
4
+ sycommon/config/Config.py,sha256=-LzOgnpA0GKgNexG-tmpLspkJipjtq2GcToaZbyGncg,3854
5
5
  sycommon/config/DatabaseConfig.py,sha256=ILiUuYT9_xJZE2W-RYuC3JCt_YLKc1sbH13-MHIOPhg,804
6
6
  sycommon/config/EmbeddingConfig.py,sha256=gPKwiDYbeu1GpdIZXMmgqM7JqBIzCXi0yYuGRLZooMI,362
7
7
  sycommon/config/LLMConfig.py,sha256=yU-aIqePIeF6msfRVEtGq7SXZVDfHyTi6JduKjhMO_4,371
8
8
  sycommon/config/MQConfig.py,sha256=_RDcmIdyWKjmgM5ZnriOoI-DpaxgXs7CD0awdAD6z88,252
9
9
  sycommon/config/RerankerConfig.py,sha256=35sVwzus2IscvTHnCG63Orl2pC-pMsrVi6wAGDmOH3U,341
10
+ sycommon/config/SentryConfig.py,sha256=OsLb3G9lTsCSZ7tWkcXWJHmvfILQopBxje5pjnkFJfo,320
10
11
  sycommon/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
12
  sycommon/database/async_base_db_service.py,sha256=w6ONUiTtF4-bXRnkBt9QpL9BAy0XUDbQG7F9Hf2rfjw,1337
12
13
  sycommon/database/async_database_service.py,sha256=4Ag5PH6DFEcJOXR8MRF9V_Jho5uCoU9Ibo3PqulDsXw,3916
@@ -23,7 +24,7 @@ sycommon/llm/llm_logger.py,sha256=n4UeNy_-g4oHQOsw-VUzF4uo3JVRLtxaMp1FcI8FiEo,54
23
24
  sycommon/llm/llm_tokens.py,sha256=-udDyFcmyzx6UAwIi6_d_wwI5kMd5w0-WcS2soVPQxg,4309
24
25
  sycommon/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  sycommon/logging/async_sql_logger.py,sha256=_OY36XkUm__U3NhMgiecy-qd-nptZ_0gpE3J8lGAr58,2619
26
- sycommon/logging/kafka_log.py,sha256=sVw-dFZKEgCosjSUqgTj7YrpK-ggXhleZFwMUVhl-K0,21416
27
+ sycommon/logging/kafka_log.py,sha256=1pUZ0N4FPRsTpg8PEY27iIa3xAMiLKYLBM3PDV804Lo,9934
27
28
  sycommon/logging/logger_levels.py,sha256=_-uQ_T1N8NkNgcAmLrMmJ83nHTDw5ZNvXFPvdk89XGY,1144
28
29
  sycommon/logging/logger_wrapper.py,sha256=TiHsrIIHiQMzXgXK12-0KIpU9GhwQJOoHslakzmq2zc,357
29
30
  sycommon/logging/sql_logger.py,sha256=aEU3OGnI_51Tjyuuf4FpUi9KPTceFRuKAOyQbPzGhzM,2021
@@ -31,12 +32,12 @@ sycommon/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
31
32
  sycommon/middleware/context.py,sha256=sc1UjN55dYww2tT9KdFMJV8mgpGro67SnETzbVzty-s,155
32
33
  sycommon/middleware/cors.py,sha256=0B5d_ovD56wcH9TfktRs88Q09R9f8Xx5h5ALWYvE8Iw,600
33
34
  sycommon/middleware/docs.py,sha256=bVdDBIHXGVBv562MQLSroa1DgHoObxR9gFzv71PIejg,1187
34
- sycommon/middleware/exception.py,sha256=Bk8IchNND1wg6tUX9hf4xWeEJhvA-E_zE9ysBpRZrqE,3010
35
+ sycommon/middleware/exception.py,sha256=UAy0tKijI_2JoKjwT3h62aL-tybftP3IETvcr26NOao,2883
35
36
  sycommon/middleware/middleware.py,sha256=SzZ4wufSNdwC4Ppw99TE7a6AVGkrZRc55NHSrA3PiC8,1447
36
37
  sycommon/middleware/monitor_memory.py,sha256=pYRK-wRuDd6enSg9Pf8tQxPdYQS6S0AyjyXeKFRLKEs,628
37
38
  sycommon/middleware/mq.py,sha256=4wBqiT5wJGcrfjk2GSr0_U3TStBxoNpHTzcRxVlMEHE,183
38
- sycommon/middleware/timeout.py,sha256=fImlAPLm4Oa8N9goXtT_0os1GZPCi9F92OgXU81DgDU,656
39
- sycommon/middleware/traceid.py,sha256=0WYLV5PR6sGeqhLdviHYW94UhUC7NJua2g5HWf2Zhbc,13447
39
+ sycommon/middleware/timeout.py,sha256=RLMzGMrzK14zsf8x-hmUW1DXWezETB0ZY8mpr9EKsos,740
40
+ sycommon/middleware/traceid.py,sha256=SmA9qsqMQeuGGog9xDHzXgJFhm8UxCkXEkxalaAt4hg,13121
40
41
  sycommon/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
42
  sycommon/models/base_http.py,sha256=EICAAibx3xhjBsLqm35Mi3DCqxp0FME4rD_3iQVjT_E,3051
42
43
  sycommon/models/log.py,sha256=rZpj6VkDRxK3B6H7XSeWdYZshU8F0Sks8bq1p6pPlDw,500
@@ -45,10 +46,12 @@ sycommon/models/mqmsg_model.py,sha256=cxn0M5b0utQK6crMYmL-1waeGYHvK3AlGaRy23clqT
45
46
  sycommon/models/mqsend_config.py,sha256=NQX9dc8PpuquMG36GCVhJe8omAW1KVXXqr6lSRU6D7I,268
46
47
  sycommon/models/sso_user.py,sha256=i1WAN6k5sPcPApQEdtjpWDy7VrzWLpOrOQewGLGoGIw,2702
47
48
  sycommon/notice/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- sycommon/notice/uvicorn_monitor.py,sha256=NRQVWs3jzZq9IY0M55s7LvOKtacsNpfCGGzH5071dGw,7181
49
+ sycommon/notice/uvicorn_monitor.py,sha256=VryQYcAtjijJuGDBimbVurgwxlsLaLtkNnABPDY5Tao,7332
49
50
  sycommon/rabbitmq/rabbitmq_client.py,sha256=jClUm9Ao9vZ2IZg7IXIEaDbYYnV8qtmtm77vdmwpKE4,22599
50
51
  sycommon/rabbitmq/rabbitmq_pool.py,sha256=5ruFVViSCKA7ToZmR2dZIkP0zT0ZcfsnkSGbrdkg0Tk,16141
51
- sycommon/rabbitmq/rabbitmq_service.py,sha256=yMNO2N3SxmkPs7jsyqja9EeDsirlxo_zJLDTHlwYB7A,39058
52
+ sycommon/rabbitmq/rabbitmq_service.py,sha256=RkEWzCu2DkjV6G-hZ8FQTdewvkBiPAZezrO7GzKBkiI,39046
53
+ sycommon/sentry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ sycommon/sentry/sy_sentry.py,sha256=S2Np_6WmWkI9X76Q67RWZthhCz02tKCfvdhKI57587w,1373
52
55
  sycommon/sse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
56
  sycommon/sse/event.py,sha256=k_rBJy23R7crtzQeetT0Q73D8o5-5p-eESGSs_BPOj0,2797
54
57
  sycommon/sse/sse.py,sha256=__CfWEcYxOxQ-HpLor4LTZ5hLWqw9-2X7CngqbVHsfw,10128
@@ -57,15 +60,15 @@ sycommon/synacos/example.py,sha256=61XL03tU8WTNOo3FUduf93F2fAwah1S0lbH1ufhRhRk,5
57
60
  sycommon/synacos/example2.py,sha256=adUaru3Hy482KrOA17DfaC4nwvLj8etIDS_KrWLWmCU,4811
58
61
  sycommon/synacos/feign.py,sha256=frB3D5LeFDtT3pJLFOwFzEOrNAJKeQNGk-BzUg9T3WM,8295
59
62
  sycommon/synacos/feign_client.py,sha256=ExO7Pd5B3eFKDjXqBRc260K1jkI49IYguLwJJaD2R-o,16166
60
- sycommon/synacos/nacos_service.py,sha256=9cW2tSjm0vuYFRMPR_cl_EOZPe4axQDCUBcVxoGdPKM,36180
63
+ sycommon/synacos/nacos_service.py,sha256=8RFvOpeKFqYDj1kzzdjZqBBUZMf_VcFeIyeO9uPf_AU,37194
61
64
  sycommon/synacos/param.py,sha256=KcfSkxnXOa0TGmCjY8hdzU9pzUsA8-4PeyBKWI2-568,1765
62
65
  sycommon/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
66
  sycommon/tools/docs.py,sha256=OPj2ETheuWjXLyaXtaZPbwmJKfJaYXV5s4XMVAUNrms,1607
64
67
  sycommon/tools/merge_headers.py,sha256=HV_i52Q-9se3SP8qh7ZGYl8bP7Fxtal4CGVkyMwEdM8,4373
65
68
  sycommon/tools/snowflake.py,sha256=lVEe5mNCOgz5OqGQpf5_nXaGnRJlI2STX2s-ppTtanA,11947
66
69
  sycommon/tools/timing.py,sha256=OiiE7P07lRoMzX9kzb8sZU9cDb0zNnqIlY5pWqHcnkY,2064
67
- sycommon_python_lib-0.1.56b6.dist-info/METADATA,sha256=LeQQG3OiyqTXd1H5AHtmaHXIut9tS3L3swY-a9FkSIs,7226
68
- sycommon_python_lib-0.1.56b6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
- sycommon_python_lib-0.1.56b6.dist-info/entry_points.txt,sha256=q_h2nbvhhmdnsOUZEIwpuoDjaNfBF9XqppDEmQn9d_A,46
70
- sycommon_python_lib-0.1.56b6.dist-info/top_level.txt,sha256=98CJ-cyM2WIKxLz-Pf0AitWLhJyrfXvyY8slwjTXNuc,17
71
- sycommon_python_lib-0.1.56b6.dist-info/RECORD,,
70
+ sycommon_python_lib-0.1.56b7.dist-info/METADATA,sha256=LNeEx8_l2ZYTYjb3NE5Uh8Epgrywk-O_p4zt6_JNy-k,7269
71
+ sycommon_python_lib-0.1.56b7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
+ sycommon_python_lib-0.1.56b7.dist-info/entry_points.txt,sha256=q_h2nbvhhmdnsOUZEIwpuoDjaNfBF9XqppDEmQn9d_A,46
73
+ sycommon_python_lib-0.1.56b7.dist-info/top_level.txt,sha256=98CJ-cyM2WIKxLz-Pf0AitWLhJyrfXvyY8slwjTXNuc,17
74
+ sycommon_python_lib-0.1.56b7.dist-info/RECORD,,