tastytrade 11.0.1__tar.gz → 11.0.3__tar.gz

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.
Files changed (82) hide show
  1. {tastytrade-11.0.1 → tastytrade-11.0.3}/PKG-INFO +1 -1
  2. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/__init__.py +2 -2
  3. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/metrics.py +13 -3
  4. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/order.py +2 -2
  5. tastytrade-11.0.3/tmp.py +32 -0
  6. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/CONTRIBUTING.md +0 -0
  7. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/FUNDING.yml +0 -0
  8. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/pull_request_template.md +0 -0
  9. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/workflows/python-app.yml +0 -0
  10. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/workflows/python-publish-test.yml +0 -0
  11. {tastytrade-11.0.1 → tastytrade-11.0.3}/.github/workflows/python-publish.yml +0 -0
  12. {tastytrade-11.0.1 → tastytrade-11.0.3}/.gitignore +0 -0
  13. {tastytrade-11.0.1 → tastytrade-11.0.3}/.python-version +0 -0
  14. {tastytrade-11.0.1 → tastytrade-11.0.3}/.readthedocs.yaml +0 -0
  15. {tastytrade-11.0.1 → tastytrade-11.0.3}/LICENSE +0 -0
  16. {tastytrade-11.0.1 → tastytrade-11.0.3}/Makefile +0 -0
  17. {tastytrade-11.0.1 → tastytrade-11.0.3}/README.md +0 -0
  18. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/Makefile +0 -0
  19. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/account-streamer.rst +0 -0
  20. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/accounts.rst +0 -0
  21. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/account.rst +0 -0
  22. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/dxfeed.rst +0 -0
  23. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/instruments.rst +0 -0
  24. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/market-data.rst +0 -0
  25. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/market-sessions.rst +0 -0
  26. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/metrics.rst +0 -0
  27. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/order.rst +0 -0
  28. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/search.rst +0 -0
  29. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/session.rst +0 -0
  30. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/streamer.rst +0 -0
  31. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/utils.rst +0 -0
  32. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/api/watchlists.rst +0 -0
  33. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/conf.py +0 -0
  34. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/data-streamer.rst +0 -0
  35. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/img/netliq.png +0 -0
  36. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/index.rst +0 -0
  37. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/installation.rst +0 -0
  38. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/instruments.rst +0 -0
  39. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/make.bat +0 -0
  40. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/market-data.rst +0 -0
  41. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/market-sessions.rst +0 -0
  42. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/orders.rst +0 -0
  43. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/sessions.rst +0 -0
  44. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/sync-async.rst +0 -0
  45. {tastytrade-11.0.1 → tastytrade-11.0.3}/docs/watchlists.rst +0 -0
  46. {tastytrade-11.0.1 → tastytrade-11.0.3}/pyproject.toml +0 -0
  47. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/account.py +0 -0
  48. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/__init__.py +0 -0
  49. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/candle.py +0 -0
  50. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/event.py +0 -0
  51. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/greeks.py +0 -0
  52. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/profile.py +0 -0
  53. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/quote.py +0 -0
  54. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/summary.py +0 -0
  55. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/theoprice.py +0 -0
  56. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/timeandsale.py +0 -0
  57. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/trade.py +0 -0
  58. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/dxfeed/underlying.py +0 -0
  59. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/instruments.py +0 -0
  60. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/market_data.py +0 -0
  61. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/market_sessions.py +0 -0
  62. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/oauth.py +0 -0
  63. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/py.typed +0 -0
  64. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/search.py +0 -0
  65. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/session.py +0 -0
  66. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/streamer.py +0 -0
  67. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/utils.py +0 -0
  68. {tastytrade-11.0.1 → tastytrade-11.0.3}/tastytrade/watchlists.py +0 -0
  69. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/__init__.py +0 -0
  70. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/conftest.py +0 -0
  71. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_account.py +0 -0
  72. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_dxfeed.py +0 -0
  73. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_instruments.py +0 -0
  74. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_market_data.py +0 -0
  75. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_market_sessions.py +0 -0
  76. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_metrics.py +0 -0
  77. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_search.py +0 -0
  78. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_session.py +0 -0
  79. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_streamer.py +0 -0
  80. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_utils.py +0 -0
  81. {tastytrade-11.0.1 → tastytrade-11.0.3}/tests/test_watchlists.py +0 -0
  82. {tastytrade-11.0.1 → tastytrade-11.0.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tastytrade
3
- Version: 11.0.1
3
+ Version: 11.0.3
4
4
  Summary: An unofficial, sync/async SDK for Tastytrade!
5
5
  Project-URL: Homepage, https://github.com/tastyware/tastytrade
6
6
  Project-URL: Documentation, https://tastyworks-api.rtfd.io
@@ -1,10 +1,10 @@
1
1
  import logging
2
2
 
3
3
  API_URL = "https://api.tastyworks.com"
4
- API_VERSION = "20251026"
4
+ API_VERSION = "20251101"
5
5
  CERT_URL = "https://api.cert.tastyworks.com"
6
6
  VAST_URL = "https://vast.tastyworks.com"
7
- VERSION = "11.0.1"
7
+ VERSION = "11.0.3"
8
8
 
9
9
  __version__ = VERSION
10
10
  version_str: str = f"tastyware/tastytrade:v{VERSION}"
@@ -2,7 +2,7 @@ from datetime import date, datetime
2
2
  from decimal import Decimal
3
3
 
4
4
  from tastytrade.session import Session
5
- from tastytrade.utils import TastytradeData
5
+ from tastytrade.utils import TastytradeData, validate_and_parse
6
6
 
7
7
 
8
8
  class DividendInfo(TastytradeData):
@@ -206,7 +206,12 @@ async def a_get_risk_free_rate(session: Session) -> Decimal:
206
206
 
207
207
  :param session: active user session to use
208
208
  """
209
- data = await session._a_get("/margin-requirements-public-configuration")
209
+ request = session.async_client.build_request(
210
+ "GET", "/margin-requirements-public-configuration", timeout=30
211
+ )
212
+ del request.headers["Authorization"]
213
+ response = await session.async_client.send(request)
214
+ data = validate_and_parse(response)
210
215
  return Decimal(data["risk-free-rate"])
211
216
 
212
217
 
@@ -216,5 +221,10 @@ def get_risk_free_rate(session: Session) -> Decimal:
216
221
 
217
222
  :param session: active user session to use
218
223
  """
219
- data = session._get("/margin-requirements-public-configuration")
224
+ request = session.sync_client.build_request(
225
+ "GET", "/margin-requirements-public-configuration", timeout=30
226
+ )
227
+ del request.headers["Authorization"]
228
+ response = session.sync_client.send(request)
229
+ data = validate_and_parse(response)
220
230
  return Decimal(data["risk-free-rate"])
@@ -316,8 +316,8 @@ class PlacedOrder(TastytradeData):
316
316
  cancelled_at: datetime | None = None
317
317
  cancel_user_id: str | None = None
318
318
  cancel_username: str | None = None
319
- replacing_order_id: str | None = None
320
- replaces_order_id: str | None = None
319
+ replacing_order_id: int | None = None
320
+ replaces_order_id: int | None = None
321
321
  in_flight_at: datetime | None = None
322
322
  live_at: datetime | None = None
323
323
  received_at: datetime | None = None
@@ -0,0 +1,32 @@
1
+ import asyncio
2
+ import os
3
+ from datetime import date, datetime, time
4
+
5
+ import pandas as pd
6
+
7
+ from tastytrade import Session
8
+ from tastytrade.dxfeed.candle import Candle
9
+ from tastytrade.streamer import DXLinkStreamer
10
+ from tastytrade.utils import TZ
11
+
12
+ session = Session(os.environ["TT_SECRET"], os.environ["TT_REFRESH"])
13
+
14
+
15
+ async def main():
16
+ async with DXLinkStreamer(session) as streamer:
17
+ start_time = datetime.combine(date(2025, 11, 7), time(9, 30), tzinfo=TZ)
18
+ ts = round(start_time.timestamp() * 1000)
19
+ await streamer.subscribe_candle(["DIA"], "5s", start_time=start_time)
20
+ candles: list[Candle] = []
21
+ async for candle in streamer.listen(Candle):
22
+ candles.append(candle)
23
+ if candle.time <= ts:
24
+ break
25
+ candles.sort(key=lambda c: c.time)
26
+ df = pd.DataFrame([c.model_dump() for c in candles])
27
+ df = df[["time", "open", "high", "low", "close"]]
28
+ print(df)
29
+
30
+
31
+ if __name__ == "__main__":
32
+ asyncio.run(main())
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