webull-openapi-python-sdk 1.0.9__tar.gz → 2.0.0__tar.gz
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.
- webull_openapi_python_sdk-2.0.0/PKG-INFO +33 -0
- webull_openapi_python_sdk-2.0.0/samples/__init__.py +1 -0
- webull_openapi_python_sdk-2.0.0/samples/data/data_client_event.py +52 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/data/data_streaming_client.py +1 -3
- webull_openapi_python_sdk-2.0.0/samples/data/data_streaming_client_event.py +66 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/trade_client_v3.py +64 -1
- webull_openapi_python_sdk-2.0.0/samples/trade/trade_client_v3_event.py +102 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/trade_event_client.py +4 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/setup.py +24 -7
- webull_openapi_python_sdk-2.0.0/webull/__init__.py +1 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/__init__.py +1 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/composer/default_signature_composer.py +2 -2
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/signers/signer.py +1 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/client.py +4 -4
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/compat.py +1 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/response.py +2 -2
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/request.py +3 -5
- webull_openapi_python_sdk-2.0.0/webull/data/__init__.py +3 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/category.py +1 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/data_client.py +2 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/data_streaming_client.py +6 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/quotes_payload_decoder.py +1 -1
- webull_openapi_python_sdk-2.0.0/webull/data/quotes/event_market_data.py +50 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/instrument.py +43 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/ask_bid_result.py +9 -3
- webull_openapi_python_sdk-2.0.0/webull/data/quotes/subscribe/event_depth_decoder.py +27 -0
- webull_openapi_python_sdk-2.0.0/webull/data/quotes/subscribe/event_depth_result.py +46 -0
- webull_openapi_python_sdk-2.0.0/webull/data/quotes/subscribe/event_snapshot_decoder.py +29 -0
- webull_openapi_python_sdk-2.0.0/webull/data/quotes/subscribe/event_snapshot_result.py +85 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/message_pb2.py +25 -19
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/payload_type.py +3 -1
- webull_openapi_python_sdk-2.0.0/webull/data/request/get_event_depth_request.py +32 -0
- webull_openapi_python_sdk-2.0.0/webull/data/request/get_event_instrument_request.py +33 -0
- webull_openapi_python_sdk-2.0.0/webull/data/request/get_event_series_request.py +30 -0
- webull_openapi_python_sdk-2.0.0/webull/data/request/get_event_snapshot_request.py +31 -0
- webull_openapi_python_sdk-2.0.0/webull/trade/__init__.py +1 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/events/types.py +1 -1
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade_events_client.py +1 -1
- webull_openapi_python_sdk-2.0.0/webull_openapi_python_sdk.egg-info/PKG-INFO +33 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull_openapi_python_sdk.egg-info/SOURCES.txt +12 -105
- webull_openapi_python_sdk-2.0.0/webull_openapi_python_sdk.egg-info/requires.txt +16 -0
- webull_openapi_python_sdk-1.0.9/PKG-INFO +0 -28
- webull_openapi_python_sdk-1.0.9/samples/__init__.py +0 -1
- webull_openapi_python_sdk-1.0.9/webull/__init__.py +0 -1
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/__init__.py +0 -94
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/__version__.py +0 -28
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/_internal_utils.py +0 -56
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/adapters.py +0 -539
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/api.py +0 -166
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/auth.py +0 -307
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/certs.py +0 -34
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/compat.py +0 -85
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/cookies.py +0 -555
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/exceptions.py +0 -136
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/help.py +0 -134
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/hooks.py +0 -48
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/models.py +0 -960
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/__init__.py +0 -17
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/certifi/__init__.py +0 -17
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/certifi/__main__.py +0 -16
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/certifi/cacert.pem +0 -4433
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/certifi/core.py +0 -51
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/__init__.py +0 -53
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/big5freq.py +0 -400
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/big5prober.py +0 -61
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/chardistribution.py +0 -247
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/charsetgroupprober.py +0 -120
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/charsetprober.py +0 -159
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/cli/__init__.py +0 -1
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/cli/chardetect.py +0 -99
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/codingstatemachine.py +0 -102
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/compat.py +0 -48
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/cp949prober.py +0 -63
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/enums.py +0 -90
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/escprober.py +0 -115
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/escsm.py +0 -260
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/eucjpprober.py +0 -106
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/euckrfreq.py +0 -209
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/euckrprober.py +0 -61
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/euctwfreq.py +0 -401
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/euctwprober.py +0 -60
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/gb2312freq.py +0 -297
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/gb2312prober.py +0 -60
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/hebrewprober.py +0 -306
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/jisfreq.py +0 -339
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/jpcntx.py +0 -247
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langbulgarianmodel.py +0 -242
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langcyrillicmodel.py +0 -347
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langgreekmodel.py +0 -239
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langhebrewmodel.py +0 -214
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langhungarianmodel.py +0 -239
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langthaimodel.py +0 -213
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/langturkishmodel.py +0 -207
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/latin1prober.py +0 -159
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/mbcharsetprober.py +0 -105
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/mbcsgroupprober.py +0 -68
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/mbcssm.py +0 -586
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/sbcharsetprober.py +0 -146
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/sbcsgroupprober.py +0 -87
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/sjisprober.py +0 -106
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/universaldetector.py +0 -300
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/utf8prober.py +0 -96
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/chardet/version.py +0 -23
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/__init__.py +0 -114
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/_collections.py +0 -346
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/connection.py +0 -405
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/connectionpool.py +0 -910
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/_appengine_environ.py +0 -44
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/bindings.py +0 -607
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/low_level.py +0 -360
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/appengine.py +0 -303
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/ntlmpool.py +0 -125
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/pyopenssl.py +0 -484
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/securetransport.py +0 -818
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/socks.py +0 -206
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/exceptions.py +0 -260
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/fields.py +0 -192
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/filepost.py +0 -112
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/__init__.py +0 -19
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/backports/makefile.py +0 -67
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/ordered_dict.py +0 -273
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/six.py +0 -882
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/socks.py +0 -887
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +0 -19
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +0 -170
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/poolmanager.py +0 -467
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/request.py +0 -164
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/response.py +0 -721
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/__init__.py +0 -68
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/connection.py +0 -148
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/queue.py +0 -35
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/request.py +0 -132
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/response.py +0 -101
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/retry.py +0 -426
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/selectors.py +0 -601
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/ssl_.py +0 -396
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/timeout.py +0 -256
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/url.py +0 -252
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/util/wait.py +0 -164
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages.py +0 -28
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/sessions.py +0 -750
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/status_codes.py +0 -105
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/structures.py +0 -119
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/utils.py +0 -916
- webull_openapi_python_sdk-1.0.9/webull/core/vendored/six.py +0 -905
- webull_openapi_python_sdk-1.0.9/webull/data/__init__.py +0 -3
- webull_openapi_python_sdk-1.0.9/webull/trade/__init__.py +0 -1
- webull_openapi_python_sdk-1.0.9/webull/trade/request/v3/__init__.py +0 -0
- webull_openapi_python_sdk-1.0.9/webull/trade/trade/__init__.py +0 -0
- webull_openapi_python_sdk-1.0.9/webull/trade/trade/v2/__init__.py +0 -0
- webull_openapi_python_sdk-1.0.9/webull/trade/trade/v3/__init__.py +0 -0
- webull_openapi_python_sdk-1.0.9/webull_openapi_python_sdk.egg-info/PKG-INFO +0 -28
- webull_openapi_python_sdk-1.0.9/webull_openapi_python_sdk.egg-info/requires.txt +0 -7
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/ChangeLog.txt +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/LICENSE +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/MANIFEST.in +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/NOTICE +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/README.rst +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/account/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/account/account_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/assets/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/assets/assets_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/data/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/data/data_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/data/data_streaming_client_async.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/order/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/order/order_option_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/order/order_stock_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/trade_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/trade_client_v2.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/setup.cfg +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/algorithm/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/algorithm/sha_hmac1.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/algorithm/sha_hmac256.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/composer/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/credentials.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/signers/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/signers/app_key_signer.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/auth/signers/signer_factory.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/cache/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/common/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/common/api_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/common/easy_enum.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/common/region.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/context/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/context/request_context_holder.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/data/endpoints.json +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/data/retry_config.json +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/chained_endpoint_resolver.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/default_endpoint_resolver.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/local_config_regional_endpoint_resolver.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/resolver_endpoint_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/endpoint/user_customized_endpoint_resolver.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/exception/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/exception/error_code.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/exception/error_msg.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/exception/exceptions.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/headers.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/client_initializer.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/config/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/config/bean/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/config/bean/query_config_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/config/config_operation.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/bean/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/bean/access_token.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/bean/check_token_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/bean/create_token_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/bean/refresh_token_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/token_manager.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/token_operation.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/initializer/token/token_storage.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/method_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/protocol_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/retry/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/retry/backoff_strategy.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/retry/retry_condition.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/retry/retry_policy.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/retry/retry_policy_context.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/utils/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/utils/common.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/utils/data.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/utils/desensitize.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/utils/validation.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/core/vendored → webull_openapi_python_sdk-2.0.0/webull/data/common}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/connect_ack.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/contract_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/direction.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/exchange_code.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/exercise_style.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/expiration_cycle.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/instrument_status.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/option_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/subscribe_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/common/timespan.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib → webull_openapi_python_sdk-2.0.0/webull/data/internal}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/default_retry_policy.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/exceptions.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/quotes_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/quotes_decoder.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/internal/quotes_topic.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport → webull_openapi_python_sdk-2.0.0/webull/data/quotes}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/crypto_market_data.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/futures_market_data.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/market_data.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/market_streaming_data.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/core/vendored/requests/packages/urllib3/packages/backports → webull_openapi_python_sdk-2.0.0/webull/data/quotes/subscribe}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/basic_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/broker_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/order_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/quote_decoder.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/quote_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/snapshot_decoder.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/snapshot_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/tick_decoder.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/subscribe/tick_result.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/data/common → webull_openapi_python_sdk-2.0.0/webull/data/request}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_batch_historical_bars_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_corp_action_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_crypto_historical_bars_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_crypto_instruments_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_crypto_snapshot_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_eod_bars_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_footprint_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_depth_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_footprint_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_historical_bars_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_instruments_by_code_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_instruments_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_products_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_snapshot_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_futures_tick_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_historical_bars_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_instruments_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_quotes_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_snapshot_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/get_tick_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/subscribe_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/request/unsubscribe_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/data/internal → webull_openapi_python_sdk-2.0.0/webull/trade/common}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/account_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/category.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/combo_ticker_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/combo_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/currency.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/forbid_reason.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/instrument_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/markets.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/order_entrust_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/order_side.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/order_status.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/order_tif.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/order_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/trade_policy.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/trading_date_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/common/trailing_type.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/data/quotes → webull_openapi_python_sdk-2.0.0/webull/trade/events}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/events/default_retry_policy.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/events/events_pb2.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/events/events_pb2_grpc.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/events/signature_composer.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/data/quotes/subscribe → webull_openapi_python_sdk-2.0.0/webull/trade/request}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/cancel_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_account_balance_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_account_positions_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_account_profile_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_app_subscriptions.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_open_orders_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_order_detail_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_today_orders_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_trade_calendar_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_trade_instrument_detail_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_trade_security_detail_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/get_tradeable_instruments_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/palce_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/place_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/place_order_request_v2.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/replace_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/replace_order_request_v2.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/data/request → webull_openapi_python_sdk-2.0.0/webull/trade/request/v2}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/cancel_option_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/cancel_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_account_balance_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_account_list.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_account_list_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_account_positions_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_order_detail_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_order_history_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/get_order_open_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/palce_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/place_option_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/place_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/preview_option_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/preview_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/replace_option_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v2/replace_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/trade/common → webull_openapi_python_sdk-2.0.0/webull/trade/request/v3}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/batch_place_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/cancel_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/get_order_detail_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/get_order_history_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/get_order_open_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/place_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/preview_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/request/v3/replace_order_request.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/trade/events → webull_openapi_python_sdk-2.0.0/webull/trade/trade}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/account_info.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/order_operation.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/trade_calendar.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/trade_instrument.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/trade/request → webull_openapi_python_sdk-2.0.0/webull/trade/trade/v2}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/v2/account_info_v2.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/v2/order_operation_v2.py +0 -0
- {webull_openapi_python_sdk-1.0.9/webull/trade/request/v2 → webull_openapi_python_sdk-2.0.0/webull/trade/trade/v3}/__init__.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade/v3/order_opration_v3.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/trade/trade_client.py +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull_openapi_python_sdk.egg-info/dependency_links.txt +0 -0
- {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull_openapi_python_sdk.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: webull-openapi-python-sdk
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Webull Python SDK.
|
|
5
|
+
Home-page:
|
|
6
|
+
Author: Webull
|
|
7
|
+
Author-email:
|
|
8
|
+
License: Apache License 2.0
|
|
9
|
+
Platform: any
|
|
10
|
+
Requires-Python: >=3.8,<3.14
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
License-File: NOTICE
|
|
14
|
+
Requires-Dist: jmespath<1.0.0,>=0.9.3
|
|
15
|
+
Requires-Dist: cachetools<6,>=5.2.0
|
|
16
|
+
Requires-Dist: paho-mqtt<2,>=1.6.1
|
|
17
|
+
Requires-Dist: urllib3>=2.0
|
|
18
|
+
Requires-Dist: requests>=2.31.0
|
|
19
|
+
Requires-Dist: six>=1.16.0
|
|
20
|
+
Requires-Dist: cryptography<42,>=3.4; python_version < "3.12"
|
|
21
|
+
Requires-Dist: cryptography<43,>=41.0; python_version >= "3.12"
|
|
22
|
+
Requires-Dist: protobuf<5,>=4.21.12; python_version < "3.12"
|
|
23
|
+
Requires-Dist: protobuf<6,>=4.25.0; python_version >= "3.12"
|
|
24
|
+
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
|
+
Dynamic: author
|
|
27
|
+
Dynamic: description-content-type
|
|
28
|
+
Dynamic: license
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
Dynamic: platform
|
|
31
|
+
Dynamic: requires-dist
|
|
32
|
+
Dynamic: requires-python
|
|
33
|
+
Dynamic: summary
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.0.0'
|
|
@@ -0,0 +1,52 @@
|
|
|
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.data.common.category import Category
|
|
18
|
+
from webull.core.client import ApiClient
|
|
19
|
+
from webull.data.data_client import DataClient
|
|
20
|
+
|
|
21
|
+
optional_api_endpoint = "<api_endpoint>"
|
|
22
|
+
your_app_key = "<your_app_key>"
|
|
23
|
+
your_app_secret = "<your_app_secret>"
|
|
24
|
+
region_id = "<region_id>"
|
|
25
|
+
# The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
|
|
26
|
+
# Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
|
|
27
|
+
# If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
|
|
28
|
+
# token_dir = "<your_token_dir>"
|
|
29
|
+
# api_client.set_token_dir(token_dir)
|
|
30
|
+
|
|
31
|
+
api_client = ApiClient(your_app_key, your_app_secret, region_id)
|
|
32
|
+
api_client.add_endpoint(region_id, optional_api_endpoint)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == '__main__':
|
|
36
|
+
data_client = DataClient(api_client)
|
|
37
|
+
|
|
38
|
+
res = data_client.instrument.get_event_series("ECONOMICS")
|
|
39
|
+
if res.status_code == 200:
|
|
40
|
+
print('get_event_series:', res.json())
|
|
41
|
+
|
|
42
|
+
res = data_client.instrument.get_event_instrument("KXGDP")
|
|
43
|
+
if res.status_code == 200:
|
|
44
|
+
print('get_event_instrument:', res.json())
|
|
45
|
+
|
|
46
|
+
res = data_client.event_market_data.get_event_snapshot("KXRATECUTCOUNT-25DEC31-T10", Category.US_EVENT.name)
|
|
47
|
+
if res.status_code == 200:
|
|
48
|
+
print('get_event_snapshot:', res.json())
|
|
49
|
+
|
|
50
|
+
res = data_client.event_market_data.get_event_depth("KXRATECUTCOUNT-25DEC31-T10", Category.US_EVENT.name)
|
|
51
|
+
if res.status_code == 200:
|
|
52
|
+
print('get_event_depth:', res.json())
|
|
@@ -86,6 +86,4 @@ if __name__ == '__main__':
|
|
|
86
86
|
# data_streaming_client.register_payload_decoder(PAYLOAD_TYPE_TICK, TickDecoder())
|
|
87
87
|
|
|
88
88
|
# the sync mode, blocking in current thread
|
|
89
|
-
data_streaming_client.connect_and_loop_forever()
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
data_streaming_client.connect_and_loop_forever()
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
import logging
|
|
18
|
+
import uuid
|
|
19
|
+
from logging.handlers import TimedRotatingFileHandler
|
|
20
|
+
|
|
21
|
+
from webull.data.common.category import Category
|
|
22
|
+
from webull.data.common.subscribe_type import SubscribeType
|
|
23
|
+
from webull.data.data_streaming_client import DataStreamingClient
|
|
24
|
+
|
|
25
|
+
your_app_key = "</your_app_key>"
|
|
26
|
+
your_app_secret = "</your_app_secret>"
|
|
27
|
+
optional_api_endpoint = "</optional_quotes_endpoint>"
|
|
28
|
+
optional_quotes_endpoint = "</optional_quotes_endpoint>"
|
|
29
|
+
region_id = '<region_id>'
|
|
30
|
+
# The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
|
|
31
|
+
# Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
|
|
32
|
+
# If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
|
|
33
|
+
# token_dir = "<your_token_dir>"
|
|
34
|
+
# data_streaming_client.set_token_dir(token_dir)
|
|
35
|
+
|
|
36
|
+
session_id = uuid.uuid4().hex
|
|
37
|
+
data_streaming_client = DataStreamingClient(your_app_key, your_app_secret, region_id, session_id,
|
|
38
|
+
http_host=optional_api_endpoint,
|
|
39
|
+
mqtt_host=optional_quotes_endpoint)
|
|
40
|
+
|
|
41
|
+
if __name__ == '__main__':
|
|
42
|
+
def my_connect_success_func(client, api_client, quotes_session_id):
|
|
43
|
+
print("connect success with session_id:%s" % quotes_session_id)
|
|
44
|
+
# subscribe
|
|
45
|
+
symbols = ['KXNHLGAME-26JAN21ANACOL-ANA', 'KXNBAGAME-26JAN20LACCHI-LAC']
|
|
46
|
+
sub_types = [SubscribeType.QUOTE.name, SubscribeType.SNAPSHOT.name]
|
|
47
|
+
client.subscribe(symbols, Category.US_EVENT.name, sub_types)
|
|
48
|
+
|
|
49
|
+
def my_quotes_message_func(client, topic, quotes):
|
|
50
|
+
print("receive message: topic:%s, quotes:%s" % (topic, quotes))
|
|
51
|
+
|
|
52
|
+
def my_subscribe_success_func(client, api_client, quotes_session_id):
|
|
53
|
+
print("subscribe success with session_id:%s" % quotes_session_id)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# set connect success callback func
|
|
57
|
+
data_streaming_client.on_connect_success = my_connect_success_func
|
|
58
|
+
# set quotes receiving callback func
|
|
59
|
+
data_streaming_client.on_quotes_message = my_quotes_message_func
|
|
60
|
+
# set subscribe success callback func
|
|
61
|
+
data_streaming_client.on_subscribe_success = my_subscribe_success_func
|
|
62
|
+
|
|
63
|
+
# the sync mode, blocking in current thread
|
|
64
|
+
data_streaming_client.connect_and_loop_forever()
|
|
65
|
+
|
|
66
|
+
|
{webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/samples/trade/trade_client_v3.py
RENAMED
|
@@ -454,4 +454,67 @@ if __name__ == '__main__':
|
|
|
454
454
|
# get futures order history
|
|
455
455
|
res = trade_client.order_v3.get_order_history(account_id, page_size=10)
|
|
456
456
|
if res.status_code == 200:
|
|
457
|
-
print('get order history res:', res.json())
|
|
457
|
+
print('get order history res:', res.json())
|
|
458
|
+
|
|
459
|
+
# ============================================================
|
|
460
|
+
# Algo Order Example
|
|
461
|
+
# ============================================================
|
|
462
|
+
alog_client_order_id = uuid.uuid4().hex
|
|
463
|
+
print('client order id:', alog_client_order_id)
|
|
464
|
+
new_normal_equity_orders = [
|
|
465
|
+
{
|
|
466
|
+
"combo_type": "NORMAL",
|
|
467
|
+
"client_order_id": alog_client_order_id,
|
|
468
|
+
"symbol": "AAPL",
|
|
469
|
+
"instrument_type": "EQUITY",
|
|
470
|
+
"market": "US",
|
|
471
|
+
"order_type": "LIMIT",
|
|
472
|
+
"limit_price": "188",
|
|
473
|
+
"quantity": "1",
|
|
474
|
+
"support_trading_session": "N",
|
|
475
|
+
"side": "BUY",
|
|
476
|
+
"time_in_force": "DAY",
|
|
477
|
+
"entrust_type": "QTY",
|
|
478
|
+
"algo_start_time": "16:00:00",
|
|
479
|
+
"algo_end_time": "23:00:00",
|
|
480
|
+
"target_vol_percent": "10",
|
|
481
|
+
"algo_type": "POV"
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
|
|
485
|
+
res = trade_client.order_v3.preview_order(account_id, new_normal_equity_orders)
|
|
486
|
+
if res.status_code == 200:
|
|
487
|
+
print('preview algo order res:', res.json())
|
|
488
|
+
|
|
489
|
+
res = trade_client.order_v3.place_order(account_id, new_normal_equity_orders)
|
|
490
|
+
if res.status_code == 200:
|
|
491
|
+
print('place algo order res:', res.json())
|
|
492
|
+
sleep(3)
|
|
493
|
+
|
|
494
|
+
replace_normal_equity_orders = [
|
|
495
|
+
{
|
|
496
|
+
"client_order_id": alog_client_order_id,
|
|
497
|
+
"quantity": "100",
|
|
498
|
+
"limit_price": "200"
|
|
499
|
+
}
|
|
500
|
+
]
|
|
501
|
+
res = trade_client.order_v3.replace_order(account_id, replace_normal_equity_orders)
|
|
502
|
+
if res.status_code == 200:
|
|
503
|
+
print('replace algo order res:', res.json())
|
|
504
|
+
sleep(3)
|
|
505
|
+
|
|
506
|
+
res = trade_client.order_v3.cancel_order(account_id, alog_client_order_id)
|
|
507
|
+
if res.status_code == 200:
|
|
508
|
+
print('cancel algo order res:', res.json())
|
|
509
|
+
|
|
510
|
+
res = trade_client.order_v3.get_order_open(account_id=account_id)
|
|
511
|
+
if res.status_code == 200:
|
|
512
|
+
print("order_open_res=" + json.dumps(res.json(), indent=4))
|
|
513
|
+
|
|
514
|
+
res = trade_client.order_v3.get_order_history(account_id)
|
|
515
|
+
if res.status_code == 200:
|
|
516
|
+
print('get order history res:', res.json())
|
|
517
|
+
|
|
518
|
+
res = trade_client.order_v3.get_order_detail(account_id, alog_client_order_id)
|
|
519
|
+
if res.status_code == 200:
|
|
520
|
+
print('get order detail res:', res.json())
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
import json
|
|
16
|
+
import uuid
|
|
17
|
+
from time import sleep
|
|
18
|
+
|
|
19
|
+
from webull.core.client import ApiClient
|
|
20
|
+
from webull.trade.trade_client import TradeClient
|
|
21
|
+
|
|
22
|
+
optional_api_endpoint = "<api_endpoint>"
|
|
23
|
+
your_app_key = "<your_app_key>"
|
|
24
|
+
your_app_secret = "<your_app_secret>"
|
|
25
|
+
region_id = "<region_id>"
|
|
26
|
+
account_id = "<your_account_id>"
|
|
27
|
+
# The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
|
|
28
|
+
# Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
|
|
29
|
+
# If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
|
|
30
|
+
# token_dir = "<your_token_dir>"
|
|
31
|
+
# api_client.set_token_dir(token_dir)
|
|
32
|
+
|
|
33
|
+
api_client = ApiClient(your_app_key, your_app_secret, region_id)
|
|
34
|
+
api_client.add_endpoint(region_id, optional_api_endpoint)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == '__main__':
|
|
38
|
+
trade_client = TradeClient(api_client)
|
|
39
|
+
|
|
40
|
+
res = trade_client.account_v2.get_account_list()
|
|
41
|
+
if res.status_code == 200:
|
|
42
|
+
print('get account list:', res.json())
|
|
43
|
+
|
|
44
|
+
res = trade_client.account_v2.get_account_balance(account_id)
|
|
45
|
+
if res.status_code == 200:
|
|
46
|
+
print('get account balance res:', res.json())
|
|
47
|
+
|
|
48
|
+
res = trade_client.account_v2.get_account_position(account_id)
|
|
49
|
+
if res.status_code == 200:
|
|
50
|
+
print('get account position res:', res.json())
|
|
51
|
+
|
|
52
|
+
# normal event order
|
|
53
|
+
normal_event_client_order_id = uuid.uuid4().hex
|
|
54
|
+
print('event client order id:', normal_event_client_order_id)
|
|
55
|
+
new_normal_event_orders = [
|
|
56
|
+
{
|
|
57
|
+
"combo_type": "NORMAL",
|
|
58
|
+
"client_order_id": normal_event_client_order_id,
|
|
59
|
+
"instrument_type": "EVENT",
|
|
60
|
+
"market": "US",
|
|
61
|
+
"symbol": "KXRATECUTCOUNT-25DEC31-T9",
|
|
62
|
+
"order_type": "LIMIT",
|
|
63
|
+
"entrust_type": "QTY",
|
|
64
|
+
"time_in_force": "DAY",
|
|
65
|
+
"side": "BUY",
|
|
66
|
+
"quantity": "1",
|
|
67
|
+
"limit_price": "0.1",
|
|
68
|
+
"event_outcome": "yes"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
res = trade_client.order_v3.preview_order(account_id, new_normal_event_orders)
|
|
73
|
+
if res.status_code == 200:
|
|
74
|
+
print('preview normal event order res:', res.json())
|
|
75
|
+
|
|
76
|
+
res = trade_client.order_v3.place_order(account_id, new_normal_event_orders)
|
|
77
|
+
if res.status_code == 200:
|
|
78
|
+
print('place normal event order res:', res.json())
|
|
79
|
+
sleep(3)
|
|
80
|
+
|
|
81
|
+
# normal event order replace
|
|
82
|
+
replace_normal_event_orders = [
|
|
83
|
+
{
|
|
84
|
+
"client_order_id": normal_event_client_order_id,
|
|
85
|
+
"quantity": "10",
|
|
86
|
+
"limit_price": "0.1"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
res = trade_client.order_v3.replace_order(account_id, replace_normal_event_orders)
|
|
90
|
+
if res.status_code == 200:
|
|
91
|
+
print('replace normal event order res:', res.json())
|
|
92
|
+
sleep(3)
|
|
93
|
+
|
|
94
|
+
# normal event order cancel
|
|
95
|
+
res = trade_client.order_v3.cancel_order(account_id, normal_event_client_order_id)
|
|
96
|
+
if res.status_code == 200:
|
|
97
|
+
print('cancel normal event order res:', res.json())
|
|
98
|
+
|
|
99
|
+
# get event order detail
|
|
100
|
+
res = trade_client.order_v3.get_order_detail(account_id, normal_event_client_order_id)
|
|
101
|
+
if res.status_code == 200:
|
|
102
|
+
print('get event order detail res:', res.json())
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
import logging
|
|
16
16
|
|
|
17
|
-
from webull.trade.events.types import ORDER_STATUS_CHANGED, EVENT_TYPE_ORDER
|
|
17
|
+
from webull.trade.events.types import ORDER_STATUS_CHANGED, EVENT_TYPE_ORDER, EVENT_TYPE_POSITION, \
|
|
18
|
+
POSITION_STATUS_CHANGED
|
|
18
19
|
from webull.trade.trade_events_client import TradeEventsClient
|
|
19
20
|
|
|
20
21
|
your_app_key = "<your_app_key>"
|
|
@@ -32,6 +33,8 @@ def my_on_events_message(event_type, subscribe_type, payload, raw_message):
|
|
|
32
33
|
if EVENT_TYPE_ORDER == event_type and ORDER_STATUS_CHANGED == subscribe_type:
|
|
33
34
|
print('----request_id:%s----' % payload['request_id'])
|
|
34
35
|
print(payload)
|
|
36
|
+
if EVENT_TYPE_POSITION == event_type and POSITION_STATUS_CHANGED == subscribe_type:
|
|
37
|
+
print('event payload:%s' % payload)
|
|
35
38
|
|
|
36
39
|
if __name__ == '__main__':
|
|
37
40
|
|
|
@@ -16,16 +16,33 @@ with open("README.rst") as fp:
|
|
|
16
16
|
|
|
17
17
|
requires = [
|
|
18
18
|
"jmespath>=0.9.3,<1.0.0",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
19
|
+
"cachetools>=5.2.0,<6",
|
|
20
|
+
"paho-mqtt>=1.6.1,<2",
|
|
21
|
+
"urllib3>=2.0",
|
|
22
|
+
"requests>=2.31.0",
|
|
23
|
+
"six>=1.16.0",
|
|
24
|
+
|
|
25
|
+
# cryptography
|
|
26
|
+
"cryptography>=3.4,<42; python_version<'3.12'",
|
|
27
|
+
"cryptography>=41.0,<43; python_version>='3.12'",
|
|
28
|
+
|
|
29
|
+
# protobuf
|
|
30
|
+
"protobuf>=4.21.12,<5; python_version<'3.12'",
|
|
31
|
+
"protobuf>=4.25.0,<6; python_version>='3.12'",
|
|
32
|
+
|
|
33
|
+
# grpc
|
|
34
|
+
"grpcio>=1.51.1,<1.60; python_version<'3.12'",
|
|
35
|
+
"grpcio>=1.60.0,<1.70; python_version>='3.12'"
|
|
25
36
|
]
|
|
26
37
|
|
|
38
|
+
extras_require = {
|
|
39
|
+
"dev": [
|
|
40
|
+
"grpcio-tools>=1.60,<1.70",
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
|
|
27
44
|
setup_args = {
|
|
28
|
-
'python_requires':'>=3.8,<3.
|
|
45
|
+
'python_requires':'>=3.8,<3.14',
|
|
29
46
|
'version': VERSION,
|
|
30
47
|
'author': AUTHOR,
|
|
31
48
|
'author_email': AUTHOR_EMAIL,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.0.0'
|
|
@@ -42,8 +42,8 @@ from webull.core.exception import error_code
|
|
|
42
42
|
from webull.core.exception.exceptions import ClientException
|
|
43
43
|
from webull.core.utils import common
|
|
44
44
|
import webull.core.headers as hd
|
|
45
|
-
from
|
|
46
|
-
from
|
|
45
|
+
from six import iteritems
|
|
46
|
+
from six.moves.urllib.parse import quote
|
|
47
47
|
import logging
|
|
48
48
|
logger = logging.getLogger(__name__)
|
|
49
49
|
|
|
@@ -61,9 +61,9 @@ from webull.core.request import BaseRequest
|
|
|
61
61
|
from webull.core.retry.retry_condition import RetryCondition
|
|
62
62
|
from webull.core.retry.retry_policy_context import RetryPolicyContext
|
|
63
63
|
from webull.core.utils import common, validation
|
|
64
|
-
from
|
|
65
|
-
from
|
|
66
|
-
from
|
|
64
|
+
from requests import codes
|
|
65
|
+
from requests.structures import CaseInsensitiveDict
|
|
66
|
+
from requests.structures import OrderedDict
|
|
67
67
|
|
|
68
68
|
DEFAULT_READ_TIMEOUT = 10
|
|
69
69
|
DEFAULT_CONNECTION_TIMEOUT = 5
|
|
@@ -187,7 +187,7 @@ class ApiClient:
|
|
|
187
187
|
default_agent['Python'] = platform.python_version()
|
|
188
188
|
default_agent['Core'] = __import__('webull.core').__version__
|
|
189
189
|
default_agent['python-requests'] = __import__(
|
|
190
|
-
'
|
|
190
|
+
'requests.__version__', globals(), locals(),
|
|
191
191
|
['vendored', 'requests', '__version__'], 0).__version__
|
|
192
192
|
|
|
193
193
|
return CaseInsensitiveDict(default_agent)
|
{webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/core/http/response.py
RENAMED
|
@@ -41,10 +41,10 @@ which was part of Alibaba Group.
|
|
|
41
41
|
|
|
42
42
|
import os
|
|
43
43
|
import logging
|
|
44
|
-
from
|
|
44
|
+
from requests import Request, Session
|
|
45
45
|
from webull.core.http.request import Request as HttpRequest
|
|
46
46
|
from webull.core.http import protocol_type as PT
|
|
47
|
-
from
|
|
47
|
+
from requests import status_codes
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
logger = logging.getLogger(__name__)
|
|
@@ -41,13 +41,11 @@ which was part of Alibaba Group.
|
|
|
41
41
|
|
|
42
42
|
import abc
|
|
43
43
|
from webull.core.auth.algorithm import sha_hmac1
|
|
44
|
-
from
|
|
45
|
-
from webull.core.vendored.six import iteritems
|
|
46
|
-
from webull.core.vendored.six import add_metaclass
|
|
44
|
+
from six import add_metaclass
|
|
47
45
|
from webull.core.http import protocol_type
|
|
48
46
|
from webull.core.exception import exceptions, error_code
|
|
49
|
-
from
|
|
50
|
-
from
|
|
47
|
+
from requests.structures import CaseInsensitiveDict
|
|
48
|
+
from six.moves.urllib.parse import urlencode
|
|
51
49
|
from webull.core.auth.composer import default_signature_composer as sc
|
|
52
50
|
import webull.core.headers as hd
|
|
53
51
|
|
{webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/data_client.py
RENAMED
|
@@ -19,6 +19,7 @@ import sys
|
|
|
19
19
|
|
|
20
20
|
from webull.core.http.initializer.client_initializer import ClientInitializer
|
|
21
21
|
from webull.data.quotes.crypto_market_data import CryptoMarketData
|
|
22
|
+
from webull.data.quotes.event_market_data import EventMarketData
|
|
22
23
|
from webull.data.quotes.futures_market_data import FuturesMarketData
|
|
23
24
|
from webull.data.quotes.instrument import Instrument
|
|
24
25
|
from webull.data.quotes.market_data import MarketData
|
|
@@ -32,6 +33,7 @@ class DataClient:
|
|
|
32
33
|
self.market_data = MarketData(api_client)
|
|
33
34
|
self.crypto_market_data = CryptoMarketData(api_client)
|
|
34
35
|
self.futures_market_data = FuturesMarketData(api_client)
|
|
36
|
+
self.event_market_data = EventMarketData(api_client)
|
|
35
37
|
|
|
36
38
|
def _init_logger(self, api_client):
|
|
37
39
|
# No logger configured, using default console and local file logging.
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
from webull.data.internal.quotes_client import QuotesClient, LOG_ERR
|
|
18
18
|
from webull.data.quotes.market_streaming_data import MarketDataStreaming
|
|
19
|
-
from webull.data.quotes.subscribe.
|
|
19
|
+
from webull.data.quotes.subscribe.event_depth_decoder import EventDepthDecoder
|
|
20
|
+
from webull.data.quotes.subscribe.event_snapshot_decoder import EventSnapshotDecoder
|
|
21
|
+
from webull.data.quotes.subscribe.payload_type import PAYLOAD_TYPE_QUOTE, PAYLOAD_TYPE_SHAPSHOT, PAYLOAD_TYPE_TICK, \
|
|
22
|
+
PAYLOAD_TYPE_EVENT_SHAPSHOT, PAYLOAD_TYPE_EVENT_DEPTH
|
|
20
23
|
from webull.data.quotes.subscribe.quote_decoder import QuoteDecoder
|
|
21
24
|
from webull.data.quotes.subscribe.snapshot_decoder import SnapshotDecoder
|
|
22
25
|
from webull.data.quotes.subscribe.tick_decoder import TickDecoder
|
|
@@ -39,6 +42,8 @@ class DataStreamingClient(QuotesClient):
|
|
|
39
42
|
self.register_payload_decoder(PAYLOAD_TYPE_QUOTE, QuoteDecoder())
|
|
40
43
|
self.register_payload_decoder(PAYLOAD_TYPE_SHAPSHOT, SnapshotDecoder())
|
|
41
44
|
self.register_payload_decoder(PAYLOAD_TYPE_TICK, TickDecoder())
|
|
45
|
+
self.register_payload_decoder(PAYLOAD_TYPE_EVENT_DEPTH, EventDepthDecoder())
|
|
46
|
+
self.register_payload_decoder(PAYLOAD_TYPE_EVENT_SHAPSHOT, EventSnapshotDecoder())
|
|
42
47
|
|
|
43
48
|
@property
|
|
44
49
|
def on_connect_success(self):
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
from webull.data.common.category import Category
|
|
15
|
+
from webull.data.request.get_event_depth_request import GetEventDepthRequest
|
|
16
|
+
from webull.data.request.get_event_snapshot_request import GetEventSnapshotRequest
|
|
17
|
+
|
|
18
|
+
class EventMarketData:
|
|
19
|
+
def __init__(self, api_client):
|
|
20
|
+
self.client = api_client
|
|
21
|
+
|
|
22
|
+
def get_event_snapshot(self, symbols, category=Category.US_EVENT.name):
|
|
23
|
+
"""
|
|
24
|
+
Get real-time market snapshot data for a event instrument. Price unit is based on usd_cent.
|
|
25
|
+
|
|
26
|
+
:param symbols: Symbol of the event market, supports JSON array format, multiple symbols separated by commas; maximum 100 symbols per query.
|
|
27
|
+
:param category: default is US_EVENT, currently only US_EVENT is supported.
|
|
28
|
+
"""
|
|
29
|
+
snapshot_request = GetEventSnapshotRequest()
|
|
30
|
+
snapshot_request.set_symbols(symbols)
|
|
31
|
+
snapshot_request.set_category(category)
|
|
32
|
+
response = self.client.get_response(snapshot_request)
|
|
33
|
+
return response
|
|
34
|
+
|
|
35
|
+
def get_event_depth(self, symbol, category=Category.US_EVENT.name, depth=10):
|
|
36
|
+
"""
|
|
37
|
+
Get the current order book for a specific event instrument.
|
|
38
|
+
The order book shows all active bid orders for both yes and no sides of a binary market.
|
|
39
|
+
It returns yes bids and no bids only (no asks are returned). Price unit is based on usd_cent.
|
|
40
|
+
|
|
41
|
+
:param symbol:Symbol of the event market.
|
|
42
|
+
:param category: default is US_EVENT, currently only US_EVENT is supported.
|
|
43
|
+
:param depth: Depth of buying and selling orders, default 10 levels, etc.
|
|
44
|
+
"""
|
|
45
|
+
quote_request = GetEventDepthRequest()
|
|
46
|
+
quote_request.set_symbol(symbol)
|
|
47
|
+
quote_request.set_category(category)
|
|
48
|
+
quote_request.set_depth(depth)
|
|
49
|
+
response = self.client.get_response(quote_request)
|
|
50
|
+
return response
|
{webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-2.0.0}/webull/data/quotes/instrument.py
RENAMED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from webull.data.common.category import Category
|
|
15
|
+
from webull.data.request.get_event_instrument_request import GetEventInstrumentRequest
|
|
16
|
+
from webull.data.request.get_event_series_request import GetEventSeriesRequest
|
|
15
17
|
from webull.data.request.get_instruments_request import GetInstrumentsRequest
|
|
16
18
|
from webull.data.request.get_crypto_instruments_request import GetCryptoInstrumentsRequest
|
|
17
19
|
from webull.data.request.get_futures_instruments_request import GetFuturesInstrumentsRequest
|
|
@@ -108,3 +110,44 @@ class Instrument:
|
|
|
108
110
|
futures_instrument_request.set_contract_type(contract_type)
|
|
109
111
|
response = self.client.get_response(futures_instrument_request)
|
|
110
112
|
return response
|
|
113
|
+
|
|
114
|
+
def get_event_series(self, category, last_instrument_id=None, page_size=500):
|
|
115
|
+
"""
|
|
116
|
+
Retrieve multiple series with specified filters.
|
|
117
|
+
A series represents a template for recurring events that follow the same format and rules (e.g., “Monthly Jobs Report” ).
|
|
118
|
+
This endpoint allows you to browse and discover available series templates by category.
|
|
119
|
+
|
|
120
|
+
:param category: The category which this series belongs to.Allowed values:
|
|
121
|
+
ECONOMICS, FINANCIALS, POLITICS, ENTERTAINMENT, SCIENCE_TECHNOLOGY,
|
|
122
|
+
CLIMATE_WEATHER, TRANSPORTATION, CRYPTO, SPORTS
|
|
123
|
+
:param last_instrument_id: Last series id for pagination.
|
|
124
|
+
:param page_size: Page size, default 500.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
event_series_request = GetEventSeriesRequest()
|
|
128
|
+
event_series_request.set_category(category)
|
|
129
|
+
if last_instrument_id:
|
|
130
|
+
event_series_request.set_last_instrument_id(last_instrument_id)
|
|
131
|
+
event_series_request.set_page_size(page_size)
|
|
132
|
+
response = self.client.get_response(event_series_request)
|
|
133
|
+
return response
|
|
134
|
+
|
|
135
|
+
def get_event_instrument(self, series_symbol, expiration_date_after=None, last_instrument_id=None, page_size=500):
|
|
136
|
+
"""
|
|
137
|
+
Retrieve profile information for event contract markets based on the series symbol.
|
|
138
|
+
|
|
139
|
+
:param series_symbol: Symbol that identifies this series.
|
|
140
|
+
:param expiration_date_after: Used to filter items whose expiration date is later than a specified date; the default selection is the current day (inclusive).
|
|
141
|
+
:param last_instrument_id: Last series id for pagination.
|
|
142
|
+
:param page_size: Page size, default 500.
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
event_instrument_request = GetEventInstrumentRequest()
|
|
146
|
+
event_instrument_request.set_series_symbol(series_symbol)
|
|
147
|
+
if expiration_date_after:
|
|
148
|
+
event_instrument_request.set_expiration_date_after(expiration_date_after)
|
|
149
|
+
if last_instrument_id:
|
|
150
|
+
event_instrument_request.set_last_instrument_id(last_instrument_id)
|
|
151
|
+
event_instrument_request.set_page_size(page_size)
|
|
152
|
+
response = self.client.get_response(event_instrument_request)
|
|
153
|
+
return response
|