arkitekt-next 0.8.12__py3-none-any.whl → 0.8.13__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/io.py +11 -10
- arkitekt_next/cli/types.py +6 -189
- arkitekt_next/service_registry.py +4 -5
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.13.dist-info}/METADATA +8 -8
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.13.dist-info}/RECORD +11 -11
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.13.dist-info}/LICENSE +0 -0
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.13.dist-info}/WHEEL +0 -0
- {arkitekt_next-0.8.12.dist-info → arkitekt_next-0.8.13.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]:
|
arkitekt_next/cli/io.py
CHANGED
|
@@ -2,14 +2,14 @@ from arkitekt_next.utils import create_arkitekt_next_folder
|
|
|
2
2
|
import os
|
|
3
3
|
from typing import Optional, List, Dict
|
|
4
4
|
from arkitekt_next.cli.types import (
|
|
5
|
-
Inspection,
|
|
6
5
|
Manifest,
|
|
7
6
|
Build,
|
|
8
7
|
BuildsConfigFile,
|
|
9
|
-
Deployment,
|
|
10
8
|
Flavour,
|
|
11
9
|
DeploymentsConfigFile,
|
|
12
10
|
)
|
|
11
|
+
from kabinet.api.schema import InspectionInput, AppImageInput
|
|
12
|
+
|
|
13
13
|
import yaml
|
|
14
14
|
import json
|
|
15
15
|
import rich_click as click
|
|
@@ -120,7 +120,7 @@ def generate_build(
|
|
|
120
120
|
flavour_name: str,
|
|
121
121
|
flavour: Flavour,
|
|
122
122
|
manifest: Manifest,
|
|
123
|
-
inspection: Optional[
|
|
123
|
+
inspection: Optional[InspectionInput],
|
|
124
124
|
) -> Build:
|
|
125
125
|
"""Generates a build from a builder, build_id and manifest
|
|
126
126
|
|
|
@@ -201,7 +201,7 @@ def generate_deployment(
|
|
|
201
201
|
deployment_run: str,
|
|
202
202
|
build: Build,
|
|
203
203
|
image: str,
|
|
204
|
-
) ->
|
|
204
|
+
) -> AppImageInput:
|
|
205
205
|
"""Generates a deployment from a build and an image
|
|
206
206
|
|
|
207
207
|
Parameters
|
|
@@ -225,10 +225,10 @@ def generate_deployment(
|
|
|
225
225
|
|
|
226
226
|
config_file = os.path.join(path, "deployments.yaml")
|
|
227
227
|
|
|
228
|
-
deployment =
|
|
228
|
+
deployment = AppImageInput(
|
|
229
229
|
build_id=build.build_id,
|
|
230
230
|
manifest=build.manifest,
|
|
231
|
-
|
|
231
|
+
flavour_name=build.flavour,
|
|
232
232
|
selectors=build.selectors,
|
|
233
233
|
inspection=build.inspection,
|
|
234
234
|
image=image,
|
|
@@ -237,15 +237,16 @@ def generate_deployment(
|
|
|
237
237
|
if os.path.exists(config_file):
|
|
238
238
|
with open(config_file, "r") as file:
|
|
239
239
|
config = DeploymentsConfigFile(**yaml.safe_load(file))
|
|
240
|
-
config.
|
|
241
|
-
config.
|
|
240
|
+
config.app_images.append(deployment)
|
|
241
|
+
config.latest_app_image = deployment.release_id
|
|
242
242
|
else:
|
|
243
243
|
config = DeploymentsConfigFile(deployments=[deployment])
|
|
244
|
-
config.
|
|
244
|
+
config.app_images = deployment_run
|
|
245
|
+
config.latest_app_image = deployment.release_id
|
|
245
246
|
|
|
246
247
|
with open(config_file, "w") as file:
|
|
247
248
|
yaml.safe_dump(
|
|
248
|
-
json.loads(config.
|
|
249
|
+
json.loads(config.model_dump_json(exclude_none=True, by_alias=True)),
|
|
249
250
|
file,
|
|
250
251
|
sort_keys=True,
|
|
251
252
|
)
|
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
|
|
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,16 +132,16 @@ 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
146
|
manifest: Manifest
|
|
330
147
|
build_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
@@ -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.13
|
|
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,11 +59,11 @@ 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
69
|
arkitekt_next/cli/commands/kabinet/publish.py,sha256=uPgDAlo-NBTL6wLyNWX55JJ7T5ZcRNKMLd9RRbhOod4,3568
|
|
@@ -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=GrzLKMiIaDjwyzYLZ28hlbMc7rwQZupFUCDquiWiE6o,6925
|
|
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=Pn6LLj0XjyMBOqyTj3ZnvNvwY8-Ci-KFSW6qza4sIQQ,5215
|
|
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.13.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
|
|
136
|
+
arkitekt_next-0.8.13.dist-info/METADATA,sha256=cg182RS4KnU09458ixCVY5d9NrGBsr1EUXWt7DVuVNw,6062
|
|
137
|
+
arkitekt_next-0.8.13.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
138
|
+
arkitekt_next-0.8.13.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
|
|
139
|
+
arkitekt_next-0.8.13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|