re-common 0.2.54__py3-none-any.whl → 2.0.1__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 (207) hide show
  1. re_common/v2/baselibrary/s3object/baseboto3.py +230 -0
  2. re_common/v2/baselibrary/tools/dict_tools.py +24 -0
  3. re_common/v2/baselibrary/tools/search_hash_tools.py +33 -0
  4. re_common/v2/baselibrary/tools/text_matcher.py +223 -0
  5. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -0
  6. re_common/v2/baselibrary/utils/BusinessStringUtil.py +74 -0
  7. re_common/v2/baselibrary/utils/author_smi.py +308 -0
  8. re_common/v2/baselibrary/utils/basedict.py +26 -0
  9. re_common/v2/baselibrary/utils/basehdfs.py +127 -0
  10. re_common/v2/baselibrary/utils/json_cls.py +11 -0
  11. re_common/v2/baselibrary/utils/string_bool.py +9 -0
  12. re_common/v2/baselibrary/utils/string_clear.py +98 -0
  13. re_common/v2/baselibrary/utils/stringutils.py +95 -0
  14. {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/METADATA +1 -1
  15. re_common-2.0.1.dist-info/RECORD +25 -0
  16. re_common/baselibrary/__init__.py +0 -4
  17. re_common/baselibrary/baseabs/__init__.py +0 -7
  18. re_common/baselibrary/baseabs/baseabs.py +0 -26
  19. re_common/baselibrary/database/mbuilder.py +0 -132
  20. re_common/baselibrary/database/moudle.py +0 -93
  21. re_common/baselibrary/database/msqlite3.py +0 -194
  22. re_common/baselibrary/database/mysql.py +0 -169
  23. re_common/baselibrary/database/sql_factory.py +0 -26
  24. re_common/baselibrary/mthread/MThreadingRun.py +0 -486
  25. re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -349
  26. re_common/baselibrary/mthread/__init__.py +0 -3
  27. re_common/baselibrary/mthread/mythreading.py +0 -695
  28. re_common/baselibrary/pakge_other/socks.py +0 -404
  29. re_common/baselibrary/readconfig/config_factory.py +0 -18
  30. re_common/baselibrary/readconfig/ini_config.py +0 -317
  31. re_common/baselibrary/readconfig/toml_config.py +0 -49
  32. re_common/baselibrary/temporary/envdata.py +0 -36
  33. re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -118
  34. re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -102
  35. re_common/baselibrary/tools/all_requests/mrequest.py +0 -412
  36. re_common/baselibrary/tools/all_requests/requests_request.py +0 -81
  37. re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
  38. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -31
  39. re_common/baselibrary/tools/contrast_db3.py +0 -123
  40. re_common/baselibrary/tools/copy_file.py +0 -39
  41. re_common/baselibrary/tools/db3_2_sizedb3.py +0 -102
  42. re_common/baselibrary/tools/foreachgz.py +0 -40
  43. re_common/baselibrary/tools/get_attr.py +0 -11
  44. re_common/baselibrary/tools/image_to_pdf.py +0 -62
  45. re_common/baselibrary/tools/java_code_deal.py +0 -139
  46. re_common/baselibrary/tools/javacode.py +0 -79
  47. re_common/baselibrary/tools/mdb_db3.py +0 -48
  48. re_common/baselibrary/tools/merge_file.py +0 -171
  49. re_common/baselibrary/tools/merge_gz_file.py +0 -165
  50. re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
  51. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -42
  52. re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -42
  53. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -38
  54. re_common/baselibrary/tools/mongo_tools.py +0 -50
  55. re_common/baselibrary/tools/move_file.py +0 -170
  56. re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
  57. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -63
  58. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -354
  59. re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -18
  60. re_common/baselibrary/tools/move_mongo/use_mv.py +0 -93
  61. re_common/baselibrary/tools/mpandas/__init__.py +0 -0
  62. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -125
  63. re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -8
  64. re_common/baselibrary/tools/myparsel.py +0 -104
  65. re_common/baselibrary/tools/rename_dir_file.py +0 -37
  66. re_common/baselibrary/tools/sequoiadb_utils.py +0 -398
  67. re_common/baselibrary/tools/split_line_to_many.py +0 -25
  68. re_common/baselibrary/tools/stringtodicts.py +0 -33
  69. re_common/baselibrary/tools/workwechant_bot.py +0 -84
  70. re_common/baselibrary/utils/__init__.py +0 -0
  71. re_common/baselibrary/utils/baseaiohttp.py +0 -296
  72. re_common/baselibrary/utils/baseaiomysql.py +0 -87
  73. re_common/baselibrary/utils/baseallstep.py +0 -191
  74. re_common/baselibrary/utils/baseavro.py +0 -19
  75. re_common/baselibrary/utils/baseboto3.py +0 -291
  76. re_common/baselibrary/utils/basecsv.py +0 -32
  77. re_common/baselibrary/utils/basedict.py +0 -133
  78. re_common/baselibrary/utils/basedir.py +0 -241
  79. re_common/baselibrary/utils/baseencode.py +0 -351
  80. re_common/baselibrary/utils/baseencoding.py +0 -29
  81. re_common/baselibrary/utils/baseesdsl.py +0 -86
  82. re_common/baselibrary/utils/baseexcel.py +0 -264
  83. re_common/baselibrary/utils/baseexcept.py +0 -109
  84. re_common/baselibrary/utils/basefile.py +0 -654
  85. re_common/baselibrary/utils/baseftp.py +0 -214
  86. re_common/baselibrary/utils/basegzip.py +0 -60
  87. re_common/baselibrary/utils/basehdfs.py +0 -135
  88. re_common/baselibrary/utils/basehttpx.py +0 -268
  89. re_common/baselibrary/utils/baseip.py +0 -87
  90. re_common/baselibrary/utils/basejson.py +0 -2
  91. re_common/baselibrary/utils/baselist.py +0 -32
  92. re_common/baselibrary/utils/basemotor.py +0 -190
  93. re_common/baselibrary/utils/basemssql.py +0 -98
  94. re_common/baselibrary/utils/baseodbc.py +0 -113
  95. re_common/baselibrary/utils/basepandas.py +0 -302
  96. re_common/baselibrary/utils/basepeewee.py +0 -11
  97. re_common/baselibrary/utils/basepika.py +0 -180
  98. re_common/baselibrary/utils/basepydash.py +0 -143
  99. re_common/baselibrary/utils/basepymongo.py +0 -230
  100. re_common/baselibrary/utils/basequeue.py +0 -22
  101. re_common/baselibrary/utils/baserar.py +0 -57
  102. re_common/baselibrary/utils/baserequest.py +0 -279
  103. re_common/baselibrary/utils/baseset.py +0 -8
  104. re_common/baselibrary/utils/basesmb.py +0 -403
  105. re_common/baselibrary/utils/basestring.py +0 -382
  106. re_common/baselibrary/utils/basetime.py +0 -320
  107. re_common/baselibrary/utils/basetuple.py +0 -0
  108. re_common/baselibrary/utils/baseurl.py +0 -121
  109. re_common/baselibrary/utils/basezip.py +0 -57
  110. re_common/baselibrary/utils/core/__init__.py +0 -8
  111. re_common/baselibrary/utils/core/bottomutils.py +0 -18
  112. re_common/baselibrary/utils/core/mdeprecated.py +0 -327
  113. re_common/baselibrary/utils/core/mlamada.py +0 -16
  114. re_common/baselibrary/utils/core/msginfo.py +0 -25
  115. re_common/baselibrary/utils/core/requests_core.py +0 -103
  116. re_common/baselibrary/utils/fateadm.py +0 -429
  117. re_common/baselibrary/utils/importfun.py +0 -123
  118. re_common/baselibrary/utils/mfaker.py +0 -57
  119. re_common/baselibrary/utils/my_abc/__init__.py +0 -3
  120. re_common/baselibrary/utils/my_abc/better_abc.py +0 -32
  121. re_common/baselibrary/utils/mylogger.py +0 -414
  122. re_common/baselibrary/utils/myredisclient.py +0 -861
  123. re_common/baselibrary/utils/pipupgrade.py +0 -21
  124. re_common/baselibrary/utils/ringlist.py +0 -85
  125. re_common/baselibrary/utils/version_compare.py +0 -36
  126. re_common/baselibrary/utils/ydmhttp.py +0 -126
  127. re_common/facade/__init__.py +0 -1
  128. re_common/facade/lazy_import.py +0 -11
  129. re_common/facade/loggerfacade.py +0 -25
  130. re_common/facade/mysqlfacade.py +0 -467
  131. re_common/facade/now.py +0 -31
  132. re_common/facade/sqlite3facade.py +0 -257
  133. re_common/facade/use/__init__.py +0 -0
  134. re_common/facade/use/mq_use_facade.py +0 -83
  135. re_common/facade/use/proxy_use_facade.py +0 -20
  136. re_common/libtest/__init__.py +0 -0
  137. re_common/libtest/base_dict_test.py +0 -19
  138. re_common/libtest/baseavro_test.py +0 -13
  139. re_common/libtest/basefile_test.py +0 -14
  140. re_common/libtest/basemssql_test.py +0 -77
  141. re_common/libtest/baseodbc_test.py +0 -8
  142. re_common/libtest/basepandas_test.py +0 -38
  143. re_common/libtest/get_attr_test/__init__.py +0 -0
  144. re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -14
  145. re_common/libtest/get_attr_test/settings.py +0 -55
  146. re_common/libtest/idencode_test.py +0 -54
  147. re_common/libtest/iniconfig_test.py +0 -35
  148. re_common/libtest/ip_test.py +0 -35
  149. re_common/libtest/merge_file_test.py +0 -20
  150. re_common/libtest/mfaker_test.py +0 -9
  151. re_common/libtest/mm3_test.py +0 -32
  152. re_common/libtest/mylogger_test.py +0 -89
  153. re_common/libtest/myparsel_test.py +0 -28
  154. re_common/libtest/mysql_test.py +0 -151
  155. re_common/libtest/pymongo_test.py +0 -21
  156. re_common/libtest/split_test.py +0 -12
  157. re_common/libtest/sqlite3_merge_test.py +0 -6
  158. re_common/libtest/sqlite3_test.py +0 -34
  159. re_common/libtest/tomlconfig_test.py +0 -30
  160. re_common/libtest/use_tools_test/__init__.py +0 -3
  161. re_common/libtest/user/__init__.py +0 -5
  162. re_common/studio/__init__.py +0 -5
  163. re_common/studio/assignment_expressions.py +0 -37
  164. re_common/studio/mydash/__init__.py +0 -0
  165. re_common/studio/mydash/test1.py +0 -19
  166. re_common/studio/pydashstudio/__init__.py +0 -0
  167. re_common/studio/pydashstudio/first.py +0 -9
  168. re_common/studio/streamlitstudio/__init__.py +0 -0
  169. re_common/studio/streamlitstudio/first_app.py +0 -66
  170. re_common/studio/streamlitstudio/uber_pickups.py +0 -24
  171. re_common/studio/test.py +0 -19
  172. re_common/vip/__init__.py +0 -0
  173. re_common/vip/base_step_process.py +0 -11
  174. re_common/vip/baseencodeid.py +0 -91
  175. re_common/vip/changetaskname.py +0 -28
  176. re_common/vip/core_var.py +0 -24
  177. re_common/vip/mmh3Hash.py +0 -90
  178. re_common/vip/proxy/__init__.py +0 -0
  179. re_common/vip/proxy/allproxys.py +0 -127
  180. re_common/vip/proxy/allproxys_thread.py +0 -159
  181. re_common/vip/proxy/cnki_proxy.py +0 -153
  182. re_common/vip/proxy/kuaidaili.py +0 -87
  183. re_common/vip/proxy/proxy_all.py +0 -113
  184. re_common/vip/proxy/update_kuaidaili_0.py +0 -42
  185. re_common/vip/proxy/wanfang_proxy.py +0 -152
  186. re_common/vip/proxy/wp_proxy_all.py +0 -182
  187. re_common/vip/read_rawid_to_txt.py +0 -92
  188. re_common/vip/title/__init__.py +0 -5
  189. re_common/vip/title/transform/TransformBookTitleToZt.py +0 -125
  190. re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -139
  191. re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -196
  192. re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -203
  193. re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -132
  194. re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -114
  195. re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -135
  196. re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -135
  197. re_common/vip/title/transform/__init__.py +0 -11
  198. re_common-0.2.54.dist-info/RECORD +0 -194
  199. /re_common/{baselibrary/database → v2}/__init__.py +0 -0
  200. /re_common/{baselibrary/pakge_other → v2/baselibrary}/__init__.py +0 -0
  201. /re_common/{baselibrary/readconfig → v2/baselibrary/s3object}/__init__.py +0 -0
  202. /re_common/{baselibrary/temporary → v2/baselibrary/tools}/__init__.py +0 -0
  203. /re_common/{baselibrary/tools/__init__.py → v2/baselibrary/tools/list_tools.py} +0 -0
  204. /re_common/{baselibrary/tools/all_requests → v2/baselibrary/utils}/__init__.py +0 -0
  205. {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/LICENSE +0 -0
  206. {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/WHEEL +0 -0
  207. {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/top_level.txt +0 -0
@@ -1,296 +0,0 @@
1
- import json
2
- import zlib
3
-
4
- import aiofiles
5
- import aiohttp
6
- from yarl import URL
7
-
8
-
9
- class BaseAiohttp():
10
-
11
- def __init__(self):
12
- self.session = aiohttp.ClientSession()
13
- # 用于传递get的参数
14
- # params = {'key1': 'value1', 'key2': 'value2'}
15
- # params = [('key', 'value1'), ('key', 'value2')] 同建多值问题
16
- # params='key=value+1' 您也可以将str内容作为参数传递,但要注意–内容不是由库编码的。
17
- # 请注意,+未编码
18
- self.params = {}
19
- # post json
20
- self.json = {}
21
- # post表单数据 {'key1': 'value1', 'key2': 'value2'}
22
- self.payload = {}
23
- # 如果您要发送未经格式编码的数据,可以通过传递a bytes而不是a来完成dict。
24
- # 这些数据将直接发布,并且默认将内容类型设置为“ application / octet-stream”:
25
- # =b'\x00Binary-data\x00'
26
- # 要发送具有适当内容类型的文本,只需使用text属性 data='Тест'
27
- # 要上传多部分编码的文件,请执行以下操作:
28
- # files = {'file': open('report.xls', 'rb')}
29
- # 您可以设置filename和content_type:
30
- # data = FormData()
31
- # data.add_field('file',
32
- # open('report.xls', 'rb'),
33
- # filename='report.xls',
34
- # content_type='application/vnd.ms-excel')
35
- # 如果将文件对象作为数据参数传递,则aiohttp会将其自动流式传输到服务器。
36
- # 检查StreamReader 支持的格式信息。
37
- self.data = b''
38
- # headers可以是单个请求的,也可以是会话的
39
- self.headers = {}
40
- # {'cookies_are': 'working'}
41
- self.cookies = {}
42
-
43
- async def file_sender(self, file_name=None, size=64):
44
- """
45
- async with session.post('http://httpbin.org/post',
46
- data=file_sender(file_name='huge_file')) as resp:
47
- print(await resp.text())
48
- :param file_name:
49
- :param size:
50
- :return:
51
- """
52
- async with aiofiles.open(file_name, 'rb') as f:
53
- chunk = await f.read(size * 1024)
54
- while chunk:
55
- yield chunk
56
- chunk = await f.read(size * 1024)
57
-
58
- def get_and_send(self):
59
- """
60
- 从版本3.1开始不推荐使用:aiohttp仍然支持aiohttp.streamer装饰器,
61
- 但是不推荐使用此方法,而支持异步生成器,如上所示。
62
- Python 3.5没有对异步生成器的本机支持,请使用 async_generator库作为解决方法。
63
- 因为该content属性是 StreamReader(提供异步迭代器协议),所以您可以将获取和发布请求链接在一起:
64
- resp = await session.get('http://python.org')
65
- await session.post('http://httpbin.org/post',
66
- data=resp.content)
67
- :return:
68
- """
69
- pass
70
-
71
- def web_sockets(self, url):
72
- """
73
-
74
- :return:
75
- """
76
- async with self.session.ws_connect(url) as ws:
77
- async for msg in ws:
78
- if msg.type == aiohttp.WSMsgType.TEXT:
79
- if msg.data == 'close cmd':
80
- await ws.close()
81
- break
82
- else:
83
- await ws.send_str(msg.data + '/answer')
84
- elif msg.type == aiohttp.WSMsgType.ERROR:
85
- break
86
-
87
- def data_upfile(self, file):
88
- """
89
-
90
- :param file:
91
- :return:
92
- """
93
- with open(file, 'rb') as f:
94
- await self.session.post('http://httpbin.org/post', data=f)
95
-
96
- def init_session(self, json_serialize=json.dumps, headers=None,
97
- cookies=None, cookie_jar=None, connector=None):
98
- """
99
-
100
- :param json_serialize: 默认使用json.dumps 这里可以使用 ujson.dumps
101
- ujson库比标准库快,json但是有点不兼容。
102
- :param headers:
103
- :param cookies:
104
- :param cookie_jar:默认情况下ClientSession使用的严格版本 aiohttp.CookieJar。RFC 2109明确禁止cookie接受具有IP地址而不是DNS名称的URL(例如 http://127.0.0.1:80/cookie)。
105
- 很好,但有时为了进行测试,我们需要启用对此类Cookie的支持。应该通过将unsafe = True传递给 aiohttp.CookieJar构造函数来完成:
106
- jar = aiohttp.CookieJar(unsafe=True)
107
- jar = aiohttp.DummyCookieJar()
108
- :return:
109
- """
110
-
111
- self.session = aiohttp.ClientSession(json_serialize=json_serialize, headers=headers,
112
- cookies=cookies, cookie_jar=cookie_jar,
113
- connector=connector)
114
-
115
- def deflate_zip(self, data, headers):
116
- """
117
-
118
- :return:
119
- """
120
- headers['Content-Encoding'] = 'deflate'
121
- return zlib.compress(data), headers
122
-
123
- async def on_request_start(self,
124
- session, trace_config_ctx, params):
125
- print("Starting request")
126
-
127
- async def on_request_end(self, session, trace_config_ctx, params):
128
- print("Ending request")
129
-
130
- def set_trace_config(self):
131
- """
132
- async with aiohttp.ClientSession(
133
- trace_configs=[trace_config]) as client:
134
- client.get('http://example.com/some/redirect/')
135
- async with aiohttp.ClientSession(
136
- trace_configs=[AuditRequest(), XRay()]) as client:
137
- client.get('http://example.com/some/redirect/')
138
- :return:
139
- """
140
- # from mylib.traceconfig import AuditRequest
141
- # from mylib.traceconfig import XRay
142
- trace_config = aiohttp.TraceConfig()
143
- trace_config.on_request_start.append(self.on_request_start)
144
- trace_config.on_request_end.append(self.on_request_end)
145
-
146
- def tpc_conn(self, limit=100, limit_per_host=30,
147
- ttl_dns_cache=300, use_dns_cache=False, resolver=None):
148
- """
149
- 默认情况下,会话对象获得连接器的所有权,此外,一旦关闭会话,连接对象也会关闭连接。
150
- 如果您希望通过不同的会话 实例共享同一连接器,
151
- 则必须 为每个会话实例将 connector_owner参数设置为False。
152
-
153
-
154
- :param limit: 要限制同时打开的连接数,您可以将limit 参数传递给连接器:
155
- 如果您明确希望没有限制,请传递0。例如:conn = aiohttp.TCPConnector(limit=0)
156
- :param limit_per_host: 要限制到同一端点(三重)的同时打开的连接数,可以将limit_per_host 参数传递给connector:(host, port, is_ssl)
157
- 该示例将并行连接的数量限制为30个。
158
- 默认值为0(每个主机没有限制)。
159
- :param ttl_dns_cache: 要限制到同一端点(三重)的同时打开的连接数,可以将limit_per_host 参数传递给connector:(host, port, is_ssl)
160
- 该示例将并行连接的数量限制为30个。
161
- 默认值为0(每个主机没有限制)。
162
- :param use_dns_cache:或禁用DNS缓存表的使用,这意味着所有请求最终都会做出DNS解析,如以下示例所示:
163
- :param resolver: resolver = AsyncResolver(nameservers=["8.8.8.8", "8.8.4.4"])
164
- :return:
165
- """
166
- connector = aiohttp.TCPConnector(limit=limit, limit_per_host=limit_per_host,
167
- ttl_dns_cache=ttl_dns_cache, use_dns_cache=use_dns_cache,
168
- resolver=resolver)
169
- return connector
170
-
171
- def unix_conn(self,path):
172
- conn = aiohttp.UnixConnector(path=path)
173
- return conn
174
-
175
- def windows_conn(self,path):
176
- """
177
- 它仅适用于ProactorEventLoop
178
- :param path:
179
- :return:
180
- """
181
- conn = aiohttp.NamedPipeConnector(path=path)
182
- return conn
183
-
184
- def get_cookie_jar(self):
185
- """
186
- session.get(
187
- 'http://httpbin.org/cookies/set?my_cookie=my_value')
188
- filtered = session.cookie_jar.filter_cookies(
189
- 'http://httpbin.org')
190
- assert filtered['my_cookie'].value == 'my_value'
191
- :return:
192
- """
193
- return self.session.cookie_jar
194
-
195
- def url(self, url, encoded=True):
196
- """
197
- 传递参数将覆盖encoded=True,切勿同时使用这两个选项。
198
- self.params 为 传递参数
199
- aiohttp在发送请求之前在内部执行URL 规范化。
200
- 册封编码主机通过部分IDNA编解码器和适用 requoting到路径和查询部分。
201
- 例如URL('http://example.com/путь/%30?a=%31')转换为 URL('http://example.com/%D0%BF%D1%83%D1%82%D1%8C/0?a=1')。
202
- 如果服务器接受精确的表示并且不重新引用URL本身,则有时不希望进行规范化。
203
- :param url:
204
- :param encoded: 要禁用规范化,请使用encoded=True参数进行URL构建
205
- :return:
206
- """
207
- return URL(url, encoded=encoded)
208
-
209
- def get(self):
210
- """
211
- 如果您需要设置自定义ssl参数(例如,使用自己的认证文件),则可以创建一个ssl.SSLContext实例并将其传递给适当的ClientSession方法
212
- sslcontext = ssl.create_default_context(
213
- cafile='/path/to/ca-bundle.crt')
214
- 如果需要验证自签名证书,则可以执行与上一个示例相同的操作,但是ssl.SSLContext.load_cert_chain()使用密钥对添加另一个调用 :
215
- sslcontext = ssl.create_default_context(
216
- cafile='/path/to/ca-bundle.crt')
217
- sslcontext.load_cert_chain('/path/to/client/public/device.pem',
218
- '/path/to/client/private/device.key')
219
- ssl验证失败时存在显式错误
220
- aiohttp.ClientConnectorSSLError
221
- ssl=False aiohttp对HTTPS协议使用严格检查。认证检查可以通过设置适当放宽
222
- :return:
223
- """
224
- pass
225
-
226
- def post(self):
227
- pass
228
-
229
- def put(self):
230
- pass
231
-
232
- def delete(self):
233
- pass
234
-
235
- def head(self):
236
- pass
237
-
238
- def options(self):
239
- pass
240
-
241
- def patch(self):
242
- pass
243
-
244
- def rsp(self):
245
- """
246
- print(resp.status)
247
- print(await resp.text())
248
- aiohttp自动解码服务器中的内容。您可以为该text()方法指定自定义编码:
249
- await resp.text(encoding='windows-1251')
250
- 对于非文本请求,您还可以字节形式访问响应主体:
251
- print(await resp.read())
252
- br编码解码需要:
253
- https://github.com/python-hyper/brotlipy
254
- # 如果JSON解码失败,json()将引发异常。可以为json()调用指定自定义编码和解码器功能。
255
- print(await resp.json())
256
- # 上面的方法将整个响应主体读入内存。如果您打算读取大量数据,请考虑使用下面记录的流响应方法。
257
- # 您可以使用该content 属性。它是aiohttp.StreamReader 该类的一个实例。
258
- # 在gzip和deflate转移编码自动进行解码为您提供:
259
- with open(filename, 'wb') as fd:
260
- while True:
261
- chunk = await resp.content.read(chunk_size)
262
- if not chunk:
263
- break
264
- fd.write(chunk)
265
-
266
- print(await resp.headers)
267
- # 但如果服务器使用非标准编码,则有时需要未转换的数据。
268
- 这些标头的格式不正确RFC 7230的 角度来看,可以通过使用
269
- print(await resp.raw_headers)
270
- 如果响应包含一些HTTP Cookie,则可以快速访问它们:
271
- 响应Cookie仅包含重定向链中最后一个请求的Set-Cookie标头中的值。
272
- 要在所有重定向请求之间收集cookie,请使用aiohttp.ClientSession对象。
273
- print(await resp.cookies)
274
- # 如果请求被重定向,则可以使用history属性查看先前的响应:
275
- 如果未发生重定向或将其allow_redirects设置为False,则历史记录将为空序列。
276
- print(await resp.history)
277
- 显式地传递期望的类型(在这种情况下,检查将是严格的,没有扩展格式的支持,因此custom/xxx+type将不被接受):
278
- await resp.json(content_type='custom/type')。
279
- 完全禁用检查:
280
- await resp.json(content_type=None)。
281
- :return:
282
- """
283
- pass
284
-
285
- def multipart(self):
286
- """
287
- https://docs.aiohttp.org/en/stable/multipart.html#aiohttp-multipart
288
- :return:
289
- """
290
- pass
291
-
292
- def close(self):
293
- self.session.close()
294
-
295
- def __del__(self):
296
- self.close()
@@ -1,87 +0,0 @@
1
- import aiomysql
2
-
3
- from re_common.baselibrary import IniConfig
4
- from re_common.baselibrary.readconfig.toml_config import TomlConfig
5
-
6
-
7
- class BaseAioMysql(object):
8
-
9
- def __init__(self):
10
- self.conn: aiomysql.connection.Connection
11
-
12
- def set_conn_dicts(self, dicts):
13
- self.host = dicts["host"]
14
- self.port = dicts["port"]
15
- self.user = dicts["user"]
16
- self.password = dicts["password"]
17
- self.db = dicts["db"]
18
- self.loop = dicts["loop"]
19
- return self
20
-
21
- def set_conn_ini(self, config_ini, secs='mysql'):
22
- """
23
- 使用配置文件连接
24
- :param config_ini:
25
- :return:
26
- """
27
- dicts = IniConfig(config_ini).builder().get_config_dict()
28
- self.set_conn_dicts(dicts[secs])
29
- return self
30
-
31
- def set_conn_toml(self, config_toml, secs=None):
32
- """
33
- 使用配置文件连接
34
- :param config_ini:
35
- :return:
36
- """
37
- dicts = TomlConfig(config_toml).get_config_dicts()
38
- if secs:
39
- dicts = dicts[secs]
40
- self.set_conn_dicts(dicts)
41
- return self
42
-
43
- def set_loop(self, loop):
44
- self.loop = loop
45
- return self
46
-
47
- async def conn_mysql(self):
48
- self.conn = await aiomysql.connect(
49
- host=self.host, port=self.port,
50
- user=self.user, password=self.password,
51
- db=self.db, loop=self.loop)
52
- return self
53
-
54
- async def exec_sql(self, sql, args=None):
55
- await self.conn_mysql()
56
- cur = await self.conn.cursor()
57
- # count 已生成的受影响的行数
58
- count = await cur.execute(sql, args)
59
- # https://aiomysql.readthedocs.io/en/latest/cursors.html?highlight=description#Cursor.description
60
- # 此只读属性是7个项目的序列的序列。
61
- # print(cur.description)
62
- # 返回的查询值
63
- r = await cur.fetchall()
64
- await cur.close()
65
- return r
66
-
67
- async def get_pool(self):
68
- self.pool = await aiomysql.create_pool(
69
- host=self.host, port=self.port,
70
- user=self.user, password=self.password,
71
- db=self.db, loop=self.loop,
72
- autocommit=False)
73
-
74
- async def pool_exec(self, sql, arg=None):
75
- await self.get_pool()
76
- with (await self.pool) as conn:
77
- cur = await conn.cursor()
78
- await cur.execute(sql, arg)
79
- (r,) = await cur.fetchone()
80
- return r
81
-
82
- def close_conn(self):
83
- self.conn.close()
84
-
85
- async def close_pool(self):
86
- await self.pool.wait_closed()
87
- self.pool.close()
@@ -1,191 +0,0 @@
1
- import abc
2
- import json
3
- import sys
4
- import traceback
5
-
6
- from re_common.baselibrary.utils.basedir import BaseDir
7
- from re_common.baselibrary.utils.basefile import BaseFile
8
- from re_common.baselibrary.utils.basetime import BaseTime
9
- from re_common.facade.loggerfacade import get_streamlogger
10
-
11
- """
12
- json 格式如下
13
- {
14
- “step1”:{
15
-
16
- “isFinish”:False
17
- }
18
- }
19
- """
20
-
21
-
22
- # 执行框架图
23
- class GlobalControl(object):
24
- def __init__(self, file):
25
- """
26
-
27
- :param file: 传入__file__
28
- :param loggerdir:
29
- """
30
- self.insert(file)
31
- self.jsonfile = BaseFile.get_new_path(self.curPath, "run.json")
32
- self.logger = get_streamlogger()
33
- #  False 表示更新没有完成,接着更新 ture 表示新一轮更新已经结束
34
- self.is_restart = False
35
- self.nowstep = ""
36
- self.key = ""
37
- self.readjson()
38
- self.basetime = BaseTime()
39
- self.step_dicts = {}
40
-
41
- @abc.abstractmethod
42
- def imports(self, dicts=None):
43
- # raise NotImplementedError python2的方法
44
- pass
45
-
46
- @abc.abstractmethod
47
- def set_step_dict(self, dicts):
48
- pass
49
-
50
- def insert(self, file):
51
- """
52
- :param file: __file__
53
- :return:
54
- """
55
- self.curPath = BaseDir.get_file_dir_absolute(file)
56
- sys.path.insert(0, self.curPath) # 插入
57
-
58
- def writejson(self):
59
- jsonstrings = json.dumps(self.jsondicts, ensure_ascii=False)
60
- BaseFile.single_write_file(BaseFile.get_new_path(self.curPath, "run.json"),jsonstrings)
61
-
62
- def readjson(self):
63
- if BaseFile.is_file_exists(self.jsonfile):
64
- self.logger.info("读取json 文件{}".format(str(self.jsonfile)))
65
- jsonstrings = BaseFile.single_read_file(self.jsonfile)
66
- self.logger.info("json 文件内容为:{}".format(jsonstrings))
67
- if jsonstrings:
68
- self.jsondicts = json.loads(jsonstrings)
69
- else:
70
- self.jsondicts = {}
71
- else:
72
- self.logger.info("json 文件不存在,创建空的dicts")
73
- self.jsondicts = {}
74
-
75
- def check(self):
76
- if "end" in self.jsondicts.keys() and self.jsondicts["end"]["status"] is True:
77
- self.logger.info("表示上次程序运行结束,本次是新的更新而不是上次发生意外而进行的继续更新")
78
- self.is_restart = True
79
- else:
80
- self.logger.info("表示更新没有完成")
81
- self.is_restart = False
82
-
83
- def init(self):
84
- if not self.jsondicts:
85
- self.logger.info("新一轮更新开始,对json 进行初始化")
86
- # 清空字典重新开始
87
- self.jsondicts = {}
88
- self.jsondicts["start"] = {}
89
- self.jsondicts["start"]["time"] = self.basetime.get_beijin_date_strins(format="%Y-%m-%d %H:%M:%S")
90
- self.jsondicts["start"]["isFinish"] = True
91
-
92
- def start_hook(self, key):
93
- pass
94
-
95
- @abc.abstractmethod
96
- def step_fun(self):
97
- """
98
- 调用方法的字符串
99
- :return:
100
- """
101
- pass
102
-
103
- def start(self):
104
- """
105
- 该步骤获取应该运行哪个代码
106
- :return:
107
- """
108
- thiskey = ""
109
- for key in self.jsondicts.keys():
110
- thiskey = key
111
- if not self.jsondicts[key]["isFinish"]:
112
- self.key = key
113
- self.nowstep = self.step_fun()
114
-
115
- return True
116
- # 如果要对某一个步骤进行特殊处理,可以在该函数返回True
117
- if self.start_hook(key):
118
- return True
119
- if thiskey == "start":
120
- self.key = "1"
121
- self.nowstep = self.step_fun()
122
- return True
123
-
124
- self.key = str(int(thiskey) + 1)
125
- self.nowstep = self.step_fun()
126
- return True
127
-
128
- def run(self, strings):
129
- """
130
- 该步骤运行代码
131
- :return:
132
- """
133
- try:
134
- if strings == "end":
135
- return True
136
- result = eval(strings)
137
- except:
138
- self.logger.info(traceback.format_exc())
139
- return False
140
- return result
141
-
142
- def writetrue(self, errmessage="", dicts=None):
143
- self.jsondicts[self.key] = {}
144
- self.jsondicts[self.key]["errmessage"] = errmessage
145
- self.jsondicts[self.key]["isFinish"] = True
146
- self.jsondicts[self.key]["time"] = self.basetime.get_beijin_date_strins(format="%Y-%m-%d %H:%M:%S")
147
- if dicts is not None:
148
- self.jsondicts[self.key]["msg"] = dicts
149
- self.writejson()
150
-
151
- def writefalse(self, e, dicts=None):
152
- self.jsondicts[self.key] = {}
153
- self.jsondicts[self.key]["errmessage"] = str(e)
154
- self.jsondicts[self.key]["isFinish"] = False
155
- self.jsondicts[self.key]["time"] = self.basetime.get_beijin_date_strins(format="%Y-%m-%d %H:%M:%S")
156
- if dicts is not None:
157
- self.jsondicts[self.key]["msg"] = dicts
158
- self.writejson()
159
-
160
- @abc.abstractmethod
161
- def one_check(self):
162
- """
163
- 该步骤检查代码是否运行完成
164
- :return:
165
- """
166
- pass
167
-
168
- def end(self):
169
- self.jsondicts["end"] = {}
170
- self.jsondicts["end"]["status"] = True
171
- self.jsondicts["end"]["time"] = self.basetime.get_beijin_date_strins(format="%Y-%m-%d %H:%M:%S")
172
- self.writejson()
173
-
174
- def work(self):
175
- """
176
- 该函数控制整个流程
177
- :return:
178
- """
179
- self.logger.info("start work.....")
180
- self.check()
181
- if self.is_restart:
182
- return True
183
- self.init()
184
- while True:
185
- result1 = self.start()
186
- self.logger.info("开始第" + self.key + "步")
187
- result2 = self.run(self.nowstep)
188
- result3 = self.one_check()
189
- if result1 and result2 and result3:
190
- break
191
- self.end()
@@ -1,19 +0,0 @@
1
- from avro.datafile import DataFileReader
2
- from avro.io import DatumReader
3
-
4
- from re_common.baselibrary.utils.basedir import BaseDir
5
-
6
-
7
- class BaseAvro(object):
8
-
9
- def read_line_yeild(self, dir):
10
- """
11
- 逐行读取某个目录里avro文件
12
- :param dir:avro目录
13
- :return:单个avro单行记录
14
- """
15
- for file in BaseDir.get_dir_all_files(dir):
16
- reader = DataFileReader(open(file, "rb"), DatumReader())
17
- for line in reader:
18
- yield line
19
-