Skip to content

Commit 1e830fd

Browse files
committed
modified stocks with new library
1 parent acbff0e commit 1e830fd

File tree

11 files changed

+181
-125
lines changed

11 files changed

+181
-125
lines changed

tutorials/stock-wallet/front/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

tutorials/stock-wallet/front/Stock Wallet.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

tutorials/stock-wallet/microservices/stocks/poetry.lock

Lines changed: 140 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tutorials/stock-wallet/microservices/stocks/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ minos-broker-kafka = "^0.5.0"
1616
minos-discovery-minos = "^0.5.0"
1717
typer = "^0.3.2"
1818
SQLAlchemy = "^1.4.0"
19-
alpha-vantage = "^2.3.1"
20-
arrow = "^1.2.2"
19+
pendulum = "^2.1.2"
20+
polygon-api-client = "^0.2.11"
2121

2222
[tool.poetry.dev-dependencies]
2323
black = "^19.10b"
Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import logging
22

3-
import arrow
4-
from alpha_vantage.async_support.timeseries import (
5-
TimeSeries,
6-
)
7-
3+
import pendulum
84
from minos.aggregate import (
95
Event,
106
)
@@ -19,6 +15,7 @@
1915
from ..aggregates import (
2016
StocksAggregate,
2117
)
18+
from polygon import RESTClient
2219

2320
logger = logging.getLogger(__name__)
2421

@@ -32,40 +29,30 @@ async def set_stock_ticker(self, request: Request):
3229
for ticker in event["tickers"]:
3330
await StocksAggregate.add_ticker_to_stock(ticker["ticker"])
3431

35-
async def call_remote(self, ticker):
36-
timeserie = TimeSeries(key="LPY6CZEYR6OIMRYA")
37-
data, metadata = await timeserie.get_intraday(ticker)
38-
return data, metadata
39-
40-
async def add_quote(self, ticker: str, when: str, quote: dict):
41-
await StocksAggregate.add_quotes(
42-
ticker,
43-
{"close": quote["4. close"], "volume": quote["5. volume"], "when": when},
44-
)
32+
def call_remote(self, ticker, from_: str, to_: str):
33+
with RESTClient("") as client:
34+
resp = client.stocks_equities_aggregates(ticker, 1, "hour", from_, to_, adjusted=True, sort="asc",
35+
limit=50000)
36+
return resp.results
4537

4638
@enroute.periodic.event("* * * * *")
4739
async def get_stock_values(self, request: Request):
4840
tickers = await StocksAggregate.get_all_tickers()
41+
now = pendulum.now()
42+
now_minus_one_month = now.subtract(months=1)
4943
if len(tickers) > 0:
5044
for ticker in tickers:
51-
updated = ticker["updated"]
52-
data, metadata = await self.call_remote(ticker["ticker"])
53-
last_data_refresh = metadata["3. Last Refreshed"]
54-
if updated == "Never":
55-
data, metadata = await self.call_remote(ticker["ticker"])
56-
await StocksAggregate.update_time_ticker(ticker["uuid"], last_data_refresh)
57-
for when, stock_quote in data.items():
58-
await self.add_quote(ticker["uuid"], when, stock_quote)
59-
else:
60-
time_now_object = arrow.get(updated, "YYYY-MM-DD HH:mm:ss")
61-
time_last_update = arrow.get(last_data_refresh, "YYYY-MM-DD HH:mm:ss")
62-
diff = time_last_update - time_now_object
63-
diff_in_seconds = diff.total_seconds()
64-
if diff_in_seconds > 60:
65-
await StocksAggregate.update_time_ticker(ticker["uuid"], last_data_refresh)
66-
for when, stock_quote in data.items():
67-
time_stock_loop = arrow.get(when, "YYYY-MM-DD HH:mm:ss")
68-
diff_loop = last_data_refresh - time_stock_loop
69-
diff_loop_seconds = diff_loop.total_seconds()
70-
if diff_loop_seconds > 60:
71-
await self.add_quote(ticker["uuid"], when, stock_quote)
45+
ticker_updated = pendulum.parse(ticker["updated"])
46+
results = await self.call_remote(ticker["ticker"],
47+
now_minus_one_month.to_date_string(),
48+
now.to_date_string())
49+
for result in results:
50+
result_date = pendulum.parse(result["t"])
51+
difference_ticker_result = ticker_updated.diff(result_date).in_hours()
52+
if difference_ticker_result < 0:
53+
await StocksAggregate.update_time_ticker(ticker["uuid"], result_date.to_datetime_string())
54+
when = result_date.to_datetime_string()
55+
await StocksAggregate.add_quotes(ticker["uuid"], {"close": result['c'],
56+
"volume": result['v'],
57+
"when": when})
58+

tutorials/stock-wallet/microservices/stocks/tests/test_aggregates.py

Lines changed: 0 additions & 29 deletions
This file was deleted.

tutorials/stock-wallet/microservices/stocks/tests/test_commands/test_services.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import sys
22
import unittest
33

4+
import pendulum
5+
46
from src import (
57
Stocks,
68
StocksCommandService,
@@ -29,23 +31,13 @@ def test_constructor(self):
2931
service = StocksCommandService()
3032
self.assertIsInstance(service, StocksCommandService)
3133

32-
async def test_create_stocks(self):
34+
async def test_get_remote_quotes(self):
3335
service = StocksCommandService()
36+
now = pendulum.now()
37+
now_minus_one_month = now.subtract(months=1)
38+
response = service.call_remote("AAPL", now_minus_one_month.to_date_string(), now.to_date_string())
39+
self.assertIsInstance(response, list)
3440

35-
request = InMemoryRequest({})
36-
response = await service.create_stocks(request)
37-
38-
self.assertIsInstance(response, Response)
39-
40-
observed = await response.content()
41-
expected = Stocks(
42-
created_at=observed.created_at,
43-
updated_at=observed.updated_at,
44-
uuid=observed.uuid,
45-
version=observed.version,
46-
)
47-
48-
self.assertEqual(expected, observed)
4941

5042

5143
if __name__ == "__main__":

tutorials/stock-wallet/microservices/wallet/src/aggregates.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
class Ticker(Entity):
1515
ticker: str
16-
is_crypto: bool
16+
flag: str
1717

1818

1919
class Wallet(RootEntity):
@@ -36,10 +36,10 @@ async def create_wallet(ticker_name: str) -> UUID:
3636
return root.uuid
3737

3838
@staticmethod
39-
async def add_ticker(wallet_uudi: str, ticker_value: str, is_crypto: bool) -> UUID:
39+
async def add_ticker(wallet_uudi: str, ticker_value: str, flag: str) -> UUID:
4040
"""Create a new instance."""
4141
wallet = await Wallet.get(wallet_uudi)
42-
ticker = Ticker(ticker=ticker_value, is_crypto=is_crypto)
42+
ticker = Ticker(ticker=ticker_value, flag=flag)
4343
logger.warning("Added following information ticker {}, {}, {}".format(wallet_uudi, ticker_value, is_crypto))
4444
wallet.tickers.add(ticker)
4545
await wallet.save()

tutorials/stock-wallet/microservices/wallet/src/commands/services.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ async def add_ticker(self, request: Request) -> Response:
4141
content = await request.content()
4242
wallet_uuid = content["wallet"]
4343
ticker = content["ticker"]
44-
is_crypto = content["is_crypto"]
45-
uuid = await WalletAggregate.add_ticker(wallet_uuid, ticker, is_crypto)
46-
return Response({"uuid": uuid, "ticker": ticker, "is_crypto": is_crypto})
44+
flag = content["flag"]
45+
uuid = await WalletAggregate.add_ticker(wallet_uuid, ticker, flag)
46+
return Response({"uuid": uuid, "ticker": ticker, "flag": flag})
4747
except Exception as exc:
4848
raise ResponseException(f"An error occurred during Wallet creation: {exc}")

tutorials/stock-wallet/microservices/wallet/src/queries/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Ticker(Base):
3131
wallet_id = Column(Integer, ForeignKey("wallet.id"))
3232
wallet = relationship("Wallet", backref=backref("tickers"))
3333
ticker = Column(String(10), unique=True)
34-
is_crypto = Column(Boolean, default=False, unique=False)
34+
flag = Column(String(30))
3535
latest_value = Column(Float)
3636

3737

0 commit comments

Comments
 (0)