kuhl-haus-mdp 0.1.11__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 +6 -6
- kuhl_haus/mdp/components/market_data_cache.py +13 -13
- 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 -1
- 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.11.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.11.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.11.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/WHEEL +0 -0
- {kuhl_haus_mdp-0.1.11.dist-info → kuhl_haus_mdp-0.1.12.dist-info}/entry_points.txt +0 -0
- {kuhl_haus_mdp-0.1.11.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.")
|
|
@@ -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,7 +26,7 @@ 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
30
|
"""
|
|
31
31
|
Delete cache entry.
|
|
32
32
|
|
|
@@ -38,21 +38,21 @@ class MarketDataCache:
|
|
|
38
38
|
except Exception as e:
|
|
39
39
|
self.logger.error(f"Error deleting cache entry: {e}")
|
|
40
40
|
|
|
41
|
-
async def
|
|
41
|
+
async def read(self, cache_key: str) -> Optional[dict]:
|
|
42
42
|
"""Fetch current value from Redis cache (for snapshot requests)."""
|
|
43
43
|
value = await self.redis_client.get(cache_key)
|
|
44
44
|
if value:
|
|
45
45
|
return json.loads(value)
|
|
46
46
|
return None
|
|
47
47
|
|
|
48
|
-
async def
|
|
48
|
+
async def write(self, data: Any, cache_key: str, cache_ttl: int = 0):
|
|
49
49
|
if cache_ttl > 0:
|
|
50
50
|
await self.redis_client.setex(cache_key, cache_ttl, json.dumps(data))
|
|
51
51
|
else:
|
|
52
52
|
await self.redis_client.set(cache_key, json.dumps(data))
|
|
53
53
|
self.logger.info(f"Cached data for {cache_key}")
|
|
54
54
|
|
|
55
|
-
async def
|
|
55
|
+
async def broadcast(self, data: Any, publish_key: str = None):
|
|
56
56
|
await self.redis_client.publish(publish_key, json.dumps(data))
|
|
57
57
|
self.logger.info(f"Published data for {publish_key}")
|
|
58
58
|
|
|
@@ -64,12 +64,12 @@ class MarketDataCache:
|
|
|
64
64
|
:return: None
|
|
65
65
|
"""
|
|
66
66
|
cache_key = f"{MarketDataCacheKeys.TICKER_SNAPSHOTS.value}:{ticker}"
|
|
67
|
-
await self.
|
|
67
|
+
await self.delete(cache_key=cache_key)
|
|
68
68
|
|
|
69
69
|
async def get_ticker_snapshot(self, ticker: str) -> TickerSnapshot:
|
|
70
70
|
self.logger.info(f"Getting snapshot for {ticker}")
|
|
71
71
|
cache_key = f"{MarketDataCacheKeys.TICKER_SNAPSHOTS.value}:{ticker}"
|
|
72
|
-
result = await self.
|
|
72
|
+
result = await self.read(cache_key=cache_key)
|
|
73
73
|
if result:
|
|
74
74
|
self.logger.info(f"Returning cached snapshot for {ticker}")
|
|
75
75
|
snapshot = TickerSnapshot(**result)
|
|
@@ -80,7 +80,7 @@ class MarketDataCache:
|
|
|
80
80
|
)
|
|
81
81
|
self.logger.info(f"Snapshot result: {snapshot}")
|
|
82
82
|
data = ticker_snapshot_to_dict(snapshot)
|
|
83
|
-
await self.
|
|
83
|
+
await self.write(
|
|
84
84
|
data=data,
|
|
85
85
|
cache_key=cache_key,
|
|
86
86
|
cache_ttl=MarketDataCacheTTL.TICKER_SNAPSHOTS.value
|
|
@@ -90,7 +90,7 @@ class MarketDataCache:
|
|
|
90
90
|
async def get_avg_volume(self, ticker: str):
|
|
91
91
|
self.logger.info(f"Getting average volume for {ticker}")
|
|
92
92
|
cache_key = f"{MarketDataCacheKeys.TICKER_AVG_VOLUME.value}:{ticker}"
|
|
93
|
-
avg_volume = await self.
|
|
93
|
+
avg_volume = await self.read(cache_key=cache_key)
|
|
94
94
|
if avg_volume:
|
|
95
95
|
self.logger.info(f"Returning cached value for {ticker}: {avg_volume}")
|
|
96
96
|
return avg_volume
|
|
@@ -136,7 +136,7 @@ class MarketDataCache:
|
|
|
136
136
|
avg_volume = total_volume / periods_calculated
|
|
137
137
|
|
|
138
138
|
self.logger.info(f"average volume {ticker}: {avg_volume}")
|
|
139
|
-
await self.
|
|
139
|
+
await self.write(
|
|
140
140
|
data=avg_volume,
|
|
141
141
|
cache_key=cache_key,
|
|
142
142
|
cache_ttl=MarketDataCacheTTL.TICKER_AVG_VOLUME.value
|
|
@@ -146,7 +146,7 @@ class MarketDataCache:
|
|
|
146
146
|
async def get_free_float(self, ticker: str):
|
|
147
147
|
self.logger.info(f"Getting free float for {ticker}")
|
|
148
148
|
cache_key = f"{MarketDataCacheKeys.TICKER_FREE_FLOAT.value}:{ticker}"
|
|
149
|
-
free_float = await self.
|
|
149
|
+
free_float = await self.read(cache_key=cache_key)
|
|
150
150
|
if free_float:
|
|
151
151
|
self.logger.info(f"Returning cached value for {ticker}: {free_float}")
|
|
152
152
|
return free_float
|
|
@@ -183,7 +183,7 @@ class MarketDataCache:
|
|
|
183
183
|
raise
|
|
184
184
|
|
|
185
185
|
self.logger.info(f"free float {ticker}: {free_float}")
|
|
186
|
-
await self.
|
|
186
|
+
await self.write(
|
|
187
187
|
data=free_float,
|
|
188
188
|
cache_key=cache_key,
|
|
189
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:
|
|
@@ -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=uKH7uRJNaPRcpBvFLFM_wJVqo8QyHZ8Obj8zjU3dx9E,10255
|
|
6
|
-
kuhl_haus/mdp/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
kuhl_haus/mdp/components/market_data_cache.py,sha256=Jp5bTycVlY1y5cY9wolqlhwFFqUgBIHnTJh8zPyqxCY,8064
|
|
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=mfNNrt0mkdppQtjb6gvyd2toSPCcmK_s-EcY5nQ0xLE,642
|
|
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.11.dist-info/METADATA,sha256=U5ev3SWbfM1L1bIChjE8LYmjz_xqyHMg-9lpRQcponQ,8888
|
|
29
|
-
kuhl_haus_mdp-0.1.11.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
|
|
30
|
-
kuhl_haus_mdp-0.1.11.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
|
31
|
-
kuhl_haus_mdp-0.1.11.dist-info/licenses/LICENSE.txt,sha256=DRkJftAJcMqoTkQ_Y6-HtKj3nm4pZah_p8XBZiYnw-c,1079
|
|
32
|
-
kuhl_haus_mdp-0.1.11.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
|