arkitekt-next 0.8.18__tar.gz → 0.8.20__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.18 → arkitekt_next-0.8.20}/PKG-INFO +10 -10
  2. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/service/fakts_next.py +40 -36
  3. arkitekt_next-0.8.20/arkitekt_next/apps/service/fakts_qt.py +56 -0
  4. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/service/grant_registry.py +5 -5
  5. arkitekt_next-0.8.20/arkitekt_next/apps/service/herre.py +24 -0
  6. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/service/herre_qt.py +10 -10
  7. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/types.py +2 -2
  8. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/base_models.py +11 -3
  9. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/livekit.py +1 -1
  10. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/lok.py +1 -1
  11. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/minio.py +3 -3
  12. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/builders.py +17 -13
  13. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/call/local.py +1 -1
  14. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/call/remote.py +1 -1
  15. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/stage.py +1 -1
  16. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/run/dev.py +2 -2
  17. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/options.py +6 -6
  18. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/types.py +2 -2
  19. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/builders.py +20 -20
  20. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/magic_bar.py +1 -18
  21. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/types.py +0 -5
  22. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/service_registry.py +2 -2
  23. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/pyproject.toml +10 -10
  24. arkitekt_next-0.8.18/arkitekt_next/apps/service/fakts_qt.py +0 -86
  25. arkitekt_next-0.8.18/arkitekt_next/apps/service/herre.py +0 -24
  26. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/LICENSE +0 -0
  27. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/README.md +0 -0
  28. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/__blok__.py +0 -0
  29. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/__init__.py +0 -0
  30. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/__init__.py +0 -0
  31. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/apps/service/__init__.py +0 -0
  32. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/__init__.py +0 -0
  33. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/admin.py +0 -0
  34. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/arkitekt.py +0 -0
  35. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/base.py +0 -0
  36. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/config.py +0 -0
  37. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/fluss.py +0 -0
  38. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/gateway.py +0 -0
  39. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/internal_docker.py +0 -0
  40. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/kabinet.py +0 -0
  41. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/mikro.py +0 -0
  42. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/mount.py +0 -0
  43. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/namegen.py +0 -0
  44. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/orkestrator.py +0 -0
  45. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/postgres.py +0 -0
  46. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/redis.py +0 -0
  47. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/rekuest.py +0 -0
  48. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/secret.py +0 -0
  49. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/__init__.py +0 -0
  50. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/admin.py +0 -0
  51. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/config.py +0 -0
  52. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/db.py +0 -0
  53. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/gateway.py +0 -0
  54. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/livekit.py +0 -0
  55. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/lok.py +0 -0
  56. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/mount.py +0 -0
  57. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/name.py +0 -0
  58. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/redis.py +0 -0
  59. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/s3.py +0 -0
  60. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/secret.py +0 -0
  61. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/services/socket.py +0 -0
  62. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/socket.py +0 -0
  63. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/bloks/tailscale.py +0 -0
  64. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/__init__.py +0 -0
  65. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/call/__init__.py +0 -0
  66. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/call/main.py +0 -0
  67. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/gen/__init__.py +0 -0
  68. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/gen/compile.py +0 -0
  69. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/gen/init.py +0 -0
  70. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/gen/main.py +0 -0
  71. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/gen/watch.py +0 -0
  72. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/init/__init__.py +0 -0
  73. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/init/main.py +0 -0
  74. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/inspect/__init__.py +0 -0
  75. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/inspect/main.py +0 -0
  76. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/inspect/requirements.py +0 -0
  77. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/inspect/templates.py +0 -0
  78. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/inspect/variables.py +0 -0
  79. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/__init__.py +0 -0
  80. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/build.py +0 -0
  81. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/init.py +0 -0
  82. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/main.py +0 -0
  83. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/publish.py +0 -0
  84. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/utils.py +0 -0
  85. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/validate.py +0 -0
  86. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/kabinet/wizard.py +0 -0
  87. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/__init__.py +0 -0
  88. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/inspect.py +0 -0
  89. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/main.py +0 -0
  90. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/scopes.py +0 -0
  91. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/version.py +0 -0
  92. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/manifest/wizard.py +0 -0
  93. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/run/__init__.py +0 -0
  94. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/run/main.py +0 -0
  95. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/run/prod.py +0 -0
  96. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/commands/run/utils.py +0 -0
  97. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/configs/base.yaml +0 -0
  98. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/constants.py +0 -0
  99. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/dockerfiles/vanilla.dockerfile +0 -0
  100. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/errors.py +0 -0
  101. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/inspect.py +0 -0
  102. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/io.py +0 -0
  103. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/main.py +0 -0
  104. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/fluss.schema.graphql +0 -0
  105. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/gucker.schema.graphql +0 -0
  106. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/kabinet.schema.graphql +0 -0
  107. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/kluster.schema.graphql +0 -0
  108. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/konviktion.schema.graphql +0 -0
  109. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/kuay.schema.graphql +0 -0
  110. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/mikro.schema.graphql +0 -0
  111. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/mikro_next.schema.graphql +0 -0
  112. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/napari.schema.graphql +0 -0
  113. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/omero_ark.schema.graphql +0 -0
  114. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/port.schema.graphql +0 -0
  115. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/rekuest.schema.graphql +0 -0
  116. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/rekuest_next.schema.graphql +0 -0
  117. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/schemas/unlok.schema.graphql +0 -0
  118. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/templates/filter.py +0 -0
  119. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/templates/simple.py +0 -0
  120. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/texts.py +0 -0
  121. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/ui.py +0 -0
  122. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/utils.py +0 -0
  123. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/validators.py +0 -0
  124. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/vars.py +0 -0
  125. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/cli/versions/v1.yaml +0 -0
  126. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/constants.py +0 -0
  127. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/__init__.py +0 -0
  128. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/dark/gear.png +0 -0
  129. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/dark/green pulse.gif +0 -0
  130. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/dark/orange pulse.gif +0 -0
  131. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/dark/pink pulse.gif +0 -0
  132. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/dark/red pulse.gif +0 -0
  133. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/light/gear.png +0 -0
  134. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/light/green pulse.gif +0 -0
  135. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/light/orange pulse.gif +0 -0
  136. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/light/pink pulse.gif +0 -0
  137. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/assets/light/red pulse.gif +0 -0
  138. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/qt/utils.py +0 -0
  139. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/arkitekt_next/tqdm.py +0 -0
  140. {arkitekt_next-0.8.18 → arkitekt_next-0.8.20}/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.18
3
+ Version: 0.8.20
4
4
  Summary: client for the arkitekt_next platform
5
5
  License: MIT
6
6
  Author: jhnnsrs
@@ -19,21 +19,21 @@ Provides-Extra: cli
19
19
  Requires-Dist: blok (>=0.0.19) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "blok")
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
- Requires-Dist: fakts (>=1.0.0)
23
- Requires-Dist: fluss-next (>=0.1.87) ; extra == "all"
24
- Requires-Dist: herre (>=1.0.0)
25
- Requires-Dist: kabinet (>=0.1.29) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "all")
22
+ Requires-Dist: fakts-next (>=1.0.0)
23
+ Requires-Dist: fluss-next (>=0.1.88) ; extra == "all"
24
+ Requires-Dist: herre-next (>=1.0.0)
25
+ Requires-Dist: kabinet (>=0.1.31) ; (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.13) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
28
- Requires-Dist: mikro-next (>=0.1.43) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
27
+ Requires-Dist: lovekit (>=0.1.14) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
28
+ Requires-Dist: mikro-next (>=0.1.44) ; (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.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")
31
+ Requires-Dist: reaktion-next (>=0.1.78) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "all")
32
+ Requires-Dist: rekuest-next (>=0.2.36) ; (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.81) ; python_version >= "3.8" and python_version < "4.0"
36
+ Requires-Dist: unlok-next (>=0.1.82) ; 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
 
@@ -1,16 +1,14 @@
1
1
  from typing import Optional
2
2
 
3
- from fakts.fakts import Fakts
4
- from fakts.grants.remote import RemoteGrant
5
- from fakts.grants.remote.discovery.well_known import WellKnownDiscovery
6
- from fakts.grants.remote import RemoteGrant
7
- from fakts.grants.remote.demanders.auto_save import AutoSaveDemander
8
- from fakts.grants.remote.demanders.cache import CacheTokenStore
9
- from fakts.grants.remote.demanders.static import StaticDemander
10
- from fakts.grants.remote.demanders.device_code import DeviceCodeDemander
11
- from fakts.grants.remote.claimers.post import ClaimEndpointClaimer
12
- from fakts.grants.remote.demanders.redeem import RedeemDemander
13
-
3
+ from fakts_next.fakts import Fakts
4
+ from fakts_next.grants.remote import RemoteGrant
5
+ from fakts_next.grants.remote.discovery.well_known import WellKnownDiscovery
6
+ from fakts_next.grants.remote import RemoteGrant
7
+ from fakts_next.grants.remote.demanders.static import StaticDemander
8
+ from fakts_next.grants.remote.demanders.device_code import DeviceCodeDemander
9
+ from fakts_next.grants.remote.claimers.post import ClaimEndpointClaimer
10
+ from fakts_next.grants.remote.demanders.redeem import RedeemDemander
11
+ from fakts_next.cache.file import FileCache
14
12
  from arkitekt_next.base_models import Manifest
15
13
 
16
14
 
@@ -32,34 +30,25 @@ def build_arkitekt_next_fakts_next(
32
30
  identifier = manifest.identifier
33
31
  version = manifest.version
34
32
 
35
- if no_cache:
36
- demander = DeviceCodeDemander(
37
- manifest=manifest,
38
- redirect_uri="http://127.0.0.1:6767",
39
- open_browser=not headless,
40
- requested_client_kind=client_kind,
41
- )
42
-
43
- else:
44
- demander = AutoSaveDemander(
45
- demander=DeviceCodeDemander(
46
- manifest=manifest,
47
- redirect_uri="http://127.0.0.1:6767",
48
- open_browser=not headless,
49
- requested_client_kind=client_kind,
50
- ),
51
- store=CacheTokenStore(
52
- cache_file=f".arkitekt_next/cache/{identifier}-{version}_fakts_cache.json",
53
- hash=manifest.hash(),
54
- ),
55
- )
33
+ demander = DeviceCodeDemander(
34
+ manifest=manifest,
35
+ redirect_uri="http://127.0.0.1:6767",
36
+ open_browser=not headless,
37
+ requested_client_kind=client_kind,
38
+ )
39
+
56
40
 
57
41
  return ArkitektNextFaktsNext(
58
42
  grant=RemoteGrant(
59
43
  demander=demander,
60
44
  discovery=WellKnownDiscovery(url=url, auto_protocols=["https", "http"]),
61
45
  claimer=ClaimEndpointClaimer(),
62
- )
46
+ ),
47
+ cache=FileCache(
48
+ cache_file=f".arkitekt_next/cache/{identifier}-{version}_fakts_cache.json",
49
+ hash=manifest.hash(),
50
+ skip_cache=no_cache,
51
+ ),
63
52
  )
64
53
 
65
54
 
@@ -70,24 +59,39 @@ def build_arkitekt_next_redeem_fakts_next(
70
59
  no_cache: Optional[bool] = False,
71
60
  headless=False,
72
61
  ):
62
+ identifier = manifest.identifier
63
+ version = manifest.version
64
+
65
+
73
66
  return ArkitektNextFaktsNext(
74
67
  grant=RemoteGrant(
75
68
  demander=RedeemDemander(token=redeem_token, manifest=manifest),
76
69
  discovery=WellKnownDiscovery(url=url, auto_protocols=["https", "http"]),
77
70
  claimer=ClaimEndpointClaimer(),
78
- )
71
+ ),
72
+ cache=FileCache(
73
+ cache_file=f".arkitekt_next/cache/{identifier}-{version}_fakts_cache.json",
74
+ hash=manifest.hash(),
75
+ ),
79
76
  )
80
77
 
81
78
 
82
- def build_arkitekt_next_token_fakts(
79
+ def build_arkitekt_next_token_fakts_next(
83
80
  manifest: Manifest,
84
81
  token: str,
85
82
  url,
86
83
  ):
84
+ identifier = manifest.identifier
85
+ version = manifest.version
86
+
87
87
  return ArkitektNextFaktsNext(
88
88
  grant=RemoteGrant(
89
89
  demander=StaticDemander(token=token),
90
90
  discovery=WellKnownDiscovery(url=url, auto_protocols=["https", "http"]),
91
91
  claimer=ClaimEndpointClaimer(),
92
- )
92
+ ),
93
+ cache=FileCache(
94
+ cache_file=f".arkitekt_next/cache/{identifier}-{version}_fakts_cache.json",
95
+ hash=manifest.hash(),
96
+ ),
93
97
  )
@@ -0,0 +1,56 @@
1
+ from fakts_next.fakts import Fakts
2
+ from typing import Optional
3
+ from fakts_next.grants.remote import RemoteGrant
4
+ from fakts_next.grants.remote.demanders.device_code import DeviceCodeDemander
5
+
6
+ from fakts_next.grants.remote.claimers.post import ClaimEndpointClaimer
7
+ from fakts_next.grants.remote.discovery.qt.selectable_beacon import (
8
+ SelectBeaconWidget,
9
+ QtSelectableDiscovery,
10
+ )
11
+ from arkitekt_next.base_models import Manifest
12
+ from qtpy import QtCore, QtWidgets
13
+ from fakts_next.cache.qt.settings import QtSettingsCache
14
+
15
+ class ArkitektNextFaktsQtRemoteGrant(RemoteGrant):
16
+ """An ArkitektNext Fakts grant that uses Qt widgets for token and endpoint storage"""
17
+
18
+ discovery: QtSelectableDiscovery
19
+
20
+
21
+ class ArkitektNextFaktsQt(Fakts):
22
+ """A Fakts that uses Qt widgets for token and endpoint storage"""
23
+
24
+ grant: ArkitektNextFaktsQtRemoteGrant
25
+
26
+
27
+ def build_arkitekt_next_qt_fakts_next(
28
+ manifest: Manifest,
29
+ no_cache: Optional[bool] = False,
30
+ beacon_widget: Optional[QtWidgets.QWidget] = None,
31
+ parent: Optional[QtWidgets.QWidget] = None,
32
+ settings: Optional[QtCore.QSettings] = None,
33
+ ) -> ArkitektNextFaktsQt:
34
+ beacon_widget = beacon_widget or SelectBeaconWidget(
35
+ parent=parent, settings=settings
36
+ )
37
+
38
+ return ArkitektNextFaktsQt(
39
+ grant=ArkitektNextFaktsQtRemoteGrant(
40
+ demander=DeviceCodeDemander(
41
+ manifest=manifest,
42
+ redirect_uri="http://127.0.0.1:6767",
43
+ open_browser=True,
44
+ requested_client_kind="desktop",
45
+ ),
46
+ ),
47
+ discovery=QtSelectableDiscovery(
48
+ widget=beacon_widget,
49
+ settings=settings,
50
+ allow_appending_slash=True,
51
+ auto_protocols=["http", "https"],
52
+ additional_beacons=["http://localhost"],
53
+ ),
54
+ claimer=ClaimEndpointClaimer(),
55
+ cache=QtSettingsCache(settings=settings)
56
+ )
@@ -1,8 +1,8 @@
1
- from herre.fakts.grant import FaktsGrant
2
- from herre.fakts.registry import GrantRegistry, GrantType
3
- from herre.grants.oauth2.authorization_code import AuthorizationCodeGrant
4
- from herre.grants.oauth2.redirecters.aiohttp_server import AioHttpServerRedirecter
5
- from herre.grants.oauth2.client_credentials import ClientCredentialsGrant
1
+ from herre_next.fakts.grant import FaktsGrant
2
+ from herre_next.fakts.registry import GrantRegistry, GrantType
3
+ from herre_next.grants.oauth2.authorization_code import AuthorizationCodeGrant
4
+ from herre_next.grants.oauth2.redirecters.aiohttp_server import AioHttpServerRedirecter
5
+ from herre_next.grants.oauth2.client_credentials import ClientCredentialsGrant
6
6
 
7
7
 
8
8
  ARKITEKT_GRANT_REGISTRY = GrantRegistry()
@@ -0,0 +1,24 @@
1
+ from herre_next.herre import Herre
2
+ from fakts_next import Fakts
3
+ from herre_next.grants.oauth2.refresh import RefreshGrant
4
+ from herre_next.fakts.fakts_endpoint_fetcher import FaktsUserFetcher
5
+ from herre_next.fakts.grant import FaktsGrant
6
+ from arkitekt_next.base_models import User
7
+ from arkitekt_next.apps.service.grant_registry import ARKITEKT_GRANT_REGISTRY
8
+
9
+
10
+ class ArkitektNextHerre(Herre):
11
+ pass
12
+
13
+
14
+ def build_arkitekt_next_herre_next(fakts_next: Fakts) -> ArkitektNextHerre:
15
+ return ArkitektNextHerre(
16
+ grant=RefreshGrant(
17
+ grant=FaktsGrant(
18
+ fakts=fakts_next, fakts_group="lok", grant_registry=ARKITEKT_GRANT_REGISTRY
19
+ ),
20
+ ),
21
+ fetcher=FaktsUserFetcher(
22
+ fakts=fakts_next, fakts_key="lok.userinfo_url", userModel=User
23
+ ),
24
+ )
@@ -1,12 +1,12 @@
1
- from herre.herre import Herre
2
- from fakts import Fakts
3
- from herre.grants.oauth2.refresh import RefreshGrant
4
- from herre.fakts.grant import FaktsGrant
5
- from herre.fakts.fakts_qt_store import FaktsQtStore
6
-
7
- from herre.grants.auto_login import AutoLoginGrant
8
- from herre.grants.qt.auto_login import AutoLoginWidget
9
- from herre.fakts.fakts_endpoint_fetcher import FaktsUserFetcher
1
+ from herre_next.herre import Herre
2
+ from fakts_next import Fakts
3
+ from herre_next.grants.oauth2.refresh import RefreshGrant
4
+ from herre_next.fakts.grant import FaktsGrant
5
+ from herre_next.fakts.fakts_qt_store import FaktsQtStore
6
+
7
+ from herre_next.grants.auto_login import AutoLoginGrant
8
+ from herre_next.grants.qt.auto_login import AutoLoginWidget
9
+ from herre_next.fakts.fakts_endpoint_fetcher import FaktsUserFetcher
10
10
  from arkitekt_next.base_models import Manifest, User
11
11
  from arkitekt_next.apps.service.grant_registry import ARKITEKT_GRANT_REGISTRY
12
12
 
@@ -25,7 +25,7 @@ class ArkitektNextHerreQt(Herre):
25
25
  grant: ArkitektNextRefreshGrant
26
26
 
27
27
 
28
- def build_arkitekt_next_qt_herre(
28
+ def build_arkitekt_next_qt_herre_next(
29
29
  manifest: Manifest,
30
30
  fakts: Fakts,
31
31
  login_widget=None,
@@ -14,8 +14,8 @@ import logging
14
14
  from typing import TYPE_CHECKING, Any, Dict
15
15
  from arkitekt_next.base_models import Manifest
16
16
  from koil.composition import Composition
17
- from fakts import Fakts
18
- from herre import Herre
17
+ from fakts_next import Fakts
18
+ from herre_next import Herre
19
19
 
20
20
  logger = logging.getLogger(__name__)
21
21
 
@@ -1,7 +1,7 @@
1
1
  """Models for ArkitektNext. Thiese include extensiosn for the Fakts Manifest and the User model."""
2
2
 
3
3
  from hashlib import sha256
4
- from pydantic import BaseModel, Field
4
+ from pydantic import BaseModel, Field, field_validator
5
5
  from typing import List, Optional
6
6
 
7
7
 
@@ -94,15 +94,23 @@ class Manifest(BaseModel):
94
94
  def hash(self):
95
95
  """Hash the manifest"""
96
96
  return sha256(self.model_dump_json().encode()).hexdigest()
97
+
98
+
99
+ @field_validator("identifier")
100
+ def check_identifier(cls, v):
101
+ assert "/" not in v, "The identifier should not contain a /"
102
+ assert len(v) > 0, "The identifier should not be empty"
103
+ assert len(v) < 256, "The identifier should not be longer than 256 characters"
104
+ return v
97
105
 
98
106
 
99
107
  class User(BaseModel):
100
108
  """A user of ArkitektNext
101
109
 
102
- This model represents a user on ArkitektNext. As herre is acgnostic to the
110
+ This model represents a user on ArkitektNext. As herre_next is acgnostic to the
103
111
  user model, we need to provide a model that can be used to represent
104
112
  the ArkitektNext user. This model is used by the
105
- :class:`herre.fakts.fakts_endpoint_fetcher.FaktsUserFetcher` to
113
+ :class:`herre_next.fakts.fakts_endpoint_fetcher.FaktsUserFetcher` to
106
114
  fetch the user from the associated ArkitektNext Lok instance. This model
107
115
  is closely mimicking the OIDC user model, and is therefore compatible
108
116
  to represent OIDC users.
@@ -71,7 +71,7 @@ class LocalLiveKitBlok:
71
71
  )
72
72
  with_skip = Option(
73
73
  subcommand="skip",
74
- help="The fakts url for connection",
74
+ help="The fakts_next url for connection",
75
75
  default=False,
76
76
  type=bool,
77
77
  )
@@ -202,7 +202,7 @@ class LokBlok:
202
202
  depends_on.append(self.postgress_access.dependency)
203
203
 
204
204
  db_service = {
205
- "labels": ["fakts.service=live.arkitekt.lok", "fakts.builder=arkitekt.lok"],
205
+ "labels": ["fakts_next.service=live.arkitekt.lok", "fakts_next.builder=arkitekt.lok"],
206
206
  "depends_on": depends_on,
207
207
  "volumes": [
208
208
  "/var/run/docker.sock:/var/run/docker.sock",
@@ -155,17 +155,17 @@ class MinioBlok:
155
155
  def get_options(self):
156
156
  with_host = Option(
157
157
  subcommand="host",
158
- help="The fakts url for connection",
158
+ help="The fakts_next url for connection",
159
159
  default=self.host,
160
160
  )
161
161
  with_username = Option(
162
162
  subcommand="username",
163
- help="The fakts url for connection",
163
+ help="The fakts_next url for connection",
164
164
  default=self.username,
165
165
  )
166
166
  with_password = Option(
167
167
  subcommand="password",
168
- help="The fakts url for connection",
168
+ help="The fakts_next url for connection",
169
169
  default=self.password,
170
170
  )
171
171
 
@@ -5,9 +5,9 @@ import os
5
5
  from arkitekt_next.apps.service.fakts_next import (
6
6
  build_arkitekt_next_fakts_next,
7
7
  build_arkitekt_next_redeem_fakts_next,
8
- build_arkitekt_next_token_fakts,
8
+ build_arkitekt_next_token_fakts_next,
9
9
  )
10
- from arkitekt_next.apps.service.herre import build_arkitekt_next_herre
10
+ from arkitekt_next.apps.service.herre import build_arkitekt_next_herre_next
11
11
  from .utils import create_arkitekt_next_folder
12
12
  from .base_models import Manifest
13
13
  from .apps.types import App
@@ -16,7 +16,7 @@ from arkitekt_next.constants import DEFAULT_ARKITEKT_URL
16
16
 
17
17
 
18
18
  def easy(
19
- identifier: str,
19
+ identifier: str = None,
20
20
  version: str = "0.0.1",
21
21
  logo: Optional[str] = None,
22
22
  scopes: Optional[List[str]] = None,
@@ -48,7 +48,7 @@ def easy(
48
48
  which means that they will be authenticated with the ArkitektNext server on
49
49
  a per user basis. If you want to create a "desktop" app, which multiple users
50
50
  can use, you should set the `app_kind` to "desktop" TODO: Currently not implemented (use next app for this)
51
- - The Next builder can also be used in plugin apps, and when provided with a fakts token
51
+ - The Next builder can also be used in plugin apps, and when provided with a fakts_next token
52
52
  will be able to connect to the ArkitektNext server without any user interaction.
53
53
 
54
54
 
@@ -63,7 +63,7 @@ def easy(
63
63
  scopes : List[str], optional
64
64
  The scopes, that this apps requires, will default to standard scopes, by default None
65
65
  url : str, optional
66
- The fakts server that will be used to configure this app, in a default ArkitektNext deployment this
66
+ The fakts_next server that will be used to configure this app, in a default ArkitektNext deployment this
67
67
  is the address of the "Lok Service" (which provides the Fakts API), by default DEFAULT_ARKITEKT_URL
68
68
  Will be overwritten by the FAKTS_URL environment variable
69
69
  headless : bool, optional
@@ -72,7 +72,7 @@ def easy(
72
72
  log_level : str, optional
73
73
  The log-level to use, by default "ERROR"
74
74
  token : str, optional
75
- A fakts token to use, by default None
75
+ A fakts_next token to use, by default None
76
76
  Will be overwritten by the FAKTS_TOKEN environment variable
77
77
  no_cache : bool, optional
78
78
  Should we skip caching token, acess-token, by default False
@@ -98,6 +98,10 @@ def easy(
98
98
  """
99
99
  registry = registry or check_and_import_services()
100
100
 
101
+
102
+ if identifier is None:
103
+ identifier = __file__.split("/")[-1].replace(".py", "")
104
+
101
105
  url = os.getenv("FAKTS_URL", url)
102
106
  token = os.getenv("FAKTS_TOKEN", token)
103
107
 
@@ -109,14 +113,14 @@ def easy(
109
113
  requirements=registry.get_requirements(),
110
114
  )
111
115
  if token:
112
- fakts = build_arkitekt_next_token_fakts(
116
+ fakts_next = build_arkitekt_next_token_fakts_next(
113
117
  manifest=manifest,
114
118
  token=token,
115
119
  url=url,
116
120
  )
117
121
 
118
122
  elif redeem_token:
119
- fakts = build_arkitekt_next_redeem_fakts_next(
123
+ fakts_next = build_arkitekt_next_redeem_fakts_next(
120
124
  manifest=manifest,
121
125
  redeem_token=redeem_token,
122
126
  url=url,
@@ -124,7 +128,7 @@ def easy(
124
128
  headless=headless,
125
129
  )
126
130
  else:
127
- fakts = build_arkitekt_next_fakts_next(
131
+ fakts_next = build_arkitekt_next_fakts_next(
128
132
  manifest=manifest,
129
133
  url=url,
130
134
  no_cache=no_cache,
@@ -132,7 +136,7 @@ def easy(
132
136
  client_kind=app_kind,
133
137
  )
134
138
 
135
- herre = build_arkitekt_next_herre(fakts=fakts)
139
+ herre_next = build_arkitekt_next_herre_next(fakts_next=fakts_next)
136
140
 
137
141
  params = kwargs
138
142
 
@@ -146,11 +150,11 @@ def easy(
146
150
  logging.basicConfig(level=log_level)
147
151
 
148
152
  app = App(
149
- fakts=fakts,
150
- herre=herre,
153
+ fakts=fakts_next,
154
+ herre=herre_next,
151
155
  manifest=manifest,
152
156
  services=registry.build_service_map(
153
- fakts=fakts, herre=herre, params=params, manifest=manifest
157
+ fakts=fakts_next, herre=herre_next, params=params, manifest=manifest
154
158
  ),
155
159
  )
156
160
 
@@ -23,7 +23,7 @@ async def call_app(
23
23
  @click.command("prod")
24
24
  @click.option(
25
25
  "--url",
26
- help="The fakts url for connection",
26
+ help="The fakts_next url for connection",
27
27
  default=DEFAULT_ARKITEKT_URL,
28
28
  envvar="FAKTS_URL",
29
29
  )
@@ -24,7 +24,7 @@ async def call_app(
24
24
  @click.command("prod")
25
25
  @click.option(
26
26
  "--url",
27
- help="The fakts url for connection",
27
+ help="The fakts_next url for connection",
28
28
  default=DEFAULT_ARKITEKT_URL,
29
29
  envvar="FAKTS_URL",
30
30
  )
@@ -12,7 +12,7 @@ from arkitekt_next.constants import DEFAULT_ARKITEKT_URL
12
12
  @click.option(
13
13
  "--url",
14
14
  "-u",
15
- help="The fakts server to use",
15
+ help="The fakts_next server to use",
16
16
  type=str,
17
17
  default=DEFAULT_ARKITEKT_URL,
18
18
  )
@@ -18,7 +18,7 @@ from arkitekt_next.apps.types import App
18
18
  import rich_click as click
19
19
  import os
20
20
  from arkitekt_next.cli.options import (
21
- with_fakts_url,
21
+ with_fakts_next_url,
22
22
  with_builder,
23
23
  with_token,
24
24
  with_instance_id,
@@ -327,7 +327,7 @@ async def run_dev(
327
327
 
328
328
 
329
329
  @click.command()
330
- @with_fakts_url
330
+ @with_fakts_next_url
331
331
  @with_builder
332
332
  @with_token
333
333
  @with_instance_id
@@ -6,10 +6,10 @@ from .types import *
6
6
  from .vars import *
7
7
  from .ui import *
8
8
 
9
- with_fakts_url = click.option(
9
+ with_fakts_next_url = click.option(
10
10
  "--url",
11
11
  "-u",
12
- help="The fakts url for connection",
12
+ help="The fakts_next url for connection",
13
13
  default=DEFAULT_ARKITEKT_URL,
14
14
  envvar="FAKTS_URL",
15
15
  )
@@ -17,14 +17,14 @@ with_fakts_url = click.option(
17
17
  with_token = click.option(
18
18
  "--token",
19
19
  "-t",
20
- help="The token for the fakts instance",
20
+ help="The token for the fakts_next instance",
21
21
  envvar="FAKTS_TOKEN",
22
22
  required=False,
23
23
  )
24
24
  with_redeem_token = click.option(
25
25
  "--redeem-token",
26
26
  "-r",
27
- help="The token for the fakts instance",
27
+ help="The token for the fakts_next instance",
28
28
  envvar="FAKTS_REDEEM_TOKEN",
29
29
  required=False,
30
30
  )
@@ -57,7 +57,7 @@ with_instance_id = click.option(
57
57
  "--instance-id",
58
58
  "-i",
59
59
  default="main",
60
- help="The token for the fakts instance",
60
+ help="The token for the fakts_next instance",
61
61
  envvar="REKUEST_INSTANCE",
62
62
  )
63
63
 
@@ -65,7 +65,7 @@ with_log_level = click.option(
65
65
  "--log-level",
66
66
  "-l",
67
67
  default="ERROR",
68
- help="The token for the fakts instance",
68
+ help="The token for the fakts_next instance",
69
69
  envvar="ARKITEKT_LOG_LEVEL",
70
70
  )
71
71
 
@@ -163,7 +163,7 @@ class Build(BaseModel):
163
163
 
164
164
  return base_command
165
165
 
166
- def build_arkitekt_next_command(self, fakts_url: str):
166
+ def build_arkitekt_next_command(self, fakts_next_url: str):
167
167
  """Builds the arkitekt_next command for this build"""
168
168
 
169
169
  base_command = self.base_arkitekt_next_command
@@ -171,7 +171,7 @@ class Build(BaseModel):
171
171
  for selector in self.selectors:
172
172
  base_command = base_command + selector.build_arkitekt_next_params()
173
173
 
174
- base_command = base_command + ["--url", fakts_url]
174
+ base_command = base_command + ["--url", fakts_next_url]
175
175
 
176
176
  return base_command
177
177