malevich-coretools 0.3.51__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.51/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.51 → malevich_coretools-0.3.74}/malevich_coretools/__init__.py +1 -0
  4. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/abstract.py +84 -10
  5. {malevich_coretools-0.3.51 → 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.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/funcs.py +243 -44
  10. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/helpers.py +8 -14
  11. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/config.py +1 -0
  12. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/const.py +47 -23
  13. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/helpers.py +72 -30
  14. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/utils.py +1373 -295
  15. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74/malevich_coretools.egg-info}/PKG-INFO +1 -1
  16. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/SOURCES.txt +2 -0
  17. malevich_coretools-0.3.51/VERSION +0 -1
  18. malevich_coretools-0.3.51/malevich_coretools/admin/utils.py +0 -99
  19. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/LICENSE +0 -0
  20. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/MANIFEST.in +0 -0
  21. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/README.md +0 -0
  22. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/__init__.py +0 -0
  23. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/operations.py +0 -0
  24. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/abstract/statuses.py +0 -0
  25. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/admin/__init__.py +0 -0
  26. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/batch/__init__.py +0 -0
  27. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/batch/utils.py +0 -0
  28. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/__init__.py +0 -0
  29. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/funcs/checks.py +0 -0
  30. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/__init__.py +0 -0
  31. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/secondary/kafka_utils.py +0 -0
  32. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/__init__.py +0 -0
  33. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/abstract.py +0 -0
  34. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools/tools/vast.py +0 -0
  35. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/dependency_links.txt +0 -0
  36. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/requires.txt +0 -0
  37. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/malevich_coretools.egg-info/top_level.txt +0 -0
  38. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/pyproject.toml +0 -0
  39. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/requirements.txt +0 -0
  40. {malevich_coretools-0.3.51 → malevich_coretools-0.3.74}/setup.cfg +0 -0
  41. {malevich_coretools-0.3.51 → 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.51
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
@@ -101,6 +105,7 @@ class JsonImage(BaseModel):
101
105
  tag: str = ""
102
106
  user: Optional[str] = None
103
107
  token: Optional[str] = None
108
+ syncRef: bool = True
104
109
 
105
110
 
106
111
  class UserApp(BaseModel):
@@ -132,6 +137,14 @@ class KeysValues(Operation):
132
137
  data: Dict[str, str]
133
138
 
134
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
+
135
148
  class ScaleInfo(BaseModel):
136
149
  taskId: Optional[Alias.Id] = None
137
150
  appId: Alias.Id
@@ -139,12 +152,8 @@ class ScaleInfo(BaseModel):
139
152
 
140
153
 
141
154
  class TaskComponent(BaseModel):
142
- appControl: Optional[str] = None
143
- control: Optional[str] = None
144
- extra: Optional[str] = None
145
- internal: Optional[str] = None
155
+ main: Optional[str] = None
146
156
  keyValue: Optional[str] = None
147
- minimal: Optional[str] = None
148
157
  objectStorage: Optional[str] = None
149
158
 
150
159
 
@@ -197,6 +206,7 @@ class MainTask(BaseModel):
197
206
  profileMode: Optional[str] = None
198
207
  withLogs: bool = False # use only in prepare
199
208
  saveFails: bool = True
209
+ clearDagLogs: bool = True
200
210
  scaleCount: int = 1
201
211
  scaleInfo: List[ScaleInfo]
202
212
  component: TaskComponent
@@ -228,6 +238,7 @@ class MainPipeline(BaseModel):
228
238
  run: bool = True
229
239
  synthetic: bool = False
230
240
  saveFails: bool = True
241
+ clearDagLogs: bool = True
231
242
  scaleCount: int = 1
232
243
  tags: Optional[Dict[str, str]] = None
233
244
 
@@ -241,6 +252,7 @@ class RunTask(Operation):
241
252
  profileMode: Optional[str] = None
242
253
  withLogs: bool = False
243
254
  schedule: Optional[Schedule] = None
255
+ broadcast: bool = False
244
256
 
245
257
 
246
258
  class AppManage(Operation):
@@ -254,6 +266,10 @@ class ResultIds(BaseModel):
254
266
  ids: List[Alias.Id]
255
267
 
256
268
 
269
+ class ResultNames(BaseModel):
270
+ names: List[str]
271
+
272
+
257
273
  class FilesDirs(BaseModel):
258
274
  files: Dict[str, int]
259
275
  directories: List[str]
@@ -385,8 +401,8 @@ class CollectionMetadata(BaseModel):
385
401
 
386
402
  class LogsResult(BaseModel):
387
403
  data: str
388
- logs: Dict[str, str]
389
- userLogs: Dict[str, str] = {}
404
+ logs: Optional[Dict[str, str]] = {}
405
+ userLogs: Optional[Dict[str, str]] = {}
390
406
 
391
407
 
392
408
  class AppLog(BaseModel):
@@ -400,6 +416,7 @@ class PipelineRunInfo(BaseModel):
400
416
 
401
417
  class AppLogs(BaseModel):
402
418
  operationId: Alias.Id
419
+ runId: Optional[Alias.Id] = None
403
420
  dagLogs: str = ""
404
421
  data: Dict[str, AppLog] = {}
405
422
  error: Optional[str] = None
@@ -449,6 +466,7 @@ class InputFunctionInfo(FunctionInfo):
449
466
 
450
467
  class ProcessorFunctionInfo(FunctionInfo):
451
468
  isStream: bool
469
+ objectDfConvert: bool = False
452
470
  contextClass: Optional[Dict[str, Any]] = None # model_json_schema
453
471
 
454
472
 
@@ -501,6 +519,24 @@ class OperationOrNone(BaseModel):
501
519
  operationId: Optional[Alias.Id] = None
502
520
 
503
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
+
504
540
  class AdminStopOperation(BaseModel):
505
541
  operationId: Optional[Alias.Id] = None
506
542
  withLogs: bool
@@ -603,7 +639,7 @@ class UserLimits(BaseModel):
603
639
  defaultGpuDisk: int
604
640
 
605
641
 
606
- class BasePlatformSettings(BaseModel):
642
+ class BasePlatformSettingsMain(BaseModel):
607
643
  memoryRequest: Optional[int] = None
608
644
  memoryLimit: Optional[int] = None
609
645
  cpuRequest: Optional[int] = None
@@ -613,7 +649,11 @@ class BasePlatformSettings(BaseModel):
613
649
  kubeconfig: Optional[str] = None
614
650
 
615
651
 
616
- class Limits(BasePlatformSettings):
652
+ class BasePlatformSettings(BasePlatformSettingsMain):
653
+ allowKafka: bool = False
654
+
655
+
656
+ class Limits(BasePlatformSettingsMain):
617
657
  gpuDisk: Optional[int] = None
618
658
 
619
659
 
@@ -675,3 +715,37 @@ class MCPToolCall(BaseModel):
675
715
  class RunsFilter(BaseModel):
676
716
  data: Optional[Dict[str, str]] = None
677
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