malevich-coretools 0.3.48__tar.gz → 0.3.74__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.
- {malevich_coretools-0.3.48/malevich_coretools.egg-info → malevich_coretools-0.3.74}/PKG-INFO +1 -1
- malevich_coretools-0.3.74/VERSION +1 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/__init__.py +1 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py +85 -10
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/pipeline.py +41 -10
- malevich_coretools-0.3.74/malevich_coretools/admin/utils.py +374 -0
- malevich_coretools-0.3.74/malevich_coretools/dm_utils.py +233 -0
- malevich_coretools-0.3.74/malevich_coretools/funcs/dm_funcs.py +162 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/funcs.py +251 -36
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/helpers.py +115 -15
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/config.py +1 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/const.py +47 -21
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/helpers.py +72 -30
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/utils.py +8165 -1998
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74/malevich_coretools.egg-info}/PKG-INFO +1 -1
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/SOURCES.txt +2 -0
- malevich_coretools-0.3.48/VERSION +0 -1
- malevich_coretools-0.3.48/malevich_coretools/admin/utils.py +0 -99
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/LICENSE +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/MANIFEST.in +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/README.md +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/operations.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/statuses.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/admin/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/batch/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/batch/utils.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/checks.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/kafka_utils.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/__init__.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/abstract.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/vast.py +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/dependency_links.txt +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/requires.txt +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/top_level.txt +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/pyproject.toml +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/requirements.txt +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/setup.cfg +0 -0
- {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.74
|
{malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
1
|
+
from typing import Any, Dict, List, Optional, Set, Tuple, Union
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel
|
|
4
4
|
|
|
@@ -28,6 +28,10 @@ class Operation(BaseModel):
|
|
|
28
28
|
operationId: Alias.Id
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
class Tags(BaseModel):
|
|
32
|
+
data: List[str]
|
|
33
|
+
|
|
34
|
+
|
|
31
35
|
class StopOperation(Operation):
|
|
32
36
|
withLogs: bool = False
|
|
33
37
|
infoUrl: Optional[str] = None
|
|
@@ -98,8 +102,10 @@ class User(BaseModel):
|
|
|
98
102
|
|
|
99
103
|
class JsonImage(BaseModel):
|
|
100
104
|
ref: str
|
|
105
|
+
tag: str = ""
|
|
101
106
|
user: Optional[str] = None
|
|
102
107
|
token: Optional[str] = None
|
|
108
|
+
syncRef: bool = True
|
|
103
109
|
|
|
104
110
|
|
|
105
111
|
class UserApp(BaseModel):
|
|
@@ -131,6 +137,14 @@ class KeysValues(Operation):
|
|
|
131
137
|
data: Dict[str, str]
|
|
132
138
|
|
|
133
139
|
|
|
140
|
+
class Keys(BaseModel):
|
|
141
|
+
data: Dict[str, str]
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class Statuses(BaseModel):
|
|
145
|
+
data: Dict[str, str] # key - runId, value - one of: IN_PROGRESS, SUCCESS, FAILED
|
|
146
|
+
|
|
147
|
+
|
|
134
148
|
class ScaleInfo(BaseModel):
|
|
135
149
|
taskId: Optional[Alias.Id] = None
|
|
136
150
|
appId: Alias.Id
|
|
@@ -138,12 +152,8 @@ class ScaleInfo(BaseModel):
|
|
|
138
152
|
|
|
139
153
|
|
|
140
154
|
class TaskComponent(BaseModel):
|
|
141
|
-
|
|
142
|
-
control: Optional[str] = None
|
|
143
|
-
extra: Optional[str] = None
|
|
144
|
-
internal: Optional[str] = None
|
|
155
|
+
main: Optional[str] = None
|
|
145
156
|
keyValue: Optional[str] = None
|
|
146
|
-
minimal: Optional[str] = None
|
|
147
157
|
objectStorage: Optional[str] = None
|
|
148
158
|
|
|
149
159
|
|
|
@@ -196,6 +206,7 @@ class MainTask(BaseModel):
|
|
|
196
206
|
profileMode: Optional[str] = None
|
|
197
207
|
withLogs: bool = False # use only in prepare
|
|
198
208
|
saveFails: bool = True
|
|
209
|
+
clearDagLogs: bool = True
|
|
199
210
|
scaleCount: int = 1
|
|
200
211
|
scaleInfo: List[ScaleInfo]
|
|
201
212
|
component: TaskComponent
|
|
@@ -227,6 +238,7 @@ class MainPipeline(BaseModel):
|
|
|
227
238
|
run: bool = True
|
|
228
239
|
synthetic: bool = False
|
|
229
240
|
saveFails: bool = True
|
|
241
|
+
clearDagLogs: bool = True
|
|
230
242
|
scaleCount: int = 1
|
|
231
243
|
tags: Optional[Dict[str, str]] = None
|
|
232
244
|
|
|
@@ -240,6 +252,7 @@ class RunTask(Operation):
|
|
|
240
252
|
profileMode: Optional[str] = None
|
|
241
253
|
withLogs: bool = False
|
|
242
254
|
schedule: Optional[Schedule] = None
|
|
255
|
+
broadcast: bool = False
|
|
243
256
|
|
|
244
257
|
|
|
245
258
|
class AppManage(Operation):
|
|
@@ -253,6 +266,10 @@ class ResultIds(BaseModel):
|
|
|
253
266
|
ids: List[Alias.Id]
|
|
254
267
|
|
|
255
268
|
|
|
269
|
+
class ResultNames(BaseModel):
|
|
270
|
+
names: List[str]
|
|
271
|
+
|
|
272
|
+
|
|
256
273
|
class FilesDirs(BaseModel):
|
|
257
274
|
files: Dict[str, int]
|
|
258
275
|
directories: List[str]
|
|
@@ -384,8 +401,8 @@ class CollectionMetadata(BaseModel):
|
|
|
384
401
|
|
|
385
402
|
class LogsResult(BaseModel):
|
|
386
403
|
data: str
|
|
387
|
-
logs: Dict[str, str]
|
|
388
|
-
userLogs: Dict[str, str] = {}
|
|
404
|
+
logs: Optional[Dict[str, str]] = {}
|
|
405
|
+
userLogs: Optional[Dict[str, str]] = {}
|
|
389
406
|
|
|
390
407
|
|
|
391
408
|
class AppLog(BaseModel):
|
|
@@ -399,6 +416,7 @@ class PipelineRunInfo(BaseModel):
|
|
|
399
416
|
|
|
400
417
|
class AppLogs(BaseModel):
|
|
401
418
|
operationId: Alias.Id
|
|
419
|
+
runId: Optional[Alias.Id] = None
|
|
402
420
|
dagLogs: str = ""
|
|
403
421
|
data: Dict[str, AppLog] = {}
|
|
404
422
|
error: Optional[str] = None
|
|
@@ -448,6 +466,7 @@ class InputFunctionInfo(FunctionInfo):
|
|
|
448
466
|
|
|
449
467
|
class ProcessorFunctionInfo(FunctionInfo):
|
|
450
468
|
isStream: bool
|
|
469
|
+
objectDfConvert: bool = False
|
|
451
470
|
contextClass: Optional[Dict[str, Any]] = None # model_json_schema
|
|
452
471
|
|
|
453
472
|
|
|
@@ -500,6 +519,24 @@ class OperationOrNone(BaseModel):
|
|
|
500
519
|
operationId: Optional[Alias.Id] = None
|
|
501
520
|
|
|
502
521
|
|
|
522
|
+
class AdminRunInfoReq(OperationOrNone):
|
|
523
|
+
dmId: Optional[str] = None
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
class AdminDMRegister(BaseModel):
|
|
527
|
+
id: int
|
|
528
|
+
url: Optional[str]
|
|
529
|
+
secret: Optional[str]
|
|
530
|
+
appSecret: Optional[str]
|
|
531
|
+
login: Optional[str]
|
|
532
|
+
actuaryDMId: Optional[int]
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
class AdminDMUnregister(BaseModel):
|
|
536
|
+
id: str
|
|
537
|
+
actuaryDMId: Optional[int]
|
|
538
|
+
|
|
539
|
+
|
|
503
540
|
class AdminStopOperation(BaseModel):
|
|
504
541
|
operationId: Optional[Alias.Id] = None
|
|
505
542
|
withLogs: bool
|
|
@@ -602,7 +639,7 @@ class UserLimits(BaseModel):
|
|
|
602
639
|
defaultGpuDisk: int
|
|
603
640
|
|
|
604
641
|
|
|
605
|
-
class
|
|
642
|
+
class BasePlatformSettingsMain(BaseModel):
|
|
606
643
|
memoryRequest: Optional[int] = None
|
|
607
644
|
memoryLimit: Optional[int] = None
|
|
608
645
|
cpuRequest: Optional[int] = None
|
|
@@ -612,7 +649,11 @@ class BasePlatformSettings(BaseModel):
|
|
|
612
649
|
kubeconfig: Optional[str] = None
|
|
613
650
|
|
|
614
651
|
|
|
615
|
-
class
|
|
652
|
+
class BasePlatformSettings(BasePlatformSettingsMain):
|
|
653
|
+
allowKafka: bool = False
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
class Limits(BasePlatformSettingsMain):
|
|
616
657
|
gpuDisk: Optional[int] = None
|
|
617
658
|
|
|
618
659
|
|
|
@@ -674,3 +715,37 @@ class MCPToolCall(BaseModel):
|
|
|
674
715
|
class RunsFilter(BaseModel):
|
|
675
716
|
data: Optional[Dict[str, str]] = None
|
|
676
717
|
withTags: bool = False
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
class AppLocalScheme(BaseModel):
|
|
721
|
+
keys: List[str]
|
|
722
|
+
optionalKeys: Set[str]
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
class AppErrorInfo(BaseModel):
|
|
726
|
+
operationId: str
|
|
727
|
+
runId: str
|
|
728
|
+
bindId: str
|
|
729
|
+
funId: str
|
|
730
|
+
iteration: int
|
|
731
|
+
isProcessor: bool = True
|
|
732
|
+
trace: str
|
|
733
|
+
errType: str
|
|
734
|
+
errArgs: List[str]
|
|
735
|
+
isMalevichErr: bool
|
|
736
|
+
cfg: Optional[Dict[str, Any]]
|
|
737
|
+
schemes: Optional[Dict[str, AppLocalScheme]] = None
|
|
738
|
+
args: List[List[Union[Union[str, List[str]], List[Union[str, List[str]]]]]] = None # mb empty for send info structure
|
|
739
|
+
argsNames: List[str]
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
class AppErrorInfos(BaseModel):
|
|
743
|
+
data: List[AppErrorInfo]
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
class AppErrorInfoFilter(BaseModel):
|
|
747
|
+
operationId: str
|
|
748
|
+
runId: Optional[str] = None
|
|
749
|
+
bindId: Optional[str] = None
|
|
750
|
+
errType: Optional[str] = None
|
|
751
|
+
isMalevichErr: bool = False
|
{malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/pipeline.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import json
|
|
1
2
|
from enum import IntEnum
|
|
2
|
-
from typing import Dict, List, Optional, Union
|
|
3
|
+
from typing import Any, Dict, List, Optional, Union
|
|
3
4
|
|
|
4
5
|
from pydantic import BaseModel
|
|
5
6
|
|
|
@@ -7,6 +8,7 @@ from malevich_coretools.abstract.abstract import ( # noqa: F401
|
|
|
7
8
|
AdminRunInfo,
|
|
8
9
|
Alias,
|
|
9
10
|
JsonImage,
|
|
11
|
+
MainTaskCfg,
|
|
10
12
|
Restrictions,
|
|
11
13
|
ScaleInfo,
|
|
12
14
|
Schedule,
|
|
@@ -26,6 +28,14 @@ from malevich_coretools.abstract.operations import (
|
|
|
26
28
|
)
|
|
27
29
|
|
|
28
30
|
|
|
31
|
+
def _validation_common(arg: 'BaseArgument', other_k = 0) -> None:
|
|
32
|
+
k = (arg.id is not None) + (arg.collectionName is not None) + (arg.collectionId is not None) + other_k
|
|
33
|
+
if k == 0:
|
|
34
|
+
raise ValueError("argument construction requires exactly one parameter, got none")
|
|
35
|
+
if k > 1:
|
|
36
|
+
raise ValueError("argument construction requires exactly one parameter, multiple provided")
|
|
37
|
+
|
|
38
|
+
|
|
29
39
|
class PullCollectionPolicy(IntEnum):
|
|
30
40
|
INIT = 0
|
|
31
41
|
IF_NOT_EXIST = 1
|
|
@@ -42,7 +52,7 @@ class BaseArgument(BaseModel):
|
|
|
42
52
|
collectionId: Optional[str] = None # hardcode collection with id (or obj path)
|
|
43
53
|
|
|
44
54
|
def validation(self) -> None:
|
|
45
|
-
|
|
55
|
+
_validation_common(self)
|
|
46
56
|
|
|
47
57
|
|
|
48
58
|
class Argument(BaseArgument):
|
|
@@ -51,11 +61,11 @@ class Argument(BaseArgument):
|
|
|
51
61
|
|
|
52
62
|
def validation(self) -> None:
|
|
53
63
|
if self.group is not None:
|
|
54
|
-
|
|
64
|
+
_validation_common(self, 1)
|
|
55
65
|
for subarg in self.group:
|
|
56
66
|
subarg.validation()
|
|
57
67
|
else:
|
|
58
|
-
|
|
68
|
+
_validation_common(self)
|
|
59
69
|
|
|
60
70
|
|
|
61
71
|
class AlternativeArgument(BaseArgument):
|
|
@@ -64,23 +74,23 @@ class AlternativeArgument(BaseArgument):
|
|
|
64
74
|
|
|
65
75
|
def validation(self) -> None:
|
|
66
76
|
if self.group is not None:
|
|
67
|
-
|
|
77
|
+
_validation_common(self, 1)
|
|
68
78
|
for subarg in self.group:
|
|
69
79
|
subarg.validation()
|
|
70
80
|
elif self.alternative is not None:
|
|
71
81
|
for alt_arg in self.alternative:
|
|
72
82
|
if alt_arg.group is not None:
|
|
73
|
-
|
|
83
|
+
_validation_common(self, 1)
|
|
74
84
|
for subarg in alt_arg.group:
|
|
75
85
|
subarg.validation()
|
|
76
86
|
else:
|
|
77
|
-
|
|
87
|
+
_validation_common(self)
|
|
78
88
|
else:
|
|
79
|
-
|
|
89
|
+
_validation_common(self)
|
|
80
90
|
|
|
81
91
|
|
|
82
92
|
class AppEntity(BaseModel):
|
|
83
|
-
cfg: Optional[
|
|
93
|
+
cfg: Optional[Union[Alias.Json, Dict]] = None # local cfg for processor/condition
|
|
84
94
|
arguments: Dict[str, AlternativeArgument] = {} # TODO or List[Argument]?
|
|
85
95
|
conditions: Optional[Union[Dict[str, bool], List[Dict[str, bool]]]] = None # condition bindId to it result (list - any variant of them)
|
|
86
96
|
conditionsStructure: Optional[Union[Not, And, Or, InternalNot, InternalAnd, InternalOr, Value]] = None # set BoolOp, it transform to internal before send
|
|
@@ -92,6 +102,8 @@ class AppEntity(BaseModel):
|
|
|
92
102
|
image: JsonImage
|
|
93
103
|
platform: str = "base"
|
|
94
104
|
platformSettings: Optional[str] = None
|
|
105
|
+
requestedKeys: Optional[list[str]] = None # user secret keys
|
|
106
|
+
optionalKeys: Optional[list[str]] = None # user secret keys
|
|
95
107
|
|
|
96
108
|
def internal(self) -> None:
|
|
97
109
|
assert self.conditions is None or self.conditionsStructure is None, "should be set not more, than one of (conditions, conditionsStructure)"
|
|
@@ -105,6 +117,8 @@ class AppEntity(BaseModel):
|
|
|
105
117
|
self.loopConditions = [self.loopConditions]
|
|
106
118
|
if isinstance(self.loopConditionsStructure, BoolOp):
|
|
107
119
|
self.loopConditionsStructure = self.loopConditionsStructure.internal()
|
|
120
|
+
if isinstance(self.cfg, Dict):
|
|
121
|
+
self.cfg = json.dumps(self.cfg)
|
|
108
122
|
|
|
109
123
|
def simplify(self) -> None:
|
|
110
124
|
if isinstance(self.conditionsStructure, InternalBoolOp):
|
|
@@ -133,6 +147,7 @@ class Pipeline(BaseModel):
|
|
|
133
147
|
conditions: Dict[str, Condition] = {} # bindConditionId to Condition
|
|
134
148
|
results: Dict[str, List[Result]] = {} # bindProcessorId to results
|
|
135
149
|
pullCollectionPolicy: PullCollectionPolicy = PullCollectionPolicy.IF_NOT_EXIST
|
|
150
|
+
tags: List[str] = []
|
|
136
151
|
|
|
137
152
|
def internal(self) -> 'Pipeline':
|
|
138
153
|
for proc in self.processors.values():
|
|
@@ -156,7 +171,7 @@ class MainPipelineCfg(BaseModel):
|
|
|
156
171
|
conditions: Dict[str, Condition]
|
|
157
172
|
results: Dict[str, List[Result]]
|
|
158
173
|
pullCollectionPolicy: PullCollectionPolicy
|
|
159
|
-
cfg:
|
|
174
|
+
cfg: Alias.Json
|
|
160
175
|
infoUrl: Optional[str] = None
|
|
161
176
|
debugMode: bool
|
|
162
177
|
coreManage: bool
|
|
@@ -197,3 +212,19 @@ class AdminRunPipelineInfo(BaseModel):
|
|
|
197
212
|
class AdminRunsInfo(BaseModel):
|
|
198
213
|
tasks: List[AdminRunInfo]
|
|
199
214
|
pipelines: List[AdminRunPipelineInfo]
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class TaskRunInfo(BaseModel):
|
|
218
|
+
logs: str
|
|
219
|
+
inputs: Dict[str, Union[str, Dict[str, Any]]] # collections from cfg
|
|
220
|
+
results: Dict[str, List[str]] # name -> collections list (1 collection common)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
class RunInfo(BaseModel):
|
|
224
|
+
jsonMainTask: Optional[MainTaskCfg] = None
|
|
225
|
+
jsonMainPipeline: Optional[MainPipelineCfg] = None
|
|
226
|
+
tags: Optional[Dict[str, str]] = None
|
|
227
|
+
cfgId: str
|
|
228
|
+
runs: Dict[str, str] = {}
|
|
229
|
+
info: Dict[str, TaskRunInfo] = {}
|
|
230
|
+
stopped: bool
|