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.
Files changed (41) hide show
  1. {malevich_coretools-0.3.48/malevich_coretools.egg-info → malevich_coretools-0.3.74}/PKG-INFO +1 -1
  2. malevich_coretools-0.3.74/VERSION +1 -0
  3. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/__init__.py +1 -0
  4. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py +85 -10
  5. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/pipeline.py +41 -10
  6. malevich_coretools-0.3.74/malevich_coretools/admin/utils.py +374 -0
  7. malevich_coretools-0.3.74/malevich_coretools/dm_utils.py +233 -0
  8. malevich_coretools-0.3.74/malevich_coretools/funcs/dm_funcs.py +162 -0
  9. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/funcs.py +251 -36
  10. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/helpers.py +115 -15
  11. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/config.py +1 -0
  12. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/const.py +47 -21
  13. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/helpers.py +72 -30
  14. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/utils.py +8165 -1998
  15. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74/malevich_coretools.egg-info}/PKG-INFO +1 -1
  16. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/SOURCES.txt +2 -0
  17. malevich_coretools-0.3.48/VERSION +0 -1
  18. malevich_coretools-0.3.48/malevich_coretools/admin/utils.py +0 -99
  19. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/LICENSE +0 -0
  20. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/MANIFEST.in +0 -0
  21. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/README.md +0 -0
  22. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/__init__.py +0 -0
  23. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/operations.py +0 -0
  24. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/abstract/statuses.py +0 -0
  25. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/admin/__init__.py +0 -0
  26. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/batch/__init__.py +0 -0
  27. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/batch/utils.py +0 -0
  28. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/__init__.py +0 -0
  29. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/funcs/checks.py +0 -0
  30. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/__init__.py +0 -0
  31. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/secondary/kafka_utils.py +0 -0
  32. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/__init__.py +0 -0
  33. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/abstract.py +0 -0
  34. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools/tools/vast.py +0 -0
  35. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/dependency_links.txt +0 -0
  36. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/requires.txt +0 -0
  37. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/top_level.txt +0 -0
  38. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/pyproject.toml +0 -0
  39. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/requirements.txt +0 -0
  40. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/setup.cfg +0 -0
  41. {malevich_coretools-0.3.48 → malevich_coretools-0.3.74}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: malevich-coretools
3
- Version: 0.3.48
3
+ Version: 0.3.74
4
4
  Author: Andrew Pogrebnoj
5
5
  Author-email: andrew@onjulius.co
6
6
  License-File: LICENSE
@@ -0,0 +1 @@
1
+ 0.3.74
@@ -1,3 +1,4 @@
1
+ from .dm_utils import * # noqa: F403
1
2
  from .secondary import logs_streaming # noqa: F401
2
3
  from .tools import vast_settings # noqa: F401
3
4
  from .utils import * # noqa: F403
@@ -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
- appControl: Optional[str] = None
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 BasePlatformSettings(BaseModel):
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 Limits(BasePlatformSettings):
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
@@ -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
- assert (self.id is not None) + (self.collectionName is not None) + (self.collectionId is not None) == 1, "one way of constructing the argument must be chosen"
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
- assert self.id is None and self.collectionName is None and self.collectionId is None, "one way of constructing the argument must be chosen"
64
+ _validation_common(self, 1)
55
65
  for subarg in self.group:
56
66
  subarg.validation()
57
67
  else:
58
- assert (self.id is not None) + (self.collectionName is not None) + (self.collectionId is not None) == 1, "one way of constructing the argument must be chosen"
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
- assert self.id is None and self.collectionName is None and self.collectionId is None, "one way of constructing the argument must be chosen"
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
- assert alt_arg.id is None and alt_arg.collectionName is None and alt_arg.collectionId is None, "one way of constructing the argument must be chosen"
83
+ _validation_common(self, 1)
74
84
  for subarg in alt_arg.group:
75
85
  subarg.validation()
76
86
  else:
77
- assert (self.id is not None) + (self.collectionName is not None) + (self.collectionId is not None) == 1, "one way of constructing the argument must be chosen"
87
+ _validation_common(self)
78
88
  else:
79
- assert (self.id is not None) + (self.collectionName is not None) + (self.collectionId is not None) == 1, "one way of constructing the argument must be chosen"
89
+ _validation_common(self)
80
90
 
81
91
 
82
92
  class AppEntity(BaseModel):
83
- cfg: Optional[str] = None # local cfg for processor/condition
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: str
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