ctrader-api-client 0.2.1__tar.gz → 0.2.2__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 (93) hide show
  1. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/PKG-INFO +1 -1
  2. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/pyproject.toml +1 -1
  3. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/api/market_data.py +1 -1
  4. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/market_data.py +10 -10
  5. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/uv.lock +1 -1
  6. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/.claude/settings.local.json +0 -0
  7. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/.github/workflows/docs.yml +0 -0
  8. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/.gitignore +0 -0
  9. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/.pre-commit-config.yaml +0 -0
  10. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/.python-version +0 -0
  11. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/Justfile +0 -0
  12. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/LICENSE +0 -0
  13. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/README.md +0 -0
  14. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/accounts.md +0 -0
  15. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/client.md +0 -0
  16. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/enums.md +0 -0
  17. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/events.md +0 -0
  18. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/market-data.md +0 -0
  19. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/models.md +0 -0
  20. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/symbols.md +0 -0
  21. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/api/trading.md +0 -0
  22. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/getting-started.md +0 -0
  23. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/docs/index.md +0 -0
  24. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/mkdocs.yml +0 -0
  25. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/SOURCE +0 -0
  26. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/VERSION +0 -0
  27. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/update.sh +0 -0
  28. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/vendor/.gitkeep +0 -0
  29. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/vendor/OpenApiCommonMessages.proto +0 -0
  30. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/vendor/OpenApiCommonModelMessages.proto +0 -0
  31. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/vendor/OpenApiMessages.proto +0 -0
  32. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/protos/vendor/OpenApiModelMessages.proto +0 -0
  33. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/scripts/fix_proto_imports.py +0 -0
  34. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/__init__.py +0 -0
  35. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/__init__.py +0 -0
  36. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/messages.py +0 -0
  37. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/proto/OpenApiCommonMessages.py +0 -0
  38. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/proto/OpenApiCommonModelMessages.py +0 -0
  39. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/proto/OpenApiMessages.py +0 -0
  40. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/proto/OpenApiModelMessages.py +0 -0
  41. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/proto/__init__.py +0 -0
  42. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/_internal/serialization.py +0 -0
  43. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/api/__init__.py +0 -0
  44. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/api/accounts.py +0 -0
  45. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/api/symbols.py +0 -0
  46. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/api/trading.py +0 -0
  47. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/auth/__init__.py +0 -0
  48. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/auth/credentials.py +0 -0
  49. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/auth/manager.py +0 -0
  50. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/client.py +0 -0
  51. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/config.py +0 -0
  52. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/connection/__init__.py +0 -0
  53. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/connection/heartbeat.py +0 -0
  54. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/connection/protocol.py +0 -0
  55. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/connection/transport.py +0 -0
  56. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/enums.py +0 -0
  57. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/events/__init__.py +0 -0
  58. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/events/emitter.py +0 -0
  59. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/events/router.py +0 -0
  60. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/events/types.py +0 -0
  61. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/exceptions.py +0 -0
  62. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/__init__.py +0 -0
  63. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/_base.py +0 -0
  64. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/account.py +0 -0
  65. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/deal.py +0 -0
  66. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/order.py +0 -0
  67. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/position.py +0 -0
  68. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/requests.py +0 -0
  69. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/models/symbol.py +0 -0
  70. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/src/ctrader_api_client/py.typed +0 -0
  71. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/_internal/test_messages.py +0 -0
  72. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/_internal/test_serialization.py +0 -0
  73. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/api/conftest.py +0 -0
  74. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/api/test_accounts.py +0 -0
  75. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/api/test_market_data_api.py +0 -0
  76. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/api/test_symbols.py +0 -0
  77. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/api/test_trading.py +0 -0
  78. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/auth/test_credentials.py +0 -0
  79. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/auth/test_manager.py +0 -0
  80. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/connection/test_heartbeat.py +0 -0
  81. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/connection/test_protocol.py +0 -0
  82. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/connection/test_transport.py +0 -0
  83. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/events/test_emitter.py +0 -0
  84. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/events/test_router.py +0 -0
  85. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/events/test_types.py +0 -0
  86. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_account.py +0 -0
  87. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_deal.py +0 -0
  88. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_market_data.py +0 -0
  89. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_order.py +0 -0
  90. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_position.py +0 -0
  91. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_requests.py +0 -0
  92. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/models/test_symbol.py +0 -0
  93. {ctrader_api_client-0.2.1 → ctrader_api_client-0.2.2}/tests/unit/test_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ctrader-api-client
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: API Client to interact with the cTrader Open API spec
5
5
  Author-email: Elio <elioachukri@pm.me>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ctrader-api-client"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = "API Client to interact with the cTrader Open API spec"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -372,7 +372,7 @@ class MarketDataAPI:
372
372
  description=f"Expected ProtoOAGetTrendbarsRes, got {type(response).__name__}",
373
373
  )
374
374
 
375
- return [Trendbar.from_proto(t) for t in response.trendbar]
375
+ return [Trendbar.from_proto(t, historical=True) for t in response.trendbar]
376
376
 
377
377
  async def get_tick_data(
378
378
  self,
@@ -56,17 +56,15 @@ class Trendbar(FrozenModel):
56
56
  volume: int
57
57
 
58
58
  @classmethod
59
- def from_proto(cls, proto: ProtoOATrendbar, bid_price: float | None = None) -> Trendbar:
60
- """Create Trendbar from proto message.
59
+ def from_proto(cls, proto: ProtoOATrendbar, bid_price: float | None = None, historical: bool = False) -> Trendbar:
60
+ """Create a Trendbar from a proto message.
61
61
 
62
62
  Args:
63
- proto: The proto message.
64
- bid_price: Optional bid price to use for specifying the close price since the API never provides delta_close
65
- on live trendbar updates.
66
-
67
- Returns:
68
- A new Trendbar instance.
63
+ proto: Source proto message.
64
+ bid_price: Bid price used as close when the API omits delta_close on live updates.
65
+ historical: If False, raises on delta_close == 0 instead of silently returning low == close.
69
66
  """
67
+
70
68
  # Calculate timestamp from utc_timestamp_in_minutes
71
69
  ts = datetime.now(UTC)
72
70
  if proto.utc_timestamp_in_minutes:
@@ -80,9 +78,11 @@ class Trendbar(FrozenModel):
80
78
  if bid_price is not None:
81
79
  close = bid_price
82
80
  else:
83
- if proto.delta_close == 0:
84
- # If delta_close is 0, it means the API did not provide a close price (e.g. for live updates).
81
+ if not historical and proto.delta_close == 0:
82
+ # If delta_close is 0 on a live bar, it means the API did not provide a close price.
85
83
  # In this case, we must raise instead of silently returning an incorrect close price.
84
+ # If historical is True, we allow delta_close to be 0 since historical bars can have a close price equal
85
+ # to the low price.
86
86
  raise RuntimeError(
87
87
  "delta_close missing from Trendbar proto and no bid_price was provided to use as fallback."
88
88
  "Returning error as this is safer than silently returning an incorrect close price of low + 0."
@@ -201,7 +201,7 @@ wheels = [
201
201
 
202
202
  [[package]]
203
203
  name = "ctrader-api-client"
204
- version = "0.2.1"
204
+ version = "0.2.2"
205
205
  source = { editable = "." }
206
206
  dependencies = [
207
207
  { name = "anyio" },