arkitekt-next 0.8.11__tar.gz → 0.8.13__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of arkitekt-next might be problematic. Click here for more details.
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/PKG-INFO +13 -19
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/README.md +5 -11
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/base_models.py +19 -11
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/requirements.py +4 -4
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/templates.py +3 -2
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/build.py +4 -4
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/init.py +1 -1
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/version.py +1 -1
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/io.py +11 -10
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/main.py +1 -1
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/texts.py +2 -2
- arkitekt_next-0.8.13/arkitekt_next/cli/types.py +182 -0
- arkitekt_next-0.8.13/arkitekt_next/constants.py +4 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/service_registry.py +4 -5
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/pyproject.toml +8 -8
- arkitekt_next-0.8.11/arkitekt_next/cli/types.py +0 -363
- arkitekt_next-0.8.11/arkitekt_next/constants.py +0 -4
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/LICENSE +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/__blok__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/fakts_next.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/fakts_qt.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/grant_registry.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/herre.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/herre_qt.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/types.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/admin.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/arkitekt.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/base.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/config.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/fluss.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/gateway.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/internal_docker.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/kabinet.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/livekit.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/lok.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/mikro.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/minio.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/mount.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/namegen.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/orkestrator.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/postgres.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/redis.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/rekuest.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/secret.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/admin.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/config.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/db.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/gateway.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/livekit.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/lok.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/mount.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/name.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/redis.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/s3.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/secret.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/socket.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/socket.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/tailscale.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/builders.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/local.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/remote.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/compile.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/init.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/watch.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/init/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/init/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/variables.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/publish.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/stage.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/utils.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/validate.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/wizard.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/inspect.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/scopes.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/wizard.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/dev.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/main.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/prod.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/utils.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/configs/base.yaml +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/constants.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/dockerfiles/vanilla.dockerfile +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/errors.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/inspect.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/options.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/fluss.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/gucker.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kabinet.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kluster.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/konviktion.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kuay.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/mikro.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/mikro_next.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/napari.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/omero_ark.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/port.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/rekuest.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/rekuest_next.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/unlok.schema.graphql +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/templates/filter.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/templates/simple.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/ui.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/utils.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/validators.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/vars.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/versions/v1.yaml +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/__init__.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/gear.png +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/green pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/orange pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/pink pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/red pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/gear.png +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/green pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/orange pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/pink pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/red pulse.gif +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/builders.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/magic_bar.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/types.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/utils.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/tqdm.py +0 -0
- {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/utils.py +0 -0
|
@@ -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
|
|
|
@@ -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://
|
|
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,
|
|
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
|
|
|
@@ -13,7 +13,7 @@ streaming analysis for mikroscopy
|
|
|
13
13
|
|
|
14
14
|
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.
|
|
15
15
|
To understand the idea behind arkitekt_next, you need to understand the idea behind the arkitekt_next platform.
|
|
16
|
-
(More on this in the [documentation](https://
|
|
16
|
+
(More on this in the [documentation](https://arkitekt.live))
|
|
17
17
|
|
|
18
18
|
## Features
|
|
19
19
|
|
|
@@ -30,14 +30,12 @@ pip install arkitekt-next[all]
|
|
|
30
30
|
|
|
31
31
|
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
|
|
32
32
|
|
|
33
|
-
|
|
34
33
|
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.
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
## App
|
|
35
|
+
## App
|
|
38
36
|
|
|
39
37
|
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
|
|
40
|
-
type annotations, orchestration of real-time (in memoery) workflows, data hosting,
|
|
38
|
+
type annotations, orchestration of real-time (in memoery) workflows, data hosting, easy packaging and distribution in docker containers, etc...
|
|
41
39
|
|
|
42
40
|
To get started create a directory and run
|
|
43
41
|
|
|
@@ -69,8 +67,7 @@ Run example:
|
|
|
69
67
|
arkitekt-next run dev
|
|
70
68
|
```
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
For more details on how to create an app follow the tutorials on https://arkitekt_next.live.
|
|
70
|
+
For more details on how to create an app follow the tutorials on https://arkitekt.live.
|
|
74
71
|
|
|
75
72
|
## Usage with complex Datastructures
|
|
76
73
|
|
|
@@ -117,7 +114,4 @@ def complex_call(x: ComplexStrucuture) -> int:
|
|
|
117
114
|
|
|
118
115
|
```
|
|
119
116
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
Check out the arkitekt_next [documentation](https://arkitekt_next.live) for usage of this libary
|
|
123
|
-
|
|
117
|
+
Check out the arkitekt_next [documentation](https://arkitekt.live) for usage of this libary
|
|
@@ -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? """
|
{arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/requirements.py
RENAMED
|
@@ -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
|
|
{arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/templates.py
RENAMED
|
@@ -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.
|
|
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,
|
|
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]:
|
|
@@ -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://
|
|
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
|
|
{arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/version.py
RENAMED
|
@@ -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://
|
|
22
|
+
[link=https://arkitekt.live]https://arkitekt.live[/link]
|
|
23
23
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
@@ -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
|
)
|
|
@@ -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://
|
|
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://
|
|
18
|
+
ERROR_EPILOGUE = "To find out more, visit [link=https://arkitekt.live]https://arkitekt.live[/link]"
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
from importlib.metadata import version
|
|
2
|
+
from pydantic import BaseModel, Field, field_validator
|
|
3
|
+
import datetime
|
|
4
|
+
from typing import List, Optional, Union, Literal, Dict
|
|
5
|
+
from enum import Enum
|
|
6
|
+
import semver
|
|
7
|
+
import uuid
|
|
8
|
+
from arkitekt_next.base_models import Requirement
|
|
9
|
+
from string import Formatter
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from kabinet.api.schema import AppImageInput, InspectionInput, SelectorInput
|
|
13
|
+
from rekuest_next.api.schema import TemplateInput
|
|
14
|
+
|
|
15
|
+
ALLOWED_BUILDER_KEYS = [
|
|
16
|
+
"tag",
|
|
17
|
+
"dockerfile",
|
|
18
|
+
"package_version",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Framework(str, Enum):
|
|
23
|
+
"""Do we support other frameworks?"""
|
|
24
|
+
|
|
25
|
+
VANILLA = "vanilla"
|
|
26
|
+
TENSORFLOW = "tensorflow"
|
|
27
|
+
PYTORCH = "pytorch"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Packager(str, Enum):
|
|
31
|
+
CONDA = "conda"
|
|
32
|
+
POETRY = "poetry"
|
|
33
|
+
PIP = "pip"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Manifest(BaseModel):
|
|
37
|
+
identifier: str
|
|
38
|
+
version: str
|
|
39
|
+
author: str
|
|
40
|
+
logo: Optional[str] = None
|
|
41
|
+
entrypoint: str
|
|
42
|
+
scopes: List[str]
|
|
43
|
+
created_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
44
|
+
|
|
45
|
+
@field_validator("version", mode="before")
|
|
46
|
+
def version_must_be_semver(cls, v) -> str:
|
|
47
|
+
"""Checks that the version is a valid semver version"""
|
|
48
|
+
if isinstance(v, str):
|
|
49
|
+
try:
|
|
50
|
+
semver.VersionInfo.parse(v)
|
|
51
|
+
except ValueError:
|
|
52
|
+
raise ValueError("Version must be a valid semver version")
|
|
53
|
+
return str(v)
|
|
54
|
+
|
|
55
|
+
def to_console_string(self):
|
|
56
|
+
return f"📦 {self.identifier} ({self.version}) by {self.author}"
|
|
57
|
+
|
|
58
|
+
def to_builder_dict(self):
|
|
59
|
+
return {
|
|
60
|
+
"identifier": self.identifier,
|
|
61
|
+
"version": self.version,
|
|
62
|
+
"logo": self.logo,
|
|
63
|
+
"scopes": self.scopes,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class Config:
|
|
67
|
+
validate_assignment = True
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class SelectorType(str, Enum):
|
|
71
|
+
RAM = "ram"
|
|
72
|
+
CPU = "cpu"
|
|
73
|
+
GPU = "gpu"
|
|
74
|
+
LABEL = "label"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class Flavour(BaseModel):
|
|
78
|
+
selectors: List[SelectorInput]
|
|
79
|
+
description: str = Field(default="")
|
|
80
|
+
dockerfile: str = Field(default="Dockerfile")
|
|
81
|
+
build_command: List[str] = Field(
|
|
82
|
+
default_factory=lambda: [
|
|
83
|
+
"docker",
|
|
84
|
+
"build",
|
|
85
|
+
"-t",
|
|
86
|
+
"{tag}",
|
|
87
|
+
"-f",
|
|
88
|
+
"{dockerfile}",
|
|
89
|
+
".",
|
|
90
|
+
]
|
|
91
|
+
)
|
|
92
|
+
|
|
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}"
|
|
103
|
+
|
|
104
|
+
return value
|
|
105
|
+
|
|
106
|
+
def generate_build_command(self, tag: str, relative_dir: str):
|
|
107
|
+
"""Generates the build command for this flavour"""
|
|
108
|
+
|
|
109
|
+
dockerfile = os.path.join(relative_dir, self.dockerfile)
|
|
110
|
+
|
|
111
|
+
return [v.format(tag=tag, dockerfile=dockerfile) for v in self.build_command]
|
|
112
|
+
|
|
113
|
+
def check_relative_paths(self, flavour_folder: str):
|
|
114
|
+
"""Checks that the paths are relative to the flavour folder"""
|
|
115
|
+
|
|
116
|
+
dockerfile_path = os.path.join(flavour_folder, self.dockerfile)
|
|
117
|
+
|
|
118
|
+
if not os.path.exists(dockerfile_path):
|
|
119
|
+
raise Exception(
|
|
120
|
+
f"Could not find Dockerfile {self.dockerfile} in flavour {flavour_folder}"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class DeploymentsConfigFile(BaseModel):
|
|
126
|
+
"""The ConfigFile is a pydantic model that represents the deployments.yaml file
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
Parameters
|
|
130
|
+
----------
|
|
131
|
+
BaseModel : _type_
|
|
132
|
+
_description_
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
app_images: List[AppImageInput] = []
|
|
136
|
+
latest_app_image: Optional[str] = None
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class Build(BaseModel):
|
|
140
|
+
build_run: str
|
|
141
|
+
build_id: str
|
|
142
|
+
inspection: Optional[InspectionInput] = None
|
|
143
|
+
description: str = Field(default="")
|
|
144
|
+
selectors: List[SelectorInput] = Field(default_factory=list)
|
|
145
|
+
flavour: str = Field(default="vanilla")
|
|
146
|
+
manifest: Manifest
|
|
147
|
+
build_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
|
|
148
|
+
base_docker_command: List[str] = Field(
|
|
149
|
+
default_factory=lambda: ["docker", "run", "-it", "--net", "host"]
|
|
150
|
+
)
|
|
151
|
+
base_arkitekt_next_command: List[str] = Field(
|
|
152
|
+
default_factory=lambda: ["arkitekt-next", "run", "prod", "--headless"]
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def build_docker_command(self) -> List[str]:
|
|
156
|
+
"""Builds the docker command for this build"""
|
|
157
|
+
|
|
158
|
+
base_command = self.base_docker_command
|
|
159
|
+
|
|
160
|
+
for selector in self.selectors:
|
|
161
|
+
base_command = base_command + selector.build_docker_params()
|
|
162
|
+
|
|
163
|
+
base_command = base_command + [self.build_id]
|
|
164
|
+
|
|
165
|
+
return base_command
|
|
166
|
+
|
|
167
|
+
def build_arkitekt_next_command(self, fakts_url: str):
|
|
168
|
+
"""Builds the arkitekt_next command for this build"""
|
|
169
|
+
|
|
170
|
+
base_command = self.base_arkitekt_next_command
|
|
171
|
+
|
|
172
|
+
for selector in self.selectors:
|
|
173
|
+
base_command = base_command + selector.build_arkitekt_next_params()
|
|
174
|
+
|
|
175
|
+
base_command = base_command + ["--url", fakts_url]
|
|
176
|
+
|
|
177
|
+
return base_command
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class BuildsConfigFile(BaseModel):
|
|
181
|
+
builds: List[Build] = Field(default_factory=list)
|
|
182
|
+
latest_build_run: Optional[str] = None
|
|
@@ -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
|
[tool.poetry]
|
|
2
2
|
name = "arkitekt-next"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.13"
|
|
4
4
|
description = "client for the arkitekt_next platform"
|
|
5
5
|
authors = ["jhnnsrs <jhnnsrs@gmail.com>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -11,13 +11,13 @@ readme = "README.md"
|
|
|
11
11
|
python = "^3.8"
|
|
12
12
|
herre = ">=1.0.0"
|
|
13
13
|
fakts = ">=1.0.0"
|
|
14
|
-
mikro-next = { version = ">=0.1.
|
|
15
|
-
kabinet = { version = ">=0.1.
|
|
16
|
-
fluss-next = { version = ">=0.1.
|
|
17
|
-
reaktion-next= { version = ">=0.1.
|
|
18
|
-
rekuest-next= { version = ">=0.2.
|
|
19
|
-
unlok-next= { version = ">=0.1.
|
|
20
|
-
lovekit = { version = ">=0.1.
|
|
14
|
+
mikro-next = { version = ">=0.1.42", python = "^3.10", optional = true }
|
|
15
|
+
kabinet = { version = ">=0.1.26", optional = true, python = "^3.9" }
|
|
16
|
+
fluss-next = { version = ">=0.1.87", optional = true }
|
|
17
|
+
reaktion-next= { version = ">=0.1.77", python = "^3.8", optional = true }
|
|
18
|
+
rekuest-next= { version = ">=0.2.35", python = "^3.8", optional = true }
|
|
19
|
+
unlok-next= { version = ">=0.1.81", python = "^3.8", optional = true }
|
|
20
|
+
lovekit = { version = ">=0.1.13", python = "^3.10", optional = true }
|
|
21
21
|
rich-click = { version = ">=1.6.1", optional = true }
|
|
22
22
|
watchfiles = { version = ">=0.18.1", optional = true }
|
|
23
23
|
turms = { version = ">=0.6.0", python = "^3.9", optional = true }
|