kitecli 0.2.2__tar.gz → 0.2.3__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.
- {kitecli-0.2.2 → kitecli-0.2.3}/PKG-INFO +1 -1
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/kite_manager.py +27 -4
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/live_session.py +3 -4
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/PKG-INFO +1 -1
- {kitecli-0.2.2 → kitecli-0.2.3}/pyproject.toml +1 -1
- {kitecli-0.2.2 → kitecli-0.2.3}/README.md +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/__init__.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/advisor.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/api_client.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/base_manager.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/config.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/display.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/executor.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/kotak_manager.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/main.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/nli.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/parser.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/recorder.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/cli/telegram_bot.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/SOURCES.txt +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/dependency_links.txt +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/entry_points.txt +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/requires.txt +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/kitecli.egg-info/top_level.txt +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/setup.cfg +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/tests/test_multi_broker.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/tests/test_nli.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/tests/test_parser.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/tests/test_telegram.py +0 -0
- {kitecli-0.2.2 → kitecli-0.2.3}/tests/test_ui.py +0 -0
|
@@ -111,6 +111,30 @@ class KiteAccountManager(BaseBrokerManager):
|
|
|
111
111
|
self._authenticated[api_key] = False
|
|
112
112
|
self._proxies[api_key] = proxies or {}
|
|
113
113
|
|
|
114
|
+
# Monkeypatch reqsession.request to bypass proxy for all non-order endpoints
|
|
115
|
+
orig_request = kite.reqsession.request
|
|
116
|
+
def proxied_request(method, url, *args, **kwargs):
|
|
117
|
+
method_upper = method.upper()
|
|
118
|
+
url_lower = url.lower()
|
|
119
|
+
# Only apply proxies for order placement, modification, or cancellation
|
|
120
|
+
is_order_api = (
|
|
121
|
+
method_upper in ("POST", "PUT", "DELETE") and
|
|
122
|
+
("/orders" in url_lower or "/gtt" in url_lower)
|
|
123
|
+
)
|
|
124
|
+
if not is_order_api:
|
|
125
|
+
# Remove proxies for both the individual request kwargs and session-level config
|
|
126
|
+
kwargs["proxies"] = {}
|
|
127
|
+
orig_proxies = kite.reqsession.proxies
|
|
128
|
+
kite.reqsession.proxies = {}
|
|
129
|
+
try:
|
|
130
|
+
return orig_request(method, url, *args, **kwargs)
|
|
131
|
+
finally:
|
|
132
|
+
kite.reqsession.proxies = orig_proxies
|
|
133
|
+
else:
|
|
134
|
+
return orig_request(method, url, *args, **kwargs)
|
|
135
|
+
|
|
136
|
+
kite.reqsession.request = proxied_request
|
|
137
|
+
|
|
114
138
|
sessions = _load_sessions()
|
|
115
139
|
saved_token = sessions.get(api_key)
|
|
116
140
|
if saved_token:
|
|
@@ -378,10 +402,9 @@ class KiteAccountManager(BaseBrokerManager):
|
|
|
378
402
|
session.mount("https://", adapter)
|
|
379
403
|
session.mount("http://", adapter)
|
|
380
404
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
logger.info("auto_login: using proxy for %s (api_key=%s…)", user_id, api_key[:8])
|
|
405
|
+
# Zerodha login does not enforce whitelisting, direct is faster and more reliable
|
|
406
|
+
# session.proxies.update(account_proxies)
|
|
407
|
+
# logger.info("auto_login: using proxy for %s (api_key=%s…)", user_id, api_key[:8])
|
|
385
408
|
|
|
386
409
|
try:
|
|
387
410
|
# Step 1: Login with user_id + password
|
|
@@ -1061,9 +1061,8 @@ class KCLILiveSession:
|
|
|
1061
1061
|
logs.append(f"[#ff8700]⚠ No token:[/#] @{name} — login required (run 'kcli init').")
|
|
1062
1062
|
return api_key, "no_token", name, "no access token", acct, logs, True
|
|
1063
1063
|
|
|
1064
|
-
proxy_str = acct.get("proxy")
|
|
1065
1064
|
ws_status, ws_detail = await self._run_api_call(
|
|
1066
|
-
probe_ws_auth, api_key, access_token,
|
|
1065
|
+
probe_ws_auth, api_key, access_token, None
|
|
1067
1066
|
)
|
|
1068
1067
|
|
|
1069
1068
|
if ws_status == "ok":
|
|
@@ -1229,10 +1228,10 @@ class KCLILiveSession:
|
|
|
1229
1228
|
ticker.on_close = self._make_on_close(api_key)
|
|
1230
1229
|
ticker.on_error = self._make_on_error(api_key)
|
|
1231
1230
|
|
|
1232
|
-
# Parse proxy if configured for this account
|
|
1231
|
+
# Parse proxy if configured for this account (Zerodha WS does not require IP whitelisting, direct is faster)
|
|
1233
1232
|
proxy_str = acct.get("proxy")
|
|
1234
1233
|
proxy_dict = None
|
|
1235
|
-
if proxy_str:
|
|
1234
|
+
if broker != "zerodha" and proxy_str:
|
|
1236
1235
|
from urllib.parse import urlparse
|
|
1237
1236
|
try:
|
|
1238
1237
|
p_str = proxy_str if "://" in proxy_str else f"http://{proxy_str}"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "kitecli"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.3"
|
|
8
8
|
description = "KiteCLI — Multi-account, multi-broker trading positions viewer (Zerodha + Kotak Neo)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|