re-common 10.0.22__py3-none-any.whl → 10.0.24__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/business_utils/BusinessStringUtil.py +195 -0
- re_common/v2/baselibrary/business_utils/__init__.py +0 -0
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -0
- 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 +95 -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 -161
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +77 -77
- re_common/v2/baselibrary/utils/db.py +38 -38
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- 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 +186 -149
- re_common/v2/baselibrary/utils/string_clear.py +227 -204
- 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.22.dist-info → re_common-10.0.24.dist-info}/LICENSE +201 -201
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/METADATA +16 -16
- re_common-10.0.24.dist-info/RECORD +230 -0
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/WHEEL +1 -1
- re_common-10.0.22.dist-info/RECORD +0 -227
- {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/top_level.txt +0 -0
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
import toml
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class TomlConfig(object):
|
|
7
|
-
"""
|
|
8
|
-
toml 格式的配置文件
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
def __init__(self, configfile=""):
|
|
12
|
-
# 配置文件路径
|
|
13
|
-
self.configfile = configfile
|
|
14
|
-
self.content = None
|
|
15
|
-
|
|
16
|
-
def set_config_path(self, configfile):
|
|
17
|
-
self.configfile = configfile
|
|
18
|
-
return self
|
|
19
|
-
|
|
20
|
-
def read_file_remove_bom(self):
|
|
21
|
-
if not os.path.exists(self.configfile):
|
|
22
|
-
print(self.configfile + ' not found')
|
|
23
|
-
raise FileNotFoundError("配置文件不存在")
|
|
24
|
-
with open(self.configfile, mode='rb') as f:
|
|
25
|
-
content = f.read()
|
|
26
|
-
if content.startswith(b'\xef\xbb\xbf'): # 去掉 utf8 bom 头
|
|
27
|
-
content = content[3:]
|
|
28
|
-
self.content = content
|
|
29
|
-
return self
|
|
30
|
-
|
|
31
|
-
def get_dicts(self, encoding="utf8"):
|
|
32
|
-
"""
|
|
33
|
-
加载后是一个doc的形式
|
|
34
|
-
:param content:
|
|
35
|
-
:param encoding:
|
|
36
|
-
:return:
|
|
37
|
-
"""
|
|
38
|
-
dic = toml.loads(self.content.decode(encoding))
|
|
39
|
-
return dic
|
|
40
|
-
|
|
41
|
-
def get_config_dicts(self, encoding="utf8"):
|
|
42
|
-
"""
|
|
43
|
-
加载后是一个doc的形式
|
|
44
|
-
:param content:
|
|
45
|
-
:param encoding:
|
|
46
|
-
:return:
|
|
47
|
-
"""
|
|
48
|
-
self.read_file_remove_bom()
|
|
49
|
-
return self.get_dicts()
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import toml
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TomlConfig(object):
|
|
7
|
+
"""
|
|
8
|
+
toml 格式的配置文件
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, configfile=""):
|
|
12
|
+
# 配置文件路径
|
|
13
|
+
self.configfile = configfile
|
|
14
|
+
self.content = None
|
|
15
|
+
|
|
16
|
+
def set_config_path(self, configfile):
|
|
17
|
+
self.configfile = configfile
|
|
18
|
+
return self
|
|
19
|
+
|
|
20
|
+
def read_file_remove_bom(self):
|
|
21
|
+
if not os.path.exists(self.configfile):
|
|
22
|
+
print(self.configfile + ' not found')
|
|
23
|
+
raise FileNotFoundError("配置文件不存在")
|
|
24
|
+
with open(self.configfile, mode='rb') as f:
|
|
25
|
+
content = f.read()
|
|
26
|
+
if content.startswith(b'\xef\xbb\xbf'): # 去掉 utf8 bom 头
|
|
27
|
+
content = content[3:]
|
|
28
|
+
self.content = content
|
|
29
|
+
return self
|
|
30
|
+
|
|
31
|
+
def get_dicts(self, encoding="utf8"):
|
|
32
|
+
"""
|
|
33
|
+
加载后是一个doc的形式
|
|
34
|
+
:param content:
|
|
35
|
+
:param encoding:
|
|
36
|
+
:return:
|
|
37
|
+
"""
|
|
38
|
+
dic = toml.loads(self.content.decode(encoding))
|
|
39
|
+
return dic
|
|
40
|
+
|
|
41
|
+
def get_config_dicts(self, encoding="utf8"):
|
|
42
|
+
"""
|
|
43
|
+
加载后是一个doc的形式
|
|
44
|
+
:param content:
|
|
45
|
+
:param encoding:
|
|
46
|
+
:return:
|
|
47
|
+
"""
|
|
48
|
+
self.read_file_remove_bom()
|
|
49
|
+
return self.get_dicts()
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
from faker import Faker
|
|
2
|
-
from faker.providers import internet
|
|
3
|
-
|
|
4
|
-
fake = Faker()
|
|
5
|
-
# 生成名字
|
|
6
|
-
print(fake.name())
|
|
7
|
-
# 生成地址
|
|
8
|
-
print(fake.address())
|
|
9
|
-
# 生成国家
|
|
10
|
-
print(fake.country())
|
|
11
|
-
# 生成省份
|
|
12
|
-
print(fake.province())
|
|
13
|
-
# 生成市 县
|
|
14
|
-
print(fake.city_suffix())
|
|
15
|
-
# 生成区
|
|
16
|
-
print(fake.district())
|
|
17
|
-
# 生成街道名
|
|
18
|
-
print(fake.street_name())
|
|
19
|
-
# 生成街 路
|
|
20
|
-
print(fake.street_suffix())
|
|
21
|
-
# 生成0~9 随机数
|
|
22
|
-
print(fake.random_digit())
|
|
23
|
-
# 生成随机字母
|
|
24
|
-
print(fake.random_element())
|
|
25
|
-
# 生成随机颜色名
|
|
26
|
-
print(fake.color_name())
|
|
27
|
-
# 生成随机日期
|
|
28
|
-
print(fake.date())
|
|
29
|
-
# 生成一段文字
|
|
30
|
-
print(fake.text())
|
|
31
|
-
|
|
32
|
-
fake.add_provider(internet)
|
|
33
|
-
|
|
34
|
-
# 生成ipv4
|
|
35
|
-
print(fake.ipv4_private())
|
|
36
|
-
|
|
1
|
+
from faker import Faker
|
|
2
|
+
from faker.providers import internet
|
|
3
|
+
|
|
4
|
+
fake = Faker()
|
|
5
|
+
# 生成名字
|
|
6
|
+
print(fake.name())
|
|
7
|
+
# 生成地址
|
|
8
|
+
print(fake.address())
|
|
9
|
+
# 生成国家
|
|
10
|
+
print(fake.country())
|
|
11
|
+
# 生成省份
|
|
12
|
+
print(fake.province())
|
|
13
|
+
# 生成市 县
|
|
14
|
+
print(fake.city_suffix())
|
|
15
|
+
# 生成区
|
|
16
|
+
print(fake.district())
|
|
17
|
+
# 生成街道名
|
|
18
|
+
print(fake.street_name())
|
|
19
|
+
# 生成街 路
|
|
20
|
+
print(fake.street_suffix())
|
|
21
|
+
# 生成0~9 随机数
|
|
22
|
+
print(fake.random_digit())
|
|
23
|
+
# 生成随机字母
|
|
24
|
+
print(fake.random_element())
|
|
25
|
+
# 生成随机颜色名
|
|
26
|
+
print(fake.color_name())
|
|
27
|
+
# 生成随机日期
|
|
28
|
+
print(fake.date())
|
|
29
|
+
# 生成一段文字
|
|
30
|
+
print(fake.text())
|
|
31
|
+
|
|
32
|
+
fake.add_provider(internet)
|
|
33
|
+
|
|
34
|
+
# 生成ipv4
|
|
35
|
+
print(fake.ipv4_private())
|
|
36
|
+
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
import aiohttp
|
|
2
|
-
from aiohttp_socks import ProxyConnector
|
|
3
|
-
from re_common.baselibrary.tools.all_requests.mrequest import MRequest
|
|
4
|
-
from re_common.baselibrary.utils.baseurl import BaseUrl
|
|
5
|
-
from re_common.baselibrary.utils.core.mdeprecated import aiohttp_try_except
|
|
6
|
-
from re_common.baselibrary.utils.core.mlamada import html_strip
|
|
7
|
-
from re_common.baselibrary.utils.core.requests_core import set_proxy_aio
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
async def default_resp_hook(self, resp):
|
|
11
|
-
pass
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class AioHttpRequest(MRequest):
|
|
15
|
-
|
|
16
|
-
def __init__(self, logger=None):
|
|
17
|
-
if logger is None:
|
|
18
|
-
from re_common.baselibrary import MLogger
|
|
19
|
-
logger = MLogger().streamlogger
|
|
20
|
-
super().__init__(logger=logger)
|
|
21
|
-
self.kwargs = {}
|
|
22
|
-
self.client_session_kwargs = {}
|
|
23
|
-
self.resp_hook = default_resp_hook
|
|
24
|
-
# 预留一个字典可以向里面传入其他信息
|
|
25
|
-
self.other_dicts = {}
|
|
26
|
-
|
|
27
|
-
def set_resp_hook(self, resp_hook_func):
|
|
28
|
-
self.resp_hook = resp_hook_func
|
|
29
|
-
return self
|
|
30
|
-
|
|
31
|
-
def builder(self):
|
|
32
|
-
if self.refer:
|
|
33
|
-
self.header["refer"] = self.refer
|
|
34
|
-
self.kwargs["headers"] = self.header
|
|
35
|
-
# 比如在请求之前调用API请求COOKIE,这时这个调用就没得 代理
|
|
36
|
-
self.client_session_kwargs["skip_auto_headers"] = self.skip_auto_headers
|
|
37
|
-
if self.proxy:
|
|
38
|
-
if "socks" in self.proxy:
|
|
39
|
-
if self.force_close == "true":
|
|
40
|
-
connector = ProxyConnector.from_url(self.proxy, force_close=True)
|
|
41
|
-
else:
|
|
42
|
-
connector = ProxyConnector.from_url(self.proxy)
|
|
43
|
-
self.client_session_kwargs["connector"] = connector
|
|
44
|
-
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
45
|
-
else:
|
|
46
|
-
self.kwargs["proxy"] = set_proxy_aio(self.proxy)
|
|
47
|
-
else:
|
|
48
|
-
self.kwargs["proxy"] = set_proxy_aio(self.proxy)
|
|
49
|
-
if self.force_close == "true" and "connector" not in self.client_session_kwargs.keys():
|
|
50
|
-
connector = aiohttp.TCPConnector(force_close=True)
|
|
51
|
-
self.client_session_kwargs["connector"] = connector
|
|
52
|
-
if BaseUrl.urlScheme(self.url) == "https":
|
|
53
|
-
self.kwargs["verify_ssl"] = False
|
|
54
|
-
self.kwargs["timeout"] = self.timeout
|
|
55
|
-
self.kwargs["allow_redirects"] = self.allow_redirects
|
|
56
|
-
self.kwargs["params"] = self.params
|
|
57
|
-
self.kwargs["cookies"] = self.cookies
|
|
58
|
-
return self
|
|
59
|
-
|
|
60
|
-
async def set_resp(self, resp):
|
|
61
|
-
self.resp = resp
|
|
62
|
-
self.set_status_code(resp.status)
|
|
63
|
-
# 有时候302时我们去获取html会报错
|
|
64
|
-
if self.allow_resp_text:
|
|
65
|
-
if self.resp_encoding is not None:
|
|
66
|
-
self.html = await resp.text(encoding=self.resp_encoding, errors=self.resp_errors)
|
|
67
|
-
else:
|
|
68
|
-
self.html = await resp.text(errors=self.resp_errors)
|
|
69
|
-
self.html = html_strip(self.html)
|
|
70
|
-
else:
|
|
71
|
-
self.html = None
|
|
72
|
-
if self.allow_resp_bytes:
|
|
73
|
-
self.html_bytes = await resp.content.read()
|
|
74
|
-
else:
|
|
75
|
-
self.html_bytes = None
|
|
76
|
-
|
|
77
|
-
@aiohttp_try_except
|
|
78
|
-
async def get(self):
|
|
79
|
-
if self.sn is None:
|
|
80
|
-
# skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
81
|
-
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
82
|
-
async with self.sn:
|
|
83
|
-
async with self.sn.get(url=self.url, **self.kwargs) as resp:
|
|
84
|
-
await self.set_resp(resp)
|
|
85
|
-
await self.resp_hook(self, resp)
|
|
86
|
-
return True, {"code": self.status_code, "msg": ""}
|
|
87
|
-
|
|
88
|
-
@aiohttp_try_except
|
|
89
|
-
async def post(self):
|
|
90
|
-
if self.sn is None:
|
|
91
|
-
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
92
|
-
async with self.sn:
|
|
93
|
-
async with self.sn.post(url=self.url, data=self.data, **self.kwargs) as resp:
|
|
94
|
-
await self.set_resp(resp)
|
|
95
|
-
await self.resp_hook(self, resp)
|
|
96
|
-
return True, {"code": self.status_code, "msg": ""}
|
|
97
|
-
|
|
98
|
-
def all_middlerwares(self, dicts):
|
|
99
|
-
bools = True
|
|
100
|
-
for item in self.middler_list:
|
|
101
|
-
bools, dicts = item()
|
|
102
|
-
if not bools:
|
|
103
|
-
return bools, dicts
|
|
104
|
-
return bools, dicts
|
|
105
|
-
|
|
106
|
-
async def run(self, moths="get"):
|
|
107
|
-
self.builder()
|
|
108
|
-
self.on_request_start()
|
|
109
|
-
if moths == MRequest.GET:
|
|
110
|
-
bools, dicts = await self.get()
|
|
111
|
-
elif moths == MRequest.POST:
|
|
112
|
-
bools, dicts = await self.post()
|
|
113
|
-
else:
|
|
114
|
-
bools, dicts = False, {}
|
|
115
|
-
self.on_request_end()
|
|
116
|
-
if bools:
|
|
117
|
-
return self.all_middlerwares(dicts)
|
|
118
|
-
return bools, dicts
|
|
1
|
+
import aiohttp
|
|
2
|
+
from aiohttp_socks import ProxyConnector
|
|
3
|
+
from re_common.baselibrary.tools.all_requests.mrequest import MRequest
|
|
4
|
+
from re_common.baselibrary.utils.baseurl import BaseUrl
|
|
5
|
+
from re_common.baselibrary.utils.core.mdeprecated import aiohttp_try_except
|
|
6
|
+
from re_common.baselibrary.utils.core.mlamada import html_strip
|
|
7
|
+
from re_common.baselibrary.utils.core.requests_core import set_proxy_aio
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
async def default_resp_hook(self, resp):
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AioHttpRequest(MRequest):
|
|
15
|
+
|
|
16
|
+
def __init__(self, logger=None):
|
|
17
|
+
if logger is None:
|
|
18
|
+
from re_common.baselibrary import MLogger
|
|
19
|
+
logger = MLogger().streamlogger
|
|
20
|
+
super().__init__(logger=logger)
|
|
21
|
+
self.kwargs = {}
|
|
22
|
+
self.client_session_kwargs = {}
|
|
23
|
+
self.resp_hook = default_resp_hook
|
|
24
|
+
# 预留一个字典可以向里面传入其他信息
|
|
25
|
+
self.other_dicts = {}
|
|
26
|
+
|
|
27
|
+
def set_resp_hook(self, resp_hook_func):
|
|
28
|
+
self.resp_hook = resp_hook_func
|
|
29
|
+
return self
|
|
30
|
+
|
|
31
|
+
def builder(self):
|
|
32
|
+
if self.refer:
|
|
33
|
+
self.header["refer"] = self.refer
|
|
34
|
+
self.kwargs["headers"] = self.header
|
|
35
|
+
# 比如在请求之前调用API请求COOKIE,这时这个调用就没得 代理
|
|
36
|
+
self.client_session_kwargs["skip_auto_headers"] = self.skip_auto_headers
|
|
37
|
+
if self.proxy:
|
|
38
|
+
if "socks" in self.proxy:
|
|
39
|
+
if self.force_close == "true":
|
|
40
|
+
connector = ProxyConnector.from_url(self.proxy, force_close=True)
|
|
41
|
+
else:
|
|
42
|
+
connector = ProxyConnector.from_url(self.proxy)
|
|
43
|
+
self.client_session_kwargs["connector"] = connector
|
|
44
|
+
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
45
|
+
else:
|
|
46
|
+
self.kwargs["proxy"] = set_proxy_aio(self.proxy)
|
|
47
|
+
else:
|
|
48
|
+
self.kwargs["proxy"] = set_proxy_aio(self.proxy)
|
|
49
|
+
if self.force_close == "true" and "connector" not in self.client_session_kwargs.keys():
|
|
50
|
+
connector = aiohttp.TCPConnector(force_close=True)
|
|
51
|
+
self.client_session_kwargs["connector"] = connector
|
|
52
|
+
if BaseUrl.urlScheme(self.url) == "https":
|
|
53
|
+
self.kwargs["verify_ssl"] = False
|
|
54
|
+
self.kwargs["timeout"] = self.timeout
|
|
55
|
+
self.kwargs["allow_redirects"] = self.allow_redirects
|
|
56
|
+
self.kwargs["params"] = self.params
|
|
57
|
+
self.kwargs["cookies"] = self.cookies
|
|
58
|
+
return self
|
|
59
|
+
|
|
60
|
+
async def set_resp(self, resp):
|
|
61
|
+
self.resp = resp
|
|
62
|
+
self.set_status_code(resp.status)
|
|
63
|
+
# 有时候302时我们去获取html会报错
|
|
64
|
+
if self.allow_resp_text:
|
|
65
|
+
if self.resp_encoding is not None:
|
|
66
|
+
self.html = await resp.text(encoding=self.resp_encoding, errors=self.resp_errors)
|
|
67
|
+
else:
|
|
68
|
+
self.html = await resp.text(errors=self.resp_errors)
|
|
69
|
+
self.html = html_strip(self.html)
|
|
70
|
+
else:
|
|
71
|
+
self.html = None
|
|
72
|
+
if self.allow_resp_bytes:
|
|
73
|
+
self.html_bytes = await resp.content.read()
|
|
74
|
+
else:
|
|
75
|
+
self.html_bytes = None
|
|
76
|
+
|
|
77
|
+
@aiohttp_try_except
|
|
78
|
+
async def get(self):
|
|
79
|
+
if self.sn is None:
|
|
80
|
+
# skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
81
|
+
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
82
|
+
async with self.sn:
|
|
83
|
+
async with self.sn.get(url=self.url, **self.kwargs) as resp:
|
|
84
|
+
await self.set_resp(resp)
|
|
85
|
+
await self.resp_hook(self, resp)
|
|
86
|
+
return True, {"code": self.status_code, "msg": ""}
|
|
87
|
+
|
|
88
|
+
@aiohttp_try_except
|
|
89
|
+
async def post(self):
|
|
90
|
+
if self.sn is None:
|
|
91
|
+
self.sn = aiohttp.ClientSession(**self.client_session_kwargs)
|
|
92
|
+
async with self.sn:
|
|
93
|
+
async with self.sn.post(url=self.url, data=self.data, **self.kwargs) as resp:
|
|
94
|
+
await self.set_resp(resp)
|
|
95
|
+
await self.resp_hook(self, resp)
|
|
96
|
+
return True, {"code": self.status_code, "msg": ""}
|
|
97
|
+
|
|
98
|
+
def all_middlerwares(self, dicts):
|
|
99
|
+
bools = True
|
|
100
|
+
for item in self.middler_list:
|
|
101
|
+
bools, dicts = item()
|
|
102
|
+
if not bools:
|
|
103
|
+
return bools, dicts
|
|
104
|
+
return bools, dicts
|
|
105
|
+
|
|
106
|
+
async def run(self, moths="get"):
|
|
107
|
+
self.builder()
|
|
108
|
+
self.on_request_start()
|
|
109
|
+
if moths == MRequest.GET:
|
|
110
|
+
bools, dicts = await self.get()
|
|
111
|
+
elif moths == MRequest.POST:
|
|
112
|
+
bools, dicts = await self.post()
|
|
113
|
+
else:
|
|
114
|
+
bools, dicts = False, {}
|
|
115
|
+
self.on_request_end()
|
|
116
|
+
if bools:
|
|
117
|
+
return self.all_middlerwares(dicts)
|
|
118
|
+
return bools, dicts
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import aiohttp
|
|
2
|
-
import httpx
|
|
3
|
-
from re_common.baselibrary.tools.all_requests.mrequest import MRequest
|
|
4
|
-
from re_common.baselibrary.utils.baseurl import BaseUrl
|
|
5
|
-
from re_common.baselibrary.utils.core.mdeprecated import aiohttp_try_except
|
|
6
|
-
from re_common.baselibrary.utils.core.mlamada import html_strip
|
|
7
|
-
from re_common.baselibrary.utils.core.requests_core import set_proxy_aio, set_proxy_httpx
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
async def default_resp_hook(self, resp):
|
|
11
|
-
pass
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class HttpxRequest(MRequest):
|
|
15
|
-
|
|
16
|
-
def __init__(self, logger=None):
|
|
17
|
-
if logger is None:
|
|
18
|
-
from re_common.baselibrary import MLogger
|
|
19
|
-
logger = MLogger().streamlogger
|
|
20
|
-
super().__init__(logger=logger)
|
|
21
|
-
self.kwargs = {}
|
|
22
|
-
self.client_session_kwargs = {}
|
|
23
|
-
self.resp_hook = default_resp_hook
|
|
24
|
-
# 预留一个字典可以向里面传入其他信息
|
|
25
|
-
self.other_dicts = {}
|
|
26
|
-
|
|
27
|
-
def set_resp_hook(self, resp_hook_func):
|
|
28
|
-
self.resp_hook = resp_hook_func
|
|
29
|
-
return self
|
|
30
|
-
|
|
31
|
-
def builder(self):
|
|
32
|
-
self.kwargs["params"] = self.params
|
|
33
|
-
if self.refer:
|
|
34
|
-
self.header["refer"] = self.refer
|
|
35
|
-
self.kwargs["headers"] = self.header
|
|
36
|
-
self.kwargs["cookies"] = self.cookies
|
|
37
|
-
self.kwargs["follow_redirects"] = self.allow_redirects
|
|
38
|
-
self.kwargs["timeout"] = self.timeout
|
|
39
|
-
if self.proxy:
|
|
40
|
-
self.client_session_kwargs["proxies"] = set_proxy_httpx(self.proxy)
|
|
41
|
-
if BaseUrl.urlScheme(self.url) == "https":
|
|
42
|
-
self.client_session_kwargs["verify"] = False
|
|
43
|
-
return self
|
|
44
|
-
|
|
45
|
-
def set_resp(self, resp):
|
|
46
|
-
self.resp = resp
|
|
47
|
-
self.set_status_code(resp.status_code)
|
|
48
|
-
# 有时候302时我们去获取html会报错
|
|
49
|
-
if self.allow_resp_text:
|
|
50
|
-
if self.resp_encoding:
|
|
51
|
-
resp.encoding = self.resp_encoding
|
|
52
|
-
self.html = resp.text
|
|
53
|
-
self.html = html_strip(self.html)
|
|
54
|
-
else:
|
|
55
|
-
self.html = None
|
|
56
|
-
if self.allow_resp_bytes:
|
|
57
|
-
self.html_bytes = resp.content
|
|
58
|
-
else:
|
|
59
|
-
self.html_bytes = None
|
|
60
|
-
|
|
61
|
-
@aiohttp_try_except
|
|
62
|
-
async def get(self):
|
|
63
|
-
if self.sn is None:
|
|
64
|
-
# skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
65
|
-
self.sn = httpx.AsyncClient(**self.client_session_kwargs)
|
|
66
|
-
async with self.sn:
|
|
67
|
-
resp = await self.sn.get(url=self.url, **self.kwargs)
|
|
68
|
-
self.set_resp(resp)
|
|
69
|
-
await self.resp_hook(self, resp)
|
|
70
|
-
return True, {"code": self.status_code, "msg": ""}
|
|
71
|
-
|
|
72
|
-
@aiohttp_try_except
|
|
73
|
-
async def post(self):
|
|
74
|
-
if self.sn is None:
|
|
75
|
-
self.sn = httpx.AsyncClient(**self.client_session_kwargs)
|
|
76
|
-
async with self.sn:
|
|
77
|
-
resp = await self.sn.post(url=self.url, data=self.data, **self.kwargs)
|
|
78
|
-
self.set_resp(resp)
|
|
79
|
-
await self.resp_hook(self, resp)
|
|
80
|
-
return True, {"code": self.status_code, "msg": ""}
|
|
81
|
-
|
|
82
|
-
def all_middlerwares(self, dicts):
|
|
83
|
-
bools = True
|
|
84
|
-
for item in self.middler_list:
|
|
85
|
-
bools, dicts = item()
|
|
86
|
-
if not bools:
|
|
87
|
-
return bools, dicts
|
|
88
|
-
return bools, dicts
|
|
89
|
-
|
|
90
|
-
async def run(self, moths="get"):
|
|
91
|
-
self.builder()
|
|
92
|
-
self.on_request_start()
|
|
93
|
-
if moths == MRequest.GET:
|
|
94
|
-
bools, dicts = await self.get()
|
|
95
|
-
elif moths == MRequest.POST:
|
|
96
|
-
bools, dicts = await self.post()
|
|
97
|
-
else:
|
|
98
|
-
bools, dicts = False, {}
|
|
99
|
-
self.on_request_end()
|
|
100
|
-
if bools:
|
|
101
|
-
return self.all_middlerwares(dicts)
|
|
102
|
-
return bools, dicts
|
|
1
|
+
import aiohttp
|
|
2
|
+
import httpx
|
|
3
|
+
from re_common.baselibrary.tools.all_requests.mrequest import MRequest
|
|
4
|
+
from re_common.baselibrary.utils.baseurl import BaseUrl
|
|
5
|
+
from re_common.baselibrary.utils.core.mdeprecated import aiohttp_try_except
|
|
6
|
+
from re_common.baselibrary.utils.core.mlamada import html_strip
|
|
7
|
+
from re_common.baselibrary.utils.core.requests_core import set_proxy_aio, set_proxy_httpx
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
async def default_resp_hook(self, resp):
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HttpxRequest(MRequest):
|
|
15
|
+
|
|
16
|
+
def __init__(self, logger=None):
|
|
17
|
+
if logger is None:
|
|
18
|
+
from re_common.baselibrary import MLogger
|
|
19
|
+
logger = MLogger().streamlogger
|
|
20
|
+
super().__init__(logger=logger)
|
|
21
|
+
self.kwargs = {}
|
|
22
|
+
self.client_session_kwargs = {}
|
|
23
|
+
self.resp_hook = default_resp_hook
|
|
24
|
+
# 预留一个字典可以向里面传入其他信息
|
|
25
|
+
self.other_dicts = {}
|
|
26
|
+
|
|
27
|
+
def set_resp_hook(self, resp_hook_func):
|
|
28
|
+
self.resp_hook = resp_hook_func
|
|
29
|
+
return self
|
|
30
|
+
|
|
31
|
+
def builder(self):
|
|
32
|
+
self.kwargs["params"] = self.params
|
|
33
|
+
if self.refer:
|
|
34
|
+
self.header["refer"] = self.refer
|
|
35
|
+
self.kwargs["headers"] = self.header
|
|
36
|
+
self.kwargs["cookies"] = self.cookies
|
|
37
|
+
self.kwargs["follow_redirects"] = self.allow_redirects
|
|
38
|
+
self.kwargs["timeout"] = self.timeout
|
|
39
|
+
if self.proxy:
|
|
40
|
+
self.client_session_kwargs["proxies"] = set_proxy_httpx(self.proxy)
|
|
41
|
+
if BaseUrl.urlScheme(self.url) == "https":
|
|
42
|
+
self.client_session_kwargs["verify"] = False
|
|
43
|
+
return self
|
|
44
|
+
|
|
45
|
+
def set_resp(self, resp):
|
|
46
|
+
self.resp = resp
|
|
47
|
+
self.set_status_code(resp.status_code)
|
|
48
|
+
# 有时候302时我们去获取html会报错
|
|
49
|
+
if self.allow_resp_text:
|
|
50
|
+
if self.resp_encoding:
|
|
51
|
+
resp.encoding = self.resp_encoding
|
|
52
|
+
self.html = resp.text
|
|
53
|
+
self.html = html_strip(self.html)
|
|
54
|
+
else:
|
|
55
|
+
self.html = None
|
|
56
|
+
if self.allow_resp_bytes:
|
|
57
|
+
self.html_bytes = resp.content
|
|
58
|
+
else:
|
|
59
|
+
self.html_bytes = None
|
|
60
|
+
|
|
61
|
+
@aiohttp_try_except
|
|
62
|
+
async def get(self):
|
|
63
|
+
if self.sn is None:
|
|
64
|
+
# skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
65
|
+
self.sn = httpx.AsyncClient(**self.client_session_kwargs)
|
|
66
|
+
async with self.sn:
|
|
67
|
+
resp = await self.sn.get(url=self.url, **self.kwargs)
|
|
68
|
+
self.set_resp(resp)
|
|
69
|
+
await self.resp_hook(self, resp)
|
|
70
|
+
return True, {"code": self.status_code, "msg": ""}
|
|
71
|
+
|
|
72
|
+
@aiohttp_try_except
|
|
73
|
+
async def post(self):
|
|
74
|
+
if self.sn is None:
|
|
75
|
+
self.sn = httpx.AsyncClient(**self.client_session_kwargs)
|
|
76
|
+
async with self.sn:
|
|
77
|
+
resp = await self.sn.post(url=self.url, data=self.data, **self.kwargs)
|
|
78
|
+
self.set_resp(resp)
|
|
79
|
+
await self.resp_hook(self, resp)
|
|
80
|
+
return True, {"code": self.status_code, "msg": ""}
|
|
81
|
+
|
|
82
|
+
def all_middlerwares(self, dicts):
|
|
83
|
+
bools = True
|
|
84
|
+
for item in self.middler_list:
|
|
85
|
+
bools, dicts = item()
|
|
86
|
+
if not bools:
|
|
87
|
+
return bools, dicts
|
|
88
|
+
return bools, dicts
|
|
89
|
+
|
|
90
|
+
async def run(self, moths="get"):
|
|
91
|
+
self.builder()
|
|
92
|
+
self.on_request_start()
|
|
93
|
+
if moths == MRequest.GET:
|
|
94
|
+
bools, dicts = await self.get()
|
|
95
|
+
elif moths == MRequest.POST:
|
|
96
|
+
bools, dicts = await self.post()
|
|
97
|
+
else:
|
|
98
|
+
bools, dicts = False, {}
|
|
99
|
+
self.on_request_end()
|
|
100
|
+
if bools:
|
|
101
|
+
return self.all_middlerwares(dicts)
|
|
102
|
+
return bools, dicts
|