mns-common 1.3.9.9__py3-none-any.whl → 1.4.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.

Potentially problematic release.


This version of mns-common might be problematic. Click here for more details.

@@ -57,25 +57,25 @@ def stock_bid_ask_em(symbol: str = "000001") -> dict:
57
57
  temp_df = pd.DataFrame(tick_dict, index=[1])
58
58
  temp_df.reset_index(inplace=True)
59
59
  temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
60
- temp_df.loc[temp_df['sell_5'] == '-', 'sell_5_vol'] = 0
60
+ temp_df.loc[temp_df['sell_5_vol'] == '-', 'sell_5_vol'] = 0
61
61
  temp_df.loc[temp_df['sell_5'] == '-', 'sell_5'] = 0
62
- temp_df.loc[temp_df['sell_4'] == '-', 'sell_4_vol'] = 0
62
+ temp_df.loc[temp_df['sell_4_vol'] == '-', 'sell_4_vol'] = 0
63
63
  temp_df.loc[temp_df['sell_4'] == '-', 'sell_4'] = 0
64
- temp_df.loc[temp_df['sell_3'] == '-', 'sell_3_vol'] = 0
64
+ temp_df.loc[temp_df['sell_3_vol'] == '-', 'sell_3_vol'] = 0
65
65
  temp_df.loc[temp_df['sell_3'] == '-', 'sell_3'] = 0
66
- temp_df.loc[temp_df['sell_2'] == '-', 'sell_2_vol'] = 0
66
+ temp_df.loc[temp_df['sell_2_vol'] == '-', 'sell_2_vol'] = 0
67
67
  temp_df.loc[temp_df['sell_2'] == '-', 'sell_2'] = 0
68
- temp_df.loc[temp_df['sell_1'] == '-', 'sell_1_vol'] = 0
68
+ temp_df.loc[temp_df['sell_1_vol'] == '-', 'sell_1_vol'] = 0
69
69
  temp_df.loc[temp_df['sell_1'] == '-', 'sell_1'] = 0
70
- temp_df.loc[temp_df['buy_1'] == '-', 'buy_1_vol'] = 0
70
+ temp_df.loc[temp_df['buy_1_vol'] == '-', 'buy_1_vol'] = 0
71
71
  temp_df.loc[temp_df['buy_1'] == '-', 'buy_1'] = 0
72
- temp_df.loc[temp_df['buy_2'] == '-', 'buy_2_vol'] = 0
72
+ temp_df.loc[temp_df['buy_2_vol'] == '-', 'buy_2_vol'] = 0
73
73
  temp_df.loc[temp_df['buy_2'] == '-', 'buy_2'] = 0
74
- temp_df.loc[temp_df['buy_3'] == '-', 'buy_3_vol'] = 0
74
+ temp_df.loc[temp_df['buy_3_vol'] == '-', 'buy_3_vol'] = 0
75
75
  temp_df.loc[temp_df['buy_3'] == '-', 'buy_3'] = 0
76
- temp_df.loc[temp_df['buy_4'] == '-', 'buy_4_vol'] = 0
76
+ temp_df.loc[temp_df['buy_4_vol'] == '-', 'buy_4_vol'] = 0
77
77
  temp_df.loc[temp_df['buy_4'] == '-', 'buy_4'] = 0
78
- temp_df.loc[temp_df['buy_5'] == '-', 'buy_5_vol'] = 0
78
+ temp_df.loc[temp_df['buy_5_vol'] == '-', 'buy_5_vol'] = 0
79
79
  temp_df.loc[temp_df['buy_5'] == '-', 'buy_5'] = 0
80
80
  temp_df['symbol'] = symbol
81
81
  return temp_df
@@ -83,5 +83,5 @@ def stock_bid_ask_em(symbol: str = "000001") -> dict:
83
83
 
84
84
  if __name__ == '__main__':
85
85
  while True:
86
- df = stock_bid_ask_em('0.832110')
86
+ df = stock_bid_ask_em('0.000001')
87
87
  print(df)
@@ -5,7 +5,7 @@ file_path = os.path.abspath(__file__)
5
5
  end = file_path.index('mns') + 16
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
-
8
+ from mns_common.db.MongodbUtil import MongodbUtil
9
9
  import requests
10
10
  import json
11
11
  import pandas as pd
@@ -14,15 +14,20 @@ import datetime
14
14
  from loguru import logger
15
15
  import mns_common.utils.data_frame_util as data_frame_util
16
16
 
17
+ mongodb_util = MongodbUtil('27017')
18
+ fields = ("f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,"
19
+ "f18,f20,f21,f26,f33,f34,f35,f62,f66,f69,f72,f100,f184,f211,f212"),
20
+ fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
21
+
17
22
  # 最大返回条数
18
23
  max_number = 5800
19
24
  # 最小返回条数
20
25
  min_number = 5600
21
26
  # 分页条数
22
- page_number = 100
27
+ PAGE_SIZE = 100
23
28
 
24
29
 
25
- def get_stock_page_data(pn, fields, fs, proxies):
30
+ def get_stock_page_data(pn, proxies, page_size):
26
31
  """
27
32
  获取单页股票数据
28
33
  """
@@ -36,7 +41,7 @@ def get_stock_page_data(pn, fields, fs, proxies):
36
41
  params = {
37
42
  "cb": "jQuery1124046660442520420653_" + str(current_timestamp_ms),
38
43
  "pn": str(pn),
39
- "pz": "10000", # 每页最大200条
44
+ "pz": str(page_size), # 每页最大200条
40
45
  "po": "0",
41
46
  "np": "3",
42
47
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
@@ -79,18 +84,18 @@ def get_stock_page_data(pn, fields, fs, proxies):
79
84
  return pd.DataFrame()
80
85
 
81
86
 
82
- def all_stock_ticker_data_new(fields, fs, proxies) -> pd.DataFrame:
87
+ def all_stock_ticker_data_new(proxies) -> pd.DataFrame:
83
88
  """
84
89
  使用多线程获取所有股票数据
85
90
  """
86
91
 
87
- per_page = page_number
92
+ per_page = PAGE_SIZE
88
93
  total_pages = (max_number + per_page - 1) // per_page # 向上取整
89
94
 
90
95
  # 创建线程池
91
96
  with ThreadPoolExecutor(max_workers=10) as executor:
92
97
  # 提交任务,获取每页数据
93
- futures = [executor.submit(get_stock_page_data, pn, fields, fs, proxies)
98
+ futures = [executor.submit(get_stock_page_data, pn, proxies, PAGE_SIZE)
94
99
  for pn in range(1, total_pages + 1)]
95
100
 
96
101
  # 收集结果
@@ -108,21 +113,10 @@ def all_stock_ticker_data_new(fields, fs, proxies) -> pd.DataFrame:
108
113
 
109
114
 
110
115
  def get_real_time_quotes_all_stocks(proxies):
111
- fields = ("f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,"
112
- "f18,f20,f21,f26,f33,f34,f35,f62,f66,f69,f72,f100,f184,f211,f212"),
113
- fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
114
- # 获取第一页数据
115
- page_one_df = get_stock_page_data(1, fields, fs, proxies)
116
- # 数据接口正常返回5600以上的数量
117
- if page_one_df.shape[0] > min_number:
118
- page_one_df = rename_real_time_quotes_df(page_one_df)
119
- page_one_df.drop_duplicates('symbol', keep='last', inplace=True)
120
- return page_one_df
121
- else:
122
- page_df = all_stock_ticker_data_new(fields, fs, proxies)
123
- page_df = rename_real_time_quotes_df(page_df)
124
- page_df.drop_duplicates('symbol', keep='last', inplace=True)
125
- return page_df
116
+ page_df = all_stock_ticker_data_new(proxies)
117
+ page_df = rename_real_time_quotes_df(page_df)
118
+ page_df.drop_duplicates('symbol', keep='last', inplace=True)
119
+ return page_df
126
120
 
127
121
 
128
122
  # 获取所有股票实时行情数据 f33,委比
@@ -298,5 +292,12 @@ def get_sum_north_south_net_buy_amt():
298
292
  # 示例调用
299
293
  if __name__ == "__main__":
300
294
  while True:
301
- df = get_real_time_quotes_all_stocks(None)
302
- logger.info("涨停数据,{}", 1)
295
+ ip_proxy_pool = mongodb_util.find_all_data('ip_proxy_pool')
296
+ if data_frame_util.is_not_empty(ip_proxy_pool):
297
+ proxy_ip = list(ip_proxy_pool['ip'])[0]
298
+ proxy = {
299
+ "https": proxy_ip}
300
+ df = get_real_time_quotes_all_stocks(proxy)
301
+ logger.info("涨停数据,{}", 1)
302
+ else:
303
+ logger.error("ip为空")
@@ -288,9 +288,9 @@ def rename_real_time_quotes_df(temp_df):
288
288
 
289
289
  # 示例调用
290
290
  if __name__ == "__main__":
291
-
291
+ number = 1
292
292
  while True:
293
293
  df = get_all_real_time_quotes(None)
294
- print(df)
295
294
  zt_df = df.loc[df['wei_bi'] == 100]
296
- logger.info("涨停数据,{}", zt_df)
295
+ logger.info("同步次数,{}", number)
296
+ number = number + 1
@@ -115,7 +115,7 @@ if __name__ == '__main__':
115
115
  # 2021-10-25,45,0925,0955 2023-09-15,11,0925,1005
116
116
 
117
117
  # get_stock_quotes_his('2023-09-20', 11, '0925', '1005')
118
- df = sync_stock_his_quotes('2024-04-18', '0935', '0940')
118
+ df = sync_stock_his_quotes('2025-04-18', '0935', '0940')
119
119
  get_stock_count('2023-09-14', 0, '0925', '1500')
120
120
 
121
121
  his_test('2021-10-20')
@@ -16,6 +16,8 @@ import requests
16
16
  import time
17
17
  from loguru import logger
18
18
  from functools import lru_cache
19
+ import mns_common.api.em.real_time.east_money_stock_a_api as east_money_stock_a_api
20
+ import threading
19
21
 
20
22
  mongodb_util = MongodbUtil('27017')
21
23
 
@@ -69,21 +71,20 @@ def generate_proxy_ip(minutes):
69
71
  time_to_add = datetime.timedelta(minutes=minutes)
70
72
  new_date = now_date + time_to_add
71
73
  str_now_date = new_date.strftime('%Y-%m-%d %H:%M:%S')
72
-
73
74
  # 获取10分钟动态ip
74
75
  while True:
76
+ remove_proxy_ip()
75
77
  ip = generate_proxy_ip_api(minutes)
76
- if check_proxy(ip, timeout=2):
78
+ if check_proxy(ip):
79
+ result_dict = {"_id": ip,
80
+ 'effect_time': str_now_date,
81
+ 'ip': ip}
82
+ result_df = pd.DataFrame(result_dict, index=[1])
83
+
84
+ mongodb_util.insert_mongo(result_df, db_name_constant.IP_PROXY_POOL)
77
85
  break
78
86
  else:
79
87
  time.sleep(0.5)
80
- result_dict = {"_id": ip,
81
- 'effect_time': str_now_date,
82
- 'ip': ip}
83
- result_df = pd.DataFrame(result_dict, index=[1])
84
-
85
- mongodb_util.insert_mongo(result_df, db_name_constant.IP_PROXY_POOL)
86
-
87
88
  return ip
88
89
 
89
90
 
@@ -98,95 +99,58 @@ def get_proxy_ip(minutes):
98
99
  return generate_proxy_ip(minutes)
99
100
 
100
101
 
101
- def check_baidu_proxy(proxy_ip, timeout=2):
102
- """
103
- 检测代理IP是否能访问百度
104
- :param proxy_ip: 代理IP地址
105
- :param proxy_port: 代理端口
106
- :param timeout: 超时时间(秒)
107
- :return: (是否可用, 响应时间, 检测结果信息)
108
- """
109
- # 构造代理地址
110
-
111
- # 设置代理参数
112
- proxies = {
113
- "http": proxy_ip,
114
- "https": proxy_ip
115
- }
116
-
117
- # 模拟浏览器请求头
118
- headers = {
119
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
120
- "Accept-Language": "zh-CN,zh;q=0.9",
121
- "Connection": "keep-alive"
122
- }
123
-
102
+ def check_proxy(proxy_ip):
124
103
  try:
125
- # 记录开始时间
126
- start_time = time.time()
127
-
128
- # 发送请求到百度
129
- response = requests.get(
130
- url="https://www.baidu.com",
131
- proxies=proxies,
132
- headers=headers,
133
- timeout=timeout,
134
- allow_redirects=True # 允许重定向
135
- )
136
-
137
- # 计算响应时间
138
- response_time = round((time.time() - start_time) * 1000) # 毫秒
139
- # 检查响应状态和内容
140
- if response.status_code == 200:
141
- # 验证是否返回百度页面
142
- if "百度一下" in response.text and "baidu.com" in response.text:
143
- logger.info("代理ip可用:{},响应时间:{}", proxy_ip, response_time)
144
- return True
145
- else:
146
- logger.error("代理ip不可用:{},响应时间:{}", proxy_ip, response_time)
147
- return False
104
+ # 两秒超时
105
+ test_df = call_with_timeout(get_em_real_time_data, proxy_ip, timeout=2)
106
+ if data_frame_util.is_not_empty(test_df):
107
+ logger.info("可用代理ip:{}", proxy_ip)
108
+ return True
148
109
  else:
149
- logger.error("代理ip不可用:{},响应时间:{},HTTP状态码异常:{}", proxy_ip, response_time, response.status_code)
150
110
  return False
151
- except requests.exceptions.ConnectTimeout:
152
- logger.error("代理ip不可用:{},连接超时", proxy_ip, response_time)
153
- return False
154
- except requests.exceptions.ProxyError:
155
- logger.error("代理ip不可用:{},代理拒绝连接", proxy_ip, response_time)
156
- return False
157
- except requests.exceptions.SSLError:
158
- logger.error("代理ip不可用:{},SSL证书错误", proxy_ip, response_time)
159
- return False
160
- except requests.exceptions.RequestException as e:
161
- logger.error("代理ip不可用:{},网络错误:{}", proxy_ip, str(e))
111
+ except Exception as e:
112
+ logger.error("代理ip不可用:{},{}", proxy_ip, e)
162
113
  return False
163
114
 
164
115
 
165
- def check_proxy(proxy_ip, timeout=2):
116
+ def get_em_real_time_data(proxy_ip):
166
117
  proxies = {
167
118
  "http": proxy_ip,
168
119
  "https": proxy_ip
169
120
  }
170
- try:
171
- # 测试请求(httpbin.org 返回请求的IP)
172
- response = requests.get(
173
- "http://httpbin.org/ip",
174
- proxies=proxies,
175
- timeout=timeout # 超时时间
176
- )
177
- if response.status_code == 200:
178
- return True
179
- else:
180
- logger.error("代理ip不可用:{}", proxy_ip)
181
- return False
182
- except Exception as e:
183
- logger.error("代理ip不可用:{},{}", proxy_ip, e)
184
- return False
121
+ return east_money_stock_a_api.get_stock_page_data(1, proxies, 20)
122
+
123
+
124
+ # 定义一个带超时的函数调用
125
+ def call_with_timeout(func, *args, timeout=2, **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
185
153
 
186
154
 
187
155
  if __name__ == "__main__":
188
- target_ip = "112.28.228.67:35528" # Google DNS
189
- if check_proxy(target_ip, 2):
190
- print(f"{target_ip} 可以访问")
191
- else:
192
- print(f"{target_ip} 无法访问")
156
+ generate_proxy_ip(1)
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.3.9.9
3
+ Version: 1.4.0.1
4
4
 
@@ -2,7 +2,7 @@ mns_common/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
2
2
  mns_common/api/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
3
3
  mns_common/api/akshare/__init__.py,sha256=xu36nA6MJTauswUWPfKIKH0E-lpOAHTw2TL5QI_6TeY,165
4
4
  mns_common/api/akshare/k_line_api.py,sha256=q2rlBTdyc-8D75Bj6Zf5wvMBgSSJxDeKBxnio7Z91Bk,3762
5
- mns_common/api/akshare/stock_bid_ask_api.py,sha256=6V42fVfAau3kFD1p4V4O71afU7u5bUqi770mU6bu-m0,3984
5
+ mns_common/api/akshare/stock_bid_ask_api.py,sha256=oHGhCFpCWQB6MNWOUWX0CIO31FQkF55oRQQx1sFO14k,4024
6
6
  mns_common/api/akshare/stock_dt_pool.py,sha256=sKedOTzqsBZprJHJEr2sRYa8xbeSK7tRenqBE3wOdUc,2245
7
7
  mns_common/api/akshare/stock_zb_pool.py,sha256=ylcVgZTzsD3qz9WaItLtoqTf4t-Ex49MDtZUk0xaB5Q,2126
8
8
  mns_common/api/akshare/stock_zt_pool_api.py,sha256=_4PG_Wd88S4zweKNwZprwxaMMHBF4OQSB77DGW1l9UQ,1929
@@ -15,8 +15,8 @@ mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=hitzJuMwy5I
15
15
  mns_common/api/em/real_time/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
16
16
  mns_common/api/em/real_time/east_money_debt_api.py,sha256=jMvMZtlrDfExl_4jZ1hepHX8rUoeVLoLSOIhRBjkUGk,14753
17
17
  mns_common/api/em/real_time/east_money_etf_api.py,sha256=tCyH4fNx-KfVRFuNGkgM8d_xkvR0oAfr8T3e7_XrjTM,14414
18
- mns_common/api/em/real_time/east_money_stock_a_api.py,sha256=twwrpwk6bvLuYeZRdF6QUG8w8J1EWHIgEJF1yvj1CDw,12722
19
- mns_common/api/em/real_time/east_money_stock_a_v2_api.py,sha256=PXArsNK7IDQB1PoMMs97J6H5EtBgnZPEdUGhqk1VV4A,14505
18
+ mns_common/api/em/real_time/east_money_stock_a_api.py,sha256=Sn5Pnvi2rTXmKx4-Gz--XASJlAZ8ylniP4NQfXsKENE,12697
19
+ mns_common/api/em/real_time/east_money_stock_a_v2_api.py,sha256=mL4uuL6sVsC2Vnl09826AUnzxePGAUhlZ7I5BBFw8Ks,14530
20
20
  mns_common/api/em/real_time/east_money_stock_hk_api.py,sha256=KFIYUZ3N4ULrataeCIXwZPo775O7joKgMF466uwVDdY,15154
21
21
  mns_common/api/em/real_time/east_money_stock_us_api.py,sha256=RiTrdZDuDgTOtiMSD1Ba9aQAx4vghM66pEp_LicH3Ps,11632
22
22
  mns_common/api/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -39,7 +39,7 @@ mns_common/api/kpl/selection/kpl_selection_plate_api.py,sha256=M3bnczpEKhMyF5wNS
39
39
  mns_common/api/kpl/symbol/__init__.py,sha256=8b2PuXJM5fLoq71cWPXp695czQuaRtyR6OVHajGjDPc,161
40
40
  mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py,sha256=djxGi8IeQNtfFKMWyuOpuKSAmHTvWLrrJQJOrpdEJfw,4877
41
41
  mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py,sha256=EijxWFjOb18wO8WAp6w3EyKIvYKppWwVkml8esle29g,3495
42
- mns_common/api/kpl/symbol/symbol_his_quotes_api.py,sha256=r3n7U2F7MZUDZFQgnx-JI4sb8MiRTIwVeh21iehbFwE,4210
42
+ mns_common/api/kpl/symbol/symbol_his_quotes_api.py,sha256=5F9L8V2UI_YUYe2dO6FbVKq43fAjjFooXII0mjnxefM,4210
43
43
  mns_common/api/msg/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
44
44
  mns_common/api/msg/push_msg_api.py,sha256=z8jDqFWygfxnCFFfQp4K-llgg27nRLv7Mx72lOddBH0,1390
45
45
  mns_common/api/proxies/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -113,7 +113,7 @@ mns_common/component/k_line/patterns/pattern_Enum.py,sha256=bl8cH1H3BWdj_deVO124
113
113
  mns_common/component/price/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
114
114
  mns_common/component/price/trade_price_service_api.py,sha256=0loBjbOt__o-ngc2Q4n5lF8_0x2WINRpL-cH1341Uaw,4396
115
115
  mns_common/component/proxies/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
116
- mns_common/component/proxies/proxy_common_api.py,sha256=wNyqGFo1KnInY5E4bk83CQoXP0K3vQDDs5rPRTM-O7U,6221
116
+ mns_common/component/proxies/proxy_common_api.py,sha256=N2VaiEQ15KycjSNmCHAguR1xiASZzJu1y24NhFCr7BA,4663
117
117
  mns_common/component/qmt/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
118
118
  mns_common/component/qmt/qmt_buy_service.py,sha256=tLTgrSxCcxuMhADRBBrW4ZWR_3MdbMZvvMdH5hbwyJU,7190
119
119
  mns_common/component/real_time/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -152,7 +152,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
152
152
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
153
153
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
154
154
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
155
- mns_common-1.3.9.9.dist-info/METADATA,sha256=4kf1Xk0G1IQfxzQd2nWHhhOgjlyYLQnl0EwPzlpH0Nc,61
156
- mns_common-1.3.9.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
157
- mns_common-1.3.9.9.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
158
- mns_common-1.3.9.9.dist-info/RECORD,,
155
+ mns_common-1.4.0.1.dist-info/METADATA,sha256=fA7f2r7ufHEM5SrWEhoHSr7Kmkh032OxY3b8Me7vbl0,61
156
+ mns_common-1.4.0.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
157
+ mns_common-1.4.0.1.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
158
+ mns_common-1.4.0.1.dist-info/RECORD,,