re-common 10.0.19__py3-none-any.whl → 10.0.22__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.
Files changed (199) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/decorators/utils.py +59 -59
  145. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  146. re_common/v2/baselibrary/tools/WeChatRobot.py +79 -79
  147. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  148. re_common/v2/baselibrary/tools/dict_tools.py +37 -37
  149. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  150. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  151. re_common/v2/baselibrary/tools/list_tools.py +65 -65
  152. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  153. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  154. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  155. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  156. re_common/v2/baselibrary/utils/author_smi.py +360 -360
  157. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  158. re_common/v2/baselibrary/utils/basedict.py +37 -37
  159. re_common/v2/baselibrary/utils/basehdfs.py +161 -127
  160. re_common/v2/baselibrary/utils/basepika.py +180 -180
  161. re_common/v2/baselibrary/utils/basetime.py +77 -0
  162. re_common/v2/baselibrary/utils/db.py +38 -38
  163. re_common/v2/baselibrary/utils/json_cls.py +16 -11
  164. re_common/v2/baselibrary/utils/mq.py +83 -83
  165. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  166. re_common/v2/baselibrary/utils/string_bool.py +149 -149
  167. re_common/v2/baselibrary/utils/string_clear.py +204 -202
  168. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  169. re_common/v2/baselibrary/utils/stringutils.py +213 -213
  170. re_common/vip/base_step_process.py +11 -11
  171. re_common/vip/baseencodeid.py +90 -90
  172. re_common/vip/changetaskname.py +28 -28
  173. re_common/vip/core_var.py +24 -24
  174. re_common/vip/mmh3Hash.py +89 -89
  175. re_common/vip/proxy/allproxys.py +127 -127
  176. re_common/vip/proxy/allproxys_thread.py +159 -159
  177. re_common/vip/proxy/cnki_proxy.py +153 -153
  178. re_common/vip/proxy/kuaidaili.py +87 -87
  179. re_common/vip/proxy/proxy_all.py +113 -113
  180. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  181. re_common/vip/proxy/wanfang_proxy.py +152 -152
  182. re_common/vip/proxy/wp_proxy_all.py +181 -181
  183. re_common/vip/read_rawid_to_txt.py +91 -91
  184. re_common/vip/title/__init__.py +5 -5
  185. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  186. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  187. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  188. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  189. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  190. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  191. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  192. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  193. re_common/vip/title/transform/__init__.py +10 -10
  194. {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/LICENSE +201 -201
  195. {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/METADATA +16 -24
  196. re_common-10.0.22.dist-info/RECORD +227 -0
  197. {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/WHEEL +1 -1
  198. re_common-10.0.19.dist-info/RECORD +0 -226
  199. {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,77 @@
1
+ from datetime import datetime, timezone, timedelta
2
+ from typing import Optional
3
+
4
+
5
+ class BaseTime(object):
6
+ @staticmethod
7
+ def get_utc_now() -> datetime:
8
+ """获取当前UTC时间"""
9
+ return datetime.now(timezone.utc)
10
+
11
+ @staticmethod
12
+ def to_beijing_time(dt: datetime) -> datetime:
13
+ """将datetime对象转换为北京时间(UTC+8)"""
14
+ return dt.astimezone(timezone(timedelta(hours=8)))
15
+
16
+ @staticmethod
17
+ def get_current_beijing_time() -> datetime:
18
+ """获取当前北京时间"""
19
+ return BaseTime.to_beijing_time(BaseTime.get_utc_now())
20
+
21
+ @staticmethod
22
+ def get_beijing_time_str(format: str = "%Y-%m-%d %H:%M:%S") -> str:
23
+ """
24
+ 获取当前北京时间的字符串表示
25
+ :param format: 时间字符串的格式 格式为'YYYY-MM-DD HH:MM:SS'
26
+ """
27
+ beijing_time = BaseTime.get_current_beijing_time()
28
+ return beijing_time.strftime(format)
29
+
30
+ @staticmethod
31
+ def get_current_month_str() -> str:
32
+ """获取当前月份的字符串表示,格式为'YYYYMM'"""
33
+ beijing_time = BaseTime.get_current_beijing_time()
34
+ return beijing_time.strftime("%Y%m")
35
+
36
+ @staticmethod
37
+ def parse_beijing_time(time_str: str, format: str = "%Y-%m-%d %H:%M:%S") -> datetime:
38
+ """
39
+ 解析时间字符串为北京时间的datetime对象
40
+
41
+ :param time_str: 时间字符串
42
+ :param format: 时间字符串的格式
43
+ :return: 带有时区信息的datetime对象(UTC+8)
44
+ """
45
+ dt = datetime.strptime(time_str, format)
46
+ return dt.replace(tzinfo=timezone(timedelta(hours=8)))
47
+
48
+ @staticmethod
49
+ def get_time_difference(time_str: str) -> timedelta:
50
+ """
51
+ 计算当前时间与给定时间字符串的时间差
52
+
53
+ :param time_str: 时间字符串,格式为"YYYY-MM-DD HH:MM:SS"
54
+ :return: timedelta对象,表示时间差
55
+ """
56
+ current_time = BaseTime.get_current_beijing_time()
57
+ target_time = BaseTime.parse_beijing_time(time_str)
58
+ difference = current_time - target_time
59
+ # print(f"时间差: {difference}")
60
+ # print(f"总秒数: {difference.total_seconds()}秒")
61
+ # print(f"天数: {difference.days}天")
62
+ # print(f"小时数: {difference.total_seconds() / 3600:.2f}小时")
63
+ # print(f"分钟数: {difference.total_seconds() / 60:.2f}分钟")
64
+
65
+ return difference
66
+
67
+ @staticmethod
68
+ def is_hour_changed(last_time_str: str) -> bool:
69
+ """
70
+ 检查最后一次记录时间与当前时间是否跨越了小时边界
71
+
72
+ :param last_time_str: 最后一次记录的时间字符串,格式为"YYYY-MM-DD HH:MM:SS"
73
+ :return: True表示跨越了小时边界,False表示仍在同一小时内
74
+ """
75
+ current_time = BaseTime.get_current_beijing_time()
76
+ last_time = BaseTime.parse_beijing_time(last_time_str)
77
+ return current_time.hour != last_time.hour
@@ -1,38 +1,38 @@
1
- from contextlib import asynccontextmanager
2
- from typing import AsyncGenerator, Tuple
3
-
4
- import aiomysql
5
- from aiomysql import Pool, Connection, Cursor, DictCursor
6
-
7
- DB_CONFIG = {
8
- 'host': '192.168.98.55',
9
- 'port': 4000,
10
- 'user': 'dataware_house_baseUser',
11
- 'password': 'FF19AF831AEBD580B450B16BF9264200',
12
- 'db': 'dataware_house_base',
13
- 'charset': 'utf8mb4',
14
- 'minsize': 16, # 最小连接数
15
- 'maxsize': 128, # 最大连接数
16
- 'autocommit': False, # 自动提交事务
17
- 'pool_recycle': 3600, # 每个连接的回收时间(秒),超过此时间后连接将被关闭并重新创建,避免失效连接
18
- 'echo': False, # 打印SQL语句
19
- }
20
-
21
-
22
- @asynccontextmanager
23
- async def get_db_pool():
24
- """异步数据库连接池管理工具"""
25
- pool: Pool = await aiomysql.create_pool(**DB_CONFIG)
26
- try:
27
- yield pool
28
- finally:
29
- pool.close()
30
- await pool.wait_closed()
31
-
32
-
33
- @asynccontextmanager
34
- async def get_session(pool: Pool) -> AsyncGenerator[Tuple[Connection, Cursor], None]:
35
- """获取数据库会话"""
36
- async with pool.acquire() as conn:
37
- async with conn.cursor() as cursor:
38
- yield conn, cursor
1
+ from contextlib import asynccontextmanager
2
+ from typing import AsyncGenerator, Tuple
3
+
4
+ import aiomysql
5
+ from aiomysql import Pool, Connection, Cursor, DictCursor
6
+
7
+ DB_CONFIG = {
8
+ 'host': '192.168.98.55',
9
+ 'port': 4000,
10
+ 'user': 'dataware_house_baseUser',
11
+ 'password': 'FF19AF831AEBD580B450B16BF9264200',
12
+ 'db': 'dataware_house_base',
13
+ 'charset': 'utf8mb4',
14
+ 'minsize': 16, # 最小连接数
15
+ 'maxsize': 128, # 最大连接数
16
+ 'autocommit': False, # 自动提交事务
17
+ 'pool_recycle': 3600, # 每个连接的回收时间(秒),超过此时间后连接将被关闭并重新创建,避免失效连接
18
+ 'echo': False, # 打印SQL语句
19
+ }
20
+
21
+
22
+ @asynccontextmanager
23
+ async def get_db_pool():
24
+ """异步数据库连接池管理工具"""
25
+ pool: Pool = await aiomysql.create_pool(**DB_CONFIG)
26
+ try:
27
+ yield pool
28
+ finally:
29
+ pool.close()
30
+ await pool.wait_closed()
31
+
32
+
33
+ @asynccontextmanager
34
+ async def get_session(pool: Pool) -> AsyncGenerator[Tuple[Connection, Cursor], None]:
35
+ """获取数据库会话"""
36
+ async with pool.acquire() as conn:
37
+ async with conn.cursor() as cursor:
38
+ yield conn, cursor
@@ -1,11 +1,16 @@
1
- import base64
2
- import json
3
-
4
-
5
- class BytesEncoder(json.JSONEncoder):
6
- def default(self, obj):
7
- if isinstance(obj, bytes):
8
- return base64.b64encode(obj).decode('utf-8')
9
- return super().default(obj)
10
-
11
- # json.dumps(x, ensure_ascii=False, cls=BytesEncoder)
1
+ import base64
2
+ import functools
3
+ import json
4
+
5
+ json_dumps = functools.partial(json.dumps, ensure_ascii=False)
6
+
7
+
8
+ class BytesEncoder(json.JSONEncoder):
9
+ def default(self, obj):
10
+ if isinstance(obj, bytes):
11
+ return base64.b64encode(obj).decode('utf-8')
12
+ return super().default(obj)
13
+
14
+
15
+ def base64_to_bytes(base64_str, encoding="utf-8") -> bytes:
16
+ return base64.b64decode(base64_str.encode(encoding))
@@ -1,83 +1,83 @@
1
- import logging
2
- import traceback
3
-
4
- from re_common.v2.baselibrary.utils.basepika import BasePika
5
- from retry import retry
6
-
7
- logging_logger = logging.getLogger(__name__)
8
-
9
-
10
- class UseMq(object):
11
-
12
- def __init__(self, queue, qos=1):
13
- self.queue = queue
14
- self.qos = qos
15
- self.basepika = BasePika()
16
- self.basepika.set_default()
17
- self.basepika.connect()
18
- self.basepika.create_channel()
19
- self.basepika.queue_declare(queue=queue, durable=True)
20
- self.basepika.basic_qos(qos)
21
- self.properties = self.basepika.get_properties()
22
-
23
- def re_conn(self):
24
- """
25
- 重新连接
26
- :return:
27
- """
28
- self.basepika.connect()
29
- self.basepika.create_channel()
30
- self.basepika.queue_declare(queue=self.queue, durable=True)
31
- self.basepika.basic_qos(self.qos)
32
-
33
- @retry(delay=5, backoff=2, max_delay=60 * 3, logger=logging_logger)
34
- def get_mq(self):
35
- try:
36
- if self.basepika.channel.is_closed:
37
- logging_logger.info("重连中......")
38
- self.re_conn()
39
- logging_logger.info("重连完成......")
40
- self.basepika.set_get_msg_callback(routing_key=self.queue, callback=self.callback, auto_ack=False)
41
- self.basepika.start_get_msg()
42
- except:
43
- traceback.print_exc()
44
- logging_logger.info("重连中......")
45
- self.re_conn()
46
-
47
- def callback(self, ch, method, properties, body):
48
- # print(type(body))
49
- # print(" [x] Received %r" % body)
50
- # body = body.decode()
51
- self.callback2(ch, method, properties, body)
52
- if self.basepika.auto_ack is False:
53
- self.basepika.basic_ack(ch, method)
54
-
55
- def callback2(self, ch, method, properties, body):
56
- pass
57
-
58
- @retry(delay=5, backoff=2, max_delay=60 * 3, logger=logging_logger)
59
- def send_mq(self, body, num=100):
60
- try:
61
- if self.basepika.get_queue_size(self.queue) < num:
62
- self.basepika.easy_send_msg(routing_key=self.queue,
63
- body=body,
64
- properties=self.properties)
65
- return True
66
- else:
67
- return False
68
- except:
69
- traceback.print_exc()
70
- logging_logger.info("重连中......")
71
- self.re_conn()
72
- return False
73
-
74
- def get_server_mq_num(self, num=100):
75
- if self.basepika.get_queue_size(self.queue) < num:
76
- return True
77
- else:
78
- return False
79
-
80
- def easy_send_mq(self, body):
81
- self.basepika.easy_send_msg(routing_key=self.queue,
82
- body=body,
83
- properties=self.properties)
1
+ import logging
2
+ import traceback
3
+
4
+ from re_common.v2.baselibrary.utils.basepika import BasePika
5
+ from retry import retry
6
+
7
+ logging_logger = logging.getLogger(__name__)
8
+
9
+
10
+ class UseMq(object):
11
+
12
+ def __init__(self, queue, qos=1):
13
+ self.queue = queue
14
+ self.qos = qos
15
+ self.basepika = BasePika()
16
+ self.basepika.set_default()
17
+ self.basepika.connect()
18
+ self.basepika.create_channel()
19
+ self.basepika.queue_declare(queue=queue, durable=True)
20
+ self.basepika.basic_qos(qos)
21
+ self.properties = self.basepika.get_properties()
22
+
23
+ def re_conn(self):
24
+ """
25
+ 重新连接
26
+ :return:
27
+ """
28
+ self.basepika.connect()
29
+ self.basepika.create_channel()
30
+ self.basepika.queue_declare(queue=self.queue, durable=True)
31
+ self.basepika.basic_qos(self.qos)
32
+
33
+ @retry(delay=5, backoff=2, max_delay=60 * 3, logger=logging_logger)
34
+ def get_mq(self):
35
+ try:
36
+ if self.basepika.channel.is_closed:
37
+ logging_logger.info("重连中......")
38
+ self.re_conn()
39
+ logging_logger.info("重连完成......")
40
+ self.basepika.set_get_msg_callback(routing_key=self.queue, callback=self.callback, auto_ack=False)
41
+ self.basepika.start_get_msg()
42
+ except:
43
+ traceback.print_exc()
44
+ logging_logger.info("重连中......")
45
+ self.re_conn()
46
+
47
+ def callback(self, ch, method, properties, body):
48
+ # print(type(body))
49
+ # print(" [x] Received %r" % body)
50
+ # body = body.decode()
51
+ self.callback2(ch, method, properties, body)
52
+ if self.basepika.auto_ack is False:
53
+ self.basepika.basic_ack(ch, method)
54
+
55
+ def callback2(self, ch, method, properties, body):
56
+ pass
57
+
58
+ @retry(delay=5, backoff=2, max_delay=60 * 3, logger=logging_logger)
59
+ def send_mq(self, body, num=100):
60
+ try:
61
+ if self.basepika.get_queue_size(self.queue) < num:
62
+ self.basepika.easy_send_msg(routing_key=self.queue,
63
+ body=body,
64
+ properties=self.properties)
65
+ return True
66
+ else:
67
+ return False
68
+ except:
69
+ traceback.print_exc()
70
+ logging_logger.info("重连中......")
71
+ self.re_conn()
72
+ return False
73
+
74
+ def get_server_mq_num(self, num=100):
75
+ if self.basepika.get_queue_size(self.queue) < num:
76
+ return True
77
+ else:
78
+ return False
79
+
80
+ def easy_send_mq(self, body):
81
+ self.basepika.easy_send_msg(routing_key=self.queue,
82
+ body=body,
83
+ properties=self.properties)