programgarden 1.31.2__tar.gz → 1.32.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.
- {programgarden-1.31.2 → programgarden-1.32.0}/PKG-INFO +2 -2
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/__init__.py +8 -1
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/context.py +3 -1
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/executor.py +22 -2
- {programgarden-1.31.2 → programgarden-1.32.0}/pyproject.toml +2 -2
- {programgarden-1.31.2 → programgarden-1.32.0}/README.md +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/binding_validator.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/client.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/code_worker.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/__init__.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/checkpoint_manager.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/query_builder.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/workflow_position_tracker.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/workflow_risk_tracker.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/deep_fixtures.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/node_runner.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/plugin/__init__.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/plugin/sandbox.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/providers/__init__.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/providers/llm_errors.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/providers/llm_provider.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/reconnect_handler.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resolver.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resource/__init__.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resource/context.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resource/limiter.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resource/monitor.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/resource/throttle.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/semantic_rules.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/__init__.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/credential_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/definition_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/event_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/job_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/registry_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/tools/sqlite_tools.py +0 -0
- {programgarden-1.31.2 → programgarden-1.32.0}/programgarden/validation_recommender.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: programgarden
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.32.0
|
|
4
4
|
Summary: ProgramGarden - 노드 기반 자동매매 DSL 실행 엔진
|
|
5
5
|
License-Expression: AGPL-3.0-or-later
|
|
6
6
|
Author: 프로그램동산
|
|
@@ -17,7 +17,7 @@ Requires-Dist: litellm (>=1.40.0)
|
|
|
17
17
|
Requires-Dist: lxml (>=6.0.2,<7.0.0)
|
|
18
18
|
Requires-Dist: programgarden-community (>=1.15.0,<2.0.0)
|
|
19
19
|
Requires-Dist: programgarden-core (>=1.24.0,<2.0.0)
|
|
20
|
-
Requires-Dist: programgarden-finance (>=1.
|
|
20
|
+
Requires-Dist: programgarden-finance (>=1.9.0,<2.0.0)
|
|
21
21
|
Requires-Dist: psutil (>=6.0.0,<7.0.0)
|
|
22
22
|
Requires-Dist: psycopg2-binary (>=2.9.11,<3.0.0)
|
|
23
23
|
Requires-Dist: pydantic (>=2.0.0,<3.0.0)
|
|
@@ -91,7 +91,14 @@ except ImportError:
|
|
|
91
91
|
# Community package not installed
|
|
92
92
|
pass
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
# 배포 metadata 에서 파생한다. 손으로 적으면 릴리스 때마다 잊혀 **패키지가 스스로 거짓
|
|
95
|
+
# 버전을 말한다** — 실제로 1.31.2 를 출하하는 동안 여기는 1.29.3 이었다.
|
|
96
|
+
try: # 설치된 배포판
|
|
97
|
+
from importlib.metadata import version as _pkg_version
|
|
98
|
+
|
|
99
|
+
__version__ = _pkg_version("programgarden")
|
|
100
|
+
except Exception: # 소스 트리에서 직접 import (미설치)
|
|
101
|
+
__version__ = "0.0.0+source"
|
|
95
102
|
__all__ = [
|
|
96
103
|
# Core
|
|
97
104
|
"ProgramGarden",
|
|
@@ -150,7 +150,9 @@ class ExecutionContext:
|
|
|
150
150
|
workflow_edges: Optional[List[Any]] = None, # List[ResolvedEdge]
|
|
151
151
|
workflow_nodes: Optional[Dict[str, Any]] = None, # Dict[str, ResolvedNode]
|
|
152
152
|
storage_dir: Optional[str] = None,
|
|
153
|
-
|
|
153
|
+
# sync (appkey, product, paper_trading, *, force_reissue=False, stale_token=None)
|
|
154
|
+
# -> (token, expires_at_epoch)
|
|
155
|
+
ls_token_provider: Optional[Any] = None,
|
|
154
156
|
):
|
|
155
157
|
self.job_id = job_id
|
|
156
158
|
self.workflow_id = workflow_id
|
|
@@ -547,10 +547,25 @@ class LSClientManager:
|
|
|
547
547
|
# appkey/product/paper_trading; returns (access_token, expires_at_epoch).
|
|
548
548
|
token_provider = getattr(context, "ls_token_provider", None)
|
|
549
549
|
if token_provider is not None:
|
|
550
|
+
from programgarden_finance.ls.token_manager import provider_accepts_kwarg
|
|
551
|
+
|
|
552
|
+
# 사용 중 토큰 실패로 촉발되는 강제 재발급을 서버까지 전달한다. 이 인자를
|
|
553
|
+
# 못 넘기면 서버가 캐시된(이미 죽었을 수 있는) 토큰을 그대로 돌려줘
|
|
554
|
+
# 재발급이 아무 효과가 없다. 구판 provider(3-인자)와도 호환되도록,
|
|
555
|
+
# 실제 provider 가 받는 키워드만 골라 넘긴다.
|
|
556
|
+
_forwards_force = provider_accepts_kwarg(token_provider, "force_reissue")
|
|
557
|
+
_forwards_stale = provider_accepts_kwarg(token_provider, "stale_token")
|
|
558
|
+
|
|
550
559
|
def _sync_token_provider(
|
|
551
560
|
_appkey=appkey, _product=product, _paper=paper_trading,
|
|
561
|
+
*, force_reissue: bool = False, stale_token=None,
|
|
552
562
|
):
|
|
553
|
-
|
|
563
|
+
extra = {}
|
|
564
|
+
if force_reissue and _forwards_force:
|
|
565
|
+
extra["force_reissue"] = True
|
|
566
|
+
if force_reissue and _forwards_stale:
|
|
567
|
+
extra["stale_token"] = stale_token
|
|
568
|
+
return token_provider(_appkey, _product, _paper, **extra)
|
|
554
569
|
|
|
555
570
|
ls.set_token_provider(provider=_sync_token_provider)
|
|
556
571
|
context.log("info", f"LS token provider attached for {product}", node_id)
|
|
@@ -17486,7 +17501,12 @@ class WorkflowExecutor:
|
|
|
17486
17501
|
# self-issuing via GenerateToken, so the platform server is the single
|
|
17487
17502
|
# token issuer and this executor is a pure consumer. login() is sync, so
|
|
17488
17503
|
# the provider is a sync callable:
|
|
17489
|
-
# (appkey: str, product: str, paper_trading: bool
|
|
17504
|
+
# (appkey: str, product: str, paper_trading: bool,
|
|
17505
|
+
# *, force_reissue: bool = False, stale_token: str | None = None)
|
|
17506
|
+
# -> (access_token, expires_at_epoch)
|
|
17507
|
+
# force_reissue 는 **사용 중** 토큰이 죽었다고 확인됐을 때만 True 로 온다 —
|
|
17508
|
+
# 서버가 캐시를 무시하고 새로 발급해야 한다는 뜻이다. 구판 3-인자 provider 도
|
|
17509
|
+
# 그대로 동작한다(받는 키워드만 골라 넘긴다).
|
|
17490
17510
|
# Left None for standalone/public usage (unchanged self-issue path).
|
|
17491
17511
|
self.ls_token_provider = None
|
|
17492
17512
|
|
|
@@ -5,7 +5,7 @@ authors = [
|
|
|
5
5
|
homepage = "https://programgarden.com"
|
|
6
6
|
requires-python = ">=3.12"
|
|
7
7
|
name = "programgarden"
|
|
8
|
-
version = "1.
|
|
8
|
+
version = "1.32.0"
|
|
9
9
|
license = "AGPL-3.0-or-later"
|
|
10
10
|
description = "ProgramGarden - 노드 기반 자동매매 DSL 실행 엔진"
|
|
11
11
|
readme = "README.md"
|
|
@@ -30,7 +30,7 @@ pytickersymbols = {version = ">=1.17.5", python = ">=3.12,<4.0"}
|
|
|
30
30
|
aiosqlite = "^0.20.0"
|
|
31
31
|
litellm = ">=1.40.0"
|
|
32
32
|
programgarden-core = "^1.24.0"
|
|
33
|
-
programgarden-finance = "^1.
|
|
33
|
+
programgarden-finance = "^1.9.0"
|
|
34
34
|
programgarden-community = "^1.15.0"
|
|
35
35
|
|
|
36
36
|
[tool.poetry.group.dev.dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/workflow_position_tracker.py
RENAMED
|
File without changes
|
{programgarden-1.31.2 → programgarden-1.32.0}/programgarden/database/workflow_risk_tracker.py
RENAMED
|
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
|
|
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
|