arkitekt-next 0.8.11__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.

@@ -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
 
@@ -1,3 +1,4 @@
1
+ from pydantic import BaseModel
1
2
  import rich_click as click
2
3
  from importlib import import_module
3
4
  from arkitekt_next.apps.types import App
@@ -72,9 +73,9 @@ def templates(
72
73
  if rekuest is None:
73
74
  console.print("No rekuest service found in app")
74
75
  return
75
-
76
+
76
77
  x = {
77
- key: item.dict(by_alias=True)
78
+ key: item.model_dump(by_alias=True)
78
79
  for key, item in rekuest.agent.extensions[
79
80
  "default"
80
81
  ].definition_registry.templates.items()
@@ -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]:
@@ -110,7 +110,7 @@ def init(
110
110
  panel = Panel(
111
111
  title=f"Created new flavour [bold]{flavour}[/bold]\n",
112
112
  renderable="You can now edit the Dockerfile and add selectors to the config.yaml file\n"
113
- + "To learn more about selectors and how flavours work, please visit [link=https://arkitekt_next.live]https://arkitekt_next.live[/link]",
113
+ + "To learn more about selectors and how flavours work, please visit [link=https://arkitekt.live]https://arkitekt.live[/link]",
114
114
  style="green",
115
115
  )
116
116
 
@@ -19,7 +19,7 @@ def version(ctx):
19
19
  ArkitektNext manifests versioning follow [link=https://semver.org]semver[/link] and are used to version the app.
20
20
  This provides an orthogonal way to version the app, beyond node versioning. The version is used to
21
21
  track changes and to provide a way to update the app in the platform. For more information, please visit
22
- [link=https://arkitekt_next.live]https://arkitekt_next.live[/link]
22
+ [link=https://arkitekt.live]https://arkitekt.live[/link]
23
23
 
24
24
  """
25
25
 
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[Inspection],
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
- ) -> Deployment:
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 = Deployment(
228
+ deployment = AppImageInput(
229
229
  build_id=build.build_id,
230
230
  manifest=build.manifest,
231
- flavour=build.flavour,
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.deployments.append(deployment)
241
- config.latest_deployment_run = deployment_run
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.latest_deployment_run = deployment_run
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.json(exclude_none=True, by_alias=True)),
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/main.py CHANGED
@@ -52,7 +52,7 @@ def cli(ctx):
52
52
 
53
53
  This is the CLI for the ArkitektNext Python SDK. It allows you to create and deploy ArkitektNext Apps from your python code
54
54
  as well as to run them locally for testing and development. For more information about ArkitektNext, please visit
55
- [link=https://arkitekt_next.live]https://arkitekt_next.live[/link]
55
+ [link=https://arkitekt.live]https://arkitekt.live[/link]
56
56
  """
57
57
  sys.path.append(os.getcwd())
58
58
 
@@ -6,7 +6,7 @@ WELCOME_MESSAGE = (
6
6
  )
7
7
 
8
8
 
9
- LOGO = """
9
+ LOGO = r"""
10
10
  _ _ _ _ _
11
11
  __ _ _ __| | _(_) |_ ___| | _| |_
12
12
  / _` | '__| |/ / | __/ _ \ |/ / __|
@@ -15,4 +15,4 @@ LOGO = """
15
15
 
16
16
  """
17
17
 
18
- ERROR_EPILOGUE = "To find out more, visit [link=https://arkitekt_next.live]https://arkitekt_next.live[/link]"
18
+ ERROR_EPILOGUE = "To find out more, visit [link=https://arkitekt.live]https://arkitekt.live[/link]"
@@ -1,5 +1,5 @@
1
1
  from importlib.metadata import version
2
- from pydantic import BaseModel, Field, validator
2
+ from pydantic import BaseModel, Field, field_validator
3
3
  import datetime
4
4
  from typing import List, Optional, Union, Literal, Dict
5
5
  from enum import Enum
@@ -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 = [
@@ -41,7 +42,7 @@ class Manifest(BaseModel):
41
42
  scopes: List[str]
42
43
  created_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
43
44
 
44
- @validator("version", pre=True)
45
+ @field_validator("version", mode="before")
45
46
  def version_must_be_semver(cls, v) -> str:
46
47
  """Checks that the version is a valid semver version"""
47
48
  if isinstance(v, str):
@@ -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(
@@ -233,16 +90,18 @@ class Flavour(BaseModel):
233
90
  ]
234
91
  )
235
92
 
236
- @validator("build_command", each_item=True, always=True)
237
- def check_valid_template_name(cls, v):
238
- """Checks that the template name is valid"""
239
- for literal_text, field_name, format_spec, conversion in Formatter().parse(v):
240
- if field_name is not None:
241
- assert (
242
- field_name in ALLOWED_BUILDER_KEYS
243
- ), f"Invalid template key {field_name}. Allowed keys are {ALLOWED_BUILDER_KEYS}"
93
+ @field_validator("build_command", mode="before")
94
+ def check_valid_template_name(cls, value):
95
+ """Checks that the build_command templates are valid"""
96
+
97
+ for v in value:
98
+ for literal_text, field_name, format_spec, conversion in Formatter().parse(v):
99
+ if field_name is not None:
100
+ assert (
101
+ field_name in ALLOWED_BUILDER_KEYS
102
+ ), f"Invalid template key {field_name}. Allowed keys are {ALLOWED_BUILDER_KEYS}"
244
103
 
245
- return v
104
+ return value
246
105
 
247
106
  def generate_build_command(self, tag: str, relative_dir: str):
248
107
  """Generates the build command for this flavour"""
@@ -262,46 +121,6 @@ class Flavour(BaseModel):
262
121
  )
263
122
 
264
123
 
265
- class Deployment(BaseModel):
266
- """A deployment is a Release of a Build.
267
- It contains the build_id, the manifest, the builder, the definitions, the image and the deployed_at timestamp.
268
-
269
-
270
-
271
- """
272
-
273
- deployment_run: str = Field(
274
- default_factory=lambda: str(uuid.uuid4()),
275
- description="The unique identifier of the deployment run",
276
- )
277
-
278
- deployment_id: str = Field(
279
- default_factory=lambda: str(uuid.uuid4()),
280
- description="The unique identifier of the deployment",
281
- )
282
- manifest: Manifest = Field(description="The manifest of the app that was deployed")
283
- selectors: List[Selector] = Field(
284
- description="The selectors are used to place this image on the nodes",
285
- default_factory=list,
286
- )
287
- flavour: str = Field(
288
- description="The flavour that was used to build this deployment",
289
- default="vanilla",
290
- )
291
- build_id: str = Field(
292
- description="The build_id of the build that was deployed. Is referenced in the build.yaml file."
293
- )
294
- inspection: Optional[Inspection] = Field(
295
- description="The inspection of the build that was deployed"
296
- )
297
- image: str = Field(
298
- description="The docker image that was built for this deployment"
299
- )
300
- deployed_at: datetime.datetime = Field(
301
- default_factory=datetime.datetime.now,
302
- description="The timestamp of the deployment",
303
- )
304
-
305
124
 
306
125
  class DeploymentsConfigFile(BaseModel):
307
126
  """The ConfigFile is a pydantic model that represents the deployments.yaml file
@@ -313,16 +132,16 @@ class DeploymentsConfigFile(BaseModel):
313
132
  _description_
314
133
  """
315
134
 
316
- deployments: List[Deployment] = []
317
- latest_deployment_run: Optional[str] = None
135
+ app_images: List[AppImageInput] = []
136
+ latest_app_image: Optional[str] = None
318
137
 
319
138
 
320
139
  class Build(BaseModel):
321
140
  build_run: str
322
141
  build_id: str
323
- inspection: Optional[Inspection] = None
142
+ inspection: Optional[InspectionInput] = None
324
143
  description: str = Field(default="")
325
- selectors: List[Selector] = Field(default_factory=list)
144
+ selectors: List[SelectorInput] = Field(default_factory=list)
326
145
  flavour: str = Field(default="vanilla")
327
146
  manifest: Manifest
328
147
  build_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
@@ -1,4 +1,4 @@
1
- REPO_URL = "https://arkitekt_next.live/repo.json"
1
+ REPO_URL = "https://arkitekt.live/repo.json"
2
2
 
3
3
 
4
4
  DEFAULT_ARKITEKT_URL = "http://127.0.0.1"
@@ -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.11
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.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
 
@@ -52,7 +52,7 @@ streaming analysis for mikroscopy
52
52
 
53
53
  arkitekt_next is the python client for the arkitekt_next platform. It allows you to utilize the full extent of the platform from your python code.
54
54
  To understand the idea behind arkitekt_next, you need to understand the idea behind the arkitekt_next platform.
55
- (More on this in the [documentation](https://arkitekt_next.live))
55
+ (More on this in the [documentation](https://arkitekt.live))
56
56
 
57
57
  ## Features
58
58
 
@@ -69,14 +69,12 @@ pip install arkitekt-next[all]
69
69
 
70
70
  This installs all dependencies for the arkitekt_next platform, inlcuding the arkitekt_next CLI, which can be used to develop and create apps, containerize them and deploy t
71
71
 
72
-
73
72
  arkitekt_next is relying heavily on asyncio patters and therfore supports python 3.8 and above. It also relies on the pydantic stack for serialization.
74
73
 
75
-
76
- ## App
74
+ ## App
77
75
 
78
76
  You can use the cli to create python based apps for the arkitekt_next platform, profiting from a battery of features like easy GUI creation based on
79
- type annotations, orchestration of real-time (in memoery) workflows, data hosting, easy packaging and distribution in docker containers, etc...
77
+ type annotations, orchestration of real-time (in memoery) workflows, data hosting, easy packaging and distribution in docker containers, etc...
80
78
 
81
79
  To get started create a directory and run
82
80
 
@@ -108,8 +106,7 @@ Run example:
108
106
  arkitekt-next run dev
109
107
  ```
110
108
 
111
-
112
- For more details on how to create an app follow the tutorials on https://arkitekt_next.live.
109
+ For more details on how to create an app follow the tutorials on https://arkitekt.live.
113
110
 
114
111
  ## Usage with complex Datastructures
115
112
 
@@ -156,8 +153,5 @@ def complex_call(x: ComplexStrucuture) -> int:
156
153
 
157
154
  ```
158
155
 
159
-
160
-
161
- Check out the arkitekt_next [documentation](https://arkitekt_next.live) for usage of this libary
162
-
156
+ Check out the arkitekt_next [documentation](https://arkitekt.live) for usage of this libary
163
157
 
@@ -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,12 +59,12 @@ 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
63
- arkitekt_next/cli/commands/inspect/templates.py,sha256=lc0lGwhMeDKWbKvWW7Vs6McqZ02vadtHWKMbPIyx_7E,2249
62
+ arkitekt_next/cli/commands/inspect/requirements.py,sha256=rCwCRLNB2aNKC7jqljGHtDp8uSgz4fKIseQiYyb6nDo,1884
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
67
- arkitekt_next/cli/commands/kabinet/init.py,sha256=8GDGUGQgoWv7Vcee7vhFcGqvJzP7hUvUrX7RMt_IZGs,3610
66
+ arkitekt_next/cli/commands/kabinet/build.py,sha256=pMVRNUdkVc-uu0YKNzKWXlDNNyAJKAaB0JuBFw0H6Uw,8697
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
70
70
  arkitekt_next/cli/commands/kabinet/stage.py,sha256=bXpC8fDmG6qFQVuLhqTCieOJnvFafj3Flg1BdIeciEw,2025
@@ -75,7 +75,7 @@ arkitekt_next/cli/commands/manifest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
75
75
  arkitekt_next/cli/commands/manifest/inspect.py,sha256=eqYYt3M8XiYCJONarikVVa8uK7Hh7DfB2b3fOOQ3dlk,1370
76
76
  arkitekt_next/cli/commands/manifest/main.py,sha256=mOjsZSQeYorm38u4mg3IHsK_h8fTVprYYtvKpbG93V8,662
77
77
  arkitekt_next/cli/commands/manifest/scopes.py,sha256=sw0HRy8GliEcmx3Sh6cPRpBkf1vxAGJwLgIO63ZB_t4,4879
78
- arkitekt_next/cli/commands/manifest/version.py,sha256=tA-a35QlcobUwoPsgGLQL9_D0E-HZvawsfO4l7DoX-Y,4832
78
+ arkitekt_next/cli/commands/manifest/version.py,sha256=3JdcXqiFeCvIaEpsMfeSKWU_uQehDkEawEpdSxWaKSA,4822
79
79
  arkitekt_next/cli/commands/manifest/wizard.py,sha256=a8rIHgtmKuw-L4E3eO3kXwXv0TM2pN4Lq75y2QKXmcA,2498
80
80
  arkitekt_next/cli/commands/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  arkitekt_next/cli/commands/run/dev.py,sha256=3px8ZulJU7rLonED0ZW2Ec1yFyXAK--b0jrB2yoVj50,10046
@@ -87,8 +87,8 @@ 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
91
- arkitekt_next/cli/main.py,sha256=aMArNPvmreSCJI30UN3plueWfGzVvUL5Fx53Z-5dtkw,2237
90
+ arkitekt_next/cli/io.py,sha256=GrzLKMiIaDjwyzYLZ28hlbMc7rwQZupFUCDquiWiE6o,6925
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
94
94
  arkitekt_next/cli/schemas/gucker.schema.graphql,sha256=r_KL-MoFRCGUobbtcBLCnpmFcali2A12TguynqQgmN4,152947
@@ -106,14 +106,14 @@ arkitekt_next/cli/schemas/rekuest_next.schema.graphql,sha256=LcYtS9AjTRlSBPllSIm
106
106
  arkitekt_next/cli/schemas/unlok.schema.graphql,sha256=fXR846snIBIqkuQ-PlYnSkQjkFVmM6NVZLlcMKgbr8E,18216
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
- arkitekt_next/cli/texts.py,sha256=080QLAe8dhklkfoA8Yk6fLrQeRoUrTQLgWCZiWl7bNk,689
110
- arkitekt_next/cli/types.py,sha256=JGV0lREJl8WcDZ13y3TRGeFPVzhUlA0gWpB8HSCMjfc,10448
109
+ arkitekt_next/cli/texts.py,sha256=6qK9amHXXHRnXPOgto9QVyl3lwwmWOebL673xFfrUUk,680
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
114
114
  arkitekt_next/cli/vars.py,sha256=ev7cKDSPoik8hU9A_ohNpjRZX4FT1GYJaBoGLnxCKjU,982
115
115
  arkitekt_next/cli/versions/v1.yaml,sha256=rv2-F6FQbTZi_H6pSE_csdICdtKBObDdoo_asOFi43Y,12
116
- arkitekt_next/constants.py,sha256=OMNXceT6p9hxo3DLLH-632HtZqOe29E_1vrdeNiP4ZE,94
116
+ arkitekt_next/constants.py,sha256=sJkLlkH21REjbpiSHnXCiW0lWOwWT-2VqGvWlxjQePY,89
117
117
  arkitekt_next/qt/__init__.py,sha256=5tCCd-FA3sMN9Lo5JRUYUM6xgs2zxyHj5YDpdWYbR0w,471
118
118
  arkitekt_next/qt/assets/dark/gear.png,sha256=nYl1JZhcpwd7s5FgG2g-1RpkK7TH_QQRqJMmK6r0BpU,6296
119
119
  arkitekt_next/qt/assets/dark/green pulse.gif,sha256=cUd2F3Qlvjb7SnsU-LjGgeLTa8KoPgu3C-LNrixIQds,105386
@@ -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.11.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
136
- arkitekt_next-0.8.11.dist-info/METADATA,sha256=iQgma_7NtP6MOtnIgfgDMV0SfJvTFGOhPtQDLYAjW1k,6085
137
- arkitekt_next-0.8.11.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
138
- arkitekt_next-0.8.11.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
139
- arkitekt_next-0.8.11.dist-info/RECORD,,
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,,