arkitekt-next 0.8.12__py3-none-any.whl → 0.8.14__py3-none-any.whl
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.
Potentially problematic release.
This version of arkitekt-next might be problematic. Click here for more details.
- arkitekt_next/base_models.py +19 -11
- arkitekt_next/cli/commands/inspect/requirements.py +4 -4
- arkitekt_next/cli/commands/kabinet/build.py +4 -4
- arkitekt_next/cli/commands/kabinet/publish.py +2 -2
- arkitekt_next/cli/io.py +16 -14
- arkitekt_next/cli/types.py +7 -190
- arkitekt_next/service_registry.py +4 -5
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.14.dist-info}/METADATA +8 -8
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.14.dist-info}/RECORD +12 -12
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.14.dist-info}/LICENSE +0 -0
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.14.dist-info}/WHEEL +0 -0
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.14.dist-info}/entry_points.txt +0 -0
arkitekt_next/base_models.py
CHANGED
|
@@ -6,6 +6,7 @@ from typing import List, Optional
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class Requirement(BaseModel):
|
|
9
|
+
key: str
|
|
9
10
|
service: str
|
|
10
11
|
""" The service is the service that will be used to fill the key, it will be used to find the correct instance. It needs to fullfill
|
|
11
12
|
the reverse domain naming scheme"""
|
|
@@ -15,41 +16,48 @@ class Requirement(BaseModel):
|
|
|
15
16
|
""" The description is a human readable description of the requirement. Will be show to the user when asking for the requirement."""
|
|
16
17
|
|
|
17
18
|
|
|
18
|
-
def build_default_requirements() ->
|
|
19
|
-
return
|
|
20
|
-
|
|
19
|
+
def build_default_requirements() -> List[Requirement]:
|
|
20
|
+
return [
|
|
21
|
+
Requirement(
|
|
22
|
+
key="lok",
|
|
21
23
|
service="live.arkitekt_next.lok",
|
|
22
24
|
description="An instance of ArkitektNext Lok to authenticate the user",
|
|
23
25
|
),
|
|
24
|
-
|
|
26
|
+
Requirement(
|
|
27
|
+
key="rekuest",
|
|
25
28
|
service="live.arkitekt_next.rekuest",
|
|
26
29
|
description="An instance of ArkitektNext Rekuest to assign to nodes",
|
|
27
30
|
),
|
|
28
|
-
|
|
31
|
+
Requirement(
|
|
32
|
+
key="kabinet",
|
|
29
33
|
service="live.arkitekt_next.kabinet",
|
|
30
34
|
description="An instance of ArkitektNext Kabinet to retrieve nodes from",
|
|
31
35
|
),
|
|
32
|
-
|
|
36
|
+
Requirement(
|
|
37
|
+
key="mikro",
|
|
33
38
|
service="live.arkitekt_next.mikro",
|
|
34
39
|
description="An instance of ArkitektNext Mikro to make requests to the user's data",
|
|
35
40
|
optional=True,
|
|
36
41
|
),
|
|
37
|
-
|
|
42
|
+
Requirement(
|
|
43
|
+
key="fluss",
|
|
38
44
|
service="live.arkitekt_next.fluss",
|
|
39
45
|
description="An instance of ArkitektNext Fluss to make requests to the user's data",
|
|
40
46
|
optional=False,
|
|
41
47
|
),
|
|
42
|
-
|
|
48
|
+
Requirement(
|
|
49
|
+
key="port",
|
|
43
50
|
service="live.arkitekt_next.port",
|
|
44
51
|
description="An instance of ArkitektNext Fluss to make requests to the user's data",
|
|
45
52
|
optional=True,
|
|
46
53
|
),
|
|
47
|
-
|
|
54
|
+
Requirement(
|
|
55
|
+
key="datalayer",
|
|
48
56
|
service="live.arkitekt_next.datalayer",
|
|
49
57
|
description="An instance of ArkitektNext Datalayer to make requests to the user's data",
|
|
50
58
|
optional=False,
|
|
51
59
|
),
|
|
52
|
-
|
|
60
|
+
]
|
|
53
61
|
|
|
54
62
|
|
|
55
63
|
class Manifest(BaseModel):
|
|
@@ -75,7 +83,7 @@ class Manifest(BaseModel):
|
|
|
75
83
|
""" Scopes that this app should request from the user """
|
|
76
84
|
logo: Optional[str]
|
|
77
85
|
""" A URL to the logo of the app TODO: We should enforce this to be a http URL as local paths won't work """
|
|
78
|
-
requirements: Optional[
|
|
86
|
+
requirements: Optional[List[Requirement]] = Field(
|
|
79
87
|
default_factory=build_default_requirements
|
|
80
88
|
)
|
|
81
89
|
""" Requirements that this app has TODO: What are the requirements? """
|
|
@@ -66,10 +66,10 @@ def requirements(
|
|
|
66
66
|
logo=manifest.logo,
|
|
67
67
|
)
|
|
68
68
|
|
|
69
|
-
x =
|
|
70
|
-
|
|
71
|
-
for
|
|
72
|
-
|
|
69
|
+
x = [
|
|
70
|
+
item.model_dump(by_alias=True)
|
|
71
|
+
for item in app.manifest.requirements
|
|
72
|
+
]
|
|
73
73
|
if machine_readable:
|
|
74
74
|
print("--START_REQUIREMENTS--" + json.dumps(x) + "--END_REQUIREMENTS--")
|
|
75
75
|
|
|
@@ -6,7 +6,7 @@ import subprocess
|
|
|
6
6
|
import uuid
|
|
7
7
|
from arkitekt_next.cli.io import generate_build
|
|
8
8
|
from click import Context
|
|
9
|
-
from arkitekt_next.cli.types import Flavour,
|
|
9
|
+
from arkitekt_next.cli.types import Flavour, InspectionInput
|
|
10
10
|
import yaml
|
|
11
11
|
from typing import Dict, Optional
|
|
12
12
|
import json
|
|
@@ -51,7 +51,7 @@ def build_flavour(flavour_name: str, flavour: Flavour) -> str:
|
|
|
51
51
|
return build_id
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
def inspect_docker_container(build_id: str) ->
|
|
54
|
+
def inspect_docker_container(build_id: str) -> InspectionInput:
|
|
55
55
|
try:
|
|
56
56
|
# Run 'docker inspect' with the container ID or name
|
|
57
57
|
result = subprocess.run(
|
|
@@ -173,12 +173,12 @@ def inspect_requirements(build_id: str) -> Dict[str, Requirement]:
|
|
|
173
173
|
raise InspectionError(f"An error occurred: {e.stdout + e.stderr}") from e
|
|
174
174
|
|
|
175
175
|
|
|
176
|
-
def inspect_build(build_id: str) ->
|
|
176
|
+
def inspect_build(build_id: str) -> InspectionInput:
|
|
177
177
|
size, size_root_fs = inspect_docker_container(build_id)
|
|
178
178
|
templates = inspect_templates(build_id)
|
|
179
179
|
requirements = inspect_requirements(build_id)
|
|
180
180
|
|
|
181
|
-
return
|
|
181
|
+
return InspectionInput(size=size, templates=templates, requirements=requirements)
|
|
182
182
|
|
|
183
183
|
|
|
184
184
|
def get_flavours(ctx: Context, select: Optional[str] = None) -> Dict[str, Flavour]:
|
|
@@ -23,11 +23,11 @@ def check_if_build_already_deployed(build: Build) -> None:
|
|
|
23
23
|
A click exception if the manifest has already been deployed
|
|
24
24
|
"""
|
|
25
25
|
config = get_deployments()
|
|
26
|
-
for deployment in config.
|
|
26
|
+
for deployment in config.app_images:
|
|
27
27
|
if (
|
|
28
28
|
deployment.manifest.identifier == build.manifest.identifier
|
|
29
29
|
and deployment.manifest.version == build.manifest.version
|
|
30
|
-
and deployment.
|
|
30
|
+
and deployment.flavour_name == build.flavour
|
|
31
31
|
):
|
|
32
32
|
raise click.ClickException(
|
|
33
33
|
f"Deployment of {build.manifest.identifier}/{build.manifest.version} in the {build.flavour} flavour already exists."
|
arkitekt_next/cli/io.py
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import uuid
|
|
1
3
|
from arkitekt_next.utils import create_arkitekt_next_folder
|
|
2
4
|
import os
|
|
3
5
|
from typing import Optional, List, Dict
|
|
4
6
|
from arkitekt_next.cli.types import (
|
|
5
|
-
Inspection,
|
|
6
7
|
Manifest,
|
|
7
8
|
Build,
|
|
8
9
|
BuildsConfigFile,
|
|
9
|
-
Deployment,
|
|
10
10
|
Flavour,
|
|
11
11
|
DeploymentsConfigFile,
|
|
12
12
|
)
|
|
13
|
+
from kabinet.api.schema import InspectionInput, AppImageInput, DockerImageInput
|
|
14
|
+
|
|
13
15
|
import yaml
|
|
14
16
|
import json
|
|
15
17
|
import rich_click as click
|
|
@@ -120,7 +122,7 @@ def generate_build(
|
|
|
120
122
|
flavour_name: str,
|
|
121
123
|
flavour: Flavour,
|
|
122
124
|
manifest: Manifest,
|
|
123
|
-
inspection: Optional[
|
|
125
|
+
inspection: Optional[InspectionInput],
|
|
124
126
|
) -> Build:
|
|
125
127
|
"""Generates a build from a builder, build_id and manifest
|
|
126
128
|
|
|
@@ -201,7 +203,7 @@ def generate_deployment(
|
|
|
201
203
|
deployment_run: str,
|
|
202
204
|
build: Build,
|
|
203
205
|
image: str,
|
|
204
|
-
) ->
|
|
206
|
+
) -> AppImageInput:
|
|
205
207
|
"""Generates a deployment from a build and an image
|
|
206
208
|
|
|
207
209
|
Parameters
|
|
@@ -225,29 +227,29 @@ def generate_deployment(
|
|
|
225
227
|
|
|
226
228
|
config_file = os.path.join(path, "deployments.yaml")
|
|
227
229
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
+
app_image = AppImageInput(
|
|
231
|
+
appImageId=uuid.uuid4().hex,
|
|
230
232
|
manifest=build.manifest,
|
|
231
|
-
|
|
233
|
+
flavourName=build.flavour,
|
|
232
234
|
selectors=build.selectors,
|
|
233
235
|
inspection=build.inspection,
|
|
234
|
-
image=image,
|
|
236
|
+
image=DockerImageInput(imageString=image, buildAt=datetime.datetime.now()),
|
|
237
|
+
|
|
235
238
|
)
|
|
236
239
|
|
|
237
240
|
if os.path.exists(config_file):
|
|
238
241
|
with open(config_file, "r") as file:
|
|
239
242
|
config = DeploymentsConfigFile(**yaml.safe_load(file))
|
|
240
|
-
config.
|
|
241
|
-
config.
|
|
243
|
+
config.app_images.append(app_image)
|
|
244
|
+
config.latest_app_image = app_image.app_image_id
|
|
242
245
|
else:
|
|
243
|
-
config = DeploymentsConfigFile(
|
|
244
|
-
config.latest_deployment_run = deployment_run
|
|
246
|
+
config = DeploymentsConfigFile(app_images=[app_image], latest_app_image=app_image.app_image_id)
|
|
245
247
|
|
|
246
248
|
with open(config_file, "w") as file:
|
|
247
249
|
yaml.safe_dump(
|
|
248
|
-
json.loads(config.
|
|
250
|
+
json.loads(config.model_dump_json(exclude_none=True, by_alias=True)),
|
|
249
251
|
file,
|
|
250
252
|
sort_keys=True,
|
|
251
253
|
)
|
|
252
254
|
|
|
253
|
-
return
|
|
255
|
+
return app_image
|
arkitekt_next/cli/types.py
CHANGED
|
@@ -9,6 +9,7 @@ from arkitekt_next.base_models import Requirement
|
|
|
9
9
|
from string import Formatter
|
|
10
10
|
import os
|
|
11
11
|
|
|
12
|
+
from kabinet.api.schema import AppImageInput, InspectionInput, SelectorInput, ManifestInput
|
|
12
13
|
from rekuest_next.api.schema import TemplateInput
|
|
13
14
|
|
|
14
15
|
ALLOWED_BUILDER_KEYS = [
|
|
@@ -73,152 +74,8 @@ class SelectorType(str, Enum):
|
|
|
73
74
|
LABEL = "label"
|
|
74
75
|
|
|
75
76
|
|
|
76
|
-
class BaseSelector(BaseModel):
|
|
77
|
-
"""A selector is a way to describe a flavours preference for a
|
|
78
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
79
|
-
"""
|
|
80
|
-
|
|
81
|
-
required: bool = True
|
|
82
|
-
|
|
83
|
-
class Config:
|
|
84
|
-
extra = "forbid"
|
|
85
|
-
|
|
86
|
-
def build_docker_params(self) -> List[str]:
|
|
87
|
-
"""Builds the docker params for this selector
|
|
88
|
-
|
|
89
|
-
Should return a list of strings that can be used as docker params
|
|
90
|
-
If the selector is not required, it should return an empty list
|
|
91
|
-
|
|
92
|
-
Returns
|
|
93
|
-
-------
|
|
94
|
-
List[str]
|
|
95
|
-
The docker params for this selector
|
|
96
|
-
"""
|
|
97
|
-
return []
|
|
98
|
-
|
|
99
|
-
def build_arkitekt_next_params(self) -> List[str]:
|
|
100
|
-
"""Builds the arkitekt_next params for this selector
|
|
101
|
-
|
|
102
|
-
Returns
|
|
103
|
-
-------
|
|
104
|
-
List[str]
|
|
105
|
-
The docker params for this selector
|
|
106
|
-
"""
|
|
107
|
-
return []
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
class RAMSelector(BaseSelector):
|
|
111
|
-
"""A selector is a way to describe a flavours preference for a
|
|
112
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
113
|
-
"""
|
|
114
|
-
|
|
115
|
-
type: Literal["ram"]
|
|
116
|
-
min: int
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
class CPUSelector(BaseSelector):
|
|
120
|
-
"""A selector is a way to describe a flavours preference for a
|
|
121
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
122
|
-
"""
|
|
123
|
-
|
|
124
|
-
type: Literal["cpu"]
|
|
125
|
-
min: int
|
|
126
|
-
frequency: Optional[int] = None
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
class CudaSelector(BaseSelector):
|
|
130
|
-
"""A selector is a way to describe a flavours preference for a
|
|
131
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
132
|
-
"""
|
|
133
|
-
|
|
134
|
-
type: Literal["cuda"]
|
|
135
|
-
frequency: Optional[int] = Field(default=None, description="The frequency in MHz")
|
|
136
|
-
memory: Optional[int] = Field(default=None, description="The memory in MB")
|
|
137
|
-
architecture: Optional[str] = Field(
|
|
138
|
-
default=None, description="The architecture of the GPU"
|
|
139
|
-
)
|
|
140
|
-
compute_capability: str = Field(
|
|
141
|
-
default="3.5", description="The minimum compute capability"
|
|
142
|
-
)
|
|
143
|
-
cuda_cores: Optional[int] = None
|
|
144
|
-
cuda_version: str = Field(default="10.2", description="The minimum cuda version")
|
|
145
|
-
|
|
146
|
-
def build_docker_params(self) -> List[str]:
|
|
147
|
-
"""Builds the docker params for this selector
|
|
148
|
-
|
|
149
|
-
Should return a list of strings that can be used as docker params
|
|
150
|
-
If the selector is not required, it should return an empty list
|
|
151
|
-
|
|
152
|
-
Returns
|
|
153
|
-
-------
|
|
154
|
-
List[str]
|
|
155
|
-
The docker params for this selector
|
|
156
|
-
"""
|
|
157
|
-
return [
|
|
158
|
-
"--gpus",
|
|
159
|
-
"all",
|
|
160
|
-
]
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
class RocmSelector(BaseSelector):
|
|
164
|
-
"""A selector is a way to describe a flavours preference for a
|
|
165
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
166
|
-
"""
|
|
167
|
-
|
|
168
|
-
type: Literal["rocm"]
|
|
169
|
-
min: int
|
|
170
|
-
frequency: Optional[int] = None
|
|
171
|
-
memory: Optional[int] = None
|
|
172
|
-
architecture: Optional[str] = None
|
|
173
|
-
compute_capability: Optional[str] = None
|
|
174
|
-
cuda_cores: Optional[int] = None
|
|
175
|
-
cuda_version: Optional[str] = None
|
|
176
|
-
|
|
177
|
-
def build_docker_params(self) -> List[str]:
|
|
178
|
-
"""Builds the docker params for this selector"""
|
|
179
|
-
|
|
180
|
-
return [
|
|
181
|
-
"--device=/dev/kfd",
|
|
182
|
-
"--device=/dev/dri",
|
|
183
|
-
"--group-add",
|
|
184
|
-
"video",
|
|
185
|
-
"--cap-add=SYS_PTRACE",
|
|
186
|
-
"--security-opt",
|
|
187
|
-
"seccomp=unconfined",
|
|
188
|
-
]
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
class LabelSelector(BaseSelector):
|
|
192
|
-
"""A selector is a way to describe a flavours preference for a
|
|
193
|
-
compute node. It contains the node_id, the selector and the flavour_id.
|
|
194
|
-
"""
|
|
195
|
-
|
|
196
|
-
type: Literal["label"]
|
|
197
|
-
key: str
|
|
198
|
-
value: str
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
class ServiceSelector(BaseSelector):
|
|
202
|
-
"""A service selector is a way to describe a flavours preference for a
|
|
203
|
-
service. It contains the service_id,
|
|
204
|
-
"""
|
|
205
|
-
|
|
206
|
-
type: Literal["service"]
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
Selector = Union[
|
|
210
|
-
RAMSelector, CPUSelector, CudaSelector, RocmSelector, LabelSelector, ServiceSelector
|
|
211
|
-
]
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
class Inspection(BaseModel):
|
|
215
|
-
templates: List[TemplateInput]
|
|
216
|
-
requirements: Dict[str, Requirement]
|
|
217
|
-
size: int
|
|
218
|
-
|
|
219
|
-
|
|
220
77
|
class Flavour(BaseModel):
|
|
221
|
-
selectors: List[
|
|
78
|
+
selectors: List[SelectorInput]
|
|
222
79
|
description: str = Field(default="")
|
|
223
80
|
dockerfile: str = Field(default="Dockerfile")
|
|
224
81
|
build_command: List[str] = Field(
|
|
@@ -264,46 +121,6 @@ class Flavour(BaseModel):
|
|
|
264
121
|
)
|
|
265
122
|
|
|
266
123
|
|
|
267
|
-
class Deployment(BaseModel):
|
|
268
|
-
"""A deployment is a Release of a Build.
|
|
269
|
-
It contains the build_id, the manifest, the builder, the definitions, the image and the deployed_at timestamp.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
"""
|
|
274
|
-
|
|
275
|
-
deployment_run: str = Field(
|
|
276
|
-
default_factory=lambda: str(uuid.uuid4()),
|
|
277
|
-
description="The unique identifier of the deployment run",
|
|
278
|
-
)
|
|
279
|
-
|
|
280
|
-
deployment_id: str = Field(
|
|
281
|
-
default_factory=lambda: str(uuid.uuid4()),
|
|
282
|
-
description="The unique identifier of the deployment",
|
|
283
|
-
)
|
|
284
|
-
manifest: Manifest = Field(description="The manifest of the app that was deployed")
|
|
285
|
-
selectors: List[Selector] = Field(
|
|
286
|
-
description="The selectors are used to place this image on the nodes",
|
|
287
|
-
default_factory=list,
|
|
288
|
-
)
|
|
289
|
-
flavour: str = Field(
|
|
290
|
-
description="The flavour that was used to build this deployment",
|
|
291
|
-
default="vanilla",
|
|
292
|
-
)
|
|
293
|
-
build_id: str = Field(
|
|
294
|
-
description="The build_id of the build that was deployed. Is referenced in the build.yaml file."
|
|
295
|
-
)
|
|
296
|
-
inspection: Optional[Inspection] = Field(
|
|
297
|
-
description="The inspection of the build that was deployed"
|
|
298
|
-
)
|
|
299
|
-
image: str = Field(
|
|
300
|
-
description="The docker image that was built for this deployment"
|
|
301
|
-
)
|
|
302
|
-
deployed_at: datetime.datetime = Field(
|
|
303
|
-
default_factory=datetime.datetime.now,
|
|
304
|
-
description="The timestamp of the deployment",
|
|
305
|
-
)
|
|
306
|
-
|
|
307
124
|
|
|
308
125
|
class DeploymentsConfigFile(BaseModel):
|
|
309
126
|
"""The ConfigFile is a pydantic model that represents the deployments.yaml file
|
|
@@ -315,18 +132,18 @@ class DeploymentsConfigFile(BaseModel):
|
|
|
315
132
|
_description_
|
|
316
133
|
"""
|
|
317
134
|
|
|
318
|
-
|
|
319
|
-
|
|
135
|
+
app_images: List[AppImageInput] = []
|
|
136
|
+
latest_app_image: Optional[str] = None
|
|
320
137
|
|
|
321
138
|
|
|
322
139
|
class Build(BaseModel):
|
|
323
140
|
build_run: str
|
|
324
141
|
build_id: str
|
|
325
|
-
inspection: Optional[
|
|
142
|
+
inspection: Optional[InspectionInput] = None
|
|
326
143
|
description: str = Field(default="")
|
|
327
|
-
selectors: List[
|
|
144
|
+
selectors: List[SelectorInput] = Field(default_factory=list)
|
|
328
145
|
flavour: str = Field(default="vanilla")
|
|
329
|
-
manifest:
|
|
146
|
+
manifest: ManifestInput
|
|
330
147
|
build_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
331
148
|
base_docker_command: List[str] = Field(
|
|
332
149
|
default_factory=lambda: ["docker", "run", "-it", "--net", "host"]
|
|
@@ -19,12 +19,11 @@ class Registration(BaseModel):
|
|
|
19
19
|
builder: Callable[[Herre, Fakts, Params], object]
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
basic_requirements =
|
|
23
|
-
|
|
22
|
+
basic_requirements = [Requirement(
|
|
23
|
+
key="lok",
|
|
24
24
|
service="live.arkitekt.lok",
|
|
25
25
|
description="An instance of ArkitektNext Lok to authenticate the user",
|
|
26
|
-
)
|
|
27
|
-
}
|
|
26
|
+
)]
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
class ServiceBuilderRegistry:
|
|
@@ -39,7 +38,7 @@ class ServiceBuilderRegistry:
|
|
|
39
38
|
requirement: Requirement,
|
|
40
39
|
):
|
|
41
40
|
self.service_builders[name] = service_builder
|
|
42
|
-
self.requirements
|
|
41
|
+
self.requirements.append(requirement)
|
|
43
42
|
|
|
44
43
|
def get(self, name):
|
|
45
44
|
return self.services.get(name)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: arkitekt-next
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.14
|
|
4
4
|
Summary: client for the arkitekt_next platform
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: jhnnsrs
|
|
@@ -20,20 +20,20 @@ Requires-Dist: blok (>=0.0.19) ; (python_version >= "3.9" and python_version < "
|
|
|
20
20
|
Requires-Dist: cryptography (>=40.0.8) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
|
|
21
21
|
Requires-Dist: dokker (>=1.0.0)
|
|
22
22
|
Requires-Dist: fakts (>=1.0.0)
|
|
23
|
-
Requires-Dist: fluss-next (>=0.1.
|
|
23
|
+
Requires-Dist: fluss-next (>=0.1.87) ; extra == "all"
|
|
24
24
|
Requires-Dist: herre (>=1.0.0)
|
|
25
|
-
Requires-Dist: kabinet (>=0.1.
|
|
25
|
+
Requires-Dist: kabinet (>=0.1.26) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "all")
|
|
26
26
|
Requires-Dist: koil (>=1.0.0)
|
|
27
|
-
Requires-Dist: lovekit (>=0.1.
|
|
28
|
-
Requires-Dist: mikro-next (>=0.1.
|
|
27
|
+
Requires-Dist: lovekit (>=0.1.13) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
|
|
28
|
+
Requires-Dist: mikro-next (>=0.1.42) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
|
|
29
29
|
Requires-Dist: namegenerator (>=1.0.6) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
|
|
30
30
|
Requires-Dist: netifaces (>=0.11.0) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
|
|
31
|
-
Requires-Dist: reaktion-next (>=0.1.
|
|
32
|
-
Requires-Dist: rekuest-next (>=0.2.
|
|
31
|
+
Requires-Dist: reaktion-next (>=0.1.77) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "all")
|
|
32
|
+
Requires-Dist: rekuest-next (>=0.2.35) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "cli" or extra == "all")
|
|
33
33
|
Requires-Dist: rich-click (>=1.6.1) ; extra == "cli" or extra == "all"
|
|
34
34
|
Requires-Dist: semver (>=3.0.1) ; extra == "cli" or extra == "all"
|
|
35
35
|
Requires-Dist: turms (>=0.6.0) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "cli" or extra == "all")
|
|
36
|
-
Requires-Dist: unlok-next (>=0.1.
|
|
36
|
+
Requires-Dist: unlok-next (>=0.1.81) ; python_version >= "3.8" and python_version < "4.0"
|
|
37
37
|
Requires-Dist: watchfiles (>=0.18.1) ; extra == "cli" or extra == "all"
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
39
39
|
|
|
@@ -8,7 +8,7 @@ arkitekt_next/apps/service/grant_registry.py,sha256=3om8YoVf_HFWEJbpjQCin1Zvm8Sz
|
|
|
8
8
|
arkitekt_next/apps/service/herre.py,sha256=IS3L2daljVBMqJAV0KEq3dWS7-OnmhWXYxtthgGGGMs,766
|
|
9
9
|
arkitekt_next/apps/service/herre_qt.py,sha256=f24DmAc7z4UfRaShXmmtt8psSnKlS7yCJODilX_gof4,1634
|
|
10
10
|
arkitekt_next/apps/types.py,sha256=jgqRDUHc34up_4hGUwlg_1yDH6A5pG6QRLaKQfmj-no,1276
|
|
11
|
-
arkitekt_next/base_models.py,sha256=
|
|
11
|
+
arkitekt_next/base_models.py,sha256=cSkQH5kxebQPDCxytz9GS5kT660VhcP9-e5Y_GB64Rk,4588
|
|
12
12
|
arkitekt_next/bloks/__init__.py,sha256=_4EeR63d6avQUWLG4mK2n_FvogTPQ_Jx6f2_RvNbWeA,29
|
|
13
13
|
arkitekt_next/bloks/admin.py,sha256=mRTfjIR1vsfY1ghgjWLjKYFAOh1pGCmQ_IEt2QOR3og,1353
|
|
14
14
|
arkitekt_next/bloks/arkitekt.py,sha256=ZyyHocaoPPCBZnbpBCkDzB2woXb1-ZbENr51UFERn2Q,1546
|
|
@@ -59,14 +59,14 @@ arkitekt_next/cli/commands/init/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
|
59
59
|
arkitekt_next/cli/commands/init/main.py,sha256=1ZbZDBECZRxlcnulycdS15s-uQ5ngx4xP3T1v-gkJ3U,5435
|
|
60
60
|
arkitekt_next/cli/commands/inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
arkitekt_next/cli/commands/inspect/main.py,sha256=Bu1vAZudkFCtjDnZAB8yQLDt-UKY9pJGhLBlEfDqtkw,626
|
|
62
|
-
arkitekt_next/cli/commands/inspect/requirements.py,sha256=
|
|
62
|
+
arkitekt_next/cli/commands/inspect/requirements.py,sha256=rCwCRLNB2aNKC7jqljGHtDp8uSgz4fKIseQiYyb6nDo,1884
|
|
63
63
|
arkitekt_next/cli/commands/inspect/templates.py,sha256=f_jzqvwLGhfcRcHr1bxUR248H-ylkTyF6Y1bygNg2ls,2290
|
|
64
64
|
arkitekt_next/cli/commands/inspect/variables.py,sha256=LonDlbS2qH1v-jD6RfEhTv-mxmgeBMKqD3oO2iDJRjE,2698
|
|
65
65
|
arkitekt_next/cli/commands/kabinet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
-
arkitekt_next/cli/commands/kabinet/build.py,sha256=
|
|
66
|
+
arkitekt_next/cli/commands/kabinet/build.py,sha256=pMVRNUdkVc-uu0YKNzKWXlDNNyAJKAaB0JuBFw0H6Uw,8697
|
|
67
67
|
arkitekt_next/cli/commands/kabinet/init.py,sha256=YcxXlMick7Xd2XUjmA9vyku0QDGACw1PEWpfJum42E8,3600
|
|
68
68
|
arkitekt_next/cli/commands/kabinet/main.py,sha256=U5EWekRTsMZZ34abWFfwilhzrd-zZtpZbl8RsLN_bC8,1008
|
|
69
|
-
arkitekt_next/cli/commands/kabinet/publish.py,sha256=
|
|
69
|
+
arkitekt_next/cli/commands/kabinet/publish.py,sha256=pbQ3QNNwSnyq06EPWfcJc_LoP9VhKo2wGBuUtNPPlV0,3572
|
|
70
70
|
arkitekt_next/cli/commands/kabinet/stage.py,sha256=bXpC8fDmG6qFQVuLhqTCieOJnvFafj3Flg1BdIeciEw,2025
|
|
71
71
|
arkitekt_next/cli/commands/kabinet/utils.py,sha256=a1lGmGwhiVxsxFDt19GddNwXmAwUAfclgTMe3ErA43c,1666
|
|
72
72
|
arkitekt_next/cli/commands/kabinet/validate.py,sha256=MSSuwjdJKDtXB6rkjRmG-PPK6cVwTcOuCRpgPDQ0uVg,2490
|
|
@@ -87,7 +87,7 @@ arkitekt_next/cli/constants.py,sha256=ONXKA8LRxXQkOQ56ZElVMZSTiaIH1LE_ikmUUKem98
|
|
|
87
87
|
arkitekt_next/cli/dockerfiles/vanilla.dockerfile,sha256=0ujdG22rZ6v2n5TMHNA4HR5f1PP9KJvAQORz-DGHBpo,184
|
|
88
88
|
arkitekt_next/cli/errors.py,sha256=zLTjaCbun6qM2nTldjyZd-DvykqKn5A3Gn80uYdx7Vc,93
|
|
89
89
|
arkitekt_next/cli/inspect.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
90
|
-
arkitekt_next/cli/io.py,sha256=
|
|
90
|
+
arkitekt_next/cli/io.py,sha256=butRTVzBPamuDESac0WvNGZ9MfLaKiEoIvMjNLkZ7GI,6976
|
|
91
91
|
arkitekt_next/cli/main.py,sha256=Ua7sq_OfC491F6r6zNs_oEiR4jVOsZwxLpX0ZXR0Jk0,2227
|
|
92
92
|
arkitekt_next/cli/options.py,sha256=hSKdSYabK1MuioBRUsADjQIPSp9H2YeczmcyAsFUprI,3791
|
|
93
93
|
arkitekt_next/cli/schemas/fluss.schema.graphql,sha256=MqrSpOxtWO9kWFCoUn9ySBPhIH3XozFiqrQl2zjEbiQ,35803
|
|
@@ -107,7 +107,7 @@ arkitekt_next/cli/schemas/unlok.schema.graphql,sha256=fXR846snIBIqkuQ-PlYnSkQjkF
|
|
|
107
107
|
arkitekt_next/cli/templates/filter.py,sha256=mD2jdNEXrZNagC_8WtuTisGJrGIbJDSylCvh19cF49I,650
|
|
108
108
|
arkitekt_next/cli/templates/simple.py,sha256=IbcThJ5LryXVFQUdzxfHQCtzSNxEQWTxbD__Ygxsp4M,1171
|
|
109
109
|
arkitekt_next/cli/texts.py,sha256=6qK9amHXXHRnXPOgto9QVyl3lwwmWOebL673xFfrUUk,680
|
|
110
|
-
arkitekt_next/cli/types.py,sha256=
|
|
110
|
+
arkitekt_next/cli/types.py,sha256=7VpElE7Xl6gUg-d7HotxTAYkPfBXEov8jan0eWUEdQs,5235
|
|
111
111
|
arkitekt_next/cli/ui.py,sha256=BR_AOsBIIHwojI5otBzT_560-ep5Dw1xAHKsO2zOOJQ,3493
|
|
112
112
|
arkitekt_next/cli/utils.py,sha256=rl1hfQIVzepLHPN_ZWuvfVH-IIVqcSfiFGyfNtL1XCo,445
|
|
113
113
|
arkitekt_next/cli/validators.py,sha256=XkLrOrDzBJwcG1keTawa_NJPt3QIBhb5KjepeH4N1KA,719
|
|
@@ -129,11 +129,11 @@ arkitekt_next/qt/builders.py,sha256=9YnKuC2z4xOV_BmW3_rPZmI-77dfBuT1UhaaQBC07ds,
|
|
|
129
129
|
arkitekt_next/qt/magic_bar.py,sha256=pC6vLG7ttsRw-MkPIL2HacGOWD1jzhg4jQG5qnGmvcg,18354
|
|
130
130
|
arkitekt_next/qt/types.py,sha256=nzTHjzzb8iIlYRBWUYiMqPWYqkhSSnbZ2Wps32iEjbs,4129
|
|
131
131
|
arkitekt_next/qt/utils.py,sha256=MgBPtPmCSBkIuATov3UgREESwxAHh77lWNNxyE7Qs48,773
|
|
132
|
-
arkitekt_next/service_registry.py,sha256=
|
|
132
|
+
arkitekt_next/service_registry.py,sha256=x3pzr3dJSI2hjMGNZa3F7boW-6N7K53acjdLTkg4kc8,3588
|
|
133
133
|
arkitekt_next/tqdm.py,sha256=lQcJI5Q6Py7Gy88hOCiJujjPEEGd8G2k1mOVJJ6oYe8,1531
|
|
134
134
|
arkitekt_next/utils.py,sha256=QETdzn_GIMSw6LdaXL89bqvqp9MGwEBK8Lj54MpnMwc,2396
|
|
135
|
-
arkitekt_next-0.8.
|
|
136
|
-
arkitekt_next-0.8.
|
|
137
|
-
arkitekt_next-0.8.
|
|
138
|
-
arkitekt_next-0.8.
|
|
139
|
-
arkitekt_next-0.8.
|
|
135
|
+
arkitekt_next-0.8.14.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
|
|
136
|
+
arkitekt_next-0.8.14.dist-info/METADATA,sha256=0WsL-RVE0jz3FFKmHwQz6Bp_Gv_S0SPfftdsZS63niU,6062
|
|
137
|
+
arkitekt_next-0.8.14.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
138
|
+
arkitekt_next-0.8.14.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
|
|
139
|
+
arkitekt_next-0.8.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|