primitive 0.2.22__tar.gz → 0.2.26__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.
Files changed (115) hide show
  1. {primitive-0.2.22 → primitive-0.2.26}/PKG-INFO +1 -2
  2. {primitive-0.2.22 → primitive-0.2.26}/pyproject.toml +1 -1
  3. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/__about__.py +1 -1
  4. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/commands.py +20 -4
  5. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/monitor/actions.py +35 -14
  6. primitive-0.2.26/src/primitive/monitor/commands.py +15 -0
  7. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/actions.py +28 -0
  8. {primitive-0.2.22 → primitive-0.2.26}/uv.lock +0 -34
  9. primitive-0.2.22/src/primitive/monitor/commands.py +0 -13
  10. {primitive-0.2.22 → primitive-0.2.26}/.git-hooks/pre-commit +0 -0
  11. {primitive-0.2.22 → primitive-0.2.26}/.gitattributes +0 -0
  12. {primitive-0.2.22 → primitive-0.2.26}/.github/workflows/lint.yml +0 -0
  13. {primitive-0.2.22 → primitive-0.2.26}/.github/workflows/publish.yml +0 -0
  14. {primitive-0.2.22 → primitive-0.2.26}/.github/workflows/pyright.yml +0 -0
  15. {primitive-0.2.22 → primitive-0.2.26}/.gitignore +0 -0
  16. {primitive-0.2.22 → primitive-0.2.26}/.vscode/extensions.json +0 -0
  17. {primitive-0.2.22 → primitive-0.2.26}/.vscode/settings.json +0 -0
  18. {primitive-0.2.22 → primitive-0.2.26}/LICENSE.txt +0 -0
  19. {primitive-0.2.22 → primitive-0.2.26}/Makefile +0 -0
  20. {primitive-0.2.22 → primitive-0.2.26}/README.md +0 -0
  21. {primitive-0.2.22 → primitive-0.2.26}/linux setup.md +0 -0
  22. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/__init__.py +0 -0
  23. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/agent/__init__.py +0 -0
  24. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/agent/actions.py +0 -0
  25. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/agent/commands.py +0 -0
  26. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/agent/runner.py +0 -0
  27. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/agent/uploader.py +0 -0
  28. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/auth/__init__.py +0 -0
  29. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/auth/actions.py +0 -0
  30. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/auth/commands.py +0 -0
  31. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/auth/graphql/__init__.py +0 -0
  32. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/auth/graphql/queries.py +0 -0
  33. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/cli.py +0 -0
  34. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/client.py +0 -0
  35. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/__init__.py +0 -0
  36. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/actions.py +0 -0
  37. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/commands.py +0 -0
  38. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/launch_agents.py +0 -0
  39. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/launch_service.py +0 -0
  40. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/daemons/ui.py +0 -0
  41. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/db/base.py +0 -0
  42. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/db/models.py +0 -0
  43. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/db/sqlite.py +0 -0
  44. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/exec/__init__.py +0 -0
  45. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/exec/actions.py +0 -0
  46. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/exec/commands.py +0 -0
  47. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/exec/interactive.py +0 -0
  48. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/__init__.py +0 -0
  49. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/actions.py +0 -0
  50. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/commands.py +0 -0
  51. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/graphql/__init__.py +0 -0
  52. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/graphql/fragments.py +0 -0
  53. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/graphql/mutations.py +0 -0
  54. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/files/graphql/queries.py +0 -0
  55. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/git/__init__.py +0 -0
  56. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/git/actions.py +0 -0
  57. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/git/commands.py +0 -0
  58. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/git/graphql/__init__.py +0 -0
  59. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/git/graphql/queries.py +0 -0
  60. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/graphql/__init__.py +0 -0
  61. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/graphql/relay.py +0 -0
  62. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/graphql/sdk.py +0 -0
  63. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/graphql/utility_fragments.py +0 -0
  64. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/__init__.py +0 -0
  65. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/actions.py +0 -0
  66. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/android.py +0 -0
  67. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/graphql/__init__.py +0 -0
  68. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/graphql/fragments.py +0 -0
  69. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/graphql/mutations.py +0 -0
  70. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/graphql/queries.py +0 -0
  71. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/hardware/ui.py +0 -0
  72. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/__init__.py +0 -0
  73. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/actions.py +0 -0
  74. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/commands.py +0 -0
  75. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/graphql/__init__.py +0 -0
  76. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/graphql/fragments.py +0 -0
  77. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/graphql/mutations.py +0 -0
  78. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/jobs/graphql/queries.py +0 -0
  79. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/__init__.py +0 -0
  80. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/commands.py +0 -0
  81. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/graphql/__init__.py +0 -0
  82. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/graphql/fragments.py +0 -0
  83. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/graphql/mutations.py +0 -0
  84. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/organizations/graphql/queries.py +0 -0
  85. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/__init__.py +0 -0
  86. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/actions.py +0 -0
  87. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/commands.py +0 -0
  88. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/graphql/__init__.py +0 -0
  89. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/graphql/fragments.py +0 -0
  90. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/graphql/mutations.py +0 -0
  91. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/projects/graphql/queries.py +0 -0
  92. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/provisioning/__init__.py +0 -0
  93. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/provisioning/actions.py +0 -0
  94. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/provisioning/graphql/__init__.py +0 -0
  95. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/provisioning/graphql/queries.py +0 -0
  96. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/__init__.py +0 -0
  97. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/actions.py +0 -0
  98. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/commands.py +0 -0
  99. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/graphql/__init__.py +0 -0
  100. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/graphql/fragments.py +0 -0
  101. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/graphql/mutations.py +0 -0
  102. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/reservations/graphql/queries.py +0 -0
  103. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/__init__.py +0 -0
  104. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/actions.py +0 -0
  105. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/auth.py +0 -0
  106. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/cache.py +0 -0
  107. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/chunk_size.py +0 -0
  108. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/config.py +0 -0
  109. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/daemons.py +0 -0
  110. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/exceptions.py +0 -0
  111. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/memory_size.py +0 -0
  112. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/printer.py +0 -0
  113. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/shell.py +0 -0
  114. {primitive-0.2.22 → primitive-0.2.26}/src/primitive/utils/text.py +0 -0
  115. {primitive-0.2.22 → primitive-0.2.26}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: primitive
3
- Version: 0.2.22
3
+ Version: 0.2.26
4
4
  Project-URL: Documentation, https://github.com//primitivecorp/primitive-cli#readme
5
5
  Project-URL: Issues, https://github.com//primitivecorp/primitive-cli/issues
6
6
  Project-URL: Source, https://github.com//primitivecorp/primitive-cli
@@ -22,7 +22,6 @@ Requires-Dist: click
22
22
  Requires-Dist: gql[all]
23
23
  Requires-Dist: loguru
24
24
  Requires-Dist: paramiko[invoke]
25
- Requires-Dist: primitive-pal==0.1.4
26
25
  Requires-Dist: psutil>=7.0.0
27
26
  Requires-Dist: pyyaml
28
27
  Requires-Dist: rich>=13.9.4
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "gql[all]",
32
32
  "loguru",
33
33
  "pyyaml",
34
- "primitive-pal == 0.1.4",
34
+ # "primitive-pal == 0.1.4",
35
35
  "paramiko[invoke]",
36
36
  "speedtest-cli",
37
37
  "rich>=13.9.4",
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2024-present Dylan Stein <dylan@primitive.tech>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.2.22"
4
+ __version__ = "0.2.26"
@@ -1,13 +1,15 @@
1
- import typing
1
+ from typing import TYPE_CHECKING, Optional
2
2
 
3
3
  import click
4
4
 
5
5
  from ..utils.printer import print_result
6
6
  from .ui import render_hardware_table
7
7
 
8
- if typing.TYPE_CHECKING:
8
+ if TYPE_CHECKING:
9
9
  from ..client import Primitive
10
10
 
11
+ from loguru import logger
12
+
11
13
 
12
14
  @click.group()
13
15
  @click.pass_context
@@ -26,11 +28,25 @@ def systeminfo_command(context):
26
28
 
27
29
 
28
30
  @cli.command("register")
31
+ @click.option(
32
+ "--organization",
33
+ type=str,
34
+ help="Organization [slug] to register hardware with",
35
+ )
29
36
  @click.pass_context
30
- def register_command(context):
37
+ def register_command(context, organization: Optional[str] = None):
31
38
  """Register Hardware with Primitive"""
32
39
  primitive: Primitive = context.obj.get("PRIMITIVE")
33
- result = primitive.hardware.register()
40
+
41
+ organization_id = None
42
+ if organization:
43
+ organization_data = primitive.organizations.get_organization(slug=organization)
44
+ organization_id = organization_data.get("id")
45
+
46
+ if not organization_id:
47
+ logger.info("Registering hardware with the default organization.")
48
+
49
+ result = primitive.hardware.register(organization_id=organization_id)
34
50
  color = "green" if result else "red"
35
51
  if result.data.get("registerHardware"):
36
52
  message = "Hardware registered successfully"
@@ -1,5 +1,6 @@
1
1
  import sys
2
2
  from time import sleep
3
+ from typing import Optional
3
4
 
4
5
  import psutil
5
6
  from loguru import logger
@@ -12,7 +13,7 @@ from primitive.utils.exceptions import P_CLI_100
12
13
 
13
14
 
14
15
  class Monitor(BaseAction):
15
- def start(self):
16
+ def start(self, job_run_id: Optional[str] = None):
16
17
  logger.remove()
17
18
  logger.add(
18
19
  sink=sys.stderr,
@@ -24,21 +25,33 @@ class Monitor(BaseAction):
24
25
  logger.info("[*] primitive monitor")
25
26
  logger.info(f"[*] Version: {__version__}")
26
27
 
27
- try:
28
- # hey stupid:
29
- # do not set is_available to True here, it will mess up the reservation logic
30
- # only set is_available after we've checked that no active reservation is present
31
- # setting is_available of the parent also effects the children,
32
- # which may have active reservations as well
33
- self.primitive.hardware.check_in_http(is_online=True)
34
- except Exception as exception:
35
- logger.exception(f"Error checking in hardware: {exception}")
36
- sys.exit(1)
28
+ # TODO: tighten logic for determining if we're running in a container
29
+ RUNNING_IN_CONTAINER = False
30
+ if job_run_id is not None:
31
+ logger.info("[*] Running in container...")
32
+ RUNNING_IN_CONTAINER = True
33
+
34
+ # can't check if if it is a container
35
+ if not RUNNING_IN_CONTAINER:
36
+ try:
37
+ # hey stupid:
38
+ # do not set is_available to True here, it will mess up the reservation logic
39
+ # only set is_available after we've checked that no active reservation is present
40
+ # setting is_available of the parent also effects the children,
41
+ # which may have active reservations as well
42
+ self.primitive.hardware.check_in_http(is_online=True)
43
+ except Exception as exception:
44
+ logger.exception(f"Error checking in hardware: {exception}")
45
+ sys.exit(1)
37
46
 
38
47
  # Initialize the database
39
48
  sqlite.init()
40
49
 
41
50
  try:
51
+ if job_run_id is not None:
52
+ JobRun.objects.create(job_run_id=job_run_id, pid=None)
53
+ logger.debug(f"Creating job run in database: {job_run_id}")
54
+
42
55
  active_reservation_id = None
43
56
  active_reservation_pk = None
44
57
 
@@ -95,6 +108,13 @@ class Monitor(BaseAction):
95
108
  sleep(1)
96
109
  continue
97
110
 
111
+ if RUNNING_IN_CONTAINER:
112
+ # if we get here and we're running in a container,
113
+ # it means the job run is complete and there is nothing left in the database
114
+ # so we can exit
115
+ logger.debug("Running in container, initial job complete.")
116
+ sys.exit(0)
117
+
98
118
  # Second, check for active reservations
99
119
  hardware = self.primitive.hardware.get_own_hardware_details()
100
120
  if hardware["activeReservation"]:
@@ -189,9 +209,10 @@ class Monitor(BaseAction):
189
209
  except KeyboardInterrupt:
190
210
  logger.info("[*] Stopping primitive monitor...")
191
211
  try:
192
- self.primitive.hardware.check_in_http(
193
- is_available=False, is_online=False, stopping_agent=True
194
- )
212
+ if not RUNNING_IN_CONTAINER:
213
+ self.primitive.hardware.check_in_http(
214
+ is_available=False, is_online=False, stopping_agent=True
215
+ )
195
216
 
196
217
  except P_CLI_100 as exception:
197
218
  logger.error("[*] Error stopping primitive monitor.")
@@ -0,0 +1,15 @@
1
+ from typing import TYPE_CHECKING, Optional
2
+
3
+ import click
4
+
5
+ if TYPE_CHECKING:
6
+ from ..client import Primitive
7
+
8
+
9
+ @click.command("monitor")
10
+ @click.option("--job-run-id", type=str, help="Explicit Job Run to pull")
11
+ @click.pass_context
12
+ def cli(context, job_run_id: Optional[str] = None):
13
+ """monitor"""
14
+ primitive: Primitive = context.obj.get("PRIMITIVE")
15
+ primitive.monitor.start(job_run_id=job_run_id)
@@ -39,3 +39,31 @@ class Organizations(BaseAction):
39
39
  )
40
40
  organizations = [edge["node"] for edge in result.data["organizations"]["edges"]]
41
41
  return organizations
42
+
43
+ @guard
44
+ def get_organization(
45
+ self,
46
+ organization_id: Optional[str] = None,
47
+ slug: Optional[str] = None,
48
+ ):
49
+ query = gql(organizations_query)
50
+
51
+ filters = {}
52
+ if organization_id:
53
+ filters["organization"] = {"id": organization_id}
54
+ if slug:
55
+ filters["slug"] = {"exact": slug}
56
+
57
+ variables = {
58
+ "first": 1,
59
+ "filters": filters,
60
+ "order": {
61
+ "createdAt": "DESC",
62
+ },
63
+ }
64
+
65
+ result = self.primitive.session.execute(
66
+ query, variable_values=variables, get_execution_result=True
67
+ )
68
+ organizations = [edge["node"] for edge in result.data["organizations"]["edges"]]
69
+ return organizations[0]
@@ -846,7 +846,6 @@ dependencies = [
846
846
  { name = "gql", extra = ["all"] },
847
847
  { name = "loguru" },
848
848
  { name = "paramiko", extra = ["invoke"] },
849
- { name = "primitive-pal" },
850
849
  { name = "psutil" },
851
850
  { name = "pyyaml" },
852
851
  { name = "rich" },
@@ -868,7 +867,6 @@ requires-dist = [
868
867
  { name = "gql", extras = ["all"] },
869
868
  { name = "loguru" },
870
869
  { name = "paramiko", extras = ["invoke"] },
871
- { name = "primitive-pal", specifier = "==0.1.4" },
872
870
  { name = "psutil", specifier = ">=7.0.0" },
873
871
  { name = "pyyaml" },
874
872
  { name = "rich", specifier = ">=13.9.4" },
@@ -884,38 +882,6 @@ dev = [
884
882
  { name = "ruff" },
885
883
  ]
886
884
 
887
- [[package]]
888
- name = "primitive-pal"
889
- version = "0.1.4"
890
- source = { registry = "https://pypi.org/simple" }
891
- sdist = { url = "https://files.pythonhosted.org/packages/4d/aa/ec3fa7ba0c007d4cb87c53fe2b200ee148772a949433b36c0f0f5cb637dd/primitive_pal-0.1.4.tar.gz", hash = "sha256:71372429a9f594f9f032789599e4d80790b5a118478a967f7a5e95f1b39966b0", size = 36244 }
892
- wheels = [
893
- { url = "https://files.pythonhosted.org/packages/3c/72/c40ad4cf49b37788ad93ec59e66064789b827d9c1f13841ef1d1b62bd6cc/primitive_pal-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f179ddf100e413227a47fe109612a13a605745564eb961363f0cc346faf07229", size = 3086178 },
894
- { url = "https://files.pythonhosted.org/packages/5a/b2/9433f6aa74a8f0b866975376c5ad46035b9846b26af85332b34bad311240/primitive_pal-0.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:73ec5d3128eb5a497e9033e7549a688b67986f0d0b8ed1bad546d89c561652a2", size = 2776898 },
895
- { url = "https://files.pythonhosted.org/packages/30/4b/a1ecb322f5b6dbb7e4ce72d406e70de1920f411d9c3e2796874c4b33a6d9/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:632b5d59b3aef2a43bed960878a01d45fff3389ec6541482636453b19dcc4ebc", size = 3201414 },
896
- { url = "https://files.pythonhosted.org/packages/81/39/59dbf9206d4132cd735a99ad159c399df262db2b74ed2d2efaa4bd447c99/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5294f03d80edc931ca5418b1e16854ac54ecc3007a0eca97c8b9585a9675fbe3", size = 3347102 },
897
- { url = "https://files.pythonhosted.org/packages/96/06/e2148c3cd0c6d57bbdf2c99cb9d84a74a32a7e3ec283fe88ee854d181a74/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f1208d7de98dca18a8165293f3849f80087b3297b9f4e1e166aa7eea1161f27", size = 3526373 },
898
- { url = "https://files.pythonhosted.org/packages/cf/84/f4e9138bd5be1eae3eadca256c73221055c9312d1277483497485d0ae99b/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b938e42c61afee3391361bd33c4b91b3f0cb1b19453d55542232e647124ba3", size = 3423374 },
899
- { url = "https://files.pythonhosted.org/packages/33/f8/a84d65748fd71d1947659a02d78fcef0887ea878df7cf7b57b6c3138a473/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f034071a6e5df6b011a8bdf552fce13284b13e8b2e35974f38bb0aba1301f064", size = 3780519 },
900
- { url = "https://files.pythonhosted.org/packages/9a/0d/95938ce84ad5c60737178c74bac62797e5f2eec8b3e61004e8783a079dd3/primitive_pal-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97139e90ffb69bf0a7cee8f1c8006616dc142ae2622512ff5b8a309cd03f1e7b", size = 3301957 },
901
- { url = "https://files.pythonhosted.org/packages/c8/84/b46126ffd93df205785cb692b3a07661a289caebd5be19e3b8a9c1e83578/primitive_pal-0.1.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:710a4447da801d7dc131d1fafbacd3091f9dee2dddac7b041dbfd05b72492237", size = 3359015 },
902
- { url = "https://files.pythonhosted.org/packages/d4/a8/666fd2b4634d7151fcdd24ffb02a4fd270ff853c95ee52783c118c3dda57/primitive_pal-0.1.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8512eb412f11f1122af9e0d4de167fa8a53160bcf1b4da6a84078b6c7f9ecc82", size = 3597120 },
903
- { url = "https://files.pythonhosted.org/packages/36/42/a83cff4b17c7a564b753eab2e6cf89e88276bb9ccadd63e2c7d6ae4e1945/primitive_pal-0.1.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:78776a42eb3f07a0d65673537977f77606c0b1036ea72ad97ece70f24ca163a7", size = 3564216 },
904
- { url = "https://files.pythonhosted.org/packages/84/e9/b3b0abdf95cf6ea491d8c4ba093ac56ffc364b2aff5a3d51342bf9eb90ac/primitive_pal-0.1.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3526f8fc6bb9bdff9bc5e29e31dcdb6b782c7b3badcd6fab18056cff82477b19", size = 3502739 },
905
- { url = "https://files.pythonhosted.org/packages/d8/00/6d9de344b413c1c5171172095d847a580d92db701e850d0b3ce06570ac36/primitive_pal-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:58506e4fc158955f0a467583168d1d7a8c724f1b4fcce7f9cfab3e804e40dcdd", size = 3085998 },
906
- { url = "https://files.pythonhosted.org/packages/52/c2/2e8e0ae4a0c02cfc9e64b4e48ac24e2ccaef9702707fe819af6f0e763cc6/primitive_pal-0.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76656c02374592d10db4d47fd0d51174f1c628a59ab09bebe79dbd1f2d126cc4", size = 2776014 },
907
- { url = "https://files.pythonhosted.org/packages/7f/0d/7afa6e64f8137f69ac268b9bff019bc25c4b674928c325ace6b4a74a7969/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b52d9bc4e0e4c5beeb85b3acdef6fd4b8239fe38dba1f6a6378a18ce9c203e99", size = 3200906 },
908
- { url = "https://files.pythonhosted.org/packages/23/71/0dbd4a09e55007e2683ad13e35accb94c34e2d6ecd8c33f03015f9d2a71d/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c313cf6fbb18a724e8db3eb7e8e44b49ccebe930fb76f296939518f893569f83", size = 3347447 },
909
- { url = "https://files.pythonhosted.org/packages/b9/97/67451c2bb4a4f80af9f8484d871a5cf4728ec2c6d59719c668653320270d/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4a6138a564616414edc8d91fabdcf7a1162a8ae5dc4e21ae0865e70a5dba66", size = 3524468 },
910
- { url = "https://files.pythonhosted.org/packages/60/a7/62ba6365c05265a328352fa7985737ca02cc69d011505bfa358bd2babfe4/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:925bedbae08fa802512e6360e05f4de0f58e28869243afb76209e5c3e87c8739", size = 3420887 },
911
- { url = "https://files.pythonhosted.org/packages/17/18/07e56ba349ebe0750af53b901c0119ca63e0ed1ede68f8ab764d6c6b1e89/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f3073b9f3bff10b2272c5322e5c988222604f749f1e0baade106c395a9e873e", size = 3779720 },
912
- { url = "https://files.pythonhosted.org/packages/65/28/b21a093474177cd277426a3565febaabf2b78a0fc1e40a20b5ab3d405b49/primitive_pal-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:917943bda9e290ae6d8cbf4c5624d5a248258959f391ed9db2978b0afc96c098", size = 3303312 },
913
- { url = "https://files.pythonhosted.org/packages/16/4a/de29c694c9749fc7481d7c48c24ee6a3b09e8f58c0749d4a7f4e259a699f/primitive_pal-0.1.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cc3ef10b2a3fff99dd8c0346aac494e306be0aaa2a519b014ce083bb75e5e02d", size = 3358879 },
914
- { url = "https://files.pythonhosted.org/packages/a5/e6/81497a288c67de326ffaf02f82c4f4bb5adf895fe0f98f2c61c1ac57c2f0/primitive_pal-0.1.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:67547efde9fb0e5af239add966c75489de1bd925b7176ba729a1b064cefab72c", size = 3597011 },
915
- { url = "https://files.pythonhosted.org/packages/0a/75/821d17181f10d584b2c743f0edc7c2bd324ce953bc5d40392697356c0be6/primitive_pal-0.1.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d1dc0db559824d0b8aefe421cb0960186efad54a6b62ce7e54d5fb26135203c0", size = 3562739 },
916
- { url = "https://files.pythonhosted.org/packages/ce/3e/6d6ab1dd950c221b7a5e4a2dd1573f0e4d534ac5bdfd1729d281feb6ace2/primitive_pal-0.1.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9ca1a12b6b3e158273cbceaf33e28e3490d41421946f50efb2560245f00a4ec2", size = 3502645 },
917
- ]
918
-
919
885
  [[package]]
920
886
  name = "prompt-toolkit"
921
887
  version = "3.0.51"
@@ -1,13 +0,0 @@
1
- import click
2
- import typing
3
-
4
- if typing.TYPE_CHECKING:
5
- from ..client import Primitive
6
-
7
-
8
- @click.command("monitor")
9
- @click.pass_context
10
- def cli(context):
11
- """monitor"""
12
- primitive: Primitive = context.obj.get("PRIMITIVE")
13
- primitive.monitor.start()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes