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.

Files changed (140) hide show
  1. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/PKG-INFO +13 -19
  2. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/README.md +5 -11
  3. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/base_models.py +19 -11
  4. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/requirements.py +4 -4
  5. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/templates.py +3 -2
  6. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/build.py +4 -4
  7. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/init.py +1 -1
  8. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/version.py +1 -1
  9. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/io.py +11 -10
  10. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/main.py +1 -1
  11. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/texts.py +2 -2
  12. arkitekt_next-0.8.13/arkitekt_next/cli/types.py +182 -0
  13. arkitekt_next-0.8.13/arkitekt_next/constants.py +4 -0
  14. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/service_registry.py +4 -5
  15. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/pyproject.toml +8 -8
  16. arkitekt_next-0.8.11/arkitekt_next/cli/types.py +0 -363
  17. arkitekt_next-0.8.11/arkitekt_next/constants.py +0 -4
  18. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/LICENSE +0 -0
  19. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/__blok__.py +0 -0
  20. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/__init__.py +0 -0
  21. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/__init__.py +0 -0
  22. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/__init__.py +0 -0
  23. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/fakts_next.py +0 -0
  24. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/fakts_qt.py +0 -0
  25. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/grant_registry.py +0 -0
  26. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/herre.py +0 -0
  27. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/service/herre_qt.py +0 -0
  28. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/apps/types.py +0 -0
  29. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/__init__.py +0 -0
  30. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/admin.py +0 -0
  31. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/arkitekt.py +0 -0
  32. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/base.py +0 -0
  33. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/config.py +0 -0
  34. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/fluss.py +0 -0
  35. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/gateway.py +0 -0
  36. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/internal_docker.py +0 -0
  37. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/kabinet.py +0 -0
  38. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/livekit.py +0 -0
  39. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/lok.py +0 -0
  40. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/mikro.py +0 -0
  41. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/minio.py +0 -0
  42. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/mount.py +0 -0
  43. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/namegen.py +0 -0
  44. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/orkestrator.py +0 -0
  45. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/postgres.py +0 -0
  46. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/redis.py +0 -0
  47. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/rekuest.py +0 -0
  48. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/secret.py +0 -0
  49. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/__init__.py +0 -0
  50. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/admin.py +0 -0
  51. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/config.py +0 -0
  52. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/db.py +0 -0
  53. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/gateway.py +0 -0
  54. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/livekit.py +0 -0
  55. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/lok.py +0 -0
  56. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/mount.py +0 -0
  57. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/name.py +0 -0
  58. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/redis.py +0 -0
  59. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/s3.py +0 -0
  60. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/secret.py +0 -0
  61. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/services/socket.py +0 -0
  62. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/socket.py +0 -0
  63. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/bloks/tailscale.py +0 -0
  64. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/builders.py +0 -0
  65. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/__init__.py +0 -0
  66. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/__init__.py +0 -0
  67. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/local.py +0 -0
  68. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/main.py +0 -0
  69. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/call/remote.py +0 -0
  70. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/__init__.py +0 -0
  71. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/compile.py +0 -0
  72. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/init.py +0 -0
  73. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/main.py +0 -0
  74. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/gen/watch.py +0 -0
  75. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/init/__init__.py +0 -0
  76. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/init/main.py +0 -0
  77. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/__init__.py +0 -0
  78. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/main.py +0 -0
  79. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/inspect/variables.py +0 -0
  80. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/__init__.py +0 -0
  81. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/main.py +0 -0
  82. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/publish.py +0 -0
  83. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/stage.py +0 -0
  84. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/utils.py +0 -0
  85. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/validate.py +0 -0
  86. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/kabinet/wizard.py +0 -0
  87. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/__init__.py +0 -0
  88. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/inspect.py +0 -0
  89. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/main.py +0 -0
  90. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/scopes.py +0 -0
  91. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/manifest/wizard.py +0 -0
  92. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/__init__.py +0 -0
  93. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/dev.py +0 -0
  94. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/main.py +0 -0
  95. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/prod.py +0 -0
  96. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/commands/run/utils.py +0 -0
  97. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/configs/base.yaml +0 -0
  98. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/constants.py +0 -0
  99. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/dockerfiles/vanilla.dockerfile +0 -0
  100. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/errors.py +0 -0
  101. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/inspect.py +0 -0
  102. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/options.py +0 -0
  103. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/fluss.schema.graphql +0 -0
  104. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/gucker.schema.graphql +0 -0
  105. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kabinet.schema.graphql +0 -0
  106. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kluster.schema.graphql +0 -0
  107. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/konviktion.schema.graphql +0 -0
  108. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/kuay.schema.graphql +0 -0
  109. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/mikro.schema.graphql +0 -0
  110. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/mikro_next.schema.graphql +0 -0
  111. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/napari.schema.graphql +0 -0
  112. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/omero_ark.schema.graphql +0 -0
  113. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/port.schema.graphql +0 -0
  114. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/rekuest.schema.graphql +0 -0
  115. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/rekuest_next.schema.graphql +0 -0
  116. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/schemas/unlok.schema.graphql +0 -0
  117. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/templates/filter.py +0 -0
  118. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/templates/simple.py +0 -0
  119. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/ui.py +0 -0
  120. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/utils.py +0 -0
  121. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/validators.py +0 -0
  122. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/vars.py +0 -0
  123. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/cli/versions/v1.yaml +0 -0
  124. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/__init__.py +0 -0
  125. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/gear.png +0 -0
  126. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/green pulse.gif +0 -0
  127. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/orange pulse.gif +0 -0
  128. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/pink pulse.gif +0 -0
  129. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/dark/red pulse.gif +0 -0
  130. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/gear.png +0 -0
  131. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/green pulse.gif +0 -0
  132. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/orange pulse.gif +0 -0
  133. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/pink pulse.gif +0 -0
  134. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/assets/light/red pulse.gif +0 -0
  135. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/builders.py +0 -0
  136. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/magic_bar.py +0 -0
  137. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/types.py +0 -0
  138. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/qt/utils.py +0 -0
  139. {arkitekt_next-0.8.11 → arkitekt_next-0.8.13}/arkitekt_next/tqdm.py +0 -0
  140. {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.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
 
@@ -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://arkitekt_next.live))
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, easy packaging and distribution in docker containers, etc...
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() -> 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
 
@@ -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
  )
@@ -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]"
@@ -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
@@ -0,0 +1,4 @@
1
+ REPO_URL = "https://arkitekt.live/repo.json"
2
+
3
+
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
  [tool.poetry]
2
2
  name = "arkitekt-next"
3
- version = "0.8.11"
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.41", python = "^3.10", optional = true }
15
- kabinet = { version = ">=0.1.25", optional = true, python = "^3.9" }
16
- fluss-next = { version = ">=0.1.86", optional = true }
17
- reaktion-next= { version = ">=0.1.76", python = "^3.8", optional = true }
18
- rekuest-next= { version = ">=0.2.34", python = "^3.8", optional = true }
19
- unlok-next= { version = ">=0.1.80", python = "^3.8", optional = true }
20
- lovekit = { version = ">=0.1.12", python = "^3.10", optional = true }
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 }