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.
Files changed (202) 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/business_utils/BusinessStringUtil.py +195 -0
  145. re_common/v2/baselibrary/business_utils/__init__.py +0 -0
  146. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -0
  147. re_common/v2/baselibrary/decorators/utils.py +59 -59
  148. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  149. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -79
  150. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  151. re_common/v2/baselibrary/tools/dict_tools.py +37 -37
  152. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  153. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  154. re_common/v2/baselibrary/tools/list_tools.py +65 -65
  155. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  156. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  157. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  158. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  159. re_common/v2/baselibrary/utils/author_smi.py +360 -360
  160. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  161. re_common/v2/baselibrary/utils/basedict.py +37 -37
  162. re_common/v2/baselibrary/utils/basehdfs.py +161 -161
  163. re_common/v2/baselibrary/utils/basepika.py +180 -180
  164. re_common/v2/baselibrary/utils/basetime.py +77 -77
  165. re_common/v2/baselibrary/utils/db.py +38 -38
  166. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  167. re_common/v2/baselibrary/utils/mq.py +83 -83
  168. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  169. re_common/v2/baselibrary/utils/string_bool.py +186 -149
  170. re_common/v2/baselibrary/utils/string_clear.py +227 -204
  171. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  172. re_common/v2/baselibrary/utils/stringutils.py +213 -213
  173. re_common/vip/base_step_process.py +11 -11
  174. re_common/vip/baseencodeid.py +90 -90
  175. re_common/vip/changetaskname.py +28 -28
  176. re_common/vip/core_var.py +24 -24
  177. re_common/vip/mmh3Hash.py +89 -89
  178. re_common/vip/proxy/allproxys.py +127 -127
  179. re_common/vip/proxy/allproxys_thread.py +159 -159
  180. re_common/vip/proxy/cnki_proxy.py +153 -153
  181. re_common/vip/proxy/kuaidaili.py +87 -87
  182. re_common/vip/proxy/proxy_all.py +113 -113
  183. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  184. re_common/vip/proxy/wanfang_proxy.py +152 -152
  185. re_common/vip/proxy/wp_proxy_all.py +181 -181
  186. re_common/vip/read_rawid_to_txt.py +91 -91
  187. re_common/vip/title/__init__.py +5 -5
  188. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  189. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  190. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  191. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  192. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  193. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  194. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  195. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  196. re_common/vip/title/transform/__init__.py +10 -10
  197. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/LICENSE +201 -201
  198. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/METADATA +16 -16
  199. re_common-10.0.24.dist-info/RECORD +230 -0
  200. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/WHEEL +1 -1
  201. re_common-10.0.22.dist-info/RECORD +0 -227
  202. {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