mdbq 4.0.109__py3-none-any.whl → 4.0.110__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 mdbq might be problematic. Click here for more details.

mdbq/__version__.py CHANGED
@@ -1 +1 @@
1
- VERSION = '4.0.109'
1
+ VERSION = '4.0.110'
mdbq/redis/redis_cache.py CHANGED
@@ -16,6 +16,8 @@ import time
16
16
  import threading
17
17
  import socket
18
18
  from datetime import datetime, date
19
+ from decimal import Decimal
20
+ from uuid import UUID
19
21
  from typing import Optional, Dict, Any, List, Union
20
22
  import redis
21
23
  from mdbq.log import mylogger
@@ -32,13 +34,42 @@ logger = mylogger.MyLogger(
32
34
  )
33
35
 
34
36
 
35
- class DateTimeEncoder(json.JSONEncoder):
36
- """自定义JSON编码器,支持datetime和date对象"""
37
+ class MySQLDataEncoder(json.JSONEncoder):
38
+ """自定义JSON编码器,支持MySQL常见数据类型"""
37
39
  def default(self, obj):
38
- if isinstance(obj, datetime):
39
- return obj.isoformat()
40
- elif isinstance(obj, date):
41
- return obj.isoformat()
40
+ try:
41
+ if isinstance(obj, datetime):
42
+ return obj.isoformat()
43
+ elif isinstance(obj, date):
44
+ return obj.isoformat()
45
+ elif isinstance(obj, Decimal):
46
+ # Decimal转换为字符串保持精度
47
+ return str(obj)
48
+ elif isinstance(obj, UUID):
49
+ return str(obj)
50
+ elif isinstance(obj, bytes):
51
+ # 二进制数据转换为base64
52
+ import base64
53
+ return base64.b64encode(obj).decode('utf-8')
54
+ elif isinstance(obj, (set, frozenset)):
55
+ # 集合类型转换为列表
56
+ return list(obj)
57
+ elif hasattr(obj, 'isoformat'):
58
+ # 其他日期时间类型
59
+ return obj.isoformat()
60
+ elif hasattr(obj, '__float__'):
61
+ # 数值类型
62
+ return float(obj)
63
+ elif hasattr(obj, '__str__'):
64
+ # 其他有字符串表示的对象
65
+ return str(obj)
66
+ elif hasattr(obj, '__dict__'):
67
+ # 处理其他对象,转换为字典
68
+ return obj.__dict__
69
+ except Exception as e:
70
+ # 如果所有方法都失败,返回对象的字符串表示
71
+ return f"<{type(obj).__name__}: {str(obj)[:100]}>"
72
+
42
73
  return super().default(obj)
43
74
 
44
75
 
@@ -268,7 +299,7 @@ class SmartCacheSystem:
268
299
 
269
300
  # 序列化值
270
301
  if isinstance(value, (dict, list, tuple)):
271
- serialized_value = json.dumps(value, ensure_ascii=False, sort_keys=True, cls=DateTimeEncoder)
302
+ serialized_value = json.dumps(value, ensure_ascii=False, sort_keys=True, cls=MySQLDataEncoder)
272
303
  else:
273
304
  serialized_value = str(value)
274
305
 
@@ -481,7 +512,7 @@ class SmartCacheSystem:
481
512
  stats_data['ops_per_second'],
482
513
  stats_data['unique_keys_count'],
483
514
  stats_data['uptime_seconds'],
484
- json.dumps(stats_data['hot_keys'], ensure_ascii=False, cls=DateTimeEncoder),
515
+ json.dumps(stats_data['hot_keys'], ensure_ascii=False, cls=MySQLDataEncoder),
485
516
  socket.gethostname(),
486
517
  self.instance_name
487
518
  ))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.109
3
+ Version: 4.0.110
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,5 +1,5 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=isMXV0CRhxtt0uFUp2iQA8kCLhOxtlSnZABiy7X6FW8,19
2
+ mdbq/__version__.py,sha256=iklgoo0dwUOPXd5UdfLVLjIut4R-avmlkGfuFD8UJGs,19
3
3
  mdbq/auth/__init__.py,sha256=pnPMAt63sh1B6kEvmutUuro46zVf2v2YDAG7q-jV_To,24
4
4
  mdbq/auth/auth_backend.py,sha256=ZxKRXPXa2t9ngRZEXKM72MzcMvN-0OtiVDOhZRTrm3w,85948
5
5
  mdbq/auth/rate_limiter.py,sha256=1m_Paxp8pDNpmyoFGRpFMVOJpbmeIvfVcfiQ2oH72qM,32850
@@ -26,7 +26,7 @@ mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,239
26
26
  mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
27
27
  mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
28
28
  mdbq/redis/getredis.py,sha256=vpBuNc22uj9Vr-_Dh25_wpwWM1e-072EAAIBdB_IpL0,23494
29
- mdbq/redis/redis_cache.py,sha256=C1AsTi0oaQeq4t-hSx11b-1ZN7NXmRLsTlrjZ8KuhOw,25772
29
+ mdbq/redis/redis_cache.py,sha256=vu0eJ063iXngm_C1h6NAkaYS69PSDT7gjjJed006hIc,27044
30
30
  mdbq/route/__init__.py,sha256=BT_dAY7V-U2o72bevq1B9Mq9QA7GodwtkxyLNdGaoE8,22
31
31
  mdbq/route/analytics.py,sha256=dngj5hVwKddEUy59nSYbOoJ9C7OVrtCmCkvW6Uj9RYM,28097
32
32
  mdbq/route/monitor.py,sha256=7gLyeq7TqnbhPwhUw0dg-hw9-0OWeKoMdMhcANSDGVs,42255
@@ -34,7 +34,7 @@ mdbq/route/routes.py,sha256=QVGfTvDgu0CpcKCvk1ra74H8uojgqTLUav1fnVAqLEA,29433
34
34
  mdbq/selenium/__init__.py,sha256=AKzeEceqZyvqn2dEDoJSzDQnbuENkJSHAlbHAD0u0ZI,10
35
35
  mdbq/selenium/get_driver.py,sha256=1NTlVUE6QsyjTrVVVqTO2LOnYf578ccFWlWnvIXGtic,20903
36
36
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
37
- mdbq-4.0.109.dist-info/METADATA,sha256=lQkQNnJ-hH1d8H6y4RDz0tmbzH41ZH0J8qWNEa_YZCk,365
38
- mdbq-4.0.109.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
39
- mdbq-4.0.109.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
40
- mdbq-4.0.109.dist-info/RECORD,,
37
+ mdbq-4.0.110.dist-info/METADATA,sha256=SExR69CN7vO5WwGP6xGeE6HxE5Uw-VoB2CFoUs0hZu8,365
38
+ mdbq-4.0.110.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
39
+ mdbq-4.0.110.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
40
+ mdbq-4.0.110.dist-info/RECORD,,
File without changes