webull-openapi-python-sdk 2.0.12__py3-none-any.whl → 2.0.14__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.
- samples/__init__.py +1 -1
- samples/data/data_client.py +5 -0
- samples/trade/activities_client.py +59 -0
- webull/__init__.py +1 -1
- webull/core/__init__.py +1 -1
- webull/core/auth/composer/default_signature_composer.py +1 -4
- webull/core/utils/common.py +5 -18
- webull/data/__init__.py +1 -1
- webull/data/quotes/instrument.py +43 -0
- webull/data/quotes/subscribe/basic_result.py +2 -2
- webull/data/request/get_option_contracts_request.py +82 -0
- webull/trade/__init__.py +1 -1
- webull/trade/request/get_activities_request.py +39 -0
- webull/trade/trade/activity.py +49 -0
- webull/trade/trade_client.py +2 -0
- webull/trade/trade_events_client.py +1 -4
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/METADATA +6 -4
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/RECORD +22 -18
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/WHEEL +1 -1
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/licenses/LICENSE +0 -0
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/licenses/NOTICE +0 -0
- {webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/top_level.txt +0 -0
samples/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.0.
|
|
1
|
+
__version__ = '2.0.14'
|
samples/data/data_client.py
CHANGED
|
@@ -265,6 +265,11 @@ if __name__ == '__main__':
|
|
|
265
265
|
if res.status_code == 200:
|
|
266
266
|
print('get_forecast_eps:', res.json())
|
|
267
267
|
|
|
268
|
+
# Option Instrument - Query option contracts by underlying symbol and filters
|
|
269
|
+
res = data_client.instrument.get_option_contracts(Category.US_OPTION.name,"AAPL")
|
|
270
|
+
if res.status_code == 200:
|
|
271
|
+
print('get_option_contracts:', res.json())
|
|
272
|
+
|
|
268
273
|
# Screener - Market Sectors
|
|
269
274
|
res = data_client.screener.get_market_sectors(Category.US_STOCK.name)
|
|
270
275
|
if res.status_code == 200:
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Copyright 2022 Webull
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# coding=utf-8
|
|
16
|
+
|
|
17
|
+
from webull.core.client import ApiClient
|
|
18
|
+
from webull.trade.trade_client import TradeClient
|
|
19
|
+
|
|
20
|
+
optional_api_endpoint = "<api_endpoint>"
|
|
21
|
+
your_app_key = "<your_app_key>"
|
|
22
|
+
your_app_secret = "<your_app_secret>"
|
|
23
|
+
region_id = "<region_id>"
|
|
24
|
+
account_id = "<your_account_id>"
|
|
25
|
+
|
|
26
|
+
api_client = ApiClient(your_app_key, your_app_secret, region_id)
|
|
27
|
+
api_client.add_endpoint(region_id, optional_api_endpoint)
|
|
28
|
+
|
|
29
|
+
if __name__ == '__main__':
|
|
30
|
+
trade_client = TradeClient(api_client)
|
|
31
|
+
|
|
32
|
+
# Query cash activities with default parameters
|
|
33
|
+
res = trade_client.activity.get_activities(account_id)
|
|
34
|
+
if res.status_code == 200:
|
|
35
|
+
print('get activities:', res.json())
|
|
36
|
+
|
|
37
|
+
# Query cash activities with activity type filter
|
|
38
|
+
res = trade_client.activity.get_activities(account_id, activity_types="TRADE,DEPOSIT")
|
|
39
|
+
if res.status_code == 200:
|
|
40
|
+
print('get activities by type:', res.json())
|
|
41
|
+
|
|
42
|
+
# Query cash activities with time range filter
|
|
43
|
+
res = trade_client.activity.get_activities(
|
|
44
|
+
account_id,
|
|
45
|
+
start_time="2026-06-30T12:00:00.000Z",
|
|
46
|
+
end_time="2026-07-03T12:00:00.000Z",
|
|
47
|
+
page_size=20
|
|
48
|
+
)
|
|
49
|
+
if res.status_code == 200:
|
|
50
|
+
print('get activities by time range:', res.json())
|
|
51
|
+
|
|
52
|
+
# Query cash activities with cursor-based pagination
|
|
53
|
+
res = trade_client.activity.get_activities(
|
|
54
|
+
account_id,
|
|
55
|
+
last_activity_id="<last_activity_id_from_previous_page>",
|
|
56
|
+
page_size=10
|
|
57
|
+
)
|
|
58
|
+
if res.status_code == 200:
|
|
59
|
+
print('get activities next page:', res.json())
|
webull/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.0.
|
|
1
|
+
__version__ = '2.0.14'
|
webull/core/__init__.py
CHANGED
|
@@ -59,10 +59,7 @@ def _refresh_sign_headers(host, headers, app_key_id, signer_spec):
|
|
|
59
59
|
sign_headers[hd.APP_KEY] = app_key_id
|
|
60
60
|
sign_headers[hd.TIMESTAMP] = common.get_iso_8601_date()
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
signer_spec = sha_hmac256_new
|
|
64
|
-
else:
|
|
65
|
-
signer_spec = sha_hmac1
|
|
62
|
+
signer_spec = sha_hmac256_new
|
|
66
63
|
|
|
67
64
|
sign_headers[hd.SIGN_VERSION] = signer_spec.get_signer_version()
|
|
68
65
|
sign_headers[hd.SIGN_ALGORITHM] = signer_spec.get_signer_name()
|
webull/core/utils/common.py
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import base64
|
|
17
17
|
import hashlib
|
|
18
18
|
import socket
|
|
19
|
-
from datetime import datetime
|
|
19
|
+
from datetime import datetime, timezone
|
|
20
20
|
import uuid
|
|
21
21
|
import json
|
|
22
22
|
from webull.core.compat import ensure_bytes, ensure_string
|
|
@@ -33,21 +33,21 @@ def get_uuid():
|
|
|
33
33
|
def get_iso_8601_date(dt_as_utc=None):
|
|
34
34
|
if dt_as_utc:
|
|
35
35
|
return dt_as_utc.strftime(FORMAT_ISO_8601)
|
|
36
|
-
d = datetime.
|
|
36
|
+
d = datetime.now(timezone.utc)
|
|
37
37
|
return d.strftime(FORMAT_ISO_8601)
|
|
38
38
|
|
|
39
39
|
def get_iso_8601_date_with_millis(dt_as_utc=None):
|
|
40
40
|
if dt_as_utc:
|
|
41
41
|
d = dt_as_utc
|
|
42
42
|
else:
|
|
43
|
-
d = datetime.
|
|
43
|
+
d = datetime.now(timezone.utc)
|
|
44
44
|
ret = d.strftime(FORMAT_ISO_8601_MILLIS)
|
|
45
45
|
if len(ret) != 27:
|
|
46
46
|
raise RuntimeError("failed to convent timestamp, result: %s" % ret)
|
|
47
47
|
return ret[:-4] + ret[-1:]
|
|
48
48
|
|
|
49
49
|
def parse_timestamp_to_dt(timestamp_of_millis):
|
|
50
|
-
return datetime.
|
|
50
|
+
return datetime.fromtimestamp(timestamp_of_millis / 1000.0, tz=timezone.utc).replace(tzinfo=None)
|
|
51
51
|
|
|
52
52
|
def md5_sum(content):
|
|
53
53
|
content_bytes = ensure_bytes(content)
|
|
@@ -63,17 +63,4 @@ def sha256_hex(content):
|
|
|
63
63
|
return hashlib.sha256(content_bytes).hexdigest()
|
|
64
64
|
|
|
65
65
|
def json_dumps_compact(content):
|
|
66
|
-
return json.dumps(content, ensure_ascii=False, separators=(',', ':'))
|
|
67
|
-
|
|
68
|
-
def is_not_upgrade_api_host(host):
|
|
69
|
-
upgrade_hosts = {
|
|
70
|
-
"api.webull.com","events-api.webull.com",
|
|
71
|
-
"api.webull.hk","events-api.webull.hk",
|
|
72
|
-
"pre-openapi-us-alb.webullbroker.com","pre-openapi-us-events.webullbroker.com",
|
|
73
|
-
"pre-openapi-alb.webullbroker.com","pre-openapi-events.webullbroker.com",
|
|
74
|
-
"us-openapi-alb.uat.webullbroker.com","us-openapi-events.uat.webullbroker.com",
|
|
75
|
-
"hk-openapi.uat.webullbroker.com", "hk-openapi-events-api.uat.webullbroker.com",
|
|
76
|
-
"api.sandbox.webull.hk", "events-api.sandbox.webull.hk"
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
return host not in upgrade_hosts
|
|
66
|
+
return json.dumps(content, ensure_ascii=False, separators=(',', ':'))
|
webull/data/__init__.py
CHANGED
webull/data/quotes/instrument.py
CHANGED
|
@@ -25,6 +25,7 @@ from webull.data.request.get_futures_instruments_request import GetFuturesInstru
|
|
|
25
25
|
from webull.data.request.get_futures_products_request import GetFuturesProductsRequest
|
|
26
26
|
from webull.data.request.get_futures_instruments_by_code_request import GetFuturesInstrumentsByCodeRequest
|
|
27
27
|
from webull.data.request.get_futures_product_class import GetFuturesProductClassRequest
|
|
28
|
+
from webull.data.request.get_option_contracts_request import GetOptionContractsRequest
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class Instrument:
|
|
@@ -218,6 +219,48 @@ class Instrument:
|
|
|
218
219
|
response = self.client.get_response(event_instrument_request)
|
|
219
220
|
return response
|
|
220
221
|
|
|
222
|
+
def get_option_contracts(self, category=Category.US_OPTION.name, underlying_symbols=None, status=None,
|
|
223
|
+
start_date=None, end_date=None, root_symbol=None, option_symbol=None,
|
|
224
|
+
option_type=None, style=None, strike_price_gte=None, strike_price_lte=None,
|
|
225
|
+
ppind=None, show_deliverables=None, page_size=10, last_instrument_id=None):
|
|
226
|
+
"""
|
|
227
|
+
Query option contracts list by conditions such as underlying_symbols, status, expiration date, etc.
|
|
228
|
+
|
|
229
|
+
:param category: Market category. Value: US_OPTION.
|
|
230
|
+
:param underlying_symbols: Underlying symbol(s), comma-separated for multiple, e.g. AAPL,MSFT.
|
|
231
|
+
:param status: Contract status: LISTING (default), DELISTING.
|
|
232
|
+
:param start_date: Exact expiration date, format YYYY-MM-DD.
|
|
233
|
+
:param end_date: Expiration date lower bound (inclusive), format YYYY-MM-DD.
|
|
234
|
+
:param root_symbol: Root symbol filter (series symbol, e.g. SPXW), mainly for index options and non-standard contracts after CA.
|
|
235
|
+
:param option_symbol: Option symbol, e.g. AAPL250620C00150000.
|
|
236
|
+
:param option_type: Contract type: CALL / PUT.
|
|
237
|
+
:param style: Exercise style: AMERICAN / EUROPEAN.
|
|
238
|
+
:param strike_price_gte: Strike price lower bound (inclusive).
|
|
239
|
+
:param strike_price_lte: Strike price upper bound (inclusive).
|
|
240
|
+
:param ppind: Penny Program Indicator: true = Penny Pilot, false = non-Penny Pilot.
|
|
241
|
+
:param show_deliverables: Whether to return deliverables array in response: true / false, default false.
|
|
242
|
+
:param page_size: Page size, default 10, max 1000.
|
|
243
|
+
:param last_instrument_id: Last instrument_id from previous page for pagination.
|
|
244
|
+
"""
|
|
245
|
+
request = GetOptionContractsRequest()
|
|
246
|
+
request.set_category(category)
|
|
247
|
+
request.set_underlying_symbols(underlying_symbols)
|
|
248
|
+
request.set_status(status)
|
|
249
|
+
request.set_start_date(start_date)
|
|
250
|
+
request.set_end_date(end_date)
|
|
251
|
+
request.set_root_symbol(root_symbol)
|
|
252
|
+
request.set_option_symbol(option_symbol)
|
|
253
|
+
request.set_option_type(option_type)
|
|
254
|
+
request.set_style(style)
|
|
255
|
+
request.set_strike_price_gte(strike_price_gte)
|
|
256
|
+
request.set_strike_price_lte(strike_price_lte)
|
|
257
|
+
request.set_ppind(ppind)
|
|
258
|
+
request.set_show_deliverables(show_deliverables)
|
|
259
|
+
request.set_page_size(page_size)
|
|
260
|
+
request.set_last_instrument_id(last_instrument_id)
|
|
261
|
+
response = self.client.get_response(request)
|
|
262
|
+
return response
|
|
263
|
+
|
|
221
264
|
def get_company_profile(self, symbol, category=Category.US_STOCK.name):
|
|
222
265
|
"""
|
|
223
266
|
Get company profile for one instrument.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
# coding=utf-8
|
|
16
|
-
from datetime import datetime
|
|
16
|
+
from datetime import datetime, timezone
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class BasicResult:
|
|
@@ -33,7 +33,7 @@ class BasicResult:
|
|
|
33
33
|
return self.timestamp
|
|
34
34
|
|
|
35
35
|
def get_timestamp_as_utc(self):
|
|
36
|
-
return datetime.
|
|
36
|
+
return datetime.fromtimestamp(self.timestamp / 1000.0, tz=timezone.utc).replace(tzinfo=None)
|
|
37
37
|
|
|
38
38
|
def get_trading_session(self):
|
|
39
39
|
return self.trading_session
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Copyright 2022 Webull
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# coding=utf-8
|
|
16
|
+
|
|
17
|
+
from webull.core.request import ApiRequest
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class GetOptionContractsRequest(ApiRequest):
|
|
21
|
+
def __init__(self):
|
|
22
|
+
ApiRequest.__init__(self, "/openapi/instrument/option/contracts", version="v2", method="GET",
|
|
23
|
+
query_params={})
|
|
24
|
+
|
|
25
|
+
def set_category(self, category):
|
|
26
|
+
self.add_query_param("category", category)
|
|
27
|
+
|
|
28
|
+
def set_underlying_symbols(self, underlying_symbols):
|
|
29
|
+
if underlying_symbols:
|
|
30
|
+
self.add_query_param("underlying_symbols", underlying_symbols)
|
|
31
|
+
|
|
32
|
+
def set_status(self, status):
|
|
33
|
+
if status:
|
|
34
|
+
self.add_query_param("status", status)
|
|
35
|
+
|
|
36
|
+
def set_start_date(self, start_date):
|
|
37
|
+
if start_date:
|
|
38
|
+
self.add_query_param("start_date", start_date)
|
|
39
|
+
|
|
40
|
+
def set_end_date(self, end_date):
|
|
41
|
+
if end_date:
|
|
42
|
+
self.add_query_param("end_date", end_date)
|
|
43
|
+
|
|
44
|
+
def set_root_symbol(self, root_symbol):
|
|
45
|
+
if root_symbol:
|
|
46
|
+
self.add_query_param("root_symbol", root_symbol)
|
|
47
|
+
|
|
48
|
+
def set_option_symbol(self, option_symbol):
|
|
49
|
+
if option_symbol:
|
|
50
|
+
self.add_query_param("option_symbol", option_symbol)
|
|
51
|
+
|
|
52
|
+
def set_option_type(self, option_type):
|
|
53
|
+
if option_type:
|
|
54
|
+
self.add_query_param("option_type", option_type)
|
|
55
|
+
|
|
56
|
+
def set_style(self, style):
|
|
57
|
+
if style:
|
|
58
|
+
self.add_query_param("style", style)
|
|
59
|
+
|
|
60
|
+
def set_strike_price_gte(self, strike_price_gte):
|
|
61
|
+
if strike_price_gte is not None:
|
|
62
|
+
self.add_query_param("strike_price_gte", strike_price_gte)
|
|
63
|
+
|
|
64
|
+
def set_strike_price_lte(self, strike_price_lte):
|
|
65
|
+
if strike_price_lte is not None:
|
|
66
|
+
self.add_query_param("strike_price_lte", strike_price_lte)
|
|
67
|
+
|
|
68
|
+
def set_ppind(self, ppind):
|
|
69
|
+
if ppind is not None:
|
|
70
|
+
self.add_query_param("ppind", ppind)
|
|
71
|
+
|
|
72
|
+
def set_show_deliverables(self, show_deliverables):
|
|
73
|
+
if show_deliverables is not None:
|
|
74
|
+
self.add_query_param("show_deliverables", show_deliverables)
|
|
75
|
+
|
|
76
|
+
def set_page_size(self, page_size):
|
|
77
|
+
if page_size:
|
|
78
|
+
self.add_query_param("page_size", page_size)
|
|
79
|
+
|
|
80
|
+
def set_last_instrument_id(self, last_instrument_id):
|
|
81
|
+
if last_instrument_id:
|
|
82
|
+
self.add_query_param("last_instrument_id", last_instrument_id)
|
webull/trade/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.0.
|
|
1
|
+
__version__ = '2.0.14'
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright 2022 Webull
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# coding=utf-8
|
|
16
|
+
from webull.core.request import ApiRequest
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class GetActivitiesRequest(ApiRequest):
|
|
20
|
+
def __init__(self):
|
|
21
|
+
ApiRequest.__init__(self, "/openapi/trade/activities/cash", version='v2', method="GET", query_params={})
|
|
22
|
+
|
|
23
|
+
def set_account_id(self, account_id):
|
|
24
|
+
self.add_query_param("account_id", account_id)
|
|
25
|
+
|
|
26
|
+
def set_activity_types(self, activity_types):
|
|
27
|
+
self.add_query_param("activity_types", activity_types)
|
|
28
|
+
|
|
29
|
+
def set_start_time(self, start_time):
|
|
30
|
+
self.add_query_param("start_time", start_time)
|
|
31
|
+
|
|
32
|
+
def set_end_time(self, end_time):
|
|
33
|
+
self.add_query_param("end_time", end_time)
|
|
34
|
+
|
|
35
|
+
def set_last_activity_id(self, last_activity_id):
|
|
36
|
+
self.add_query_param("last_activity_id", last_activity_id)
|
|
37
|
+
|
|
38
|
+
def set_page_size(self, page_size):
|
|
39
|
+
self.add_query_param("page_size", page_size)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Copyright 2022 Webull
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# coding=utf-8
|
|
16
|
+
|
|
17
|
+
from webull.trade.request.get_activities_request import GetActivitiesRequest
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Activity:
|
|
21
|
+
def __init__(self, api_client):
|
|
22
|
+
self.client = api_client
|
|
23
|
+
|
|
24
|
+
def get_activities(self, account_id, activity_types=None, start_time=None, end_time=None,
|
|
25
|
+
last_activity_id=None, page_size=10):
|
|
26
|
+
"""
|
|
27
|
+
Query cash activities by type with pagination support.
|
|
28
|
+
This interface is currently supported only for Webull US.
|
|
29
|
+
|
|
30
|
+
:param account_id: Account ID
|
|
31
|
+
:param activity_types: Activity types filter, comma-separated string (optional)
|
|
32
|
+
:param start_time: Start time filter (optional)
|
|
33
|
+
:param end_time: End time filter (optional)
|
|
34
|
+
:param last_activity_id: The last activity ID of the previous page for cursor-based pagination (optional)
|
|
35
|
+
:param page_size: Number of entries per page, default value is 10
|
|
36
|
+
"""
|
|
37
|
+
get_activities_request = GetActivitiesRequest()
|
|
38
|
+
get_activities_request.set_account_id(account_id)
|
|
39
|
+
if activity_types is not None:
|
|
40
|
+
get_activities_request.set_activity_types(activity_types)
|
|
41
|
+
if start_time is not None:
|
|
42
|
+
get_activities_request.set_start_time(start_time)
|
|
43
|
+
if end_time is not None:
|
|
44
|
+
get_activities_request.set_end_time(end_time)
|
|
45
|
+
if last_activity_id is not None:
|
|
46
|
+
get_activities_request.set_last_activity_id(last_activity_id)
|
|
47
|
+
get_activities_request.set_page_size(page_size)
|
|
48
|
+
response = self.client.get_response(get_activities_request)
|
|
49
|
+
return response
|
webull/trade/trade_client.py
CHANGED
|
@@ -16,6 +16,7 @@ import sys
|
|
|
16
16
|
|
|
17
17
|
from webull.core.http.initializer.client_initializer import ClientInitializer
|
|
18
18
|
from webull.trade.trade.account_info import Account
|
|
19
|
+
from webull.trade.trade.activity import Activity
|
|
19
20
|
from webull.trade.trade.order_operation import OrderOperation
|
|
20
21
|
from webull.trade.trade.trade_calendar import TradeCalendar
|
|
21
22
|
from webull.trade.trade.trade_instrument import TradeInstrument
|
|
@@ -33,6 +34,7 @@ class TradeClient:
|
|
|
33
34
|
self.order = OrderOperation(api_client)
|
|
34
35
|
self.order_v2 = OrderOperationV2(api_client)
|
|
35
36
|
self.order_v3 = OrderOperationV3(api_client)
|
|
37
|
+
self.activity = Activity(api_client)
|
|
36
38
|
self.trade_instrument = TradeInstrument(api_client)
|
|
37
39
|
self.trade_calendar = TradeCalendar(api_client)
|
|
38
40
|
|
|
@@ -80,10 +80,7 @@ class TradeEventsClient():
|
|
|
80
80
|
timestamp=int(time.time() * 1000), # millis
|
|
81
81
|
accounts=accounts,
|
|
82
82
|
)
|
|
83
|
-
|
|
84
|
-
signer_spec = sha_hmac256_new
|
|
85
|
-
else:
|
|
86
|
-
signer_spec = sha_hmac1
|
|
83
|
+
signer_spec = sha_hmac256_new
|
|
87
84
|
|
|
88
85
|
signature, metadata = calc_signature(app_key, app_secret, request, signer_spec)
|
|
89
86
|
|
{webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/METADATA
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webull-openapi-python-sdk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.14
|
|
4
4
|
Summary: Webull Python SDK.
|
|
5
5
|
Home-page:
|
|
6
6
|
Author: Webull
|
|
7
7
|
Author-email:
|
|
8
8
|
License: Apache License 2.0
|
|
9
9
|
Platform: any
|
|
10
|
-
Requires-Python: >=3.8,<3.
|
|
10
|
+
Requires-Python: >=3.8,<3.15
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
License-File: NOTICE
|
|
@@ -18,11 +18,13 @@ Requires-Dist: urllib3>=2.0
|
|
|
18
18
|
Requires-Dist: requests>=2.31.0
|
|
19
19
|
Requires-Dist: six>=1.16.0
|
|
20
20
|
Requires-Dist: cryptography<42,>=3.4; python_version < "3.12"
|
|
21
|
-
Requires-Dist: cryptography<43,>=41.0; python_version >= "3.12"
|
|
21
|
+
Requires-Dist: cryptography<43,>=41.0; python_version >= "3.12" and python_version < "3.14"
|
|
22
|
+
Requires-Dist: cryptography<55,>=43.0; python_version >= "3.14"
|
|
22
23
|
Requires-Dist: protobuf<5,>=4.21.12; python_version < "3.12"
|
|
23
24
|
Requires-Dist: protobuf<6,>=4.25.0; python_version >= "3.12"
|
|
24
25
|
Requires-Dist: grpcio<1.60,>=1.51.1; python_version < "3.12"
|
|
25
|
-
Requires-Dist: grpcio<1.70,>=1.60.0; python_version >= "3.12"
|
|
26
|
+
Requires-Dist: grpcio<1.70,>=1.60.0; python_version >= "3.12" and python_version < "3.14"
|
|
27
|
+
Requires-Dist: grpcio<2,>=1.75.1; python_version >= "3.14"
|
|
26
28
|
Dynamic: author
|
|
27
29
|
Dynamic: description-content-type
|
|
28
30
|
Dynamic: license
|
{webull_openapi_python_sdk-2.0.12.dist-info → webull_openapi_python_sdk-2.0.14.dist-info}/RECORD
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
samples/__init__.py,sha256=
|
|
1
|
+
samples/__init__.py,sha256=92nzuacHbIyTc-ygrBL4ngIbhD576OrpBsJbV54K9Oo,23
|
|
2
2
|
samples/account/__init__.py,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
|
|
3
3
|
samples/account/account_client.py,sha256=vwh-nI_JnjwcIeOr1sQPMzG8pAqZwliUusE49ZmYE3s,1796
|
|
4
4
|
samples/assets/__init__.py,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
|
|
5
5
|
samples/assets/assets_client.py,sha256=p9LS2Td3gbUMkHn4LD_9RMCFuaQRUbsKvG4PhZBGJDc,1974
|
|
6
6
|
samples/data/__init__.py,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
|
|
7
|
-
samples/data/data_client.py,sha256=
|
|
7
|
+
samples/data/data_client.py,sha256=6NLHqfXyxIIE6lLAAqU7wT-GaKAgw4h2-UdbIlKeyug,12662
|
|
8
8
|
samples/data/data_client_event.py,sha256=u6Bebo2hTE0Ri1bQHa8nhFEe-fBbdxfNwLpTZh3E1WY,3046
|
|
9
9
|
samples/data/data_streaming_client.py,sha256=2da21SE_Mneo7zbM_l1rkpdBBbI4avrpnSPMxsZIalw,4085
|
|
10
10
|
samples/data/data_streaming_client_async.py,sha256=o_u1ch8JdbcYnLCvDCCUzO-Z1IG7BUKncu_GB_kCbOs,4443
|
|
@@ -15,6 +15,7 @@ samples/order/order_stock_client.py,sha256=hYwVwVFVERk-YS7gRcW-LuGfAvcF8VJHZs1qw
|
|
|
15
15
|
samples/screener/__init__.py,sha256=68et0-FOloDo6Yo6vqmHPM45z-8zorzbhrZmUrLApEQ,583
|
|
16
16
|
samples/screener/screener_client.py,sha256=NGwjY7YaG_3l9c-QePpmpPG4Gtk_BZaM7-jQbMb2kzw,3636
|
|
17
17
|
samples/trade/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
samples/trade/activities_client.py,sha256=HOF0-T_-v9Am3Raob-iq2IM4PetfhQWbRw2rkMaufzk,2093
|
|
18
19
|
samples/trade/trade_client.py,sha256=LyWSvZJH4ByCkRORqP9WdkXfx65A2b6fhc9_GzL8DOM,6258
|
|
19
20
|
samples/trade/trade_client_v2.py,sha256=IO-zmRiUnCmIetTdiYunPh8jVK2VaPrOR77Dwvz1auY,10771
|
|
20
21
|
samples/trade/trade_client_v3.py,sha256=yAkVwWhZBGD929oMmlUj4GvJVWWZiV8PLlv_BeXbDZ8,32069
|
|
@@ -22,8 +23,8 @@ samples/trade/trade_client_v3_event.py,sha256=91HlT04KlK8Q5gUnsB8F5ErCFdJRnpDABK
|
|
|
22
23
|
samples/trade/trade_event_client.py,sha256=BWdD1L41LXmDlaig6ku9T3t3fSCCZEdj5nxH1xI1AZA,2653
|
|
23
24
|
samples/watchlist/__init__.py,sha256=rtV5s4_CJgDAT4DGEJa_pNLJU71Wdr5OLz_IQ1EajFQ,567
|
|
24
25
|
samples/watchlist/watchlist_client.py,sha256=lpzJs7SXuSka2KKkJ0u9s83A9iHta5qrjvIdkbfNcwg,3246
|
|
25
|
-
webull/__init__.py,sha256=
|
|
26
|
-
webull/core/__init__.py,sha256=
|
|
26
|
+
webull/__init__.py,sha256=92nzuacHbIyTc-ygrBL4ngIbhD576OrpBsJbV54K9Oo,23
|
|
27
|
+
webull/core/__init__.py,sha256=4Jw-K4t8I7P5uCwwllIWEaKZDbW2Lj9-ANueP5CwmVU,226
|
|
27
28
|
webull/core/client.py,sha256=zxSBiII9KDxc5tHpTerJfV_PKPt8E9e3oTOpiakAtJw,16758
|
|
28
29
|
webull/core/compat.py,sha256=_r6Y_f3vTo_DoxOaCvLjnvOo1KRkD2Z9kXSh8OijEIA,3088
|
|
29
30
|
webull/core/headers.py,sha256=Wj2zev1XYyYsy2b9YKnoK3GqjVsXZO_o2WziMmuVBTw,2061
|
|
@@ -35,7 +36,7 @@ webull/core/auth/algorithm/sha_hmac1.py,sha256=oYHpbwwOK2w9dtSnaOMwGLaw-opBwOxJW
|
|
|
35
36
|
webull/core/auth/algorithm/sha_hmac256.py,sha256=jkkWDQOYuJI6nrKVx89KnLI4sTAFi_zmxNc5bPGX0cw,2638
|
|
36
37
|
webull/core/auth/algorithm/sha_hmac256_new.py,sha256=t8s_YegLV5_qtLLp2CQHKY66OTu_eZyUbGjsHWuSpt8,2155
|
|
37
38
|
webull/core/auth/composer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
-
webull/core/auth/composer/default_signature_composer.py,sha256=
|
|
39
|
+
webull/core/auth/composer/default_signature_composer.py,sha256=4MfiW5tU24glGwMwp0VpICHwqMPnNAWDcjk11I7AJ7k,5232
|
|
39
40
|
webull/core/auth/signers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
41
|
webull/core/auth/signers/app_key_signer.py,sha256=ojdG3yFefU7olqnQbRElCuJf9VD7UqueFE39-IP_Bfk,2841
|
|
41
42
|
webull/core/auth/signers/signer.py,sha256=4fo94UqLcwUAYziAlCd9GAqNLM8PbLLVHChdjvcfvhY,1790
|
|
@@ -85,11 +86,11 @@ webull/core/retry/retry_condition.py,sha256=Hel380uhtcgmrK0NZiuY015vyBQWzM2dv4np
|
|
|
85
86
|
webull/core/retry/retry_policy.py,sha256=y1Kwc7lw1N4sgvR71AcUbsv8cYYLAJRdDMx7VWO6ubs,2549
|
|
86
87
|
webull/core/retry/retry_policy_context.py,sha256=rVAqF6NE6Aw-OUJY1TaxEhSLLCuYe8Kfs6Poqol0WOk,2036
|
|
87
88
|
webull/core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
webull/core/utils/common.py,sha256=
|
|
89
|
+
webull/core/utils/common.py,sha256=bb64grSP7PjaAIe8YYKDNzQ4qwgN7-qW0r24idTEqEY,2177
|
|
89
90
|
webull/core/utils/data.py,sha256=YUyoWY68_2RkKanh3jsDscgGx__FIPh5VNEGXr1Qotc,852
|
|
90
91
|
webull/core/utils/desensitize.py,sha256=f8_ps9BrG3WfXD8ZAw873-_YoGeke1Q55CeDwRmYkqA,1104
|
|
91
92
|
webull/core/utils/validation.py,sha256=gJcIrHYtgo48yVJ0q6O-f5buTYWOcr6ShhDIBhTp-Yg,1957
|
|
92
|
-
webull/data/__init__.py,sha256=
|
|
93
|
+
webull/data/__init__.py,sha256=vKHQlbmJ8E24re-NcknKChjADNdnkJ6eMoSbZcdhosY,39
|
|
93
94
|
webull/data/data_client.py,sha256=FzatKHXgu5xv-FKFaX-mFYdhLTdz7zpRUox9AGWrReQ,2429
|
|
94
95
|
webull/data/data_streaming_client.py,sha256=TQBAilvOLCbcMqacByrniXGr9VjSwjym-4-LUOiqKx8,4456
|
|
95
96
|
webull/data/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -116,7 +117,7 @@ webull/data/quotes/crypto_market_data.py,sha256=UQlxUz0GntvwcRS-Vh_h7cXbhQ045MqP
|
|
|
116
117
|
webull/data/quotes/event_market_data.py,sha256=lARSHqnVxRZZNOIi9uP-Rs5StMIUWtmwrw-p8droqtc,4650
|
|
117
118
|
webull/data/quotes/fundamentals.py,sha256=Dod6lcTwPDvyOjFQxDwW6GrIoDAknIGZOL1M9VRRdX4,14597
|
|
118
119
|
webull/data/quotes/futures_market_data.py,sha256=fc9giYNy1LcdLHOJV31zMbPBKtWDH8kBW5xRFgHzQUA,5596
|
|
119
|
-
webull/data/quotes/instrument.py,sha256=
|
|
120
|
+
webull/data/quotes/instrument.py,sha256=ZEm3PRIUOcDQQGjNGemwM1o0UceI_InRig0yxVhNmpw,15322
|
|
120
121
|
webull/data/quotes/market_data.py,sha256=L7f5V5tmG01lev9-IJU3w6up7EnX42WfI7GtW2mEcw8,14748
|
|
121
122
|
webull/data/quotes/market_streaming_data.py,sha256=cI9xxGpKV_KDS8cgh9azHifBji0yeSuKmH7Jxaqij38,3139
|
|
122
123
|
webull/data/quotes/option_market_data.py,sha256=4fW_GI3u1T-5dluhLRQ60Gbb2bsnhWkSrILYJq-96pw,3305
|
|
@@ -124,7 +125,7 @@ webull/data/quotes/screener.py,sha256=h73YyhW6jBkJH1NvDOceR5lePRXGgtiWrLKQwbn9pA
|
|
|
124
125
|
webull/data/quotes/watchlist.py,sha256=RkuPV7OwC6e4NEpeldTUNWEsYAqGQbVqyOHs9edMuhE,6344
|
|
125
126
|
webull/data/quotes/subscribe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
127
|
webull/data/quotes/subscribe/ask_bid_result.py,sha256=J6Ms_01a44IvzNcw9krwMM0CuA_-zh-5eBGqx2kQbv4,1759
|
|
127
|
-
webull/data/quotes/subscribe/basic_result.py,sha256=
|
|
128
|
+
webull/data/quotes/subscribe/basic_result.py,sha256=8aF4wiPiREjWkTyNCyxhCgSU8sPknJUerXHmLBHVBOs,1495
|
|
128
129
|
webull/data/quotes/subscribe/broker_result.py,sha256=E6pM0Ydr6tU_bPSOeyu1KJf7oYgbO-lIXLIdJQANH4I,1013
|
|
129
130
|
webull/data/quotes/subscribe/event_depth_decoder.py,sha256=-2mOw4o32HWO1a7MuB3hgFoST0ct96Z3PrBFzfCNMJs,1061
|
|
130
131
|
webull/data/quotes/subscribe/event_depth_result.py,sha256=30hUvNqQZNnwGNngmqPO3eFtCkJXd6OjjV8FadN7uXE,1510
|
|
@@ -193,6 +194,7 @@ webull/data/request/get_instruments_request.py,sha256=PmDXrv9hUTHNtwppjV6GMQqTcN
|
|
|
193
194
|
webull/data/request/get_noii_bars_request.py,sha256=_ubNykIQCCDg9cRgeR49FVloF21s2REWlp_KTnUlYEg,1845
|
|
194
195
|
webull/data/request/get_noii_snapshot_request.py,sha256=IQ2HrAyyO2GzC8HEsjz4S0Owc0Zk25d-1ULjTqThmZU,2057
|
|
195
196
|
webull/data/request/get_option_bars_request.py,sha256=ObE4blYHZ_OcKG8Cp6St7ujDTIFIZyBP4MGhx8k9X6k,2556
|
|
197
|
+
webull/data/request/get_option_contracts_request.py,sha256=MzsJ4IZirTgbK0DHS7IPkSgzQNYF4uj3UCD9BMV3Ekw,2847
|
|
196
198
|
webull/data/request/get_option_snapshot_request.py,sha256=XHmtHKN8fF6-rIWfstFr_bLFtgEIx-u61H6Y7WnOrlE,1816
|
|
197
199
|
webull/data/request/get_option_tick_request.py,sha256=MuSFYnM8m1UwOJ2NjzhOJYlWhbYDyiqPbNkKoPQUupI,1648
|
|
198
200
|
webull/data/request/get_quotes_request.py,sha256=g4J7lAQZBqoeM67Xm2E-Y2pwNxsqkrECf_r5DTTrS5M,1244
|
|
@@ -217,9 +219,9 @@ webull/data/request/watchlist/get_watchlist_request.py,sha256=XxzS4gxFbdQSajpFSm
|
|
|
217
219
|
webull/data/request/watchlist/remove_watchlist_instruments_request.py,sha256=qOtQYDBp-PSawAgljnLmtfUce8dAblWI_zB0nnIv3G0,1451
|
|
218
220
|
webull/data/request/watchlist/update_watchlist_instruments_request.py,sha256=KoihfB8MszsAooQGUUMjFmnid_a7xk4YSdEMDO1gh-k,1493
|
|
219
221
|
webull/data/request/watchlist/update_watchlist_request.py,sha256=0s3ftkxiz9hjtXhLORrIUphyDIldRA8pJ4mP5zfbsyU,1466
|
|
220
|
-
webull/trade/__init__.py,sha256=
|
|
221
|
-
webull/trade/trade_client.py,sha256=
|
|
222
|
-
webull/trade/trade_events_client.py,sha256=
|
|
222
|
+
webull/trade/__init__.py,sha256=yXt7m86Rgv2MKzdfINzGXI8KcFTyuejeVHNO6umzXGI,22
|
|
223
|
+
webull/trade/trade_client.py,sha256=ck8yRjm-aibv8LGOP0Gk5zg6bv4-bTVjULFpZlCAK2c,2278
|
|
224
|
+
webull/trade/trade_events_client.py,sha256=7JB8fY-Wx-GxkqijjQLle7KKWnpXFm4iw5upOgLx6us,9874
|
|
223
225
|
webull/trade/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
224
226
|
webull/trade/common/account_type.py,sha256=haVAB33MERN6XyPsbrfVQhK9_CpU90VltI6_KDkxzlE,715
|
|
225
227
|
webull/trade/common/category.py,sha256=lrSKMO11wMpw9iWWeefTdWXedJAFfWRlJ76swfqVP0c,947
|
|
@@ -249,6 +251,7 @@ webull/trade/request/cancel_order_request.py,sha256=JbyeVNOVu9xvwzba7Ntw2Sh4BrNV
|
|
|
249
251
|
webull/trade/request/get_account_balance_request.py,sha256=S9M1rz6HFlIwRpWfkQKVfRo996_DWF8Qe6bGirSnkV0,1042
|
|
250
252
|
webull/trade/request/get_account_positions_request.py,sha256=Nr7fyzsZfcCqQlyapu7KagZEagM60IG7PFU9Qempv9w,1117
|
|
251
253
|
webull/trade/request/get_account_profile_request.py,sha256=SgF-eDkL6XM3IC-I-Mqmi8lFrTPa0iM4CkTjkZwZx_U,899
|
|
254
|
+
webull/trade/request/get_activities_request.py,sha256=yp8ZiUM0mKyiIeBgBJHiokUSoF6zwAuqKdy0QnAtqa8,1421
|
|
252
255
|
webull/trade/request/get_app_subscriptions.py,sha256=ViITk9Tt164LceijAq0harcO_5eoTRyCDnFsvr-ZJ4Y,962
|
|
253
256
|
webull/trade/request/get_open_orders_request.py,sha256=USAN2LKVtJ0CK-lJlLQ8ihhM5M78du5rYoD2lMAV85g,1129
|
|
254
257
|
webull/trade/request/get_order_detail_request.py,sha256=X42LnDBBh1shJ5DFB31ukgS8u1l-JM-Z2kumJnbutfw,1008
|
|
@@ -291,6 +294,7 @@ webull/trade/request/v3/preview_order_request.py,sha256=ZgzwrlAed8IJ8ORDRjJ7rIuF
|
|
|
291
294
|
webull/trade/request/v3/replace_order_request.py,sha256=Xsa-vKGTMAwv-dJuSm8cx8rHVoFhk-cFjnHOpsUaZwM,1212
|
|
292
295
|
webull/trade/trade/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
293
296
|
webull/trade/trade/account_info.py,sha256=C3YcBDZfYOe5QSJEbysblye-W90RbQ7xNing5gLsIng,3622
|
|
297
|
+
webull/trade/trade/activity.py,sha256=pyvsJcMhyKoKdxurJPgXexsoUy6EefwKneqqSJpdA0U,2154
|
|
294
298
|
webull/trade/trade/order_operation.py,sha256=QrL4Da87RTOSupiAbuXtZigo9602Byp14DQGyR99hkI,12849
|
|
295
299
|
webull/trade/trade/trade_calendar.py,sha256=rGSiR5GZggQnZOmmpbC-06trgPQgFTvdpUzGMpw2ycw,1415
|
|
296
300
|
webull/trade/trade/trade_instrument.py,sha256=293IaiLnhw0mAc1IuF3LSgwgve_XZ1Dyf1VeFtmClc8,3474
|
|
@@ -299,9 +303,9 @@ webull/trade/trade/v2/account_info_v2.py,sha256=fs2-XaxklItuhaspzPkthXA5SgbnIffL
|
|
|
299
303
|
webull/trade/trade/v2/order_operation_v2.py,sha256=m54RH2j45CBBWEnqe4KxrsltAF44XKtPMT4kv8t7djQ,12745
|
|
300
304
|
webull/trade/trade/v3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
301
305
|
webull/trade/trade/v3/order_opration_v3.py,sha256=NsInXC5sPCW8y55jU71BnR0sQYhtWclqCmyK7V09MLc,8275
|
|
302
|
-
webull_openapi_python_sdk-2.0.
|
|
303
|
-
webull_openapi_python_sdk-2.0.
|
|
304
|
-
webull_openapi_python_sdk-2.0.
|
|
305
|
-
webull_openapi_python_sdk-2.0.
|
|
306
|
-
webull_openapi_python_sdk-2.0.
|
|
307
|
-
webull_openapi_python_sdk-2.0.
|
|
306
|
+
webull_openapi_python_sdk-2.0.14.dist-info/licenses/LICENSE,sha256=ALOnsLtb1aHxmDJg3-oMi0BO-i-cjfyZaOBfnnavKMc,11359
|
|
307
|
+
webull_openapi_python_sdk-2.0.14.dist-info/licenses/NOTICE,sha256=X5TApte6CPV10b96Cb70IRLusXmiRmK_R-dB-1tQM_I,2018
|
|
308
|
+
webull_openapi_python_sdk-2.0.14.dist-info/METADATA,sha256=qv19UdPYTjwI_LCmByM2XOquSVCRJQEKUm2zFA88WLk,1212
|
|
309
|
+
webull_openapi_python_sdk-2.0.14.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
310
|
+
webull_openapi_python_sdk-2.0.14.dist-info/top_level.txt,sha256=h8pEjNDGWS2ZUZ2vYFpUShoMQT0ZRIQaD57QJWD8_aI,15
|
|
311
|
+
webull_openapi_python_sdk-2.0.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|