kuhl-haus-mdp 0.1.10__py3-none-any.whl → 0.1.12__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.
- kuhl_haus/mdp/analyzers/analyzer.py +1 -1
- kuhl_haus/mdp/analyzers/massive_data_analyzer.py +52 -28
- kuhl_haus/mdp/analyzers/top_stocks.py +9 -6
- kuhl_haus/mdp/components/market_data_cache.py +33 -11
- kuhl_haus/mdp/components/market_data_scanner.py +1 -1
- kuhl_haus/mdp/{integ → components}/massive_data_processor.py +2 -2
- kuhl_haus/mdp/{integ → components}/massive_data_queues.py +2 -2
- kuhl_haus/mdp/{models → enum}/market_data_cache_keys.py +1 -1
- kuhl_haus/mdp/{models → enum}/market_data_cache_ttl.py +1 -2
- kuhl_haus/mdp/{models → enum}/market_data_pubsub_keys.py +1 -1
- kuhl_haus/mdp/helpers/queue_name_resolver.py +1 -1
- {kuhl_haus_mdp-0.1.10.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/METADATA +1 -1
- kuhl_haus_mdp-0.1.12.dist-info/RECORD +32 -0
- kuhl_haus_mdp-0.1.10.dist-info/RECORD +0 -32
- /kuhl_haus/mdp/{integ → components}/massive_data_listener.py +0 -0
- /kuhl_haus/mdp/{integ → data}/__init__.py +0 -0
- /kuhl_haus/mdp/{models → data}/market_data_analyzer_result.py +0 -0
- /kuhl_haus/mdp/{models → data}/top_stocks_cache_item.py +0 -0
- /kuhl_haus/mdp/{models → enum}/__init__.py +0 -0
- /kuhl_haus/mdp/{models → enum}/constants.py +0 -0
- /kuhl_haus/mdp/{models → enum}/market_data_scanner_names.py +0 -0
- /kuhl_haus/mdp/{models → enum}/massive_data_queue.py +0 -0
- /kuhl_haus/mdp/{integ → helpers}/web_socket_message_serde.py +0 -0
- {kuhl_haus_mdp-0.1.10.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/WHEEL +0 -0
- {kuhl_haus_mdp-0.1.10.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/entry_points.txt +0 -0
- {kuhl_haus_mdp-0.1.10.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/licenses/LICENSE.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from typing import Optional, List
|
|
2
|
-
from kuhl_haus.mdp.
|
|
2
|
+
from kuhl_haus.mdp.data.market_data_analyzer_result import MarketDataAnalyzerResult
|
|
3
3
|
from kuhl_haus.mdp.components.market_data_cache import MarketDataCache
|
|
4
4
|
|
|
5
5
|
|
|
@@ -3,14 +3,21 @@ from time import time
|
|
|
3
3
|
from typing import List, Optional
|
|
4
4
|
from massive.websocket.models import EventType
|
|
5
5
|
|
|
6
|
-
from kuhl_haus.mdp.
|
|
7
|
-
from kuhl_haus.mdp.
|
|
8
|
-
from kuhl_haus.mdp.
|
|
6
|
+
from kuhl_haus.mdp.data.market_data_analyzer_result import MarketDataAnalyzerResult
|
|
7
|
+
from kuhl_haus.mdp.enum.market_data_cache_keys import MarketDataCacheKeys
|
|
8
|
+
from kuhl_haus.mdp.enum.market_data_cache_ttl import MarketDataCacheTTL
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class MassiveDataAnalyzer:
|
|
12
|
-
|
|
12
|
+
cache_agg_event: bool
|
|
13
|
+
cache_trade_event: bool
|
|
14
|
+
cache_quote_event: bool
|
|
15
|
+
|
|
16
|
+
def __init__(self, cache_agg_event: bool = False, cache_trade_event: bool = False, cache_quote_event: bool = False):
|
|
13
17
|
self.logger = logging.getLogger(__name__)
|
|
18
|
+
self.cache_agg_event = cache_agg_event
|
|
19
|
+
self.cache_trade_event = cache_trade_event
|
|
20
|
+
self.cache_quote_event = cache_quote_event
|
|
14
21
|
self.event_handlers = {
|
|
15
22
|
EventType.LimitUpLimitDown.value: self.handle_luld_event,
|
|
16
23
|
EventType.EquityAgg.value: self.handle_equity_agg_event,
|
|
@@ -54,32 +61,49 @@ class MassiveDataAnalyzer:
|
|
|
54
61
|
publish_key=f"{MarketDataCacheKeys.HALTS.value}:{symbol}",
|
|
55
62
|
)]
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
def handle_equity_agg_event(self, data: dict, symbol: str) -> Optional[List[MarketDataAnalyzerResult]]:
|
|
65
|
+
if self.cache_agg_event:
|
|
66
|
+
return [MarketDataAnalyzerResult(
|
|
67
|
+
data=data,
|
|
68
|
+
cache_key=f"{MarketDataCacheKeys.AGGREGATE.value}:{symbol}",
|
|
69
|
+
cache_ttl=MarketDataCacheTTL.AGGREGATE.value,
|
|
70
|
+
publish_key=f"{MarketDataCacheKeys.AGGREGATE.value}:{symbol}",
|
|
71
|
+
)]
|
|
72
|
+
else:
|
|
73
|
+
return [MarketDataAnalyzerResult(
|
|
74
|
+
data=data,
|
|
75
|
+
publish_key=f"{MarketDataCacheKeys.AGGREGATE.value}:{symbol}",
|
|
76
|
+
)]
|
|
65
77
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
def handle_equity_trade_event(self, data: dict, symbol: str) -> Optional[List[MarketDataAnalyzerResult]]:
|
|
79
|
+
if self.cache_trade_event:
|
|
80
|
+
return [MarketDataAnalyzerResult(
|
|
81
|
+
data=data,
|
|
82
|
+
cache_key=f"{MarketDataCacheKeys.TRADES.value}:{symbol}",
|
|
83
|
+
cache_ttl=MarketDataCacheTTL.TRADES.value,
|
|
84
|
+
publish_key=f"{MarketDataCacheKeys.TRADES.value}:{symbol}",
|
|
85
|
+
)]
|
|
86
|
+
else:
|
|
87
|
+
return [MarketDataAnalyzerResult(
|
|
88
|
+
data=data,
|
|
89
|
+
publish_key=f"{MarketDataCacheKeys.TRADES.value}:{symbol}",
|
|
90
|
+
)]
|
|
74
91
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
92
|
+
def handle_equity_quote_event(self, data: dict, symbol: str) -> Optional[List[MarketDataAnalyzerResult]]:
|
|
93
|
+
if self.cache_quote_event:
|
|
94
|
+
return [MarketDataAnalyzerResult(
|
|
95
|
+
data=data,
|
|
96
|
+
cache_key=f"{MarketDataCacheKeys.QUOTES.value}:{symbol}",
|
|
97
|
+
cache_ttl=MarketDataCacheTTL.QUOTES.value,
|
|
98
|
+
publish_key=f"{MarketDataCacheKeys.QUOTES.value}:{symbol}",
|
|
99
|
+
)]
|
|
100
|
+
else:
|
|
101
|
+
return [MarketDataAnalyzerResult(
|
|
102
|
+
data=data,
|
|
103
|
+
# cache_key=f"{MarketDataCacheKeys.QUOTES.value}:{symbol}",
|
|
104
|
+
# cache_ttl=MarketDataCacheTTL.QUOTES.value,
|
|
105
|
+
publish_key=f"{MarketDataCacheKeys.QUOTES.value}:{symbol}",
|
|
106
|
+
)]
|
|
83
107
|
|
|
84
108
|
@staticmethod
|
|
85
109
|
def handle_unknown_event(data: dict) -> Optional[List[MarketDataAnalyzerResult]]:
|
|
@@ -11,11 +11,11 @@ from massive.websocket.models import (
|
|
|
11
11
|
|
|
12
12
|
from kuhl_haus.mdp.analyzers.analyzer import Analyzer
|
|
13
13
|
from kuhl_haus.mdp.components.market_data_cache import MarketDataCache
|
|
14
|
-
from kuhl_haus.mdp.
|
|
15
|
-
from kuhl_haus.mdp.
|
|
16
|
-
from kuhl_haus.mdp.
|
|
17
|
-
from kuhl_haus.mdp.
|
|
18
|
-
from kuhl_haus.mdp.
|
|
14
|
+
from kuhl_haus.mdp.data.market_data_analyzer_result import MarketDataAnalyzerResult
|
|
15
|
+
from kuhl_haus.mdp.data.top_stocks_cache_item import TopStocksCacheItem
|
|
16
|
+
from kuhl_haus.mdp.enum.market_data_cache_keys import MarketDataCacheKeys
|
|
17
|
+
from kuhl_haus.mdp.enum.market_data_cache_ttl import MarketDataCacheTTL
|
|
18
|
+
from kuhl_haus.mdp.enum.market_data_pubsub_keys import MarketDataPubSubKeys
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class TopStocksAnalyzer(Analyzer):
|
|
@@ -41,7 +41,7 @@ class TopStocksAnalyzer(Analyzer):
|
|
|
41
41
|
self.cache_item = TopStocksCacheItem()
|
|
42
42
|
self.logger.info(f"Outside market hours ({et_now.strftime('%H:%M:%S %Z')}), clearing cache.")
|
|
43
43
|
return
|
|
44
|
-
data = await self.cache.
|
|
44
|
+
data = await self.cache.read(self.cache_key)
|
|
45
45
|
if not data:
|
|
46
46
|
self.cache_item = TopStocksCacheItem()
|
|
47
47
|
self.logger.info("No data to rehydrate TopStocksCacheItem.")
|
|
@@ -136,6 +136,9 @@ class TopStocksAnalyzer(Analyzer):
|
|
|
136
136
|
prev_day_volume = snapshot.prev_day.volume
|
|
137
137
|
prev_day_vwap = snapshot.prev_day.vwap
|
|
138
138
|
break
|
|
139
|
+
except KeyError:
|
|
140
|
+
retry_count += 1
|
|
141
|
+
await self.cache.delete_ticker_snapshot(event.symbol)
|
|
139
142
|
except Exception as e:
|
|
140
143
|
self.logger.error(f"Failed to get snapshot for {event.symbol}: {e}")
|
|
141
144
|
retry_count += 1
|
|
@@ -14,8 +14,8 @@ from massive.rest.models import (
|
|
|
14
14
|
)
|
|
15
15
|
|
|
16
16
|
from kuhl_haus.mdp.helpers.utils import ticker_snapshot_to_dict
|
|
17
|
-
from kuhl_haus.mdp.
|
|
18
|
-
from kuhl_haus.mdp.
|
|
17
|
+
from kuhl_haus.mdp.enum.market_data_cache_keys import MarketDataCacheKeys
|
|
18
|
+
from kuhl_haus.mdp.enum.market_data_cache_ttl import MarketDataCacheTTL
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class MarketDataCache:
|
|
@@ -26,28 +26,50 @@ class MarketDataCache:
|
|
|
26
26
|
self.redis_client = redis_client
|
|
27
27
|
self.http_session = None
|
|
28
28
|
|
|
29
|
-
async def
|
|
29
|
+
async def delete(self, cache_key: str):
|
|
30
|
+
"""
|
|
31
|
+
Delete cache entry.
|
|
32
|
+
|
|
33
|
+
:arg cache_key: Cache key to delete
|
|
34
|
+
"""
|
|
35
|
+
try:
|
|
36
|
+
await self.redis_client.delete(cache_key)
|
|
37
|
+
self.logger.info(f"Deleted cache entry: {cache_key}")
|
|
38
|
+
except Exception as e:
|
|
39
|
+
self.logger.error(f"Error deleting cache entry: {e}")
|
|
40
|
+
|
|
41
|
+
async def read(self, cache_key: str) -> Optional[dict]:
|
|
30
42
|
"""Fetch current value from Redis cache (for snapshot requests)."""
|
|
31
43
|
value = await self.redis_client.get(cache_key)
|
|
32
44
|
if value:
|
|
33
45
|
return json.loads(value)
|
|
34
46
|
return None
|
|
35
47
|
|
|
36
|
-
async def
|
|
48
|
+
async def write(self, data: Any, cache_key: str, cache_ttl: int = 0):
|
|
37
49
|
if cache_ttl > 0:
|
|
38
50
|
await self.redis_client.setex(cache_key, cache_ttl, json.dumps(data))
|
|
39
51
|
else:
|
|
40
52
|
await self.redis_client.set(cache_key, json.dumps(data))
|
|
41
53
|
self.logger.info(f"Cached data for {cache_key}")
|
|
42
54
|
|
|
43
|
-
async def
|
|
55
|
+
async def broadcast(self, data: Any, publish_key: str = None):
|
|
44
56
|
await self.redis_client.publish(publish_key, json.dumps(data))
|
|
45
57
|
self.logger.info(f"Published data for {publish_key}")
|
|
46
58
|
|
|
59
|
+
async def delete_ticker_snapshot(self, ticker: str):
|
|
60
|
+
"""
|
|
61
|
+
Delete ticker snapshot from cache.
|
|
62
|
+
|
|
63
|
+
:param ticker: symbol of ticker to delete snapshot for
|
|
64
|
+
:return: None
|
|
65
|
+
"""
|
|
66
|
+
cache_key = f"{MarketDataCacheKeys.TICKER_SNAPSHOTS.value}:{ticker}"
|
|
67
|
+
await self.delete(cache_key=cache_key)
|
|
68
|
+
|
|
47
69
|
async def get_ticker_snapshot(self, ticker: str) -> TickerSnapshot:
|
|
48
70
|
self.logger.info(f"Getting snapshot for {ticker}")
|
|
49
71
|
cache_key = f"{MarketDataCacheKeys.TICKER_SNAPSHOTS.value}:{ticker}"
|
|
50
|
-
result = await self.
|
|
72
|
+
result = await self.read(cache_key=cache_key)
|
|
51
73
|
if result:
|
|
52
74
|
self.logger.info(f"Returning cached snapshot for {ticker}")
|
|
53
75
|
snapshot = TickerSnapshot(**result)
|
|
@@ -58,7 +80,7 @@ class MarketDataCache:
|
|
|
58
80
|
)
|
|
59
81
|
self.logger.info(f"Snapshot result: {snapshot}")
|
|
60
82
|
data = ticker_snapshot_to_dict(snapshot)
|
|
61
|
-
await self.
|
|
83
|
+
await self.write(
|
|
62
84
|
data=data,
|
|
63
85
|
cache_key=cache_key,
|
|
64
86
|
cache_ttl=MarketDataCacheTTL.TICKER_SNAPSHOTS.value
|
|
@@ -68,7 +90,7 @@ class MarketDataCache:
|
|
|
68
90
|
async def get_avg_volume(self, ticker: str):
|
|
69
91
|
self.logger.info(f"Getting average volume for {ticker}")
|
|
70
92
|
cache_key = f"{MarketDataCacheKeys.TICKER_AVG_VOLUME.value}:{ticker}"
|
|
71
|
-
avg_volume = await self.
|
|
93
|
+
avg_volume = await self.read(cache_key=cache_key)
|
|
72
94
|
if avg_volume:
|
|
73
95
|
self.logger.info(f"Returning cached value for {ticker}: {avg_volume}")
|
|
74
96
|
return avg_volume
|
|
@@ -114,7 +136,7 @@ class MarketDataCache:
|
|
|
114
136
|
avg_volume = total_volume / periods_calculated
|
|
115
137
|
|
|
116
138
|
self.logger.info(f"average volume {ticker}: {avg_volume}")
|
|
117
|
-
await self.
|
|
139
|
+
await self.write(
|
|
118
140
|
data=avg_volume,
|
|
119
141
|
cache_key=cache_key,
|
|
120
142
|
cache_ttl=MarketDataCacheTTL.TICKER_AVG_VOLUME.value
|
|
@@ -124,7 +146,7 @@ class MarketDataCache:
|
|
|
124
146
|
async def get_free_float(self, ticker: str):
|
|
125
147
|
self.logger.info(f"Getting free float for {ticker}")
|
|
126
148
|
cache_key = f"{MarketDataCacheKeys.TICKER_FREE_FLOAT.value}:{ticker}"
|
|
127
|
-
free_float = await self.
|
|
149
|
+
free_float = await self.read(cache_key=cache_key)
|
|
128
150
|
if free_float:
|
|
129
151
|
self.logger.info(f"Returning cached value for {ticker}: {free_float}")
|
|
130
152
|
return free_float
|
|
@@ -161,7 +183,7 @@ class MarketDataCache:
|
|
|
161
183
|
raise
|
|
162
184
|
|
|
163
185
|
self.logger.info(f"free float {ticker}: {free_float}")
|
|
164
|
-
await self.
|
|
186
|
+
await self.write(
|
|
165
187
|
data=free_float,
|
|
166
188
|
cache_key=cache_key,
|
|
167
189
|
cache_ttl=MarketDataCacheTTL.TICKER_FREE_FLOAT.value
|
|
@@ -9,7 +9,7 @@ from redis.exceptions import ConnectionError
|
|
|
9
9
|
from massive.rest import RESTClient
|
|
10
10
|
|
|
11
11
|
from kuhl_haus.mdp.analyzers.analyzer import Analyzer
|
|
12
|
-
from kuhl_haus.mdp.
|
|
12
|
+
from kuhl_haus.mdp.data.market_data_analyzer_result import MarketDataAnalyzerResult
|
|
13
13
|
from kuhl_haus.mdp.components.market_data_cache import MarketDataCache
|
|
14
14
|
|
|
15
15
|
|
|
@@ -7,8 +7,8 @@ import redis.asyncio as aioredis
|
|
|
7
7
|
from aio_pika.abc import AbstractIncomingMessage
|
|
8
8
|
|
|
9
9
|
from kuhl_haus.mdp.analyzers.massive_data_analyzer import MassiveDataAnalyzer
|
|
10
|
-
from kuhl_haus.mdp.
|
|
11
|
-
from kuhl_haus.mdp.
|
|
10
|
+
from kuhl_haus.mdp.helpers.web_socket_message_serde import WebSocketMessageSerde
|
|
11
|
+
from kuhl_haus.mdp.data.market_data_analyzer_result import MarketDataAnalyzerResult
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class MassiveDataProcessor:
|
|
@@ -6,9 +6,9 @@ from aio_pika import DeliveryMode
|
|
|
6
6
|
from aio_pika.abc import AbstractConnection, AbstractChannel
|
|
7
7
|
from massive.websocket.models import WebSocketMessage
|
|
8
8
|
|
|
9
|
-
from kuhl_haus.mdp.
|
|
9
|
+
from kuhl_haus.mdp.enum.massive_data_queue import MassiveDataQueue
|
|
10
10
|
from kuhl_haus.mdp.helpers.queue_name_resolver import QueueNameResolver
|
|
11
|
-
from kuhl_haus.mdp.
|
|
11
|
+
from kuhl_haus.mdp.helpers.web_socket_message_serde import WebSocketMessageSerde
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class MassiveDataQueues:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
|
-
from kuhl_haus.mdp.
|
|
2
|
+
from kuhl_haus.mdp.enum.constants import (
|
|
3
3
|
EIGHT_HOURS,
|
|
4
4
|
FIVE_MINUTES,
|
|
5
5
|
ONE_DAY,
|
|
@@ -27,4 +27,3 @@ class MarketDataCacheTTL(Enum):
|
|
|
27
27
|
TOP_VOLUME_SCANNER = THREE_DAYS
|
|
28
28
|
TOP_GAINERS_SCANNER = THREE_DAYS
|
|
29
29
|
TOP_GAPPERS_SCANNER = THREE_DAYS
|
|
30
|
-
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
kuhl_haus/mdp/__init__.py,sha256=5dEpAdB3kypH8tCRECoXwbly1WV9kFU5kh8ldGSa0VI,349
|
|
2
|
+
kuhl_haus/mdp/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
kuhl_haus/mdp/analyzers/analyzer.py,sha256=StUxVZ-IWwO-ALVbakfGVTor-t03kj4QIRHPB8BvcHU,469
|
|
4
|
+
kuhl_haus/mdp/analyzers/massive_data_analyzer.py,sha256=mLnqMq84oWetqXZUPuIGab4bl45FpElNg3MrcSDBrvw,4987
|
|
5
|
+
kuhl_haus/mdp/analyzers/top_stocks.py,sha256=t38kVWvOUmWIiIXFGwbpgJZ6Ng1ErFzS454mhZ7XGdo,10240
|
|
6
|
+
kuhl_haus/mdp/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
kuhl_haus/mdp/components/market_data_cache.py,sha256=9A126CVr3XGBnkBbIMucHfh4GUp2u8vaq5KQJpmLO_M,8005
|
|
8
|
+
kuhl_haus/mdp/components/market_data_scanner.py,sha256=gFPkXYotftDMZWb1JM53X3xWRaf66tkJgvSJVd3DTjc,9743
|
|
9
|
+
kuhl_haus/mdp/components/massive_data_listener.py,sha256=fPEYc6zZzHzFFjbP3zFInajKtEGInj8UQKKo3nKQEwQ,5098
|
|
10
|
+
kuhl_haus/mdp/components/massive_data_processor.py,sha256=HCHoKqG2toLZFhNMI5tuLUC8fYuVY6SclodGs3QK9E0,8605
|
|
11
|
+
kuhl_haus/mdp/components/massive_data_queues.py,sha256=U3gqwbwVeBR4ZdaLbYd3_Ph5Jmc4FO3L_9S3RRxuo4A,5050
|
|
12
|
+
kuhl_haus/mdp/components/widget_data_service.py,sha256=ikygD9NRpidcXBEqft5Q11rHy_eUOwKGyOLEezo-Dd4,7439
|
|
13
|
+
kuhl_haus/mdp/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
kuhl_haus/mdp/data/market_data_analyzer_result.py,sha256=iICb5GVCtuqARNbR1JNCAfbxMijM3uppDNdL8_FB3eI,422
|
|
15
|
+
kuhl_haus/mdp/data/top_stocks_cache_item.py,sha256=Zn9LociBatP2a1OUfjXDFlWM7tCudO-CR4oj6jYfEEM,7916
|
|
16
|
+
kuhl_haus/mdp/enum/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
kuhl_haus/mdp/enum/constants.py,sha256=t55gVHl3IVDSA5Y-mu7zdA8FXAuw4TbOEkI2r2U__1Y,420
|
|
18
|
+
kuhl_haus/mdp/enum/market_data_cache_keys.py,sha256=ahLmwvDziR9XLvs_WHYb7XCo8Kvhs2X44lCoLtoduG0,1065
|
|
19
|
+
kuhl_haus/mdp/enum/market_data_cache_ttl.py,sha256=vwaawSKJEMGNs-V6C2DKKtoPVPVxs6r2zYNOnyfTFM0,640
|
|
20
|
+
kuhl_haus/mdp/enum/market_data_pubsub_keys.py,sha256=WIhBlBE_8sQw1EET7oguxW56tPMomX8J-xn_kkHAdk0,1304
|
|
21
|
+
kuhl_haus/mdp/enum/market_data_scanner_names.py,sha256=BYn1C0rYgGF1Sq583BkHADKUu-28ytNZQ-XgptuCH-Y,260
|
|
22
|
+
kuhl_haus/mdp/enum/massive_data_queue.py,sha256=MfYBcjVc4Fi61DWIvvhhWLUOiLmRpE9egtW-2KH6FTE,188
|
|
23
|
+
kuhl_haus/mdp/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
kuhl_haus/mdp/helpers/process_manager.py,sha256=Is3Jx8nlBWvywQ1acdsdaSJTAG0olKskpPvrRB4VMDE,9024
|
|
25
|
+
kuhl_haus/mdp/helpers/queue_name_resolver.py,sha256=d4Fr5zE98bIWxvis-bUbvn0r7iscS8GNtNj3X7FTzd0,768
|
|
26
|
+
kuhl_haus/mdp/helpers/utils.py,sha256=2jECmezuDBABcB1Fhe1_GPnlEAFnld2bZ1vSdaCZApg,5203
|
|
27
|
+
kuhl_haus/mdp/helpers/web_socket_message_serde.py,sha256=XdaoaByc7IhtzbPDXBtXKOTjyDzfPSDuZVCoHSIaTl4,5468
|
|
28
|
+
kuhl_haus_mdp-0.1.12.dist-info/METADATA,sha256=amyXFWrdzTkCKBazGas2wZgmSD_A4C9UTB4Q5A2cOcg,8888
|
|
29
|
+
kuhl_haus_mdp-0.1.12.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
|
|
30
|
+
kuhl_haus_mdp-0.1.12.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
|
31
|
+
kuhl_haus_mdp-0.1.12.dist-info/licenses/LICENSE.txt,sha256=DRkJftAJcMqoTkQ_Y6-HtKj3nm4pZah_p8XBZiYnw-c,1079
|
|
32
|
+
kuhl_haus_mdp-0.1.12.dist-info/RECORD,,
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
kuhl_haus/mdp/__init__.py,sha256=5dEpAdB3kypH8tCRECoXwbly1WV9kFU5kh8ldGSa0VI,349
|
|
2
|
-
kuhl_haus/mdp/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
kuhl_haus/mdp/analyzers/analyzer.py,sha256=rIU1lcHwP2IBai0QLt0y-4ySg_ibWsutNU8JUgSxa1U,471
|
|
4
|
-
kuhl_haus/mdp/analyzers/massive_data_analyzer.py,sha256=i3XFnornuGGhe6nbk6QqIupND0MYTxwKPjvyFw_UBDU,3863
|
|
5
|
-
kuhl_haus/mdp/analyzers/top_stocks.py,sha256=ZZy7legxmLYad-p_a7N6hqj2mN7bn-ZdPEt9xgk4mrQ,10111
|
|
6
|
-
kuhl_haus/mdp/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
kuhl_haus/mdp/components/market_data_cache.py,sha256=jhBdR8rJEvby7eXTTvXn_PceMSf_gS71oEZV1bK7HdM,7337
|
|
8
|
-
kuhl_haus/mdp/components/market_data_scanner.py,sha256=45MgprFlq03MvmIRYXENsrc7UlTcBE_hIsPyOvNs1zc,9745
|
|
9
|
-
kuhl_haus/mdp/components/widget_data_service.py,sha256=ikygD9NRpidcXBEqft5Q11rHy_eUOwKGyOLEezo-Dd4,7439
|
|
10
|
-
kuhl_haus/mdp/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
kuhl_haus/mdp/helpers/process_manager.py,sha256=Is3Jx8nlBWvywQ1acdsdaSJTAG0olKskpPvrRB4VMDE,9024
|
|
12
|
-
kuhl_haus/mdp/helpers/queue_name_resolver.py,sha256=l_zfRLxrjR9uwRCV2VDO4vPWLK_lj5KVG2p4Lh8xWiw,770
|
|
13
|
-
kuhl_haus/mdp/helpers/utils.py,sha256=2jECmezuDBABcB1Fhe1_GPnlEAFnld2bZ1vSdaCZApg,5203
|
|
14
|
-
kuhl_haus/mdp/integ/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
kuhl_haus/mdp/integ/massive_data_listener.py,sha256=fPEYc6zZzHzFFjbP3zFInajKtEGInj8UQKKo3nKQEwQ,5098
|
|
16
|
-
kuhl_haus/mdp/integ/massive_data_processor.py,sha256=H1WlbGtuSF45n7qLTLleuNlG-OlIXz4llJ7q3XRSS-s,8605
|
|
17
|
-
kuhl_haus/mdp/integ/massive_data_queues.py,sha256=zC_uV2vwZCMyVerDQ18RAQwIMMF75iK4qUSqwuWqgwc,5050
|
|
18
|
-
kuhl_haus/mdp/integ/web_socket_message_serde.py,sha256=XdaoaByc7IhtzbPDXBtXKOTjyDzfPSDuZVCoHSIaTl4,5468
|
|
19
|
-
kuhl_haus/mdp/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
kuhl_haus/mdp/models/constants.py,sha256=t55gVHl3IVDSA5Y-mu7zdA8FXAuw4TbOEkI2r2U__1Y,420
|
|
21
|
-
kuhl_haus/mdp/models/market_data_analyzer_result.py,sha256=iICb5GVCtuqARNbR1JNCAfbxMijM3uppDNdL8_FB3eI,422
|
|
22
|
-
kuhl_haus/mdp/models/market_data_cache_keys.py,sha256=_CSPtwvZo5W6cuj9vb7lRTu6MMuRGASe_VigAaOQXwE,1067
|
|
23
|
-
kuhl_haus/mdp/models/market_data_cache_ttl.py,sha256=v7tnc7-qaxSIWvpInlxqDDTByHLY2uilCPhnP7UaNR0,643
|
|
24
|
-
kuhl_haus/mdp/models/market_data_pubsub_keys.py,sha256=PEIPXK9jBehJB7G4pqoSuQZcfMZgOQq8Yho1itqv-1A,1306
|
|
25
|
-
kuhl_haus/mdp/models/market_data_scanner_names.py,sha256=BYn1C0rYgGF1Sq583BkHADKUu-28ytNZQ-XgptuCH-Y,260
|
|
26
|
-
kuhl_haus/mdp/models/massive_data_queue.py,sha256=MfYBcjVc4Fi61DWIvvhhWLUOiLmRpE9egtW-2KH6FTE,188
|
|
27
|
-
kuhl_haus/mdp/models/top_stocks_cache_item.py,sha256=Zn9LociBatP2a1OUfjXDFlWM7tCudO-CR4oj6jYfEEM,7916
|
|
28
|
-
kuhl_haus_mdp-0.1.10.dist-info/METADATA,sha256=Sku0puFIexyTNpzIO8EoUfV8GXQrfw-T6gAREUrqKYs,8888
|
|
29
|
-
kuhl_haus_mdp-0.1.10.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
|
|
30
|
-
kuhl_haus_mdp-0.1.10.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
|
31
|
-
kuhl_haus_mdp-0.1.10.dist-info/licenses/LICENSE.txt,sha256=DRkJftAJcMqoTkQ_Y6-HtKj3nm4pZah_p8XBZiYnw-c,1079
|
|
32
|
-
kuhl_haus_mdp-0.1.10.dist-info/RECORD,,
|
|
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
|