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.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +79 -79
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/dict_tools.py +37 -37
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/list_tools.py +65 -65
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/author_smi.py +360 -360
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +161 -127
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +77 -0
- re_common/v2/baselibrary/utils/db.py +38 -38
- re_common/v2/baselibrary/utils/json_cls.py +16 -11
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +149 -149
- re_common/v2/baselibrary/utils/string_clear.py +204 -202
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +213 -213
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/LICENSE +201 -201
- {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/METADATA +16 -24
- re_common-10.0.22.dist-info/RECORD +227 -0
- {re_common-10.0.19.dist-info → re_common-10.0.22.dist-info}/WHEEL +1 -1
- re_common-10.0.19.dist-info/RECORD +0 -226
- {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
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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)
|