mns-scheduler 1.3.1.6__py3-none-any.whl → 1.3.1.7__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.

@@ -0,0 +1,7 @@
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)
@@ -0,0 +1,161 @@
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
+ import mns_scheduler.extraIncome.us.one_minute.stock.down_load.rename.rename_stock as rename_stock
9
+ from loguru import logger
10
+ import time
11
+ import mns_common.utils.data_frame_util as data_frame_util
12
+ from mns_common.db.MongodbUtil import MongodbUtil
13
+ from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
14
+ import mns_common.constant.extra_income_db_name as extra_income_db_name
15
+ import mns_scheduler.extraIncome.us.one_minute.api.alpha_vantage_api as alpha_vantage_api
16
+ import pandas as pd
17
+
18
+ mongodb_util_27017 = MongodbUtil('27017')
19
+ mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
20
+ import threading
21
+
22
+
23
+ def handle_fail_sync():
24
+ begin_year = 2025
25
+ end_year = 2020
26
+ while begin_year > end_year:
27
+ query = {"now_year": {"$in": [begin_year, str(begin_year)]}}
28
+ us_fail_df = mongodb_util_27017.find_query_data('us_stock_one_minute_down_load_fail', query)
29
+ us_fail_df = us_fail_df.sort_values(by=['now_month'], ascending=False)
30
+ fix_name_df = rename_stock.read_csv_df()
31
+ for stock_one in us_fail_df.itertuples():
32
+ symbol = stock_one.symbol
33
+ now_month = stock_one.now_month
34
+ path = stock_one.path
35
+ fix_name_df_one = fix_name_df.loc[fix_name_df['current_code'] == symbol]
36
+ try:
37
+
38
+ if data_frame_util.is_not_empty(fix_name_df_one):
39
+ current_code = list(fix_name_df_one['current_code'])[0]
40
+ former_code = list(fix_name_df_one['former_code'])[0]
41
+
42
+ change_date = list(fix_name_df_one['change_date'])[0]
43
+
44
+ changed = list(fix_name_df_one['changed'])[0]
45
+ if changed:
46
+ change_month = change_date.strftime('%Y-%m')
47
+ if change_month == now_month:
48
+ df_01 = call_with_timeout(sync_one_minute_data,
49
+ current_code,
50
+ now_month,
51
+ timeout=60)
52
+ df_02 = call_with_timeout(sync_one_minute_data,
53
+ former_code,
54
+ now_month,
55
+ timeout=60)
56
+
57
+ export_original_data(df_01, current_code, str(begin_year), now_month)
58
+ export_original_data(df_02, former_code, str(begin_year), now_month)
59
+ elif change_month > now_month:
60
+ df_02 = call_with_timeout(sync_one_minute_data,
61
+ former_code,
62
+ now_month,
63
+ timeout=60)
64
+ export_original_data(df_02, former_code, str(begin_year), now_month)
65
+
66
+ elif change_month < now_month:
67
+ df_01 = call_with_timeout(sync_one_minute_data,
68
+ current_code,
69
+ now_month,
70
+ timeout=60)
71
+ export_original_data(df_01, current_code, str(begin_year), now_month)
72
+ else:
73
+ df = call_with_timeout(sync_one_minute_data,
74
+ symbol,
75
+ now_month,
76
+ timeout=60)
77
+ export_original_data(df, symbol, str(begin_year), now_month)
78
+ else:
79
+ df = call_with_timeout(sync_one_minute_data,
80
+ symbol,
81
+ now_month,
82
+ timeout=60)
83
+ export_original_data(df, symbol, str(begin_year), now_month)
84
+ remove_query = {'symbol': symbol, 'now_month': now_month}
85
+ mongodb_util_27017.remove_data(remove_query, 'us_stock_one_minute_down_load_fail')
86
+ logger.info("同步股票分钟数据完成:,{},{}", symbol, now_month)
87
+ except BaseException as e:
88
+ time.sleep(1)
89
+ fail_dict = {
90
+ '_id': symbol + '_' + now_month,
91
+ 'type': "stock",
92
+ 'path': path,
93
+ 'symbol': symbol,
94
+ 'now_year': begin_year,
95
+ 'now_month': now_month,
96
+ }
97
+ fail_df = pd.DataFrame(fail_dict, index=[1])
98
+
99
+ mongodb_util_27017.save_mongo(fail_df, 'us_stock_one_minute_down_load_fail')
100
+ logger.error("同步股票分钟数据出现异常:,{},{},{}", e, symbol, now_month)
101
+
102
+ begin_year = begin_year - 1
103
+
104
+
105
+ def export_original_data(df, symbol, year, now_month):
106
+ path = r'F:\us_stock\one_minute\{}'.format(year)
107
+ if not os.path.exists(path):
108
+ os.makedirs(path)
109
+
110
+ path = path + '\{}'.format(now_month)
111
+ if not os.path.exists(path):
112
+ os.makedirs(path)
113
+
114
+ file_name = path + '\{}.csv'.format(symbol)
115
+ if data_frame_util.is_not_empty(df):
116
+ # df = df.dropna(subset=['_id'])
117
+ # del df['str_day']
118
+ # del df['minute']
119
+ # del df['_id']
120
+ # del df['symbol']
121
+ df.to_csv(file_name, index=False, encoding='utf-8')
122
+
123
+
124
+ # 定义一个带超时的函数调用
125
+ def call_with_timeout(func, *args, timeout=60, **kwargs):
126
+ # 用于存储函数执行结果
127
+ result = None
128
+ exception = None
129
+
130
+ # 定义一个线程目标函数
131
+ def target():
132
+ nonlocal result, exception
133
+ try:
134
+ result = func(*args, **kwargs)
135
+ except Exception as e:
136
+ exception = e
137
+
138
+ # 创建线程并启动
139
+ thread = threading.Thread(target=target)
140
+ thread.start()
141
+
142
+ # 等待线程完成,最多等待 timeout 秒
143
+ thread.join(timeout)
144
+
145
+ # 如果线程仍然存活,说明函数超时了
146
+ if thread.is_alive():
147
+ raise TimeoutError(f"Function exceeded timeout of {timeout} seconds")
148
+
149
+ # 如果函数抛出了异常,重新抛出
150
+ if exception is not None:
151
+ raise exception
152
+ return result
153
+
154
+
155
+ def sync_one_minute_data(symbol, now_month):
156
+ df = alpha_vantage_api.sync_one_minute_data(symbol, now_month)
157
+ return df
158
+
159
+
160
+ if __name__ == '__main__':
161
+ handle_fail_sync()
@@ -0,0 +1,7 @@
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)
@@ -0,0 +1,18 @@
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
+ import pandas as pd
9
+
10
+
11
+ def read_csv_df():
12
+ data = pd.read_excel(
13
+ fr"D:\mns\mns-scheduler\mns_scheduler\extraIncome\us\one_minute\stock\down_load\rename\stock_code_changes.xlsx")
14
+ return data
15
+
16
+
17
+ if __name__ == '__main__':
18
+ read_csv_df()
@@ -75,7 +75,7 @@ def sync_us_stock_one_minute(now_year, now_month):
75
75
  real_time_quotes_all_us_stocks.dropna(subset=['list_date'], inplace=True)
76
76
  for stock_one in real_time_quotes_all_us_stocks.itertuples():
77
77
  flow_mv = stock_one.flow_mv
78
- symbol = stock_one.symbo
78
+ symbol = stock_one.symbol
79
79
  try:
80
80
  symbol = stock_one.symbol
81
81
  # simple_symbol = int(stock_one.simple_symbol)
@@ -165,7 +165,7 @@ def net_work_check(now_date):
165
165
 
166
166
 
167
167
  def sync_by_year(begin_year):
168
- begin_month = 10
168
+ begin_month = 12
169
169
  while begin_month > 0:
170
170
  if begin_month < 10:
171
171
  str_month = '0' + str(begin_month)
@@ -190,7 +190,7 @@ if __name__ == '__main__':
190
190
  # k_line_df = query_k_line('TSLA')
191
191
  # sync_by_year(2024)
192
192
  # sync_by_year(2022)
193
- sync_by_year(2020)
193
+ # sync_by_year(2020)
194
194
  sync_by_year(2018)
195
195
  sync_by_year(2016)
196
196
  sync_by_year(2014)
@@ -75,7 +75,7 @@ def sync_us_stock_one_minute(now_year, now_month):
75
75
  real_time_quotes_all_us_stocks.dropna(subset=['list_date'], inplace=True)
76
76
  for stock_one in real_time_quotes_all_us_stocks.itertuples():
77
77
  flow_mv = stock_one.flow_mv
78
- symbol = stock_one.symbo
78
+ symbol = stock_one.symbol
79
79
  try:
80
80
 
81
81
  # simple_symbol = int(stock_one.simple_symbol)
@@ -165,7 +165,7 @@ def net_work_check(now_date):
165
165
 
166
166
 
167
167
  def sync_by_year(begin_year):
168
- begin_month = 10
168
+ begin_month = 12
169
169
  while begin_month > 0:
170
170
  if begin_month < 10:
171
171
  str_month = '0' + str(begin_month)
@@ -64,7 +64,8 @@ def save_zt_info(str_day):
64
64
  stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data.copy())
65
65
 
66
66
  stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
67
-
67
+ # 主线标记 复盘用
68
+ stock_em_zt_pool_df_data['main_line'] = '无'
68
69
  # 上个交易交易日涨停股票
69
70
  last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
70
71
 
@@ -129,8 +130,6 @@ def save_zt_info(str_day):
129
130
 
130
131
  stock_em_zt_pool_df_data['str_day'] = str_day
131
132
  stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
132
- # 主线标记 复盘用
133
- stock_em_zt_pool_df_data['main_line'] = '无'
134
133
 
135
134
  stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
136
135
 
@@ -152,16 +151,19 @@ def save_zt_info(str_day):
152
151
 
153
152
  # 设置连板数目
154
153
  def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_day_zt_df):
155
- connected_boards_df = last_trade_day_zt_df.loc[
154
+ connected_boards_df_copy = last_trade_day_zt_df.loc[
156
155
  last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
157
-
156
+ connected_boards_df = connected_boards_df_copy.copy()
158
157
  connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
159
158
 
160
159
  connected_boards_df_one = connected_boards_df.loc[connected_boards_df['symbol'] == symbol]
161
160
  if data_frame_util.is_not_empty(connected_boards_df_one):
162
- connected_boards_df_one.loc[connected_boards_df_one['symbol'] == symbol, 'connected_boards_numbers'] = \
161
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
163
162
  list(connected_boards_df_one['connected_boards_numbers'])[0]
164
163
 
164
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
165
+ list(connected_boards_df_one['main_line'])[0]
166
+
165
167
  return stock_em_zt_pool_df_data
166
168
 
167
169
 
@@ -220,7 +222,7 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
220
222
 
221
223
 
222
224
  if __name__ == '__main__':
223
- save_zt_info('2025-05-08')
225
+ save_zt_info('2025-05-13')
224
226
  # from datetime import datetime
225
227
  #
226
228
  # if __name__ == '__main__':
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.3.1.6
3
+ Version: 1.3.1.7
4
4
 
@@ -90,9 +90,13 @@ mns_scheduler/extraIncome/us/one_minute/stock/down_load/__init__.py,sha256=QWBdZ
90
90
  mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/__init__.py,sha256=sb7uvmLWbASPFK0DTXcid92WM4ApnTnjTM9_60_sTdA,255
91
91
  mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/down_load_ETF_his_2024.py,sha256=DkzyISWT0jTiTfvkXHvXSB0rqx9iTSFcg7RjVD51uBo,5816
92
92
  mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/handle_down_load_fail_ETF.py,sha256=yv5BYVQ4P046mX_U1592vkIVKYOgEb_8HYeVdpr65rQ,2530
93
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/fail/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
94
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/fail/handle_fail_data.py,sha256=YG6ZoBocW6v18d8myfwxZyX3xJjlMisrGRNZa5YKKNA,6904
95
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/rename/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
96
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/rename/rename_stock.py,sha256=xXh-7F0ye7NLukAGsS1d3XTi46XtA1CkzAMr9wN-CLU,425
93
97
  mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
94
- mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_01.py,sha256=s5CM1yAyuLxjpXUvTmJoCOOEx0Qgu3ashEVGgh-bMS0,6918
95
- mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_02.py,sha256=oW2GvJVSFl2CWhfcXy_iKIUM_J3EGzmnWrzu_R409tk,6855
98
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_01.py,sha256=0mhgHkp3MCHGbU0VMkti7_2IB8pjzh5rdGDKTSxshAo,6921
99
+ mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_02.py,sha256=9WdYPO_shCEMnxF2bad0AjRfMY4GaTcpfaWv4EC83KU,6856
96
100
  mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_2025.py,sha256=1HyYBAWatjXsWwPDxuC36ONO6RQNUJeLt8E4c-8aaWA,5310
97
101
  mns_scheduler/extraIncome/us/one_minute/stock/now/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
98
102
  mns_scheduler/extraIncome/us/one_minute/stock/now/us_etf_one_minute_sync.py,sha256=HHrICmSiDMmDBjF_7rcai4u383c0O1zc12gGjMHwqAg,2045
@@ -199,12 +203,12 @@ mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=1pm16xy_DHgd
199
203
  mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=xzfjlwNqsiDQqkTTmaLlFRG0WwkOSYDI-1mw38Z_hNc,1685
200
204
  mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=cArTHjZmnGJFEO6kAnva8rVOg9mV3vHIuwS-zg3BobM,1844
201
205
  mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
202
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=tA-f0OTtQo-dcSwq2gOooYe7TFrfPcz6vVH16SWFCd0,11930
206
+ mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=2mXBM-KXxuPfl032h29eSLk9nOzhkN2Qtt1hwmOaoZ8,12154
203
207
  mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=u0IvwPuI2hnjTOrwwe8EhBAMv8NbQTENpRbb-_5lDlM,9803
204
208
  mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=caW-MuF0RFLavJZafeLDYQ29-GxwGsmr5YVrN4lost8,2135
205
209
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
206
210
  mns_scheduler/zz_task/data_sync_task.py,sha256=97XQqGXS6xce8tq7I804RpYKk90MGsU2GYHsqgvLr_s,25015
207
- mns_scheduler-1.3.1.6.dist-info/METADATA,sha256=4Q9r7eo0UTBiWEVijcR__qSujh7qLhV9i_Bp6_iZNBg,64
208
- mns_scheduler-1.3.1.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
209
- mns_scheduler-1.3.1.6.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
210
- mns_scheduler-1.3.1.6.dist-info/RECORD,,
211
+ mns_scheduler-1.3.1.7.dist-info/METADATA,sha256=ec97a_pfibAR-7xAMxpL8hmH9V9I8k7UpvCFGuSpvYc,64
212
+ mns_scheduler-1.3.1.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
213
+ mns_scheduler-1.3.1.7.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
214
+ mns_scheduler-1.3.1.7.dist-info/RECORD,,