re-common 10.0.39__py3-none-any.whl → 10.0.40__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 +219 -219
- re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
- re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
- re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
- re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
- re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/concurrency.py +35 -35
- re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
- re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
- re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
- re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
- re_common/v2/baselibrary/tools/dict_tools.py +44 -44
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
- re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
- re_common/v2/baselibrary/tools/list_tools.py +69 -69
- re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
- 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/api_net_utils.py +270 -270
- re_common/v2/baselibrary/utils/author_smi.py +361 -361
- 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 +163 -163
- 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 +156 -156
- re_common/v2/baselibrary/utils/elasticsearch.py +46 -0
- 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 -186
- re_common/v2/baselibrary/utils/string_clear.py +246 -246
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +271 -271
- 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.39.dist-info → re_common-10.0.40.dist-info}/LICENSE +201 -201
- {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/METADATA +24 -16
- re_common-10.0.40.dist-info/RECORD +249 -0
- {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/WHEEL +1 -1
- re_common-10.0.39.dist-info/RECORD +0 -248
- {re_common-10.0.39.dist-info → re_common-10.0.40.dist-info}/top_level.txt +0 -0
|
@@ -1,87 +1,87 @@
|
|
|
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
|
+
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 +1,191 @@
|
|
|
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
|
+
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 +1,19 @@
|
|
|
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
|
-
|
|
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
|
+
|