webull-openapi-python-sdk 1.0.0__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.
Files changed (295) hide show
  1. samples/__init__.py +1 -0
  2. samples/data/__init__.py +1 -0
  3. samples/data/data_client.py +57 -0
  4. samples/data/data_streaming_client.py +86 -0
  5. samples/data/data_streaming_client_async.py +101 -0
  6. samples/trade/__init__.py +0 -0
  7. samples/trade/trade_client.py +163 -0
  8. samples/trade/trade_client_v2.py +181 -0
  9. samples/trade/trade_event_client.py +47 -0
  10. webull/__init__.py +1 -0
  11. webull/core/__init__.py +12 -0
  12. webull/core/auth/__init__.py +0 -0
  13. webull/core/auth/algorithm/__init__.py +0 -0
  14. webull/core/auth/algorithm/sha_hmac1.py +65 -0
  15. webull/core/auth/algorithm/sha_hmac256.py +75 -0
  16. webull/core/auth/composer/__init__.py +0 -0
  17. webull/core/auth/composer/default_signature_composer.py +125 -0
  18. webull/core/auth/credentials.py +46 -0
  19. webull/core/auth/signers/__init__.py +0 -0
  20. webull/core/auth/signers/app_key_signer.py +72 -0
  21. webull/core/auth/signers/signer.py +48 -0
  22. webull/core/auth/signers/signer_factory.py +58 -0
  23. webull/core/cache/__init__.py +225 -0
  24. webull/core/client.py +410 -0
  25. webull/core/common/__init__.py +0 -0
  26. webull/core/common/api_type.py +19 -0
  27. webull/core/common/easy_enum.py +35 -0
  28. webull/core/common/region.py +7 -0
  29. webull/core/compat.py +85 -0
  30. webull/core/context/__init__.py +0 -0
  31. webull/core/context/request_context_holder.py +33 -0
  32. webull/core/data/endpoints.json +22 -0
  33. webull/core/data/retry_config.json +15 -0
  34. webull/core/endpoint/__init__.py +8 -0
  35. webull/core/endpoint/chained_endpoint_resolver.py +57 -0
  36. webull/core/endpoint/default_endpoint_resolver.py +60 -0
  37. webull/core/endpoint/local_config_regional_endpoint_resolver.py +77 -0
  38. webull/core/endpoint/resolver_endpoint_request.py +46 -0
  39. webull/core/endpoint/user_customized_endpoint_resolver.py +55 -0
  40. webull/core/exception/__init__.py +0 -0
  41. webull/core/exception/error_code.py +23 -0
  42. webull/core/exception/error_msg.py +21 -0
  43. webull/core/exception/exceptions.py +53 -0
  44. webull/core/headers.py +57 -0
  45. webull/core/http/__init__.py +0 -0
  46. webull/core/http/initializer/__init__.py +0 -0
  47. webull/core/http/initializer/client_initializer.py +79 -0
  48. webull/core/http/initializer/token/__init__.py +0 -0
  49. webull/core/http/initializer/token/bean/__init__.py +0 -0
  50. webull/core/http/initializer/token/bean/access_token.py +40 -0
  51. webull/core/http/initializer/token/bean/check_token_request.py +44 -0
  52. webull/core/http/initializer/token/bean/create_token_request.py +45 -0
  53. webull/core/http/initializer/token/bean/refresh_token_request.py +44 -0
  54. webull/core/http/initializer/token/token_manager.py +208 -0
  55. webull/core/http/initializer/token/token_operation.py +72 -0
  56. webull/core/http/method_type.py +43 -0
  57. webull/core/http/protocol_type.py +43 -0
  58. webull/core/http/request.py +121 -0
  59. webull/core/http/response.py +166 -0
  60. webull/core/request.py +278 -0
  61. webull/core/retry/__init__.py +0 -0
  62. webull/core/retry/backoff_strategy.py +102 -0
  63. webull/core/retry/retry_condition.py +214 -0
  64. webull/core/retry/retry_policy.py +63 -0
  65. webull/core/retry/retry_policy_context.py +51 -0
  66. webull/core/utils/__init__.py +0 -0
  67. webull/core/utils/common.py +62 -0
  68. webull/core/utils/data.py +25 -0
  69. webull/core/utils/desensitize.py +33 -0
  70. webull/core/utils/validation.py +49 -0
  71. webull/core/vendored/__init__.py +0 -0
  72. webull/core/vendored/requests/__init__.py +94 -0
  73. webull/core/vendored/requests/__version__.py +28 -0
  74. webull/core/vendored/requests/_internal_utils.py +56 -0
  75. webull/core/vendored/requests/adapters.py +539 -0
  76. webull/core/vendored/requests/api.py +166 -0
  77. webull/core/vendored/requests/auth.py +307 -0
  78. webull/core/vendored/requests/certs.py +34 -0
  79. webull/core/vendored/requests/compat.py +85 -0
  80. webull/core/vendored/requests/cookies.py +555 -0
  81. webull/core/vendored/requests/exceptions.py +136 -0
  82. webull/core/vendored/requests/help.py +134 -0
  83. webull/core/vendored/requests/hooks.py +48 -0
  84. webull/core/vendored/requests/models.py +960 -0
  85. webull/core/vendored/requests/packages/__init__.py +17 -0
  86. webull/core/vendored/requests/packages/certifi/__init__.py +17 -0
  87. webull/core/vendored/requests/packages/certifi/__main__.py +16 -0
  88. webull/core/vendored/requests/packages/certifi/cacert.pem +4433 -0
  89. webull/core/vendored/requests/packages/certifi/core.py +51 -0
  90. webull/core/vendored/requests/packages/chardet/__init__.py +53 -0
  91. webull/core/vendored/requests/packages/chardet/big5freq.py +400 -0
  92. webull/core/vendored/requests/packages/chardet/big5prober.py +61 -0
  93. webull/core/vendored/requests/packages/chardet/chardistribution.py +247 -0
  94. webull/core/vendored/requests/packages/chardet/charsetgroupprober.py +120 -0
  95. webull/core/vendored/requests/packages/chardet/charsetprober.py +159 -0
  96. webull/core/vendored/requests/packages/chardet/cli/__init__.py +1 -0
  97. webull/core/vendored/requests/packages/chardet/cli/chardetect.py +99 -0
  98. webull/core/vendored/requests/packages/chardet/codingstatemachine.py +102 -0
  99. webull/core/vendored/requests/packages/chardet/compat.py +48 -0
  100. webull/core/vendored/requests/packages/chardet/cp949prober.py +63 -0
  101. webull/core/vendored/requests/packages/chardet/enums.py +90 -0
  102. webull/core/vendored/requests/packages/chardet/escprober.py +115 -0
  103. webull/core/vendored/requests/packages/chardet/escsm.py +260 -0
  104. webull/core/vendored/requests/packages/chardet/eucjpprober.py +106 -0
  105. webull/core/vendored/requests/packages/chardet/euckrfreq.py +209 -0
  106. webull/core/vendored/requests/packages/chardet/euckrprober.py +61 -0
  107. webull/core/vendored/requests/packages/chardet/euctwfreq.py +401 -0
  108. webull/core/vendored/requests/packages/chardet/euctwprober.py +60 -0
  109. webull/core/vendored/requests/packages/chardet/gb2312freq.py +297 -0
  110. webull/core/vendored/requests/packages/chardet/gb2312prober.py +60 -0
  111. webull/core/vendored/requests/packages/chardet/hebrewprober.py +306 -0
  112. webull/core/vendored/requests/packages/chardet/jisfreq.py +339 -0
  113. webull/core/vendored/requests/packages/chardet/jpcntx.py +247 -0
  114. webull/core/vendored/requests/packages/chardet/langbulgarianmodel.py +242 -0
  115. webull/core/vendored/requests/packages/chardet/langcyrillicmodel.py +347 -0
  116. webull/core/vendored/requests/packages/chardet/langgreekmodel.py +239 -0
  117. webull/core/vendored/requests/packages/chardet/langhebrewmodel.py +214 -0
  118. webull/core/vendored/requests/packages/chardet/langhungarianmodel.py +239 -0
  119. webull/core/vendored/requests/packages/chardet/langthaimodel.py +213 -0
  120. webull/core/vendored/requests/packages/chardet/langturkishmodel.py +207 -0
  121. webull/core/vendored/requests/packages/chardet/latin1prober.py +159 -0
  122. webull/core/vendored/requests/packages/chardet/mbcharsetprober.py +105 -0
  123. webull/core/vendored/requests/packages/chardet/mbcsgroupprober.py +68 -0
  124. webull/core/vendored/requests/packages/chardet/mbcssm.py +586 -0
  125. webull/core/vendored/requests/packages/chardet/sbcharsetprober.py +146 -0
  126. webull/core/vendored/requests/packages/chardet/sbcsgroupprober.py +87 -0
  127. webull/core/vendored/requests/packages/chardet/sjisprober.py +106 -0
  128. webull/core/vendored/requests/packages/chardet/universaldetector.py +300 -0
  129. webull/core/vendored/requests/packages/chardet/utf8prober.py +96 -0
  130. webull/core/vendored/requests/packages/chardet/version.py +23 -0
  131. webull/core/vendored/requests/packages/urllib3/__init__.py +114 -0
  132. webull/core/vendored/requests/packages/urllib3/_collections.py +346 -0
  133. webull/core/vendored/requests/packages/urllib3/connection.py +405 -0
  134. webull/core/vendored/requests/packages/urllib3/connectionpool.py +910 -0
  135. webull/core/vendored/requests/packages/urllib3/contrib/__init__.py +0 -0
  136. webull/core/vendored/requests/packages/urllib3/contrib/_appengine_environ.py +44 -0
  137. webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/__init__.py +0 -0
  138. webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/bindings.py +607 -0
  139. webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/low_level.py +360 -0
  140. webull/core/vendored/requests/packages/urllib3/contrib/appengine.py +303 -0
  141. webull/core/vendored/requests/packages/urllib3/contrib/ntlmpool.py +125 -0
  142. webull/core/vendored/requests/packages/urllib3/contrib/pyopenssl.py +484 -0
  143. webull/core/vendored/requests/packages/urllib3/contrib/securetransport.py +818 -0
  144. webull/core/vendored/requests/packages/urllib3/contrib/socks.py +206 -0
  145. webull/core/vendored/requests/packages/urllib3/exceptions.py +260 -0
  146. webull/core/vendored/requests/packages/urllib3/fields.py +192 -0
  147. webull/core/vendored/requests/packages/urllib3/filepost.py +112 -0
  148. webull/core/vendored/requests/packages/urllib3/packages/__init__.py +19 -0
  149. webull/core/vendored/requests/packages/urllib3/packages/backports/__init__.py +0 -0
  150. webull/core/vendored/requests/packages/urllib3/packages/backports/makefile.py +67 -0
  151. webull/core/vendored/requests/packages/urllib3/packages/ordered_dict.py +273 -0
  152. webull/core/vendored/requests/packages/urllib3/packages/six.py +882 -0
  153. webull/core/vendored/requests/packages/urllib3/packages/socks.py +887 -0
  154. webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +19 -0
  155. webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +170 -0
  156. webull/core/vendored/requests/packages/urllib3/poolmanager.py +467 -0
  157. webull/core/vendored/requests/packages/urllib3/request.py +164 -0
  158. webull/core/vendored/requests/packages/urllib3/response.py +721 -0
  159. webull/core/vendored/requests/packages/urllib3/util/__init__.py +68 -0
  160. webull/core/vendored/requests/packages/urllib3/util/connection.py +148 -0
  161. webull/core/vendored/requests/packages/urllib3/util/queue.py +35 -0
  162. webull/core/vendored/requests/packages/urllib3/util/request.py +132 -0
  163. webull/core/vendored/requests/packages/urllib3/util/response.py +101 -0
  164. webull/core/vendored/requests/packages/urllib3/util/retry.py +426 -0
  165. webull/core/vendored/requests/packages/urllib3/util/selectors.py +601 -0
  166. webull/core/vendored/requests/packages/urllib3/util/ssl_.py +396 -0
  167. webull/core/vendored/requests/packages/urllib3/util/timeout.py +256 -0
  168. webull/core/vendored/requests/packages/urllib3/util/url.py +252 -0
  169. webull/core/vendored/requests/packages/urllib3/util/wait.py +164 -0
  170. webull/core/vendored/requests/packages.py +28 -0
  171. webull/core/vendored/requests/sessions.py +750 -0
  172. webull/core/vendored/requests/status_codes.py +105 -0
  173. webull/core/vendored/requests/structures.py +119 -0
  174. webull/core/vendored/requests/utils.py +916 -0
  175. webull/core/vendored/six.py +905 -0
  176. webull/data/__init__.py +3 -0
  177. webull/data/common/__init__.py +0 -0
  178. webull/data/common/category.py +26 -0
  179. webull/data/common/connect_ack.py +29 -0
  180. webull/data/common/direction.py +25 -0
  181. webull/data/common/exchange_code.py +33 -0
  182. webull/data/common/exercise_style.py +22 -0
  183. webull/data/common/expiration_cycle.py +26 -0
  184. webull/data/common/instrument_status.py +23 -0
  185. webull/data/common/option_type.py +20 -0
  186. webull/data/common/subscribe_type.py +22 -0
  187. webull/data/common/timespan.py +29 -0
  188. webull/data/data_client.py +35 -0
  189. webull/data/data_streaming_client.py +89 -0
  190. webull/data/internal/__init__.py +0 -0
  191. webull/data/internal/default_retry_policy.py +84 -0
  192. webull/data/internal/exceptions.py +60 -0
  193. webull/data/internal/quotes_client.py +314 -0
  194. webull/data/internal/quotes_decoder.py +40 -0
  195. webull/data/internal/quotes_payload_decoder.py +35 -0
  196. webull/data/internal/quotes_topic.py +36 -0
  197. webull/data/quotes/__init__.py +0 -0
  198. webull/data/quotes/instrument.py +33 -0
  199. webull/data/quotes/market_data.py +187 -0
  200. webull/data/quotes/market_streaming_data.py +66 -0
  201. webull/data/quotes/subscribe/__init__.py +0 -0
  202. webull/data/quotes/subscribe/ask_bid_result.py +49 -0
  203. webull/data/quotes/subscribe/basic_result.py +45 -0
  204. webull/data/quotes/subscribe/broker_result.py +33 -0
  205. webull/data/quotes/subscribe/message_pb2.py +37 -0
  206. webull/data/quotes/subscribe/order_result.py +30 -0
  207. webull/data/quotes/subscribe/payload_type.py +19 -0
  208. webull/data/quotes/subscribe/quote_decoder.py +28 -0
  209. webull/data/quotes/subscribe/quote_result.py +47 -0
  210. webull/data/quotes/subscribe/snapshot_decoder.py +30 -0
  211. webull/data/quotes/subscribe/snapshot_result.py +69 -0
  212. webull/data/quotes/subscribe/tick_decoder.py +29 -0
  213. webull/data/quotes/subscribe/tick_result.py +47 -0
  214. webull/data/request/__init__.py +0 -0
  215. webull/data/request/get_batch_historical_bars_request.py +43 -0
  216. webull/data/request/get_corp_action_request.py +47 -0
  217. webull/data/request/get_eod_bars_request.py +32 -0
  218. webull/data/request/get_historical_bars_request.py +43 -0
  219. webull/data/request/get_instruments_request.py +30 -0
  220. webull/data/request/get_quotes_request.py +35 -0
  221. webull/data/request/get_snapshot_request.py +38 -0
  222. webull/data/request/get_tick_request.py +37 -0
  223. webull/data/request/subscribe_request.py +43 -0
  224. webull/data/request/unsubscribe_request.py +42 -0
  225. webull/trade/__init__.py +2 -0
  226. webull/trade/common/__init__.py +0 -0
  227. webull/trade/common/account_type.py +22 -0
  228. webull/trade/common/category.py +29 -0
  229. webull/trade/common/combo_ticker_type.py +23 -0
  230. webull/trade/common/combo_type.py +31 -0
  231. webull/trade/common/currency.py +24 -0
  232. webull/trade/common/forbid_reason.py +27 -0
  233. webull/trade/common/instrument_type.py +27 -0
  234. webull/trade/common/markets.py +27 -0
  235. webull/trade/common/order_entrust_type.py +21 -0
  236. webull/trade/common/order_side.py +23 -0
  237. webull/trade/common/order_status.py +25 -0
  238. webull/trade/common/order_tif.py +24 -0
  239. webull/trade/common/order_type.py +30 -0
  240. webull/trade/common/trade_policy.py +22 -0
  241. webull/trade/common/trading_date_type.py +24 -0
  242. webull/trade/common/trailing_type.py +23 -0
  243. webull/trade/events/__init__.py +0 -0
  244. webull/trade/events/default_retry_policy.py +64 -0
  245. webull/trade/events/events_pb2.py +43 -0
  246. webull/trade/events/events_pb2_grpc.py +66 -0
  247. webull/trade/events/signature_composer.py +61 -0
  248. webull/trade/events/types.py +21 -0
  249. webull/trade/request/__init__.py +0 -0
  250. webull/trade/request/cancel_order_request.py +28 -0
  251. webull/trade/request/get_account_balance_request.py +28 -0
  252. webull/trade/request/get_account_positions_request.py +30 -0
  253. webull/trade/request/get_account_profile_request.py +26 -0
  254. webull/trade/request/get_app_subscriptions.py +28 -0
  255. webull/trade/request/get_open_orders_request.py +30 -0
  256. webull/trade/request/get_order_detail_request.py +27 -0
  257. webull/trade/request/get_today_orders_request.py +31 -0
  258. webull/trade/request/get_trade_calendar_request.py +30 -0
  259. webull/trade/request/get_trade_instrument_detail_request.py +24 -0
  260. webull/trade/request/get_trade_security_detail_request.py +42 -0
  261. webull/trade/request/get_tradeable_instruments_request.py +27 -0
  262. webull/trade/request/palce_order_request.py +91 -0
  263. webull/trade/request/place_order_request_v2.py +58 -0
  264. webull/trade/request/replace_order_request.py +73 -0
  265. webull/trade/request/replace_order_request_v2.py +38 -0
  266. webull/trade/request/v2/__init__.py +0 -0
  267. webull/trade/request/v2/cancel_option_request.py +28 -0
  268. webull/trade/request/v2/cancel_order_request.py +28 -0
  269. webull/trade/request/v2/get_account_balance_request.py +28 -0
  270. webull/trade/request/v2/get_account_list.py +23 -0
  271. webull/trade/request/v2/get_account_positions_request.py +24 -0
  272. webull/trade/request/v2/get_order_detail_request.py +26 -0
  273. webull/trade/request/v2/get_order_history_request.py +35 -0
  274. webull/trade/request/v2/palce_order_request.py +87 -0
  275. webull/trade/request/v2/place_option_request.py +64 -0
  276. webull/trade/request/v2/preview_option_request.py +28 -0
  277. webull/trade/request/v2/preview_order_request.py +59 -0
  278. webull/trade/request/v2/replace_option_request.py +28 -0
  279. webull/trade/request/v2/replace_order_request.py +57 -0
  280. webull/trade/trade/__init__.py +0 -0
  281. webull/trade/trade/account_info.py +83 -0
  282. webull/trade/trade/order_operation.py +246 -0
  283. webull/trade/trade/trade_calendar.py +37 -0
  284. webull/trade/trade/trade_instrument.py +72 -0
  285. webull/trade/trade/v2/__init__.py +0 -0
  286. webull/trade/trade/v2/account_info_v2.py +55 -0
  287. webull/trade/trade/v2/order_operation_v2.py +206 -0
  288. webull/trade/trade_client.py +43 -0
  289. webull/trade/trade_events_client.py +233 -0
  290. webull_openapi_python_sdk-1.0.0.dist-info/METADATA +28 -0
  291. webull_openapi_python_sdk-1.0.0.dist-info/RECORD +295 -0
  292. webull_openapi_python_sdk-1.0.0.dist-info/WHEEL +5 -0
  293. webull_openapi_python_sdk-1.0.0.dist-info/licenses/LICENSE +202 -0
  294. webull_openapi_python_sdk-1.0.0.dist-info/licenses/NOTICE +56 -0
  295. webull_openapi_python_sdk-1.0.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,159 @@
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
+ ######################## BEGIN LICENSE BLOCK ########################
16
+ # The Original Code is Mozilla Universal charset detector code.
17
+ #
18
+ # The Initial Developer of the Original Code is
19
+ # Netscape Communications Corporation.
20
+ # Portions created by the Initial Developer are Copyright (C) 2001
21
+ # the Initial Developer. All Rights Reserved.
22
+ #
23
+ # Contributor(s):
24
+ # Mark Pilgrim - port to Python
25
+ # Shy Shalom - original C code
26
+ #
27
+ # This library is free software; you can redistribute it and/or
28
+ # modify it under the terms of the GNU Lesser General Public
29
+ # License as published by the Free Software Foundation; either
30
+ # version 2.1 of the License, or (at your option) any later version.
31
+ #
32
+ # This library is distributed in the hope that it will be useful,
33
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
34
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35
+ # Lesser General Public License for more details.
36
+ #
37
+ # You should have received a copy of the GNU Lesser General Public
38
+ # License along with this library; if not, write to the Free Software
39
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
40
+ # 02110-1301 USA
41
+ ######################### END LICENSE BLOCK #########################
42
+
43
+ from .charsetprober import CharSetProber
44
+ from .enums import ProbingState
45
+
46
+ FREQ_CAT_NUM = 4
47
+
48
+ UDF = 0 # undefined
49
+ OTH = 1 # other
50
+ ASC = 2 # ascii capital letter
51
+ ASS = 3 # ascii small letter
52
+ ACV = 4 # accent capital vowel
53
+ ACO = 5 # accent capital other
54
+ ASV = 6 # accent small vowel
55
+ ASO = 7 # accent small other
56
+ CLASS_NUM = 8 # total classes
57
+
58
+ Latin1_CharToClass = (
59
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07
60
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F
61
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17
62
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F
63
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27
64
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F
65
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37
66
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F
67
+ OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47
68
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F
69
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57
70
+ ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F
71
+ OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67
72
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F
73
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77
74
+ ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F
75
+ OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87
76
+ OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F
77
+ UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97
78
+ OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F
79
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7
80
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF
81
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7
82
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF
83
+ ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7
84
+ ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF
85
+ ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7
86
+ ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF
87
+ ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7
88
+ ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF
89
+ ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7
90
+ ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF
91
+ )
92
+
93
+ # 0 : illegal
94
+ # 1 : very unlikely
95
+ # 2 : normal
96
+ # 3 : very likely
97
+ Latin1ClassModel = (
98
+ # UDF OTH ASC ASS ACV ACO ASV ASO
99
+ 0, 0, 0, 0, 0, 0, 0, 0, # UDF
100
+ 0, 3, 3, 3, 3, 3, 3, 3, # OTH
101
+ 0, 3, 3, 3, 3, 3, 3, 3, # ASC
102
+ 0, 3, 3, 3, 1, 1, 3, 3, # ASS
103
+ 0, 3, 3, 3, 1, 2, 1, 2, # ACV
104
+ 0, 3, 3, 3, 3, 3, 3, 3, # ACO
105
+ 0, 3, 1, 3, 1, 1, 1, 3, # ASV
106
+ 0, 3, 1, 3, 1, 1, 3, 3, # ASO
107
+ )
108
+
109
+
110
+ class Latin1Prober(CharSetProber):
111
+ def __init__(self):
112
+ super(Latin1Prober, self).__init__()
113
+ self._last_char_class = None
114
+ self._freq_counter = None
115
+ self.reset()
116
+
117
+ def reset(self):
118
+ self._last_char_class = OTH
119
+ self._freq_counter = [0] * FREQ_CAT_NUM
120
+ CharSetProber.reset(self)
121
+
122
+ @property
123
+ def charset_name(self):
124
+ return "ISO-8859-1"
125
+
126
+ @property
127
+ def language(self):
128
+ return ""
129
+
130
+ def feed(self, byte_str):
131
+ byte_str = self.filter_with_english_letters(byte_str)
132
+ for c in byte_str:
133
+ char_class = Latin1_CharToClass[c]
134
+ freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM)
135
+ + char_class]
136
+ if freq == 0:
137
+ self._state = ProbingState.NOT_ME
138
+ break
139
+ self._freq_counter[freq] += 1
140
+ self._last_char_class = char_class
141
+
142
+ return self.state
143
+
144
+ def get_confidence(self):
145
+ if self.state == ProbingState.NOT_ME:
146
+ return 0.01
147
+
148
+ total = sum(self._freq_counter)
149
+ if total < 0.01:
150
+ confidence = 0.0
151
+ else:
152
+ confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0)
153
+ / total)
154
+ if confidence < 0.0:
155
+ confidence = 0.0
156
+ # lower the confidence of latin1 so that other more accurate
157
+ # detector can take priority.
158
+ confidence = confidence * 0.73
159
+ return confidence
@@ -0,0 +1,105 @@
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
+ ######################## BEGIN LICENSE BLOCK ########################
16
+ # The Original Code is Mozilla Universal charset detector code.
17
+ #
18
+ # The Initial Developer of the Original Code is
19
+ # Netscape Communications Corporation.
20
+ # Portions created by the Initial Developer are Copyright (C) 2001
21
+ # the Initial Developer. All Rights Reserved.
22
+ #
23
+ # Contributor(s):
24
+ # Mark Pilgrim - port to Python
25
+ # Shy Shalom - original C code
26
+ # Proofpoint, Inc.
27
+ #
28
+ # This library is free software; you can redistribute it and/or
29
+ # modify it under the terms of the GNU Lesser General Public
30
+ # License as published by the Free Software Foundation; either
31
+ # version 2.1 of the License, or (at your option) any later version.
32
+ #
33
+ # This library is distributed in the hope that it will be useful,
34
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
35
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36
+ # Lesser General Public License for more details.
37
+ #
38
+ # You should have received a copy of the GNU Lesser General Public
39
+ # License along with this library; if not, write to the Free Software
40
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
41
+ # 02110-1301 USA
42
+ ######################### END LICENSE BLOCK #########################
43
+
44
+ from .charsetprober import CharSetProber
45
+ from .enums import ProbingState, MachineState
46
+
47
+
48
+ class MultiByteCharSetProber(CharSetProber):
49
+ """
50
+ MultiByteCharSetProber
51
+ """
52
+
53
+ def __init__(self, lang_filter=None):
54
+ super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter)
55
+ self.distribution_analyzer = None
56
+ self.coding_sm = None
57
+ self._last_char = [0, 0]
58
+
59
+ def reset(self):
60
+ super(MultiByteCharSetProber, self).reset()
61
+ if self.coding_sm:
62
+ self.coding_sm.reset()
63
+ if self.distribution_analyzer:
64
+ self.distribution_analyzer.reset()
65
+ self._last_char = [0, 0]
66
+
67
+ @property
68
+ def charset_name(self):
69
+ raise NotImplementedError
70
+
71
+ @property
72
+ def language(self):
73
+ raise NotImplementedError
74
+
75
+ def feed(self, byte_str):
76
+ for i in range(len(byte_str)):
77
+ coding_state = self.coding_sm.next_state(byte_str[i])
78
+ if coding_state == MachineState.ERROR:
79
+ self.logger.debug('%s %s prober hit error at byte %s',
80
+ self.charset_name, self.language, i)
81
+ self._state = ProbingState.NOT_ME
82
+ break
83
+ elif coding_state == MachineState.ITS_ME:
84
+ self._state = ProbingState.FOUND_IT
85
+ break
86
+ elif coding_state == MachineState.START:
87
+ char_len = self.coding_sm.get_current_charlen()
88
+ if i == 0:
89
+ self._last_char[1] = byte_str[0]
90
+ self.distribution_analyzer.feed(self._last_char, char_len)
91
+ else:
92
+ self.distribution_analyzer.feed(byte_str[i - 1:i + 1],
93
+ char_len)
94
+
95
+ self._last_char[0] = byte_str[-1]
96
+
97
+ if self.state == ProbingState.DETECTING:
98
+ if (self.distribution_analyzer.got_enough_data() and
99
+ (self.get_confidence() > self.SHORTCUT_THRESHOLD)):
100
+ self._state = ProbingState.FOUND_IT
101
+
102
+ return self.state
103
+
104
+ def get_confidence(self):
105
+ return self.distribution_analyzer.get_confidence()
@@ -0,0 +1,68 @@
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
+ ######################## BEGIN LICENSE BLOCK ########################
16
+ # The Original Code is Mozilla Universal charset detector code.
17
+ #
18
+ # The Initial Developer of the Original Code is
19
+ # Netscape Communications Corporation.
20
+ # Portions created by the Initial Developer are Copyright (C) 2001
21
+ # the Initial Developer. All Rights Reserved.
22
+ #
23
+ # Contributor(s):
24
+ # Mark Pilgrim - port to Python
25
+ # Shy Shalom - original C code
26
+ # Proofpoint, Inc.
27
+ #
28
+ # This library is free software; you can redistribute it and/or
29
+ # modify it under the terms of the GNU Lesser General Public
30
+ # License as published by the Free Software Foundation; either
31
+ # version 2.1 of the License, or (at your option) any later version.
32
+ #
33
+ # This library is distributed in the hope that it will be useful,
34
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
35
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36
+ # Lesser General Public License for more details.
37
+ #
38
+ # You should have received a copy of the GNU Lesser General Public
39
+ # License along with this library; if not, write to the Free Software
40
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
41
+ # 02110-1301 USA
42
+ ######################### END LICENSE BLOCK #########################
43
+
44
+ from .charsetgroupprober import CharSetGroupProber
45
+ from .utf8prober import UTF8Prober
46
+ from .sjisprober import SJISProber
47
+ from .eucjpprober import EUCJPProber
48
+ from .gb2312prober import GB2312Prober
49
+ from .euckrprober import EUCKRProber
50
+ from .cp949prober import CP949Prober
51
+ from .big5prober import Big5Prober
52
+ from .euctwprober import EUCTWProber
53
+
54
+
55
+ class MBCSGroupProber(CharSetGroupProber):
56
+ def __init__(self, lang_filter=None):
57
+ super(MBCSGroupProber, self).__init__(lang_filter=lang_filter)
58
+ self.probers = [
59
+ UTF8Prober(),
60
+ SJISProber(),
61
+ EUCJPProber(),
62
+ GB2312Prober(),
63
+ EUCKRProber(),
64
+ CP949Prober(),
65
+ Big5Prober(),
66
+ EUCTWProber()
67
+ ]
68
+ self.reset()