primitive 0.2.12__tar.gz → 0.2.14__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 (114) hide show
  1. {primitive-0.2.12 → primitive-0.2.14}/PKG-INFO +1 -1
  2. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/__about__.py +1 -1
  3. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/actions.py +35 -6
  4. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/launch_agents.py +8 -18
  5. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/launch_service.py +6 -13
  6. {primitive-0.2.12 → primitive-0.2.14}/.git-hooks/pre-commit +0 -0
  7. {primitive-0.2.12 → primitive-0.2.14}/.gitattributes +0 -0
  8. {primitive-0.2.12 → primitive-0.2.14}/.github/workflows/lint.yml +0 -0
  9. {primitive-0.2.12 → primitive-0.2.14}/.github/workflows/publish.yml +0 -0
  10. {primitive-0.2.12 → primitive-0.2.14}/.github/workflows/pyright.yml +0 -0
  11. {primitive-0.2.12 → primitive-0.2.14}/.gitignore +0 -0
  12. {primitive-0.2.12 → primitive-0.2.14}/.vscode/extensions.json +0 -0
  13. {primitive-0.2.12 → primitive-0.2.14}/.vscode/settings.json +0 -0
  14. {primitive-0.2.12 → primitive-0.2.14}/LICENSE.txt +0 -0
  15. {primitive-0.2.12 → primitive-0.2.14}/Makefile +0 -0
  16. {primitive-0.2.12 → primitive-0.2.14}/README.md +0 -0
  17. {primitive-0.2.12 → primitive-0.2.14}/linux setup.md +0 -0
  18. {primitive-0.2.12 → primitive-0.2.14}/pyproject.toml +0 -0
  19. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/__init__.py +0 -0
  20. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/agent/__init__.py +0 -0
  21. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/agent/actions.py +0 -0
  22. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/agent/commands.py +0 -0
  23. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/agent/runner.py +0 -0
  24. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/agent/uploader.py +0 -0
  25. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/auth/__init__.py +0 -0
  26. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/auth/actions.py +0 -0
  27. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/auth/commands.py +0 -0
  28. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/auth/graphql/__init__.py +0 -0
  29. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/auth/graphql/queries.py +0 -0
  30. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/cli.py +0 -0
  31. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/client.py +0 -0
  32. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/__init__.py +0 -0
  33. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/commands.py +0 -0
  34. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/daemons/ui.py +0 -0
  35. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/db/base.py +0 -0
  36. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/db/models.py +0 -0
  37. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/db/sqlite.py +0 -0
  38. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/exec/__init__.py +0 -0
  39. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/exec/actions.py +0 -0
  40. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/exec/commands.py +0 -0
  41. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/exec/interactive.py +0 -0
  42. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/__init__.py +0 -0
  43. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/actions.py +0 -0
  44. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/commands.py +0 -0
  45. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/graphql/__init__.py +0 -0
  46. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/graphql/fragments.py +0 -0
  47. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/graphql/mutations.py +0 -0
  48. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/files/graphql/queries.py +0 -0
  49. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/git/__init__.py +0 -0
  50. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/git/actions.py +0 -0
  51. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/git/commands.py +0 -0
  52. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/git/graphql/__init__.py +0 -0
  53. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/git/graphql/queries.py +0 -0
  54. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/graphql/__init__.py +0 -0
  55. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/graphql/relay.py +0 -0
  56. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/graphql/sdk.py +0 -0
  57. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/graphql/utility_fragments.py +0 -0
  58. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/__init__.py +0 -0
  59. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/actions.py +0 -0
  60. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/android.py +0 -0
  61. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/commands.py +0 -0
  62. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/graphql/__init__.py +0 -0
  63. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/graphql/fragments.py +0 -0
  64. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/graphql/mutations.py +0 -0
  65. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/graphql/queries.py +0 -0
  66. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/hardware/ui.py +0 -0
  67. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/__init__.py +0 -0
  68. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/actions.py +0 -0
  69. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/commands.py +0 -0
  70. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/graphql/__init__.py +0 -0
  71. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/graphql/fragments.py +0 -0
  72. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/graphql/mutations.py +0 -0
  73. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/jobs/graphql/queries.py +0 -0
  74. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/monitor/actions.py +0 -0
  75. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/monitor/commands.py +0 -0
  76. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/__init__.py +0 -0
  77. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/actions.py +0 -0
  78. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/commands.py +0 -0
  79. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/graphql/__init__.py +0 -0
  80. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/graphql/fragments.py +0 -0
  81. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/graphql/mutations.py +0 -0
  82. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/organizations/graphql/queries.py +0 -0
  83. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/__init__.py +0 -0
  84. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/actions.py +0 -0
  85. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/commands.py +0 -0
  86. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/graphql/__init__.py +0 -0
  87. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/graphql/fragments.py +0 -0
  88. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/graphql/mutations.py +0 -0
  89. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/projects/graphql/queries.py +0 -0
  90. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/provisioning/__init__.py +0 -0
  91. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/provisioning/actions.py +0 -0
  92. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/provisioning/graphql/__init__.py +0 -0
  93. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/provisioning/graphql/queries.py +0 -0
  94. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/__init__.py +0 -0
  95. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/actions.py +0 -0
  96. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/commands.py +0 -0
  97. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/graphql/__init__.py +0 -0
  98. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/graphql/fragments.py +0 -0
  99. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/graphql/mutations.py +0 -0
  100. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/reservations/graphql/queries.py +0 -0
  101. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/__init__.py +0 -0
  102. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/actions.py +0 -0
  103. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/auth.py +0 -0
  104. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/cache.py +0 -0
  105. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/chunk_size.py +0 -0
  106. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/config.py +0 -0
  107. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/daemons.py +1 -1
  108. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/exceptions.py +0 -0
  109. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/memory_size.py +0 -0
  110. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/printer.py +0 -0
  111. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/shell.py +0 -0
  112. {primitive-0.2.12 → primitive-0.2.14}/src/primitive/utils/text.py +0 -0
  113. {primitive-0.2.12 → primitive-0.2.14}/tests/__init__.py +0 -0
  114. {primitive-0.2.12 → primitive-0.2.14}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: primitive
3
- Version: 0.2.12
3
+ Version: 0.2.14
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
@@ -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.12"
4
+ __version__ = "0.2.14"
@@ -1,13 +1,18 @@
1
1
  import platform
2
+ import subprocess
2
3
  import typing
3
- from typing import Dict, Optional, List
4
+ from pathlib import Path
5
+ from typing import Dict, List, Optional
4
6
 
5
7
  if typing.TYPE_CHECKING:
6
8
  from ..client import Primitive
7
9
 
10
+ from ..utils.daemons import Daemon
8
11
  from .launch_agents import LaunchAgent
9
12
  from .launch_service import LaunchService
10
- from ..utils.daemons import Daemon
13
+
14
+ HOME_DIRECTORY = Path.home()
15
+ PRIMITIVE_BINARY_PATH = Path(HOME_DIRECTORY / ".pyenv" / "shims" / "primitive")
11
16
 
12
17
 
13
18
  class Daemons:
@@ -15,16 +20,40 @@ class Daemons:
15
20
  self.primitive: Primitive = primitive
16
21
  self.os_family = platform.system()
17
22
 
23
+ found_primitive_binary_path = PRIMITIVE_BINARY_PATH
24
+ if not PRIMITIVE_BINARY_PATH.exists():
25
+ result = subprocess.run(["which", "primitive"], capture_output=True)
26
+ if result.returncode == 0:
27
+ found_primitive_binary_path = result.stdout.decode().rstrip("\n")
28
+ else:
29
+ raise Exception(
30
+ f"primitive binary not found at {PRIMITIVE_BINARY_PATH}"
31
+ )
32
+
18
33
  match self.os_family:
19
34
  case "Darwin":
20
35
  self.daemons: Dict[str, Daemon] = {
21
- "agent": LaunchAgent("tech.primitive.agent"),
22
- "monitor": LaunchAgent("tech.primitive.monitor"),
36
+ "agent": LaunchAgent(
37
+ "tech.primitive.agent",
38
+ executable=str(found_primitive_binary_path),
39
+ command="agent --debug",
40
+ ),
41
+ "monitor": LaunchAgent(
42
+ "tech.primitive.monitor",
43
+ executable=str(found_primitive_binary_path),
44
+ command="monitor --debug",
45
+ ),
23
46
  }
24
47
  case "Linux":
25
48
  self.daemons: Dict[str, Daemon] = {
26
- "agent": LaunchService("tech.primitive.agent"),
27
- "monitor": LaunchService("tech.primitive.monitor"),
49
+ "agent": LaunchService(
50
+ "tech.primitive.agent",
51
+ command=f'/bin/sh -lc "{found_primitive_binary_path} agent --debug"',
52
+ ),
53
+ "monitor": LaunchService(
54
+ "tech.primitive.monitor",
55
+ command=f'/bin/sh -lc "{found_primitive_binary_path} monitor --debug"',
56
+ ),
28
57
  }
29
58
  case _:
30
59
  raise NotImplementedError(f"{self.os_family} is not supported.")
@@ -1,18 +1,21 @@
1
1
  import os
2
- from pathlib import Path
3
2
  import subprocess
3
+ from pathlib import Path
4
+
4
5
  from loguru import logger
6
+
5
7
  from ..utils.daemons import Daemon
6
8
 
7
9
  HOME_DIRECTORY = Path.home()
8
10
  CURRENT_USER = str(HOME_DIRECTORY.expanduser()).lstrip("/Users/")
9
- PRIMITIVE_BINARY_PATH = Path(HOME_DIRECTORY / ".pyenv" / "shims" / "primitive")
10
11
 
11
12
 
12
13
  class LaunchAgent(Daemon):
13
- def __init__(self, label: str):
14
+ def __init__(self, label: str, executable: str, command: str):
14
15
  self.label = label
15
16
  self.name = label.split(".")[-1]
17
+ self.executable = executable
18
+ self.command = command
16
19
 
17
20
  @property
18
21
  def file_path(self) -> Path:
@@ -22,10 +25,6 @@ class LaunchAgent(Daemon):
22
25
  def logs(self) -> Path:
23
26
  return Path(HOME_DIRECTORY / "Library" / "Logs" / f"{self.label}.log")
24
27
 
25
- @property
26
- def cmd(self) -> str:
27
- return self.label.split(".")[-1]
28
-
29
28
  def stop(self, unload: bool = True) -> bool:
30
29
  try:
31
30
  stop_existing_process = f"launchctl stop {self.label}"
@@ -107,15 +106,6 @@ class LaunchAgent(Daemon):
107
106
  self.file_path.parent.mkdir(parents=True, exist_ok=True)
108
107
  self.file_path.touch()
109
108
 
110
- found_primitive_binary_path = PRIMITIVE_BINARY_PATH
111
- if not PRIMITIVE_BINARY_PATH.exists():
112
- result = subprocess.run(["which", "primitive"], capture_output=True)
113
- if result.returncode == 0:
114
- found_primitive_binary_path = result.stdout.decode().rstrip("\n")
115
- else:
116
- logger.error("primitive binary not found")
117
- return False
118
-
119
109
  self.file_path.write_text(
120
110
  f"""<?xml version="1.0" encoding="UTF-8"?>
121
111
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@@ -134,8 +124,8 @@ class LaunchAgent(Daemon):
134
124
  </array>
135
125
  <key>ProgramArguments</key>
136
126
  <array>
137
- <string>{found_primitive_binary_path}</string>
138
- <string>{self.cmd}</string>
127
+ <string>{self.executable}</string>
128
+ <string>{self.command}</string>
139
129
  </array>
140
130
  <key>RunAtLoad</key>
141
131
  <true/>
@@ -1,18 +1,20 @@
1
- import os
2
1
  import configparser
2
+ import os
3
3
  import subprocess
4
4
  from pathlib import Path
5
+
5
6
  from loguru import logger
7
+
6
8
  from ..utils.daemons import Daemon
7
9
 
8
10
  HOME_DIRECTORY = Path.home()
9
- PRIMITIVE_BINARY_PATH = Path(HOME_DIRECTORY / ".pyenv" / "shims" / "primitive")
10
11
 
11
12
 
12
13
  class LaunchService(Daemon):
13
- def __init__(self, label: str):
14
+ def __init__(self, label: str, command: str):
14
15
  self.label = label
15
16
  self.name = label.split(".")[-1]
17
+ self.command = command
16
18
 
17
19
  @property
18
20
  def service_name(self) -> str:
@@ -119,17 +121,8 @@ class LaunchService(Daemon):
119
121
  "After": "network.target",
120
122
  }
121
123
 
122
- found_primitive_binary_path = PRIMITIVE_BINARY_PATH
123
- if not PRIMITIVE_BINARY_PATH.exists():
124
- result = subprocess.run(["which", "primitive"], capture_output=True)
125
- if result.returncode == 0:
126
- found_primitive_binary_path = result.stdout.decode().rstrip("\n")
127
- else:
128
- print("primitive binary not found")
129
- return False
130
-
131
124
  config["Service"] = {
132
- "ExecStart": f'/bin/sh -lc "{found_primitive_binary_path} agent"',
125
+ "ExecStart": self.command,
133
126
  "Restart": "always",
134
127
  "StandardError": f"append:{self.logs}",
135
128
  "StandardOutput": f"append:{self.logs}",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,5 +1,5 @@
1
- from pathlib import Path
2
1
  from abc import ABC, abstractmethod
2
+ from pathlib import Path
3
3
 
4
4
 
5
5
  class Daemon(ABC):
File without changes
File without changes