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.

@@ -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() -> dict[str, Requirement]:
19
- return {
20
- "lok": Requirement(
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
- "rekuest": Requirement(
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
- "kabinet": Requirement(
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
- "mikro": Requirement(
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
- "fluss": Requirement(
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
- "port": Requirement(
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
- "datalayer": Requirement(
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[dict[str, Requirement]] = Field(
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
- key: item.model_dump(by_alias=True)
71
- for key, item in app.manifest.requirements.items()
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, Inspection
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) -> Inspection:
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) -> Inspection:
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 Inspection(size=size, templates=templates, requirements=requirements)
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.deployments:
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.flavour == build.flavour
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[Inspection],
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
- ) -> Deployment:
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
- deployment = Deployment(
229
- build_id=build.build_id,
230
+ app_image = AppImageInput(
231
+ appImageId=uuid.uuid4().hex,
230
232
  manifest=build.manifest,
231
- flavour=build.flavour,
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.deployments.append(deployment)
241
- config.latest_deployment_run = deployment_run
243
+ config.app_images.append(app_image)
244
+ config.latest_app_image = app_image.app_image_id
242
245
  else:
243
- config = DeploymentsConfigFile(deployments=[deployment])
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.json(exclude_none=True, by_alias=True)),
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 deployment
255
+ return app_image
@@ -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[Selector]
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
- deployments: List[Deployment] = []
319
- latest_deployment_run: Optional[str] = None
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[Inspection] = None
142
+ inspection: Optional[InspectionInput] = None
326
143
  description: str = Field(default="")
327
- selectors: List[Selector] = Field(default_factory=list)
144
+ selectors: List[SelectorInput] = Field(default_factory=list)
328
145
  flavour: str = Field(default="vanilla")
329
- manifest: 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
- "lok": Requirement(
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[name] = requirement
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.12
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.86) ; extra == "all"
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) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "all")
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.12) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
28
- Requires-Dist: mikro-next (>=0.1.41) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
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.76) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "all")
32
- Requires-Dist: rekuest-next (>=0.2.34) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "cli" or extra == "all")
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.80) ; python_version >= "3.8" and python_version < "4.0"
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=w1R5wiwyyGj1_SgSARRpdTsO4E82Uu3d-8FYXauTETA,4473
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=Pj1akKhEtlbtat7Ug2UbqXYbDeYXubW35uKRoOew6wc,1902
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=Yr368xRyIXrD7bZ-NI-NFoXGU5ulydQ_SSyFFoU_cRw,8677
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=uPgDAlo-NBTL6wLyNWX55JJ7T5ZcRNKMLd9RRbhOod4,3568
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=uRhq3SCI-sCiRp9TXK_hFqu5xub1h49XNixFqybHCpc,6821
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=LLn9Z4_5OQPJO_kpqtN33pVzhWf-9HyvKDAUGpx8Dg8,10521
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=oU1RrvNuDbLutvCS05OhbpKMP8d8gKaRU1ldu-OrWDk,3583
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.12.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
136
- arkitekt_next-0.8.12.dist-info/METADATA,sha256=X9uaFC7UJyNHzmKjNaP2dAb760gUNvrwIZARXUJifLM,6062
137
- arkitekt_next-0.8.12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
138
- arkitekt_next-0.8.12.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
139
- arkitekt_next-0.8.12.dist-info/RECORD,,
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,,