sauda 0.1.1__py3-none-win_amd64.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.
- sauda/__init__.py +158 -0
- sauda/_proto/__init__.py +0 -0
- sauda/_proto/jugaad_pb2.py +96 -0
- sauda/_proto/jugaad_pb2_grpc.py +517 -0
- sauda-0.1.1.data/scripts/jugaad-rpc.exe +0 -0
- sauda-0.1.1.dist-info/METADATA +34 -0
- sauda-0.1.1.dist-info/RECORD +9 -0
- sauda-0.1.1.dist-info/WHEEL +4 -0
- sauda-0.1.1.dist-info/sboms/jugaad-rpc.cyclonedx.json +9128 -0
sauda/__init__.py
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"""NSE market data for Python.
|
|
2
|
+
|
|
3
|
+
A thin client over a bundled Rust gRPC server (`jugaad-rpc`). Creating a
|
|
4
|
+
`Client` starts the server on a loopback port; closing it stops the server -
|
|
5
|
+
and so does this process dying, however it dies.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import atexit
|
|
11
|
+
import os
|
|
12
|
+
import shutil
|
|
13
|
+
import socket
|
|
14
|
+
import subprocess
|
|
15
|
+
import sysconfig
|
|
16
|
+
import time
|
|
17
|
+
|
|
18
|
+
import grpc
|
|
19
|
+
|
|
20
|
+
from ._proto import jugaad_pb2 as pb
|
|
21
|
+
from ._proto import jugaad_pb2_grpc
|
|
22
|
+
|
|
23
|
+
__all__ = ["Client"]
|
|
24
|
+
|
|
25
|
+
_EXE = "jugaad-rpc" + (".exe" if os.name == "nt" else "")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _find_binary() -> str:
|
|
29
|
+
# Same places ruff looks: the env's scripts dir, then the --user one.
|
|
30
|
+
user_scheme = (
|
|
31
|
+
sysconfig.get_preferred_scheme("user")
|
|
32
|
+
if hasattr(sysconfig, "get_preferred_scheme")
|
|
33
|
+
else f"{os.name}_user"
|
|
34
|
+
)
|
|
35
|
+
for scheme in (None, user_scheme):
|
|
36
|
+
try:
|
|
37
|
+
scripts = (
|
|
38
|
+
sysconfig.get_path("scripts", scheme)
|
|
39
|
+
if scheme
|
|
40
|
+
else sysconfig.get_path("scripts")
|
|
41
|
+
)
|
|
42
|
+
except KeyError:
|
|
43
|
+
continue
|
|
44
|
+
path = os.path.join(scripts, _EXE)
|
|
45
|
+
if os.path.isfile(path):
|
|
46
|
+
return path
|
|
47
|
+
found = shutil.which(_EXE)
|
|
48
|
+
if found:
|
|
49
|
+
return found
|
|
50
|
+
raise FileNotFoundError(f"bundled {_EXE} not found; is the sauda wheel installed?")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _free_port() -> int:
|
|
54
|
+
with socket.socket() as s:
|
|
55
|
+
s.bind(("127.0.0.1", 0))
|
|
56
|
+
return s.getsockname()[1]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _stop(proc: subprocess.Popen) -> None:
|
|
60
|
+
# Closing stdin is the server's cue to exit (JUGAAD_RPC_EXIT_ON_STDIN_CLOSE).
|
|
61
|
+
if proc.stdin:
|
|
62
|
+
try:
|
|
63
|
+
proc.stdin.close()
|
|
64
|
+
except OSError:
|
|
65
|
+
pass
|
|
66
|
+
try:
|
|
67
|
+
proc.wait(timeout=5)
|
|
68
|
+
except subprocess.TimeoutExpired:
|
|
69
|
+
proc.kill()
|
|
70
|
+
proc.wait()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _start_server(timeout: float) -> tuple[subprocess.Popen, grpc.Channel]:
|
|
74
|
+
exe = _find_binary()
|
|
75
|
+
for _ in range(2): # ponytail: free-port pick is racy, retry once; server could print its bound port instead
|
|
76
|
+
port = _free_port()
|
|
77
|
+
proc = subprocess.Popen(
|
|
78
|
+
[exe],
|
|
79
|
+
stdin=subprocess.PIPE,
|
|
80
|
+
stdout=subprocess.DEVNULL,
|
|
81
|
+
env={
|
|
82
|
+
**os.environ,
|
|
83
|
+
"JUGAAD_RPC_ADDR": f"127.0.0.1:{port}",
|
|
84
|
+
"JUGAAD_RPC_EXIT_ON_STDIN_CLOSE": "1",
|
|
85
|
+
},
|
|
86
|
+
creationflags=getattr(subprocess, "CREATE_NO_WINDOW", 0),
|
|
87
|
+
)
|
|
88
|
+
channel = grpc.insecure_channel(f"127.0.0.1:{port}")
|
|
89
|
+
ready = grpc.channel_ready_future(channel)
|
|
90
|
+
deadline = time.monotonic() + timeout
|
|
91
|
+
while time.monotonic() < deadline and proc.poll() is None:
|
|
92
|
+
try:
|
|
93
|
+
ready.result(timeout=0.25)
|
|
94
|
+
return proc, channel
|
|
95
|
+
except grpc.FutureTimeoutError:
|
|
96
|
+
pass
|
|
97
|
+
ready.cancel()
|
|
98
|
+
channel.close()
|
|
99
|
+
if proc.poll() is None:
|
|
100
|
+
_stop(proc)
|
|
101
|
+
raise TimeoutError(f"jugaad-rpc not ready after {timeout}s")
|
|
102
|
+
raise RuntimeError(f"jugaad-rpc exited during startup (code {proc.returncode})")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _to_py(msg) -> dict:
|
|
106
|
+
# Not MessageToDict: that renders uint64 as strings and drops unset
|
|
107
|
+
# optionals, and None-vs-0 matters (e.g. delivery_pct).
|
|
108
|
+
out = {}
|
|
109
|
+
for f in msg.DESCRIPTOR.fields:
|
|
110
|
+
value = getattr(msg, f.name)
|
|
111
|
+
repeated = (
|
|
112
|
+
f.is_repeated if hasattr(f, "is_repeated") else f.label == f.LABEL_REPEATED
|
|
113
|
+
)
|
|
114
|
+
if repeated:
|
|
115
|
+
out[f.name] = [_to_py(v) if f.message_type else v for v in value]
|
|
116
|
+
elif f.message_type:
|
|
117
|
+
out[f.name] = _to_py(value) if msg.HasField(f.name) else None
|
|
118
|
+
elif f.has_presence and not msg.HasField(f.name):
|
|
119
|
+
out[f.name] = None
|
|
120
|
+
else:
|
|
121
|
+
out[f.name] = value
|
|
122
|
+
return out
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class Client:
|
|
126
|
+
"""Starts the bundled server on creation; use as a context manager or call
|
|
127
|
+
`close()`. `stub` is the raw generated gRPC stub for every RPC."""
|
|
128
|
+
|
|
129
|
+
def __init__(self, startup_timeout: float = 15.0) -> None:
|
|
130
|
+
self._proc, self._channel = _start_server(startup_timeout)
|
|
131
|
+
self.stub = jugaad_pb2_grpc.JugaadStub(self._channel)
|
|
132
|
+
atexit.register(self.close)
|
|
133
|
+
|
|
134
|
+
def close(self) -> None:
|
|
135
|
+
if self._proc is None:
|
|
136
|
+
return
|
|
137
|
+
atexit.unregister(self.close)
|
|
138
|
+
self._channel.close()
|
|
139
|
+
_stop(self._proc)
|
|
140
|
+
self._proc = None
|
|
141
|
+
|
|
142
|
+
def __enter__(self) -> Client:
|
|
143
|
+
return self
|
|
144
|
+
|
|
145
|
+
def __exit__(self, *exc) -> None:
|
|
146
|
+
self.close()
|
|
147
|
+
|
|
148
|
+
def stock_quote(self, symbol: str) -> dict:
|
|
149
|
+
return _to_py(self.stub.GetStockQuote(pb.StockQuoteRequest(symbol=symbol)))
|
|
150
|
+
|
|
151
|
+
def stock_history(
|
|
152
|
+
self, symbol: str, from_date, to_date, series: str | None = None
|
|
153
|
+
) -> list[dict]:
|
|
154
|
+
"""Daily OHLC/volume/delivery rows. Dates are `datetime.date` or "YYYY-MM-DD"."""
|
|
155
|
+
request = pb.StockHistoryRequest(
|
|
156
|
+
symbol=symbol, from_date=str(from_date), to_date=str(to_date), series=series
|
|
157
|
+
)
|
|
158
|
+
return [_to_py(row) for row in self.stub.GetStockHistory(request).rows]
|
sauda/_proto/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: jugaad.proto
|
|
5
|
+
# Protobuf Python Version: 5.29.0
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
5,
|
|
15
|
+
29,
|
|
16
|
+
0,
|
|
17
|
+
'',
|
|
18
|
+
'jugaad.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cjugaad.proto\x12\x06jugaad\"#\n\x11StockQuoteRequest\x12\x0e\n\x06symbol\x18\x01 \x01(\t\"B\n\x16WatchStockQuoteRequest\x12\x0e\n\x06symbol\x18\x01 \x01(\t\x12\x18\n\x10interval_seconds\x18\x02 \x01(\r\"d\n\x0eOrderBookLevel\x12\x11\n\tbuy_price\x18\x01 \x01(\x01\x12\x14\n\x0c\x62uy_quantity\x18\x02 \x01(\x04\x12\x12\n\nsell_price\x18\x03 \x01(\x01\x12\x15\n\rsell_quantity\x18\x04 \x01(\x04\"l\n\tOrderBook\x12&\n\x06levels\x18\x01 \x03(\x0b\x32\x16.jugaad.OrderBookLevel\x12\x1a\n\x12total_buy_quantity\x18\x02 \x01(\x04\x12\x1b\n\x13total_sell_quantity\x18\x03 \x01(\x04\"\x90\x04\n\nStockQuote\x12\x0e\n\x06symbol\x18\x01 \x01(\t\x12\x14\n\x0c\x63ompany_name\x18\x02 \x01(\t\x12\x0e\n\x06series\x18\x03 \x01(\t\x12\x0c\n\x04open\x18\x04 \x01(\x01\x12\x10\n\x08\x64\x61y_high\x18\x05 \x01(\x01\x12\x0f\n\x07\x64\x61y_low\x18\x06 \x01(\x01\x12\x16\n\x0eprevious_close\x18\x07 \x01(\x01\x12\x12\n\nlast_price\x18\x08 \x01(\x01\x12\x0e\n\x06\x63hange\x18\t \x01(\x01\x12\x16\n\x0epercent_change\x18\n \x01(\x01\x12\x11\n\tyear_high\x18\x0b \x01(\x01\x12\x10\n\x08year_low\x18\x0c \x01(\x01\x12\x1b\n\x13total_traded_volume\x18\r \x01(\x04\x12\x1a\n\x12total_traded_value\x18\x0e \x01(\x01\x12\x1d\n\x10total_market_cap\x18\x0f \x01(\x01H\x00\x88\x01\x01\x12\x12\n\nface_value\x18\x10 \x01(\x01\x12\x1e\n\x11\x64\x65livery_quantity\x18\x11 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0c\x64\x65livery_pct\x18\x12 \x01(\x01H\x02\x88\x01\x01\x12%\n\norder_book\x18\x13 \x01(\x0b\x32\x11.jugaad.OrderBook\x12\x18\n\x10last_update_time\x18\x14 \x01(\tB\x13\n\x11_total_market_capB\x14\n\x12_delivery_quantityB\x0f\n\r_delivery_pct\"i\n\x13StockHistoryRequest\x12\x0e\n\x06symbol\x18\x01 \x01(\t\x12\x11\n\tfrom_date\x18\x02 \x01(\t\x12\x0f\n\x07to_date\x18\x03 \x01(\t\x12\x13\n\x06series\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_series\"\xd9\x02\n\x0fStockHistoryRow\x12\x0e\n\x06symbol\x18\x01 \x01(\t\x12\x0e\n\x06series\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61te\x18\x03 \x01(\t\x12\x0c\n\x04open\x18\x04 \x01(\x01\x12\x0c\n\x04high\x18\x05 \x01(\x01\x12\x0b\n\x03low\x18\x06 \x01(\x01\x12\x16\n\x0eprevious_close\x18\x07 \x01(\x01\x12\x19\n\x11last_traded_price\x18\x08 \x01(\x01\x12\r\n\x05\x63lose\x18\t \x01(\x01\x12\x0c\n\x04vwap\x18\n \x01(\x01\x12\x0e\n\x06volume\x18\x0b \x01(\x04\x12\r\n\x05value\x18\x0c \x01(\x01\x12\x13\n\x06trades\x18\r \x01(\x04H\x00\x88\x01\x01\x12\x1e\n\x11\x64\x65livery_quantity\x18\x0e \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0c\x64\x65livery_pct\x18\x0f \x01(\x01H\x02\x88\x01\x01\x42\t\n\x07_tradesB\x14\n\x12_delivery_quantityB\x0f\n\r_delivery_pct\"=\n\x14StockHistoryResponse\x12%\n\x04rows\x18\x01 \x03(\x0b\x32\x17.jugaad.StockHistoryRow\"G\n\x13IndexHistoryRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tfrom_date\x18\x02 \x01(\t\x12\x0f\n\x07to_date\x18\x03 \x01(\t\"k\n\x0fIndexHistoryRow\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61te\x18\x02 \x01(\t\x12\x0c\n\x04open\x18\x03 \x01(\x01\x12\x0c\n\x04high\x18\x04 \x01(\x01\x12\x0b\n\x03low\x18\x05 \x01(\x01\x12\r\n\x05\x63lose\x18\x06 \x01(\x01\"=\n\x14IndexHistoryResponse\x12%\n\x04rows\x18\x01 \x03(\x0b\x32\x17.jugaad.IndexHistoryRow\"\x16\n\x14IndexSnapshotRequest\"\xa2\x03\n\x10IndexSnapshotRow\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06symbol\x18\x03 \x01(\t\x12\x0c\n\x04last\x18\x04 \x01(\x01\x12\x0e\n\x06\x63hange\x18\x05 \x01(\x01\x12\x16\n\x0epercent_change\x18\x06 \x01(\x01\x12\x0c\n\x04open\x18\x07 \x01(\x01\x12\x0c\n\x04high\x18\x08 \x01(\x01\x12\x0b\n\x03low\x18\t \x01(\x01\x12\x16\n\x0eprevious_close\x18\n \x01(\x01\x12\x11\n\tyear_high\x18\x0b \x01(\x01\x12\x10\n\x08year_low\x18\x0c \x01(\x01\x12\x0f\n\x02pe\x18\r \x01(\x01H\x00\x88\x01\x01\x12\x0f\n\x02pb\x18\x0e \x01(\x01H\x01\x88\x01\x01\x12\x16\n\tdiv_yield\x18\x0f \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08\x61\x64vances\x18\x10 \x01(\rH\x03\x88\x01\x01\x12\x15\n\x08\x64\x65\x63lines\x18\x11 \x01(\rH\x04\x88\x01\x01\x12\x16\n\tunchanged\x18\x12 \x01(\rH\x05\x88\x01\x01\x42\x05\n\x03_peB\x05\n\x03_pbB\x0c\n\n_div_yieldB\x0b\n\t_advancesB\x0b\n\t_declinesB\x0c\n\n_unchanged\"?\n\x15IndexSnapshotResponse\x12&\n\x04rows\x18\x01 \x03(\x0b\x32\x18.jugaad.IndexSnapshotRow\"\x13\n\x11LargeDealsRequest\"\x8f\x02\n\x0cLargeDealRow\x12\x11\n\tdeal_type\x18\x01 \x01(\t\x12\x0e\n\x06symbol\x18\x02 \x01(\t\x12\x14\n\x0c\x63ompany_name\x18\x03 \x01(\t\x12\x18\n\x0b\x63lient_name\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08\x62uy_sell\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x08quantity\x18\x06 \x01(\x04\x12\x1f\n\x12weighted_avg_price\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x14\n\x07remarks\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x0c\n\x04\x64\x61te\x18\t \x01(\tB\x0e\n\x0c_client_nameB\x0b\n\t_buy_sellB\x15\n\x13_weighted_avg_priceB\n\n\x08_remarks\"8\n\x12LargeDealsResponse\x12\"\n\x04rows\x18\x01 \x03(\x0b\x32\x14.jugaad.LargeDealRow\"\x15\n\x13MarketStatusRequest\"\xeb\x01\n\x13MarketSegmentStatus\x12\x0e\n\x06market\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x12\n\ntrade_date\x18\x03 \x01(\t\x12\x12\n\x05index\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04last\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x63hange\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0epercent_change\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x16\n\x0estatus_message\x18\x08 \x01(\tB\x08\n\x06_indexB\x07\n\x05_lastB\t\n\x07_changeB\x11\n\x0f_percent_change\"E\n\x14MarketStatusResponse\x12-\n\x08segments\x18\x01 \x03(\x0b\x32\x1b.jugaad.MarketSegmentStatus\"k\n\x12OptionChainRequest\x12\x0e\n\x06symbol\x18\x01 \x01(\t\x12%\n\x04kind\x18\x02 \x01(\x0e\x32\x17.jugaad.OptionChainKind\x12\x13\n\x06\x65xpiry\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_expiry\"\xb0\x03\n\tOptionLeg\x12\x17\n\nidentifier\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nlast_price\x18\x02 \x01(\x01\x12\x0e\n\x06\x63hange\x18\x03 \x01(\x01\x12\x16\n\x0epercent_change\x18\x04 \x01(\x01\x12\x15\n\ropen_interest\x18\x05 \x01(\x04\x12\x1f\n\x17\x63hange_in_open_interest\x18\x06 \x01(\x03\x12\'\n\x1fpercent_change_in_open_interest\x18\x07 \x01(\x01\x12\x1b\n\x13total_traded_volume\x18\x08 \x01(\x04\x12\x1a\n\x12implied_volatility\x18\t \x01(\x01\x12\x11\n\tbuy_price\x18\n \x01(\x01\x12\x14\n\x0c\x62uy_quantity\x18\x0b \x01(\x04\x12\x12\n\nsell_price\x18\x0c \x01(\x01\x12\x15\n\rsell_quantity\x18\r \x01(\x04\x12\x1a\n\x12total_buy_quantity\x18\x0e \x01(\x04\x12\x1b\n\x13total_sell_quantity\x18\x0f \x01(\x04\x12\x18\n\x10underlying_value\x18\x10 \x01(\x01\x42\r\n\x0b_identifier\"w\n\x0eOptionChainRow\x12\x14\n\x0cstrike_price\x18\x01 \x01(\x01\x12\x0e\n\x06\x65xpiry\x18\x02 \x01(\t\x12\x1f\n\x04\x63\x61ll\x18\x03 \x01(\x0b\x32\x11.jugaad.OptionLeg\x12\x1e\n\x03put\x18\x04 \x01(\x0b\x32\x11.jugaad.OptionLeg\";\n\x13OptionChainResponse\x12$\n\x04rows\x18\x01 \x03(\x0b\x32\x16.jugaad.OptionChainRow\"\'\n\x15OptionExpiriesRequest\x12\x0e\n\x06symbol\x18\x01 \x01(\t\"*\n\x16OptionExpiriesResponse\x12\x10\n\x08\x65xpiries\x18\x01 \x03(\t\"t\n\x1d\x43orporateAnnouncementsRequest\x12\x0f\n\x07segment\x18\x01 \x01(\t\x12\x13\n\x06symbol\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tfrom_date\x18\x03 \x01(\t\x12\x0f\n\x07to_date\x18\x04 \x01(\tB\t\n\x07_symbol\"\xcf\x02\n\x18\x43orporateAnnouncementRow\x12\x13\n\x06symbol\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04isin\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0c\x63ompany_name\x18\x03 \x01(\t\x12\x10\n\x08\x63\x61tegory\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x15\n\x08industry\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x08has_xbrl\x18\x07 \x01(\x08\x12\x1b\n\x0e\x61ttachment_url\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tfile_size\x18\t \x01(\tH\x04\x88\x01\x01\x12\x19\n\x11\x61nnouncement_time\x18\n \x01(\t\x12\x13\n\x0bsequence_id\x18\x0b \x01(\x04\x42\t\n\x07_symbolB\x07\n\x05_isinB\x0b\n\t_industryB\x11\n\x0f_attachment_urlB\x0c\n\n_file_size\"P\n\x1e\x43orporateAnnouncementsResponse\x12.\n\x04rows\x18\x01 \x03(\x0b\x32 .jugaad.CorporateAnnouncementRow*o\n\x0fOptionChainKind\x12!\n\x1dOPTION_CHAIN_KIND_UNSPECIFIED\x10\x00\x12\x1b\n\x17OPTION_CHAIN_KIND_INDEX\x10\x01\x12\x1c\n\x18OPTION_CHAIN_KIND_EQUITY\x10\x02\x32\x9f\x06\n\x06Jugaad\x12>\n\rGetStockQuote\x12\x19.jugaad.StockQuoteRequest\x1a\x12.jugaad.StockQuote\x12G\n\x0fWatchStockQuote\x12\x1e.jugaad.WatchStockQuoteRequest\x1a\x12.jugaad.StockQuote0\x01\x12L\n\x0fGetStockHistory\x12\x1b.jugaad.StockHistoryRequest\x1a\x1c.jugaad.StockHistoryResponse\x12L\n\x0fGetIndexHistory\x12\x1b.jugaad.IndexHistoryRequest\x1a\x1c.jugaad.IndexHistoryResponse\x12O\n\x10GetIndexSnapshot\x12\x1c.jugaad.IndexSnapshotRequest\x1a\x1d.jugaad.IndexSnapshotResponse\x12\x46\n\rGetLargeDeals\x12\x19.jugaad.LargeDealsRequest\x1a\x1a.jugaad.LargeDealsResponse\x12L\n\x0fGetMarketStatus\x12\x1b.jugaad.MarketStatusRequest\x1a\x1c.jugaad.MarketStatusResponse\x12I\n\x0eGetOptionChain\x12\x1a.jugaad.OptionChainRequest\x1a\x1b.jugaad.OptionChainResponse\x12R\n\x11GetOptionExpiries\x12\x1d.jugaad.OptionExpiriesRequest\x1a\x1e.jugaad.OptionExpiriesResponse\x12j\n\x19GetCorporateAnnouncements\x12%.jugaad.CorporateAnnouncementsRequest\x1a&.jugaad.CorporateAnnouncementsResponseb\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'jugaad_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_OPTIONCHAINKIND']._serialized_start=4179
|
|
35
|
+
_globals['_OPTIONCHAINKIND']._serialized_end=4290
|
|
36
|
+
_globals['_STOCKQUOTEREQUEST']._serialized_start=24
|
|
37
|
+
_globals['_STOCKQUOTEREQUEST']._serialized_end=59
|
|
38
|
+
_globals['_WATCHSTOCKQUOTEREQUEST']._serialized_start=61
|
|
39
|
+
_globals['_WATCHSTOCKQUOTEREQUEST']._serialized_end=127
|
|
40
|
+
_globals['_ORDERBOOKLEVEL']._serialized_start=129
|
|
41
|
+
_globals['_ORDERBOOKLEVEL']._serialized_end=229
|
|
42
|
+
_globals['_ORDERBOOK']._serialized_start=231
|
|
43
|
+
_globals['_ORDERBOOK']._serialized_end=339
|
|
44
|
+
_globals['_STOCKQUOTE']._serialized_start=342
|
|
45
|
+
_globals['_STOCKQUOTE']._serialized_end=870
|
|
46
|
+
_globals['_STOCKHISTORYREQUEST']._serialized_start=872
|
|
47
|
+
_globals['_STOCKHISTORYREQUEST']._serialized_end=977
|
|
48
|
+
_globals['_STOCKHISTORYROW']._serialized_start=980
|
|
49
|
+
_globals['_STOCKHISTORYROW']._serialized_end=1325
|
|
50
|
+
_globals['_STOCKHISTORYRESPONSE']._serialized_start=1327
|
|
51
|
+
_globals['_STOCKHISTORYRESPONSE']._serialized_end=1388
|
|
52
|
+
_globals['_INDEXHISTORYREQUEST']._serialized_start=1390
|
|
53
|
+
_globals['_INDEXHISTORYREQUEST']._serialized_end=1461
|
|
54
|
+
_globals['_INDEXHISTORYROW']._serialized_start=1463
|
|
55
|
+
_globals['_INDEXHISTORYROW']._serialized_end=1570
|
|
56
|
+
_globals['_INDEXHISTORYRESPONSE']._serialized_start=1572
|
|
57
|
+
_globals['_INDEXHISTORYRESPONSE']._serialized_end=1633
|
|
58
|
+
_globals['_INDEXSNAPSHOTREQUEST']._serialized_start=1635
|
|
59
|
+
_globals['_INDEXSNAPSHOTREQUEST']._serialized_end=1657
|
|
60
|
+
_globals['_INDEXSNAPSHOTROW']._serialized_start=1660
|
|
61
|
+
_globals['_INDEXSNAPSHOTROW']._serialized_end=2078
|
|
62
|
+
_globals['_INDEXSNAPSHOTRESPONSE']._serialized_start=2080
|
|
63
|
+
_globals['_INDEXSNAPSHOTRESPONSE']._serialized_end=2143
|
|
64
|
+
_globals['_LARGEDEALSREQUEST']._serialized_start=2145
|
|
65
|
+
_globals['_LARGEDEALSREQUEST']._serialized_end=2164
|
|
66
|
+
_globals['_LARGEDEALROW']._serialized_start=2167
|
|
67
|
+
_globals['_LARGEDEALROW']._serialized_end=2438
|
|
68
|
+
_globals['_LARGEDEALSRESPONSE']._serialized_start=2440
|
|
69
|
+
_globals['_LARGEDEALSRESPONSE']._serialized_end=2496
|
|
70
|
+
_globals['_MARKETSTATUSREQUEST']._serialized_start=2498
|
|
71
|
+
_globals['_MARKETSTATUSREQUEST']._serialized_end=2519
|
|
72
|
+
_globals['_MARKETSEGMENTSTATUS']._serialized_start=2522
|
|
73
|
+
_globals['_MARKETSEGMENTSTATUS']._serialized_end=2757
|
|
74
|
+
_globals['_MARKETSTATUSRESPONSE']._serialized_start=2759
|
|
75
|
+
_globals['_MARKETSTATUSRESPONSE']._serialized_end=2828
|
|
76
|
+
_globals['_OPTIONCHAINREQUEST']._serialized_start=2830
|
|
77
|
+
_globals['_OPTIONCHAINREQUEST']._serialized_end=2937
|
|
78
|
+
_globals['_OPTIONLEG']._serialized_start=2940
|
|
79
|
+
_globals['_OPTIONLEG']._serialized_end=3372
|
|
80
|
+
_globals['_OPTIONCHAINROW']._serialized_start=3374
|
|
81
|
+
_globals['_OPTIONCHAINROW']._serialized_end=3493
|
|
82
|
+
_globals['_OPTIONCHAINRESPONSE']._serialized_start=3495
|
|
83
|
+
_globals['_OPTIONCHAINRESPONSE']._serialized_end=3554
|
|
84
|
+
_globals['_OPTIONEXPIRIESREQUEST']._serialized_start=3556
|
|
85
|
+
_globals['_OPTIONEXPIRIESREQUEST']._serialized_end=3595
|
|
86
|
+
_globals['_OPTIONEXPIRIESRESPONSE']._serialized_start=3597
|
|
87
|
+
_globals['_OPTIONEXPIRIESRESPONSE']._serialized_end=3639
|
|
88
|
+
_globals['_CORPORATEANNOUNCEMENTSREQUEST']._serialized_start=3641
|
|
89
|
+
_globals['_CORPORATEANNOUNCEMENTSREQUEST']._serialized_end=3757
|
|
90
|
+
_globals['_CORPORATEANNOUNCEMENTROW']._serialized_start=3760
|
|
91
|
+
_globals['_CORPORATEANNOUNCEMENTROW']._serialized_end=4095
|
|
92
|
+
_globals['_CORPORATEANNOUNCEMENTSRESPONSE']._serialized_start=4097
|
|
93
|
+
_globals['_CORPORATEANNOUNCEMENTSRESPONSE']._serialized_end=4177
|
|
94
|
+
_globals['_JUGAAD']._serialized_start=4293
|
|
95
|
+
_globals['_JUGAAD']._serialized_end=5092
|
|
96
|
+
# @@protoc_insertion_point(module_scope)
|