programgarden-core 1.27.0__tar.gz → 1.28.0__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 (84) hide show
  1. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/PKG-INFO +1 -1
  2. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/listener.py +7 -1
  3. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/pyproject.toml +1 -1
  4. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/README.md +0 -0
  5. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/__init__.py +0 -0
  6. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/__init__.py +0 -0
  7. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/client.py +0 -0
  8. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/components.py +0 -0
  9. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/mixins.py +0 -0
  10. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/products.py +0 -0
  11. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/sql.py +0 -0
  12. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/bases/storage.py +0 -0
  13. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/code_node.py +0 -0
  14. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/exceptions.py +0 -0
  15. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/expression/__init__.py +0 -0
  16. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/expression/evaluator.py +0 -0
  17. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/i18n/__init__.py +0 -0
  18. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/i18n/locales/en.json +0 -0
  19. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/i18n/locales/ko.json +0 -0
  20. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/i18n/translator.py +0 -0
  21. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/korea_alias.py +0 -0
  22. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/__init__.py +0 -0
  23. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/connection_rule.py +0 -0
  24. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/credential.py +0 -0
  25. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/edge.py +0 -0
  26. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/event.py +0 -0
  27. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/exchange.py +0 -0
  28. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/field_binding.py +0 -0
  29. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/job.py +0 -0
  30. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/order_diagnostics.py +0 -0
  31. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/plugin_resource.py +0 -0
  32. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/resilience.py +0 -0
  33. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/resource.py +0 -0
  34. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/validation.py +0 -0
  35. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/models/workflow.py +0 -0
  36. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/__init__.py +0 -0
  37. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/account_futures.py +0 -0
  38. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/account_korea_stock.py +0 -0
  39. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/account_stock.py +0 -0
  40. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/ai.py +0 -0
  41. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/backtest.py +0 -0
  42. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/backtest_futures.py +0 -0
  43. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/backtest_korea_stock.py +0 -0
  44. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/backtest_stock.py +0 -0
  45. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/base.py +0 -0
  46. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/broker.py +0 -0
  47. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/calculation.py +0 -0
  48. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/code.py +0 -0
  49. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/condition.py +0 -0
  50. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/data.py +0 -0
  51. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/data_futures.py +0 -0
  52. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/data_korea_stock.py +0 -0
  53. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/data_stock.py +0 -0
  54. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/display.py +0 -0
  55. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/event.py +0 -0
  56. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/fundamental_korea_stock.py +0 -0
  57. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/fundamental_stock.py +0 -0
  58. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/infra.py +0 -0
  59. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/market_external.py +0 -0
  60. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/market_status.py +0 -0
  61. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/open_orders_futures.py +0 -0
  62. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/open_orders_korea_stock.py +0 -0
  63. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/open_orders_stock.py +0 -0
  64. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/order.py +0 -0
  65. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/portfolio.py +0 -0
  66. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/realtime_futures.py +0 -0
  67. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/realtime_korea_stock.py +0 -0
  68. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/realtime_stock.py +0 -0
  69. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/risk.py +0 -0
  70. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/symbol.py +0 -0
  71. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/symbol_futures.py +0 -0
  72. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/symbol_korea_stock.py +0 -0
  73. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/symbol_stock.py +0 -0
  74. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/nodes/trigger.py +0 -0
  75. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/presets/__init__.py +0 -0
  76. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/presets/news_analyst.json +0 -0
  77. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/presets/risk_manager.json +0 -0
  78. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/presets/strategist.json +0 -0
  79. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/presets/technical_analyst.json +0 -0
  80. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/registry/__init__.py +0 -0
  81. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/registry/credential_registry.py +0 -0
  82. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/registry/node_registry.py +0 -0
  83. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/registry/plugin_registry.py +0 -0
  84. {programgarden_core-1.27.0 → programgarden_core-1.28.0}/programgarden_core/retry_executor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: programgarden-core
3
- Version: 1.27.0
3
+ Version: 1.28.0
4
4
  Summary: ProgramGarden Core - 노드 기반 DSL 핵심 타입 정의
5
5
  License-Expression: AGPL-3.0-or-later
6
6
  Author: 프로그램동산
@@ -650,7 +650,7 @@ class OrderFillEvent:
650
650
  received_at: str
651
651
  node_id: Optional[str] = None
652
652
  execution_id: Optional[Union[str, int]] = None
653
- timestamp: datetime = field(default_factory=datetime.utcnow)
653
+ timestamp: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
654
654
 
655
655
 
656
656
  @runtime_checkable
@@ -1046,3 +1046,9 @@ class ConsoleExecutionListener(BaseExecutionListener):
1046
1046
  print(f"{color}{emoji} NOTIFY {cat.upper()}{node_tag} {event.title}{reset}")
1047
1047
  if event.message:
1048
1048
  print(f" {event.message}")
1049
+
1050
+ async def on_order_fill(self, event: 'OrderFillEvent') -> None:
1051
+ """Print a confirmed order fill (facts only, no P&L)."""
1052
+ node_tag = f" [{event.node_id}]" if event.node_id else ""
1053
+ print(f"💵 FILL{node_tag} {event.symbol} {event.side} {event.quantity}@{event.price} "
1054
+ f"[{event.classification}] order={event.order_no} ({event.trading_mode})")
@@ -5,7 +5,7 @@ authors = [
5
5
  homepage = "https://programgarden.com"
6
6
  requires-python = ">=3.12"
7
7
  name = "programgarden-core"
8
- version = "1.27.0"
8
+ version = "1.28.0"
9
9
  license = "AGPL-3.0-or-later"
10
10
  description = "ProgramGarden Core - 노드 기반 DSL 핵심 타입 정의"
11
11
  readme = "README.md"