mns-scheduler 1.2.7.9__py3-none-any.whl → 1.2.8.2__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.
Potentially problematic release.
This version of mns-scheduler might be problematic. Click here for more details.
- mns_scheduler/company_info/clean/company_info_clean_api.py +2 -2
- mns_scheduler/extraIncome/temp/tu_share_data_stock_sync.py +2 -1
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +32 -10
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +69 -40
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +3 -2
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +69 -0
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +8 -0
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +1 -1
- mns_scheduler/zz_task/data_sync_task.py +13 -1
- {mns_scheduler-1.2.7.9.dist-info → mns_scheduler-1.2.8.2.dist-info}/METADATA +1 -1
- {mns_scheduler-1.2.7.9.dist-info → mns_scheduler-1.2.8.2.dist-info}/RECORD +18 -16
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/bfq_k_line_sync.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +0 -0
- {mns_scheduler-1.2.7.9.dist-info → mns_scheduler-1.2.8.2.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.2.7.9.dist-info → mns_scheduler-1.2.8.2.dist-info}/top_level.txt +0 -0
|
@@ -47,7 +47,7 @@ def clean_company_info(symbol):
|
|
|
47
47
|
company_info['company_type'] = company_info['business_nature']
|
|
48
48
|
|
|
49
49
|
# 将list_date列中的所有NaN值设置为99990909
|
|
50
|
-
company_info
|
|
50
|
+
company_info.fillna({'list_date': 20990909.0}, inplace=True)
|
|
51
51
|
|
|
52
52
|
# 将日期数值转换为日期时间格式
|
|
53
53
|
company_info['list_date_01'] = pd.to_datetime(company_info['list_date'], format='%Y%m%d')
|
|
@@ -118,7 +118,7 @@ def save_company_info_his(company_info_df):
|
|
|
118
118
|
# 更新新上市公司信息
|
|
119
119
|
def new_company_info_update():
|
|
120
120
|
east_money_stock_info = company_info_sync_api.get_east_money_stock_info()
|
|
121
|
-
new_stock = common_service_fun_api.get_new_stock(east_money_stock_info)
|
|
121
|
+
new_stock = common_service_fun_api.get_new_stock(east_money_stock_info.copy())
|
|
122
122
|
for company_one in new_stock.itertuples():
|
|
123
123
|
try:
|
|
124
124
|
company_info_sync_api.sync_company_base_info([company_one.symbol])
|
|
@@ -44,6 +44,7 @@ def sync_all_stock(trade_date_list_df):
|
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
47
|
+
|
|
47
48
|
# 假设数字格式为 YYYYMMDD
|
|
48
49
|
real_time_quotes_all_stocks_df['list_date'] = pd.to_datetime(real_time_quotes_all_stocks_df['list_date'],
|
|
49
50
|
format='%Y%m%d')
|
|
@@ -130,7 +131,7 @@ def sync_all_stock(trade_date_list_df):
|
|
|
130
131
|
if __name__ == '__main__':
|
|
131
132
|
# get_minute_data('833284.BJ', '1min', '2025-02-28 09:30:00', '2025-02-28 15:00:00')
|
|
132
133
|
|
|
133
|
-
query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-
|
|
134
|
+
query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-18"}}]}
|
|
134
135
|
trade_date_list_df_all = mongodb_util_27017.find_query_data('trade_date_list', query_trade)
|
|
135
136
|
|
|
136
137
|
sync_all_stock(trade_date_list_df_all)
|
|
@@ -16,7 +16,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# 日线 周线 月线 成交量 筹码信息
|
|
19
|
-
def calculate_k_line_info(str_day, symbol, diff_days):
|
|
19
|
+
def calculate_k_line_info(str_day, symbol, diff_days, stock_qfq_year_df):
|
|
20
20
|
k_line_info = pd.DataFrame([[
|
|
21
21
|
str_day,
|
|
22
22
|
symbol, diff_days]],
|
|
@@ -27,7 +27,8 @@ def calculate_k_line_info(str_day, symbol, diff_days):
|
|
|
27
27
|
# 交易天数
|
|
28
28
|
deal_days = k_line_common_service_api.get_deal_days(str_day, symbol)
|
|
29
29
|
# 处理周线 月线
|
|
30
|
-
k_line_info = week_month_k_line_service.handle_month_week_line(k_line_info, str_day, symbol,
|
|
30
|
+
k_line_info = week_month_k_line_service.handle_month_week_line(k_line_info, str_day, symbol,
|
|
31
|
+
deal_days, stock_qfq_year_df)
|
|
31
32
|
# 处理日线
|
|
32
33
|
k_line_info = daily_k_line_service.handle_day_line(k_line_info, str_day, symbol, deal_days)
|
|
33
34
|
return k_line_info
|
|
@@ -14,10 +14,11 @@ from loguru import logger
|
|
|
14
14
|
import threading
|
|
15
15
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
16
16
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
17
|
-
import mns_scheduler.k_line.
|
|
17
|
+
import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync_api
|
|
18
18
|
import mns_scheduler.k_line.clean.k_line_info_clean_impl as k_line_info_clean_impl
|
|
19
19
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
20
20
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
21
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
21
22
|
|
|
22
23
|
K_LINE_CLEAN_DB_NAME = 'k_line_clean_fail_name'
|
|
23
24
|
|
|
@@ -67,7 +68,14 @@ def sync_k_line_info(str_day, symbol_list):
|
|
|
67
68
|
|
|
68
69
|
diff_days = list(company_info_df['diff_days'])[0]
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
now_year = int(str_day[0:4])
|
|
72
|
+
last_year = now_year - 1
|
|
73
|
+
|
|
74
|
+
query_year_line = {'symbol': symbol, 'year': {"$in": [str(now_year), str(last_year)]}}
|
|
75
|
+
stock_qfq_year_df = mongodb_util.find_query_data(db_name_constant.STOCK_QFQ_YEAR, query_year_line)
|
|
76
|
+
|
|
77
|
+
k_line_result = k_line_info_clean_impl.calculate_k_line_info(str_day, symbol, diff_days,
|
|
78
|
+
stock_qfq_year_df)
|
|
71
79
|
save_k_line_data(symbol, str_day, k_line_result)
|
|
72
80
|
if result_k_line_list_df is None:
|
|
73
81
|
result_k_line_list_df = k_line_result
|
|
@@ -87,15 +95,23 @@ def handle_fail_data(str_day, real_time_quotes_now):
|
|
|
87
95
|
k_line_fail_df = mongodb_util.find_query_data(K_LINE_CLEAN_DB_NAME, query)
|
|
88
96
|
if data_frame_util.is_not_empty(k_line_fail_df):
|
|
89
97
|
fail_data_df = real_time_quotes_now.loc[real_time_quotes_now['symbol'].isin(k_line_fail_df['symbol'])]
|
|
90
|
-
|
|
98
|
+
now_year = int(str_day[0:4])
|
|
99
|
+
last_year = now_year - 1
|
|
100
|
+
|
|
101
|
+
query_year_line = {'year': {"$in": [str(now_year), str(last_year)]}}
|
|
102
|
+
stock_qfq_year_df = mongodb_util.find_query_data(db_name_constant.STOCK_QFQ_YEAR, query_year_line)
|
|
103
|
+
single_threaded_sync_task(fail_data_df, str_day, 88, stock_qfq_year_df)
|
|
91
104
|
|
|
92
105
|
|
|
93
106
|
# 多线程同步任务
|
|
94
107
|
def multi_threaded_k_line_sync(str_day):
|
|
95
108
|
# 退市代码
|
|
96
|
-
|
|
109
|
+
|
|
110
|
+
de_list_company_df = mongodb_util.find_all_data(db_name_constant.DE_LIST_STOCK)
|
|
111
|
+
de_list_company_df = de_list_company_df.loc[de_list_company_df['de_list_date'] < str_day]
|
|
97
112
|
real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
98
|
-
real_time_quotes_now = real_time_quotes_now.loc[
|
|
113
|
+
real_time_quotes_now = real_time_quotes_now.loc[
|
|
114
|
+
~(real_time_quotes_now['symbol'].isin(de_list_company_df['symbol']))]
|
|
99
115
|
|
|
100
116
|
# 将list_date列中的所有NaN值设置为99990909
|
|
101
117
|
real_time_quotes_now['list_date'].fillna(20990909.0, inplace=True)
|
|
@@ -113,6 +129,13 @@ def multi_threaded_k_line_sync(str_day):
|
|
|
113
129
|
real_time_quotes_now = common_service_fun_api.exclude_b_symbol(real_time_quotes_now.copy())
|
|
114
130
|
# exclude amount==0 symbol
|
|
115
131
|
real_time_quotes_now = common_service_fun_api.exclude_amount_zero_stock(real_time_quotes_now)
|
|
132
|
+
|
|
133
|
+
now_year = int(str_day[0:4])
|
|
134
|
+
last_year = now_year - 1
|
|
135
|
+
|
|
136
|
+
query_year_line = {'year': {"$in": [str(now_year), str(last_year)]}}
|
|
137
|
+
stock_qfq_year_df = mongodb_util.find_query_data(db_name_constant.STOCK_QFQ_YEAR, query_year_line)
|
|
138
|
+
|
|
116
139
|
total_count = real_time_quotes_now.shape[0]
|
|
117
140
|
global result
|
|
118
141
|
result = pd.DataFrame() # 重新初始化 result 变量
|
|
@@ -127,7 +150,7 @@ def multi_threaded_k_line_sync(str_day):
|
|
|
127
150
|
begin_count = page * MAX_PAGE_NUMBER
|
|
128
151
|
page_df = real_time_quotes_now.iloc[begin_count:end_count]
|
|
129
152
|
|
|
130
|
-
thread = threading.Thread(target=single_threaded_sync_task, args=(page_df, str_day, page))
|
|
153
|
+
thread = threading.Thread(target=single_threaded_sync_task, args=(page_df, str_day, page, stock_qfq_year_df))
|
|
131
154
|
threads.append(thread)
|
|
132
155
|
thread.start()
|
|
133
156
|
|
|
@@ -141,11 +164,12 @@ def multi_threaded_k_line_sync(str_day):
|
|
|
141
164
|
|
|
142
165
|
|
|
143
166
|
# 单线程同步任务
|
|
144
|
-
def single_threaded_sync_task(page_df, str_day, page):
|
|
167
|
+
def single_threaded_sync_task(page_df, str_day, page, stock_qfq_year_df):
|
|
145
168
|
global result
|
|
146
169
|
for stock_one in page_df.itertuples():
|
|
147
170
|
try:
|
|
148
|
-
k_line_df = k_line_info_clean_impl.calculate_k_line_info(str_day, stock_one.symbol, stock_one.diff_days
|
|
171
|
+
k_line_df = k_line_info_clean_impl.calculate_k_line_info(str_day, stock_one.symbol, stock_one.diff_days,
|
|
172
|
+
stock_qfq_year_df)
|
|
149
173
|
save_k_line_data(stock_one.symbol, str_day, k_line_df)
|
|
150
174
|
if k_line_df is None:
|
|
151
175
|
result = k_line_df
|
|
@@ -174,5 +198,3 @@ def create_k_line_index():
|
|
|
174
198
|
mongodb_util.create_index('k_line_info', [("symbol", 1)])
|
|
175
199
|
mongodb_util.create_index('k_line_info', [("str_day", 1)])
|
|
176
200
|
mongodb_util.create_index('k_line_info', [("str_day", 1), ("symbol", 1)])
|
|
177
|
-
|
|
178
|
-
|
|
@@ -16,14 +16,13 @@ mongodb_util = MongodbUtil('27017')
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# 处理月线 周线 todo 暂时简单计算周线之和
|
|
19
|
-
def handle_month_week_line(k_line_info, str_day, symbol, deal_days
|
|
19
|
+
def handle_month_week_line(k_line_info, str_day, symbol, deal_days,
|
|
20
|
+
stock_qfq_year_df):
|
|
20
21
|
sub_stock_new_max_deal_days = stock_type_classify_param['sub_new_stock_max_deal_days']
|
|
21
22
|
if deal_days > sub_stock_new_max_deal_days:
|
|
22
|
-
k_line_info['last_year_chg'] = 0
|
|
23
|
-
k_line_info['now_year_chg'] = 0
|
|
24
23
|
k_line_info = handle_month_line(k_line_info, str_day, symbol)
|
|
25
24
|
k_line_info = handle_week_line(k_line_info, str_day, symbol)
|
|
26
|
-
|
|
25
|
+
k_line_info = set_year_k_line(k_line_info, symbol, stock_qfq_year_df, str_day)
|
|
27
26
|
else:
|
|
28
27
|
k_line_info['week01'] = 0
|
|
29
28
|
k_line_info['week02'] = 0
|
|
@@ -39,14 +38,44 @@ def handle_month_week_line(k_line_info, str_day, symbol, deal_days):
|
|
|
39
38
|
k_line_info['month02'] = 0
|
|
40
39
|
k_line_info['month01_date'] = '19890729'
|
|
41
40
|
k_line_info['month02_date'] = '19890729'
|
|
42
|
-
|
|
41
|
+
k_line_info['now_year_chg'] = 0
|
|
43
42
|
k_line_info['last_year_chg'] = 0
|
|
43
|
+
|
|
44
|
+
return k_line_info
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# 年线数据设置
|
|
48
|
+
def set_year_k_line(k_line_info, symbol, stock_qfq_year_df, str_day):
|
|
49
|
+
now_year = int(str_day[0:4])
|
|
50
|
+
last_year = str(now_year - 1)
|
|
51
|
+
stock_qfq_now_year_df = stock_qfq_year_df.loc[(stock_qfq_year_df['symbol'] == symbol)
|
|
52
|
+
& (stock_qfq_year_df['year'] == str(now_year))]
|
|
53
|
+
if data_frame_util.is_empty(stock_qfq_now_year_df):
|
|
44
54
|
k_line_info['now_year_chg'] = 0
|
|
55
|
+
k_line_info['now_year_open_from_high_chg'] = 0
|
|
56
|
+
k_line_info['now_year_low_from_high_chg'] = 0
|
|
57
|
+
else:
|
|
58
|
+
k_line_info['now_year_chg'] = list(stock_qfq_now_year_df['chg'])[0]
|
|
59
|
+
k_line_info['now_year_open_from_high_chg'] = list(stock_qfq_now_year_df['open_to_high_pct'])[0]
|
|
60
|
+
k_line_info['now_year_low_from_high_chg'] = list(stock_qfq_now_year_df['low_to_high_pct'])[0]
|
|
61
|
+
|
|
62
|
+
stock_qfq_last_year_df = stock_qfq_year_df.loc[(stock_qfq_year_df['symbol'] == symbol)
|
|
63
|
+
& (stock_qfq_year_df['year'] == last_year)]
|
|
64
|
+
|
|
65
|
+
if data_frame_util.is_empty(stock_qfq_last_year_df):
|
|
66
|
+
k_line_info['last_year_chg'] = 0
|
|
67
|
+
k_line_info['last_year_open_from_high_chg'] = 0
|
|
68
|
+
k_line_info['last_year_low_from_high_chg'] = 0
|
|
69
|
+
else:
|
|
70
|
+
k_line_info['last_year_chg'] = list(stock_qfq_last_year_df['chg'])[0]
|
|
71
|
+
k_line_info['last_year_open_from_high_chg'] = list(stock_qfq_last_year_df['open_to_high_pct'])[0]
|
|
72
|
+
k_line_info['last_year_low_from_high_chg'] = list(stock_qfq_last_year_df['low_to_high_pct'])[0]
|
|
45
73
|
|
|
46
74
|
return k_line_info
|
|
47
75
|
|
|
76
|
+
# 处理月线
|
|
77
|
+
|
|
48
78
|
|
|
49
|
-
# 处理月线
|
|
50
79
|
def handle_month_line(k_line_info, str_day, symbol):
|
|
51
80
|
now_year = int(str_day[0:4])
|
|
52
81
|
last_year = str(now_year - 1)
|
|
@@ -54,7 +83,7 @@ def handle_month_line(k_line_info, str_day, symbol):
|
|
|
54
83
|
now_month_begin_day = str_day[0:7] + '-01'
|
|
55
84
|
|
|
56
85
|
last_year_begin_day = last_year + '-01-01'
|
|
57
|
-
now_year_begin_day = str(now_year) + '-01-01'
|
|
86
|
+
# now_year_begin_day = str(now_year) + '-01-01'
|
|
58
87
|
|
|
59
88
|
query = {"symbol": symbol,
|
|
60
89
|
'date': {"$gte": date_handle_util.no_slash_date(last_year_begin_day)}}
|
|
@@ -67,11 +96,11 @@ def handle_month_line(k_line_info, str_day, symbol):
|
|
|
67
96
|
stock_hfq_monthly_all = stock_hfq_monthly_all.loc[
|
|
68
97
|
stock_hfq_monthly_all['date'] <= date_handle_util.no_slash_date(now_month_begin_day)]
|
|
69
98
|
|
|
70
|
-
stock_hfq_monthly_last_year = stock_hfq_monthly_all.loc[
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
stock_hfq_monthly_now_year = stock_hfq_monthly_all.loc[
|
|
74
|
-
|
|
99
|
+
# stock_hfq_monthly_last_year = stock_hfq_monthly_all.loc[
|
|
100
|
+
# stock_hfq_monthly_all['date'] < date_handle_util.no_slash_date(now_year_begin_day)]
|
|
101
|
+
#
|
|
102
|
+
# stock_hfq_monthly_now_year = stock_hfq_monthly_all.loc[
|
|
103
|
+
# stock_hfq_monthly_all['date'] > date_handle_util.no_slash_date(now_year_begin_day)]
|
|
75
104
|
|
|
76
105
|
# 最近两个月k线
|
|
77
106
|
before_two_month_stock_hfq_monthly = stock_hfq_monthly_all.iloc[0:2]
|
|
@@ -99,34 +128,34 @@ def handle_month_line(k_line_info, str_day, symbol):
|
|
|
99
128
|
open_price = before_two_month_stock_hfq_monthly.iloc[1].last_price
|
|
100
129
|
sum_chg = round((close_price - open_price) * 100 / open_price, 2)
|
|
101
130
|
k_line_info['sum_month'] = sum_chg
|
|
102
|
-
|
|
103
|
-
last_year_month_number = stock_hfq_monthly_last_year.shape[0]
|
|
104
|
-
if last_year_month_number == 0:
|
|
105
|
-
|
|
106
|
-
elif last_year_month_number == 1:
|
|
107
|
-
|
|
108
|
-
else:
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
now_year_month_number = stock_hfq_monthly_now_year.shape[0]
|
|
121
|
-
if now_year_month_number == 0:
|
|
122
|
-
|
|
123
|
-
elif now_year_month_number == 1:
|
|
124
|
-
|
|
125
|
-
else:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
#
|
|
132
|
+
# last_year_month_number = stock_hfq_monthly_last_year.shape[0]
|
|
133
|
+
# if last_year_month_number == 0:
|
|
134
|
+
# k_line_info['last_year_chg'] = 0
|
|
135
|
+
# elif last_year_month_number == 1:
|
|
136
|
+
# k_line_info['last_year_chg'] = stock_hfq_monthly_last_year.iloc[0].chg
|
|
137
|
+
# else:
|
|
138
|
+
# # chg_list = list(stock_hfq_monthly_last_year['chg'])
|
|
139
|
+
# # # 将列表中的每个元素加上1
|
|
140
|
+
# # updated_list = [round((x / 100) + 1, 2) for x in chg_list]
|
|
141
|
+
# #
|
|
142
|
+
# # # 使用 functools.reduce 将列表中的所有元素相乘
|
|
143
|
+
# # last_year_chg = functools.reduce(lambda x, y: x * y, updated_list)
|
|
144
|
+
# close_price = stock_hfq_monthly_last_year.iloc[0].close
|
|
145
|
+
# open_price = stock_hfq_monthly_last_year.iloc[last_year_month_number - 1].last_price
|
|
146
|
+
# last_year_chg = round((close_price - open_price) * 100 / open_price, 2)
|
|
147
|
+
# k_line_info['last_year_chg'] = last_year_chg
|
|
148
|
+
#
|
|
149
|
+
# now_year_month_number = stock_hfq_monthly_now_year.shape[0]
|
|
150
|
+
# if now_year_month_number == 0:
|
|
151
|
+
# k_line_info['now_year_chg'] = 0
|
|
152
|
+
# elif now_year_month_number == 1:
|
|
153
|
+
# k_line_info['now_year_chg'] = stock_hfq_monthly_now_year.iloc[0].chg
|
|
154
|
+
# else:
|
|
155
|
+
# close_price = stock_hfq_monthly_now_year.iloc[0].close
|
|
156
|
+
# open_price = stock_hfq_monthly_now_year.iloc[now_year_month_number - 1].last_price
|
|
157
|
+
# last_year_chg = round((close_price - open_price) * 100 / open_price, 2)
|
|
158
|
+
# k_line_info['now_year_chg'] = last_year_chg
|
|
130
159
|
|
|
131
160
|
return k_line_info
|
|
132
161
|
|
|
@@ -13,7 +13,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def clean_history_data():
|
|
16
|
-
query = {"$and": [{"trade_date": {"$gte": '2023-11-06'}}, {"trade_date": {"$lte": '2025-
|
|
16
|
+
query = {"$and": [{"trade_date": {"$gte": '2023-11-06'}}, {"trade_date": {"$lte": '2025-03-21'}}]}
|
|
17
17
|
trade_date_list_df = mongodb_util.find_query_data('trade_date_list', query)
|
|
18
18
|
trade_date_list_df = trade_date_list_df.sort_values(by=['trade_date'], ascending=False)
|
|
19
19
|
for trade_data_one in trade_date_list_df.itertuples():
|
|
@@ -28,7 +28,8 @@ if __name__ == '__main__':
|
|
|
28
28
|
# k_line_info_clean_task.sync_k_line_info('2025-02-21', None)
|
|
29
29
|
# k_line_info_clean_task.sync_k_line_info('2024-12-19', ['600992'])
|
|
30
30
|
# clean_history_data()
|
|
31
|
-
k_line_info_clean_task.sync_k_line_info('2025-03-
|
|
31
|
+
k_line_info_clean_task.sync_k_line_info('2025-03-11', None)
|
|
32
|
+
k_line_info_clean_task.sync_k_line_info('2025-03-13', None)
|
|
32
33
|
|
|
33
34
|
# 001389 001359
|
|
34
35
|
# k_line_info_clean_task.sync_k_line_info('2025-02-14', None)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
from loguru import logger
|
|
10
|
+
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
11
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
12
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
13
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
14
|
+
import mns_common.api.xueqiu.xue_qiu_k_line_api as xue_qiu_k_line_api
|
|
15
|
+
|
|
16
|
+
mongodb_util = MongodbUtil('27017')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def sync_year_k_line():
|
|
20
|
+
global symbol_prefix
|
|
21
|
+
col_name = db_name_constant.STOCK_QFQ_YEAR
|
|
22
|
+
real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
23
|
+
real_time_quotes_all_stocks_df = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks_df)
|
|
24
|
+
for stock_one in real_time_quotes_all_stocks_df.itertuples():
|
|
25
|
+
symbol = stock_one.symbol
|
|
26
|
+
try:
|
|
27
|
+
classification = stock_one.classification
|
|
28
|
+
if classification in ['H', 'K']:
|
|
29
|
+
symbol_prefix = 'SH' + symbol
|
|
30
|
+
elif classification in ['S', 'C']:
|
|
31
|
+
symbol_prefix = 'SZ' + symbol
|
|
32
|
+
elif classification in ['X']:
|
|
33
|
+
symbol_prefix = 'BJ' + symbol
|
|
34
|
+
|
|
35
|
+
year_k_line_df = xue_qiu_k_line_api.get_xue_qiu_k_line(symbol_prefix, 'year')
|
|
36
|
+
year_k_line_df = year_k_line_df[[
|
|
37
|
+
'volume',
|
|
38
|
+
'open',
|
|
39
|
+
'high',
|
|
40
|
+
'low',
|
|
41
|
+
'close',
|
|
42
|
+
'chg',
|
|
43
|
+
'percent',
|
|
44
|
+
'turnoverrate',
|
|
45
|
+
'amount',
|
|
46
|
+
'str_day'
|
|
47
|
+
]]
|
|
48
|
+
year_k_line_df['year'] = year_k_line_df['str_day'].str[:4]
|
|
49
|
+
|
|
50
|
+
year_k_line_df["open_to_high_pct"] = (
|
|
51
|
+
(year_k_line_df["high"] - year_k_line_df["open"]) / year_k_line_df["open"] * 100).round(2)
|
|
52
|
+
|
|
53
|
+
year_k_line_df["low_to_high_pct"] = (
|
|
54
|
+
(year_k_line_df["high"] - year_k_line_df["low"]) / year_k_line_df["low"] * 100).round(2)
|
|
55
|
+
year_k_line_df = year_k_line_df.rename(columns={
|
|
56
|
+
"percent": "chg",
|
|
57
|
+
"chg": "chg_price",
|
|
58
|
+
"turnoverrate": "exchange"
|
|
59
|
+
})
|
|
60
|
+
year_k_line_df['symbol'] = symbol
|
|
61
|
+
year_k_line_df['_id'] = symbol + '_' + year_k_line_df['year']
|
|
62
|
+
mongodb_util.save_mongo(year_k_line_df, col_name)
|
|
63
|
+
logger.info("同步年线数据完成:{},{}", symbol, stock_one.name)
|
|
64
|
+
except BaseException as e:
|
|
65
|
+
logger.error("同步年线数据异常:{},{}", symbol, e)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
if __name__ == '__main__':
|
|
69
|
+
sync_year_k_line()
|
|
@@ -15,6 +15,8 @@ import mns_common.constant.db_name_constant as db_name_constant
|
|
|
15
15
|
mongodb_util = MongodbUtil('27017')
|
|
16
16
|
# 审核标准意见
|
|
17
17
|
OPINION_TYPE = "标准无保留意见"
|
|
18
|
+
# 新上市不check
|
|
19
|
+
NEW_STOCK = 365
|
|
18
20
|
|
|
19
21
|
|
|
20
22
|
def annual_report_audit_check(new_report_df, period_time):
|
|
@@ -30,6 +32,12 @@ def annual_report_audit_check(new_report_df, period_time):
|
|
|
30
32
|
mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
|
|
31
33
|
# 年报有问题
|
|
32
34
|
if opinion_type != OPINION_TYPE:
|
|
35
|
+
query_company = {'_id': symbol}
|
|
36
|
+
company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query_company)
|
|
37
|
+
diff_days = list(company_info['diff_days'])[0]
|
|
38
|
+
if diff_days < NEW_STOCK:
|
|
39
|
+
return
|
|
40
|
+
|
|
33
41
|
id_key = symbol + "_" + period_time + "_" + BlackClassify.AUDIT_PROBLEM.level_code
|
|
34
42
|
|
|
35
43
|
black_list_service_api.save_black_stock(id_key,
|
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
9
9
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
-
import mns_scheduler.k_line.
|
|
10
|
+
import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
import mns_scheduler.zt.zt_pool.em_zt_pool_sync_api as em_zt_pool_sync_api
|
|
13
13
|
import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
|
|
@@ -15,7 +15,7 @@ import mns_scheduler.dt.stock_dt_pool_sync as stock_dt_pool_sync_api
|
|
|
15
15
|
import mns_scheduler.zb.stock_zb_pool_sync as stock_zb_pool_sync_api
|
|
16
16
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
17
17
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
18
|
-
import mns_scheduler.k_line.
|
|
18
|
+
import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync_api
|
|
19
19
|
import mns_scheduler.company_info.announce.company_announce_sync_service as company_announce_sync_service
|
|
20
20
|
import mns_scheduler.db.col_move_service as col_move_service
|
|
21
21
|
import mns_scheduler.db.db_status as db_status_api
|
|
@@ -55,6 +55,7 @@ import mns_scheduler.hk.hk_company_info_sync_service_api as hk_company_info_sync
|
|
|
55
55
|
import mns_scheduler.zt.zt_pool.update_null_zt_reason_api as update_null_zt_reason_api
|
|
56
56
|
import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
|
|
57
57
|
import mns_scheduler.industry.ths.ths_industry_sync_service as ths_industry_sync_service
|
|
58
|
+
import mns_scheduler.k_line.year_quarter.year_quarter_line_sync as year_quarter_line_sync
|
|
58
59
|
import mns_scheduler.db.task_handle_service as task_handle_service
|
|
59
60
|
import mns_scheduler.extraIncome.one_minute.one_minute_sync_task as one_minute_sync_task
|
|
60
61
|
|
|
@@ -412,6 +413,7 @@ def sync_stock_tfp():
|
|
|
412
413
|
stock_tfp_info_sync.sync_stock_tfp(str_day)
|
|
413
414
|
|
|
414
415
|
|
|
416
|
+
# 同步同花顺行业信息
|
|
415
417
|
def sync_ths_industry_info():
|
|
416
418
|
logger.info("同步同花顺行业信息开始")
|
|
417
419
|
ths_industry_sync_service.sync_ths_industry_index()
|
|
@@ -419,11 +421,18 @@ def sync_ths_industry_info():
|
|
|
419
421
|
logger.info("同步同花顺行业信息完成")
|
|
420
422
|
|
|
421
423
|
|
|
424
|
+
# 同步1分钟交易数据
|
|
422
425
|
def sync_one_minute_data():
|
|
423
426
|
logger.info("同步1分钟交易数据")
|
|
424
427
|
one_minute_sync_task.sync_one_minute_data()
|
|
425
428
|
|
|
426
429
|
|
|
430
|
+
# 同步年线数据
|
|
431
|
+
def sync_year_k_line():
|
|
432
|
+
logger.info("同步年线数据")
|
|
433
|
+
year_quarter_line_sync.sync_year_k_line()
|
|
434
|
+
|
|
435
|
+
|
|
427
436
|
# # 定义BlockingScheduler
|
|
428
437
|
blockingScheduler = BlockingScheduler()
|
|
429
438
|
# sync_trade_date 同步交易日期
|
|
@@ -568,6 +577,9 @@ blockingScheduler.add_job(sync_ths_industry_info, 'cron', hour='17,22', minute='
|
|
|
568
577
|
# 同步一分钟交易数据
|
|
569
578
|
blockingScheduler.add_job(sync_one_minute_data, 'cron', hour='17,22', minute='55')
|
|
570
579
|
|
|
580
|
+
# 同步年线数据
|
|
581
|
+
blockingScheduler.add_job(sync_year_k_line, 'cron', hour='18,23', minute='55')
|
|
582
|
+
|
|
571
583
|
# 同步新公告信息 感觉没有必要同步 直接连接过去查看
|
|
572
584
|
# blockingScheduler.add_job(sync_company_announce, 'cron', hour='07,18,23', minute='33')
|
|
573
585
|
|
|
@@ -8,7 +8,7 @@ mns_scheduler/company_info/base/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4I
|
|
|
8
8
|
mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=D6puyEfh0JtS7grQ4OQ1AK2c4eDXlhOHFAOIEfNUMUM,20548
|
|
9
9
|
mns_scheduler/company_info/base/sync_company_hold_info_api.py,sha256=W3Nj9st45efx8cy_42PRTcOXijWKnkO1-ZFRyyfR3S0,1587
|
|
10
10
|
mns_scheduler/company_info/clean/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
11
|
-
mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=
|
|
11
|
+
mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=gykN2aFfjBQoGxux3otM9v_zbD_wbv7z0CqAX_hzG6U,6104
|
|
12
12
|
mns_scheduler/company_info/constant/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
13
13
|
mns_scheduler/company_info/constant/company_constant_data.py,sha256=v0PraTBSQMl1pM6QM2tFGxEcXBJ_MkMChMD2nmrxXsQ,22456
|
|
14
14
|
mns_scheduler/company_info/de_list_stock/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
@@ -68,7 +68,7 @@ mns_scheduler/extraIncome/one_minute/stock/stock_one_minute_sync_task.py,sha256=
|
|
|
68
68
|
mns_scheduler/extraIncome/temp/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
69
69
|
mns_scheduler/extraIncome/temp/tu_share_data_etf_sync.py,sha256=XBsLl4o1Ras1zUQBkJ2BAgWtPebqAf9VUu_kLEisGmQ,4464
|
|
70
70
|
mns_scheduler/extraIncome/temp/tu_share_data_kzz_sync.py,sha256=A2Aa4TB2mgTHiDlW9_UpB0mdRCR_1sOTaPZKs-IBbXc,4850
|
|
71
|
-
mns_scheduler/extraIncome/temp/tu_share_data_stock_sync.py,sha256=
|
|
71
|
+
mns_scheduler/extraIncome/temp/tu_share_data_stock_sync.py,sha256=pSYrWf87xEUYipVd1Mnwh31DqT-uKJugMaCHM5KDElY,6250
|
|
72
72
|
mns_scheduler/extraIncome/temp/tu_share_zhi_shu_sync_api.py,sha256=sAvfsIObHWsapgJP8o2YTL4D1XZiWa2tGguM6B6bgyQ,4169
|
|
73
73
|
mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
74
74
|
mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=kEZQZkxB7RF7UPH4DmHoRWfEKgI61ZN8BcNOzmBUoV0,19417
|
|
@@ -89,21 +89,23 @@ mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py,sha256=iXy_FukyyQ_ZcU1WcT_DSp
|
|
|
89
89
|
mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py,sha256=6iZpdQ1pARchL3kV-oEVPDc9Ja0ciQBjBntVmxseeNE,6199
|
|
90
90
|
mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
|
|
91
91
|
mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
92
|
-
mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=
|
|
93
|
-
mns_scheduler/k_line/clean/k_line_info_clean_task.py,sha256=
|
|
92
|
+
mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=ZTnSpQ2zKnNPWCkHKPJkLdkxVK29szgufxNV6uvXG7s,1344
|
|
93
|
+
mns_scheduler/k_line/clean/k_line_info_clean_task.py,sha256=oRE6hjeJMYS-FZolkEgURKDuDAJteMR5EMzHi1CIHIs,8896
|
|
94
94
|
mns_scheduler/k_line/clean/daily/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
95
95
|
mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py,sha256=ZOqaiQuOSFJsKZSW8GEQf1UkveKvg66f-bsHGAybvAM,20447
|
|
96
96
|
mns_scheduler/k_line/clean/daily/daily_k_line_service.py,sha256=AmnswvYlkO0gadMongt089WKWXdd-Cnku5AO0HSgDG0,6906
|
|
97
97
|
mns_scheduler/k_line/clean/week_month/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
98
|
-
mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py,sha256=
|
|
98
|
+
mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py,sha256=1fFtnNtOFQ53aKSvH8taduNn-kE654RRyjYWvhuyaxc,9864
|
|
99
99
|
mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py,sha256=LIdY5e9U45Qtoc7Sqm1zVqaZIwh_NBOT84HL3Ye10pw,5526
|
|
100
100
|
mns_scheduler/k_line/hot_stocks/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
101
101
|
mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py,sha256=whm-pYhAd_7OKurIw2cteBwWse5vVXS88lcrTbbcSaE,2628
|
|
102
|
-
mns_scheduler/k_line/
|
|
103
|
-
mns_scheduler/k_line/
|
|
104
|
-
mns_scheduler/k_line/
|
|
102
|
+
mns_scheduler/k_line/month_week_daily/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
|
|
103
|
+
mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py,sha256=RC887GGTOal_MpGzJvZVlfQI2m3vK_L5xVBjKV9SCyg,4218
|
|
104
|
+
mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py,sha256=czNFTSx-1_xJF4BmfiY7SSxrfMESqjITmTyZL_AlyVo,6026
|
|
105
105
|
mns_scheduler/k_line/test/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
106
|
-
mns_scheduler/k_line/test/k_line_info_clean_his_data.py,sha256=
|
|
106
|
+
mns_scheduler/k_line/test/k_line_info_clean_his_data.py,sha256=MGMiu0wQj-zAmnxGqxeTdCIr-6D_DqwK_lDR9BONW14,1538
|
|
107
|
+
mns_scheduler/k_line/year_quarter/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
108
|
+
mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py,sha256=t7tCrjrdz4xB_0hqi5kNi9klDCk4Giymy_eWVaF0sG8,2769
|
|
107
109
|
mns_scheduler/kpl/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
108
110
|
mns_scheduler/kpl/selection/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
109
111
|
mns_scheduler/kpl/selection/index/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
@@ -122,7 +124,7 @@ mns_scheduler/risk/financial_report_risk_check_api.py,sha256=BPkMZ7aINfOFPswIV11
|
|
|
122
124
|
mns_scheduler/risk/compliance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
125
|
mns_scheduler/risk/compliance/undisclosed_annual_report_api.py,sha256=JKc9S8x0-ITtzqWPlI6CYOmjFaZxZ_5hVOzGwqPfA5A,3818
|
|
124
126
|
mns_scheduler/risk/financial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
125
|
-
mns_scheduler/risk/financial/annual_report_audit_check_api.py,sha256=
|
|
127
|
+
mns_scheduler/risk/financial/annual_report_audit_check_api.py,sha256=TdLZ1UvueCxCzSiPsGdpILdIPUfaLK5nLKL3BPftjqI,2583
|
|
126
128
|
mns_scheduler/risk/financial/net_assets_check_api.py,sha256=LXuEWhK3ne8qRRZuen6a5peUUvdsRWfODU_RG3v-_Rs,4740
|
|
127
129
|
mns_scheduler/risk/financial/profit_income_check_api.py,sha256=S2jgn29WT6Luoy13n0_JkW9JQUJmqLxfjl1TKsfA3zY,4630
|
|
128
130
|
mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py,sha256=SQ7dieSCOf1z42Wi1zDEii3poAT5wfyBrV43dXkAaaw,22
|
|
@@ -168,14 +170,14 @@ mns_scheduler/zt/script/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda
|
|
|
168
170
|
mns_scheduler/zt/script/fix_error_deal_day.py,sha256=n54pom24wCQAiHKjnVZACizb97iGWaEYtADM9R1z69g,1624
|
|
169
171
|
mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=EVJrQoyujH1V6ifmZCJiqzuLx4xin2pfxLJ-bYT1Cxw,5571
|
|
170
172
|
mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=yQcICTburhpdAmMOBe6XOuNW4eN462LxBq97BJhr11g,1685
|
|
171
|
-
mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=
|
|
173
|
+
mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=GLAyXQJ3bnFBe3a5qI-tXnr-gKhOyNagTeGxNn4MZmU,1862
|
|
172
174
|
mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
173
175
|
mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=A5YiAWYdbAxhlTTJ8pOStZrBbfnLF_RhntyYvN0neO8,11109
|
|
174
176
|
mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=3OGBmWEX6G-fTuONgoB6Lu5xX0JNaWiP5FWMHIlIf-Y,10647
|
|
175
177
|
mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=1uoiR2Uw46kDfjkvNg2US5rd_4OIkYO3872gIJOufUY,2135
|
|
176
178
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
177
|
-
mns_scheduler/zz_task/data_sync_task.py,sha256=
|
|
178
|
-
mns_scheduler-1.2.
|
|
179
|
-
mns_scheduler-1.2.
|
|
180
|
-
mns_scheduler-1.2.
|
|
181
|
-
mns_scheduler-1.2.
|
|
179
|
+
mns_scheduler/zz_task/data_sync_task.py,sha256=kcdAVUh0uJoRVprqIMXgTfLKlVEWFTG6VQ7Fx7-Wj_Y,23911
|
|
180
|
+
mns_scheduler-1.2.8.2.dist-info/METADATA,sha256=mSkaF-NYKFbIx0BiouTiTifsBvwHVdp848B_9IDtyL0,64
|
|
181
|
+
mns_scheduler-1.2.8.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
182
|
+
mns_scheduler-1.2.8.2.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
183
|
+
mns_scheduler-1.2.8.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|