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 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]
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)