primitive 0.1.58__py3-none-any.whl → 0.1.60__py3-none-any.whl

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 (68) hide show
  1. primitive/__about__.py +1 -1
  2. primitive/agent/__init__.py +0 -0
  3. primitive/agent/actions.py +8 -4
  4. primitive/agent/process.py +2 -2
  5. primitive/agent/provision.py +2 -8
  6. primitive/agent/runner.py +22 -12
  7. primitive/agent/uploader.py +78 -49
  8. primitive/auth/actions.py +5 -12
  9. primitive/auth/graphql/__init__.py +0 -0
  10. primitive/auth/graphql/queries.py +13 -0
  11. primitive/cli.py +11 -5
  12. primitive/client.py +4 -0
  13. primitive/daemons/__init__.py +0 -0
  14. primitive/exec/__init__.py +0 -0
  15. primitive/exec/actions.py +50 -0
  16. primitive/exec/commands.py +22 -0
  17. primitive/files/__init__.py +0 -0
  18. primitive/files/actions.py +9 -16
  19. primitive/files/graphql/__init__.py +0 -0
  20. primitive/files/graphql/mutations.py +11 -0
  21. primitive/git/actions.py +11 -11
  22. primitive/git/commands.py +7 -6
  23. primitive/git/graphql/__init__.py +0 -0
  24. primitive/git/graphql/queries.py +7 -0
  25. primitive/graphql/relay.py +32 -0
  26. primitive/graphql/utility_fragments.py +19 -0
  27. primitive/hardware/__init__.py +0 -0
  28. primitive/hardware/actions.py +74 -121
  29. primitive/hardware/commands.py +15 -5
  30. primitive/hardware/graphql/__init__.py +0 -0
  31. primitive/hardware/graphql/fragments.py +22 -0
  32. primitive/hardware/graphql/mutations.py +45 -0
  33. primitive/hardware/graphql/queries.py +31 -0
  34. primitive/jobs/__init__.py +0 -0
  35. primitive/jobs/actions.py +32 -201
  36. primitive/jobs/graphql/__init__.py +0 -0
  37. primitive/jobs/graphql/fragments.py +47 -0
  38. primitive/jobs/graphql/mutations.py +11 -0
  39. primitive/jobs/graphql/queries.py +100 -0
  40. primitive/lint/__init__.py +0 -0
  41. primitive/organizations/__init__.py +0 -0
  42. primitive/organizations/actions.py +4 -49
  43. primitive/organizations/graphql/__init__.py +0 -0
  44. primitive/organizations/graphql/fragments.py +10 -0
  45. primitive/organizations/graphql/mutations.py +0 -0
  46. primitive/organizations/graphql/queries.py +38 -0
  47. primitive/projects/actions.py +5 -47
  48. primitive/projects/graphql/__init__.py +0 -0
  49. primitive/projects/graphql/fragments.py +10 -0
  50. primitive/projects/graphql/mutations.py +0 -0
  51. primitive/projects/graphql/queries.py +36 -0
  52. primitive/reservations/__init__.py +0 -0
  53. primitive/reservations/actions.py +134 -0
  54. primitive/reservations/commands.py +67 -0
  55. primitive/reservations/graphql/__init__.py +0 -0
  56. primitive/reservations/graphql/fragments.py +40 -0
  57. primitive/reservations/graphql/mutations.py +29 -0
  58. primitive/reservations/graphql/queries.py +47 -0
  59. primitive/sim/actions.py +12 -9
  60. primitive/utils/__init__.py +0 -0
  61. primitive/utils/cache.py +14 -0
  62. primitive/utils/shell.py +25 -0
  63. {primitive-0.1.58.dist-info → primitive-0.1.60.dist-info}/METADATA +1 -1
  64. primitive-0.1.60.dist-info/RECORD +95 -0
  65. primitive-0.1.58.dist-info/RECORD +0 -53
  66. {primitive-0.1.58.dist-info → primitive-0.1.60.dist-info}/WHEEL +0 -0
  67. {primitive-0.1.58.dist-info → primitive-0.1.60.dist-info}/entry_points.txt +0 -0
  68. {primitive-0.1.58.dist-info → primitive-0.1.60.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,134 @@
1
+ import typing
2
+ from time import sleep
3
+
4
+ from primitive.graphql.relay import from_base64
5
+
6
+ if typing.TYPE_CHECKING:
7
+ pass
8
+
9
+ from typing import List, Optional
10
+
11
+ from gql import gql
12
+
13
+ from primitive.utils.actions import BaseAction
14
+
15
+ from ..utils.auth import guard
16
+ from .graphql.mutations import reservation_create_mutation, reservation_release_mutation
17
+ from .graphql.queries import reservation_query, reservations_query
18
+
19
+
20
+ class Reservations(BaseAction):
21
+ def __init__(self, *args, **kwargs) -> None:
22
+ super().__init__(*args, **kwargs)
23
+
24
+ @guard
25
+ def get_reservations(
26
+ self,
27
+ status: str = "in_progress",
28
+ ):
29
+ query = gql(reservations_query)
30
+
31
+ filters = {}
32
+ if status:
33
+ filters["status"] = {"exact": status}
34
+
35
+ variables = {
36
+ "filters": filters,
37
+ }
38
+ result = self.primitive.session.execute(
39
+ query, variable_values=variables, get_execution_result=True
40
+ )
41
+ return result
42
+
43
+ @guard
44
+ def get_reservation(self, reservation_id: str):
45
+ query = gql(reservation_query)
46
+
47
+ variables = {
48
+ "id": reservation_id,
49
+ }
50
+
51
+ result = self.primitive.session.execute(
52
+ query, variable_values=variables, get_execution_result=True
53
+ )
54
+ return result
55
+
56
+ @guard
57
+ def create_reservation(
58
+ self,
59
+ reason: str,
60
+ requested_hardware_ids: Optional[List[str]] = None,
61
+ organization_id: Optional[str] = None,
62
+ hardware_identifier: Optional[str] = None,
63
+ ):
64
+ mutation = gql(reservation_create_mutation)
65
+
66
+ if hardware_identifier and not requested_hardware_ids:
67
+ hardware = self.primitive.hardware.get_hardware_from_slug_or_id(
68
+ hardware_identifier=hardware_identifier
69
+ )
70
+ requested_hardware_ids = [hardware["id"]]
71
+
72
+ if not organization_id:
73
+ whoami_result = self.primitive.auth.whoami()
74
+ default_organization = whoami_result.data["whoami"]["defaultOrganization"]
75
+ organization_id = default_organization["id"]
76
+
77
+ input = {
78
+ "requestedHardwareIds": requested_hardware_ids,
79
+ "reason": reason,
80
+ "organizationId": organization_id,
81
+ }
82
+
83
+ variables = {"input": input}
84
+ result = self.primitive.session.execute(
85
+ mutation, variable_values=variables, get_execution_result=True
86
+ )
87
+ return result
88
+
89
+ @guard
90
+ def release_reservation(self, reservation_or_hardware_identifier: str):
91
+ mutation = gql(reservation_release_mutation)
92
+ try:
93
+ # check if it is a base64 encoded id
94
+ type_name, _id = from_base64(reservation_or_hardware_identifier)
95
+ if type_name == "Reservation":
96
+ reservation_id = reservation_or_hardware_identifier
97
+ elif type_name == "Hardware":
98
+ hardware = self.primitive.hardware.get_hardware_from_slug_or_id(
99
+ hardware_identifier=reservation_or_hardware_identifier
100
+ )
101
+ reservation_id = hardware["activeReservation"]["id"]
102
+ except ValueError:
103
+ # if not, its a string and check for it here
104
+ hardware = self.primitive.hardware.get_hardware_from_slug_or_id(
105
+ hardware_identifier=reservation_or_hardware_identifier
106
+ )
107
+ reservation_id = hardware["activeReservation"]["id"]
108
+
109
+ input = {
110
+ "reservationId": reservation_id,
111
+ }
112
+ variables = {"input": input}
113
+ result = self.primitive.session.execute(
114
+ mutation, variable_values=variables, get_execution_result=True
115
+ )
116
+ return result
117
+
118
+ @guard
119
+ def wait_for_reservation_status(self, reservation_id: str, desired_status: str):
120
+ reservation_result = self.get_reservation(reservation_id=reservation_id)
121
+ reservation = reservation_result.data["reservation"]
122
+ current_status = reservation["status"]
123
+
124
+ sleep_amount = 1
125
+ while current_status != desired_status:
126
+ reservation_result = self.get_reservation(reservation_id=reservation_id)
127
+ reservation = reservation_result.data["reservation"]
128
+ current_status = reservation["status"]
129
+ if current_status == desired_status:
130
+ break
131
+ sleep(sleep_amount)
132
+ sleep_amount += 1
133
+
134
+ return reservation
@@ -0,0 +1,67 @@
1
+ import typing
2
+
3
+ import click
4
+
5
+ if typing.TYPE_CHECKING:
6
+ from ..client import Primitive
7
+ from typing import Optional
8
+
9
+ from ..utils.printer import print_result
10
+
11
+
12
+ @click.group()
13
+ @click.pass_context
14
+ def cli(context):
15
+ """Reservations"""
16
+ pass
17
+
18
+
19
+ @cli.command("list")
20
+ @click.pass_context
21
+ @click.option("--status", default="in_progress", type=str, help="Filter by status")
22
+ def list(context, status: Optional[str] = "in_progress"):
23
+ """List reservations"""
24
+ primitive: Primitive = context.obj.get("PRIMITIVE")
25
+ get_reservations_result = primitive.reservations.get_reservations(status=status)
26
+ message = get_reservations_result.data
27
+ print_result(message=message, context=context)
28
+
29
+
30
+ @cli.command("get")
31
+ @click.pass_context
32
+ @click.argument("reservation_id", type=str)
33
+ def get(context, reservation_id: str):
34
+ """Get a reservation"""
35
+ primitive: Primitive = context.obj.get("PRIMITIVE")
36
+ get_reservation_result = primitive.reservations.get_reservation(
37
+ reservation_id=reservation_id
38
+ )
39
+ message = get_reservation_result.data
40
+ print_result(message=message, context=context)
41
+
42
+
43
+ @cli.command("create")
44
+ @click.pass_context
45
+ @click.argument("hardware_identifier", type=str)
46
+ @click.argument("reason", type=str)
47
+ def create_reservation(context, hardware_identifier: str, reason: str):
48
+ """Crate a reservation by a Hardware's ID or Slug"""
49
+ primitive: Primitive = context.obj.get("PRIMITIVE")
50
+ create_reservation_result = primitive.reservations.create_reservation(
51
+ hardware_identifier=hardware_identifier, reason=reason
52
+ )
53
+ message = create_reservation_result.data
54
+ print_result(message=message, context=context)
55
+
56
+
57
+ @cli.command("release")
58
+ @click.pass_context
59
+ @click.argument("reservation_or_hardware_identifier", type=str)
60
+ def release_reservation(context, reservation_or_hardware_identifier: str):
61
+ """Release a reservation by Reservation ID, Hardware ID or Hardware Slug"""
62
+ primitive: Primitive = context.obj.get("PRIMITIVE")
63
+ release_reservation_result = primitive.reservations.release_reservation(
64
+ reservation_or_hardware_identifier=reservation_or_hardware_identifier
65
+ )
66
+ message = release_reservation_result.data
67
+ print_result(message=message, context=context)
File without changes
@@ -0,0 +1,40 @@
1
+ reservation_fragment = """
2
+ fragment ReservationFragment on Reservation {
3
+ id
4
+ pk
5
+ createdAt
6
+ updatedAt
7
+ createdBy {
8
+ id
9
+ pk
10
+ email
11
+ username
12
+ displayName
13
+ }
14
+ hardware {
15
+ id
16
+ pk
17
+ name
18
+ slug
19
+ createdAt
20
+ updatedAt
21
+ isAvailable
22
+ isOnline
23
+ isQuarantined
24
+ isHealthy
25
+ capabilities {
26
+ id
27
+ pk
28
+ slug
29
+ name
30
+ }
31
+ }
32
+ reason
33
+ startedAt
34
+ endedAt
35
+ elapsedTime
36
+ status
37
+ conclusion
38
+ conclusionMessage
39
+ }
40
+ """
@@ -0,0 +1,29 @@
1
+ from primitive.graphql.utility_fragments import operation_info_fragment
2
+
3
+ from .fragments import reservation_fragment
4
+
5
+ reservation_create_mutation = (
6
+ operation_info_fragment
7
+ + reservation_fragment
8
+ + """
9
+ mutation reservationCreate($input: ReservationCreateInput!) {
10
+ reservationCreate(input: $input) {
11
+ ...ReservationFragment
12
+ ...OperationInfoFragment
13
+ }
14
+ }
15
+ """
16
+ )
17
+
18
+ reservation_release_mutation = (
19
+ operation_info_fragment
20
+ + reservation_fragment
21
+ + """
22
+ mutation reservationRelease($input: ReservationReleaseInput!) {
23
+ reservationRelease(input: $input) {
24
+ ...ReservationFragment
25
+ ...OperationInfoFragment
26
+ }
27
+ }
28
+ """
29
+ )
@@ -0,0 +1,47 @@
1
+ from primitive.graphql.utility_fragments import page_info_fragment
2
+
3
+ from .fragments import reservation_fragment
4
+
5
+ reservations_query = (
6
+ page_info_fragment
7
+ + reservation_fragment
8
+ + """
9
+ query reservations(
10
+ $before: String
11
+ $after: String
12
+ $first: Int
13
+ $last: Int
14
+ $filters: ReservationFilters
15
+ ) {
16
+ reservations(
17
+ before: $before
18
+ after: $after
19
+ first: $first
20
+ last: $last
21
+ filters: $filters
22
+ ) {
23
+ totalCount
24
+ pageInfo {
25
+ ...PageInfoFragment
26
+ }
27
+ edges {
28
+ cursor
29
+ node {
30
+ ...ReservationFragment
31
+ }
32
+ }
33
+ }
34
+ }
35
+ """
36
+ )
37
+
38
+ reservation_query = (
39
+ reservation_fragment
40
+ + """
41
+ query reservation($id: GlobalID!) {
42
+ reservation(id: $id) {
43
+ ...ReservationFragment
44
+ }
45
+ }
46
+ """
47
+ )
primitive/sim/actions.py CHANGED
@@ -1,14 +1,17 @@
1
- from pathlib import Path, PurePath
2
- from primitive.utils.actions import BaseAction
3
- from loguru import logger
4
- import subprocess
5
- from typing import Tuple
6
- from ..utils.files import find_files_for_extension
7
- import os
8
1
  import json
2
+ import os
3
+ import subprocess
9
4
  import xml.etree.ElementTree as ET
5
+ from pathlib import Path, PurePath
6
+ from typing import Tuple
7
+
8
+ from loguru import logger
10
9
  from primitive_pal import process_vcd
11
10
 
11
+ from primitive.utils.actions import BaseAction
12
+
13
+ from ..utils.files import find_files_for_extension
14
+
12
15
 
13
16
  class Sim(BaseAction):
14
17
  def execute(
@@ -80,10 +83,10 @@ class Sim(BaseAction):
80
83
 
81
84
  logger.debug("Updating job run...")
82
85
  if len(file_ids) > 0:
83
- job_run_update_response = self.primitive.jobs.job_run_update(
86
+ job_run_update_result = self.primitive.jobs.job_run_update(
84
87
  id=job_run_id, file_ids=file_ids
85
88
  )
86
- logger.success(job_run_update_response)
89
+ logger.success(job_run_update_result.data)
87
90
 
88
91
  def parse_xml(self, path: Path) -> None:
89
92
  results = ET.parse(path)
File without changes
primitive/utils/cache.py CHANGED
@@ -44,6 +44,20 @@ def get_artifacts_cache(cache_id: str = None) -> Path:
44
44
  return artifacts_dir
45
45
 
46
46
 
47
+ def get_logs_cache(cache_id: str = None) -> Path:
48
+ cache_dir = get_cache_dir()
49
+
50
+ logs_dir = cache_dir / "logs"
51
+
52
+ if cache_id:
53
+ logs_dir = logs_dir / cache_id
54
+
55
+ if not logs_dir.exists():
56
+ logs_dir.mkdir(parents=True, exist_ok=True)
57
+
58
+ return logs_dir
59
+
60
+
47
61
  def get_deps_cache() -> Path:
48
62
  cache_dir = get_cache_dir()
49
63
 
primitive/utils/shell.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from pathlib import Path
2
2
  import subprocess
3
+ from typing import Dict
3
4
 
4
5
 
5
6
  def add_path_to_shell(path: Path):
@@ -31,3 +32,27 @@ def add_path_to_shell(path: Path):
31
32
  file.write(f"export PATH={path}:$PATH\n")
32
33
 
33
34
  return True
35
+
36
+
37
+ def env_string_to_dict(env_str: str) -> Dict:
38
+ lines = env_str.splitlines()
39
+
40
+ current_key = None
41
+ current_value = []
42
+ env_dict = {}
43
+ for line in lines:
44
+ if "=" in line:
45
+ if current_key is not None:
46
+ env_dict[current_key] = "\n".join(current_value)
47
+
48
+ key, value = line.split("=", 1)
49
+
50
+ current_key = key
51
+ current_value = [value]
52
+ else:
53
+ current_value.append(line)
54
+
55
+ if current_key is not None:
56
+ env_dict[current_key] = "\n".join(current_value)
57
+
58
+ return env_dict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: primitive
3
- Version: 0.1.58
3
+ Version: 0.1.60
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
@@ -0,0 +1,95 @@
1
+ primitive/__about__.py,sha256=ltk-zb4IMmLsM4NDisEz2bXWrL5uUzzqsV5yJM95Caw,130
2
+ primitive/__init__.py,sha256=bwKdgggKNVssJFVPfKSxqFMz4IxSr54WWbmiZqTMPNI,106
3
+ primitive/cli.py,sha256=CGmWiqqCLMHtHGOUPuf3tVO6VvChBZ1VdSwCCglnBgA,2582
4
+ primitive/client.py,sha256=p-5z1iGM8ZydIrkYf4R6b7Yna73oszlGdXim9-Zsbyk,2364
5
+ primitive/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ primitive/agent/actions.py,sha256=B7d2oNMjtjUP2RhD-QnNDWNl3jHwjUDk5KLWQ2OnNQ4,5883
7
+ primitive/agent/commands.py,sha256=-dVDilELfkGfbZB7qfEPs77Dm1oT62qJj4tsIk4KoxI,254
8
+ primitive/agent/process.py,sha256=LVI-RB4a0YEuXUTYMXKL5Xi9euNwUI2nxj00mv8EFOg,2253
9
+ primitive/agent/provision.py,sha256=rmwnro1K5F8mwtd45XAq7RVQmpDWnbBCQ8X_qgWhm3M,1546
10
+ primitive/agent/runner.py,sha256=pX1KgYNxSxkSIDydsQa60C4zV2EvNaVXA9rQlG17wc8,7129
11
+ primitive/agent/uploader.py,sha256=La33T2csENWKRsNagog3ELYe6110jufMnb7owmrPsIk,3150
12
+ primitive/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ primitive/auth/actions.py,sha256=MPsG9LcKcOPwA7gZ9Ewk0PZJhTQvIrGfODdz4GxSzgA,999
14
+ primitive/auth/commands.py,sha256=JahUq0E2e7Xa-FX1WEUv7TgM6ieDvNH4VwRRtxAW7HE,2340
15
+ primitive/auth/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ primitive/auth/graphql/queries.py,sha256=jhrr_VFzHIn8vcVprMIzUx7V4kkWYdR6CKMKPoVFv60,180
17
+ primitive/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ primitive/daemons/actions.py,sha256=Nt3yNtbBhen0jK4sRsH_N7AP3UBuyL48VaUhtC7wYq8,2015
19
+ primitive/daemons/commands.py,sha256=-Muh-6ib4uAVtPn_67AcMrDwuCwYlCnRQozCi2Xurmk,1726
20
+ primitive/daemons/launch_agents.py,sha256=qovt32gwpjGDd82z_SY5EGCUjaUyNA49pZFajZsw3eE,4796
21
+ primitive/daemons/launch_service.py,sha256=FPB9qKEjhllRfEpct0ng2L9lpIaGJbQwn1JdFT8uBA8,5600
22
+ primitive/exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ primitive/exec/actions.py,sha256=GdqoVbD65JuDCzdelmygMVuA5a8V-RZHdhxuAqrFzaA,1907
24
+ primitive/exec/commands.py,sha256=iX8SP_9vwyy-R2unk5HaesLIdUAbhXCqCSWOOdFCtY0,509
25
+ primitive/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ primitive/files/actions.py,sha256=AYh2o2BY4-glySkILoHZia9nVADKaAFM0z9Pe3GH2EM,2686
27
+ primitive/files/commands.py,sha256=DDizo3xJnU3KLUBTMeeM72viVpnJinLwxs84tmqKhqo,810
28
+ primitive/files/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ primitive/files/graphql/mutations.py,sha256=iVolIhWu8-QktsdavBghr7VxomkxOV4de75BnovP9JM,215
30
+ primitive/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ primitive/git/actions.py,sha256=0KHeHViZZqIhF6-Eqvhs0g_UmglqyWrOQKElQCm6jVw,1506
32
+ primitive/git/commands.py,sha256=sCeSjkRgSEjCEsB5seXgB_h6xfk0KpvMvzMKoRfUbRA,1177
33
+ primitive/git/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ primitive/git/graphql/queries.py,sha256=I1HGlqBb1lHIAWVSsC8tVY9JdsQ8DJVqs4nqSTcL30M,98
35
+ primitive/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ primitive/graphql/relay.py,sha256=bmij2AjdpURQ6GGVCxwWhauF-r_SxuAU2oJ4sDbLxpI,726
37
+ primitive/graphql/sdk.py,sha256=BhCGmDtc4sNnH8CxbQSJyFwOZ-ZSqMtjsxMB3JRBhPw,1456
38
+ primitive/graphql/utility_fragments.py,sha256=uIjwILC4QtWNyO5vu77VjQf_p0jvP3A9q_6zRq91zqs,303
39
+ primitive/hardware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ primitive/hardware/actions.py,sha256=KPRlpGbmeOKViAPWb_nzX6BMyMAjBHjdEz_lyBKqod0,18601
41
+ primitive/hardware/commands.py,sha256=_HaWOdRQSkhnA1xZZHZWgadSQ9Gijxtnzg2vc_IDSMA,1854
42
+ primitive/hardware/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ primitive/hardware/graphql/fragments.py,sha256=2uI0_WIhJISgd9Yx8tAdM7EUuAXEeQMUIXTIfkbZc2Q,246
44
+ primitive/hardware/graphql/mutations.py,sha256=Zd6HxnIgTJ9mJQAfKJkdeDfstcPAal6Bj38pnKb_RuI,904
45
+ primitive/hardware/graphql/queries.py,sha256=dhihQwr4O7zxDNRjeNWhkAXaSDOBsK-uqIczEGy1XLI,430
46
+ primitive/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ primitive/jobs/actions.py,sha256=CtyO-Z9614TgIoXJJX1QGsoll0fgpBIjG9PJH5JwCQs,4901
48
+ primitive/jobs/commands.py,sha256=MxPCkBEYW_eLNqgCRYeyj7ZcLOFAWfpVZlqDR2Y_S0o,830
49
+ primitive/jobs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ primitive/jobs/graphql/fragments.py,sha256=xtT168P-ChEj3UhSXxFiYPgYuMDyey9bXYkk-TtM3a4,542
51
+ primitive/jobs/graphql/mutations.py,sha256=8ASvCmwQh7cMeeiykOdYaYVryG8FRIuVF6v_J8JJZuw,219
52
+ primitive/jobs/graphql/queries.py,sha256=BrU_GnLjK0bTAmWsLSmGEUea7EM8MqTKxN1Qp6sSjwc,1597
53
+ primitive/lint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ primitive/lint/actions.py,sha256=tWsrht1dowGprcZjEUtjCJzozEQmh9sv2_C2__YHIOI,2825
55
+ primitive/lint/commands.py,sha256=3CZvkOEMpJspJWmaQzA5bpPKx0_VCijQIXA9l-eTnZE,487
56
+ primitive/organizations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ primitive/organizations/actions.py,sha256=o7WnTONtH-WI0kzn71Uq-kF0CRjDS8Xb9YA7DIjYnwY,1085
58
+ primitive/organizations/commands.py,sha256=_dwgVEJCqMa5VgB_7P1wLPFc0AuT1p9dtyR9JRr4kpw,487
59
+ primitive/organizations/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ primitive/organizations/graphql/fragments.py,sha256=a1qKq4FZB5qze0XTo1fOUeGAscIasjn_Ig4gA2_vStY,142
61
+ primitive/organizations/graphql/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ primitive/organizations/graphql/queries.py,sha256=8sLpByh4dKk-wKpqpNwiv_P0_B2pAeb7FoQ8sePErB0,733
63
+ primitive/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
+ primitive/projects/actions.py,sha256=liYIWaCstPWjvrqAordwye-LEsSmoOQHB_EuBE13SKg,975
65
+ primitive/projects/commands.py,sha256=Fqqgpi4cm6zOgkHK--0F0hiiIj32BmgZ-h1MydmWwdE,464
66
+ primitive/projects/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ primitive/projects/graphql/fragments.py,sha256=02F5nyI8i-ML_bV5FFHUgFWM5bBBfjmz_tkP-4QOXjU,127
68
+ primitive/projects/graphql/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ primitive/projects/graphql/queries.py,sha256=nFaVf6YOHA2L_FTgIUdRK-80hYTmv1a1X5ac7QPMp1k,646
70
+ primitive/reservations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ primitive/reservations/actions.py,sha256=XjjF0UJAgKryuSJqakLMAWshZIbuM-DkTmdU95cANs4,4434
72
+ primitive/reservations/commands.py,sha256=OwWWE9DrvtrVBcBki0bKTOqCzCQk090c0rPIAt89JLY,2243
73
+ primitive/reservations/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ primitive/reservations/graphql/fragments.py,sha256=OPh8ylJR2kxfArBJ4IYIBLvWJyms3A2jVNNFLkTroRM,474
75
+ primitive/reservations/graphql/mutations.py,sha256=IqzwQL7OclN7RpIcidrTQo9cGYofY7wqoBOdnY0pwN8,651
76
+ primitive/reservations/graphql/queries.py,sha256=x31wTRelskX2fc0fx2qrY7XT1q74nvzLv_Xef3o9weg,746
77
+ primitive/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ primitive/sim/actions.py,sha256=8eGOL7_sRj-7aW4TfPDH6gX5bYvxSIJkUxzRvPb7rjo,4904
79
+ primitive/sim/commands.py,sha256=8PaOfL1MO6qxTn7mNVRnBU1X2wa3gk_mlbAhBW6MnI0,591
80
+ primitive/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ primitive/utils/actions.py,sha256=HOFrmM3-0A_A3NS84MqrZ6JmQEiiPSoDqEeuu6b_qfQ,196
82
+ primitive/utils/auth.py,sha256=TtJKTR6tLmNrtWbOjJI-KJh4ZSJ1uG7ApE9GcY63m00,836
83
+ primitive/utils/cache.py,sha256=FHGmVWYLJFQOazpXXcEwI0YJEZbdkgG39nOLdOv6VNk,1575
84
+ primitive/utils/config.py,sha256=DlFM5Nglo22WPtbpZSVtH7NX-PTMaKYlcrUE7GPRG4c,1058
85
+ primitive/utils/files.py,sha256=Yv__bQes3YIlzhOT9kVxtYhoA5CmUjPSvphl9PZ41k4,867
86
+ primitive/utils/git.py,sha256=1qNOu8X-33CavmrD580BmrFhD_WVO9PGWHUUboXJR_g,663
87
+ primitive/utils/memory_size.py,sha256=4xfha21kW82nFvOTtDFx9Jk2ZQoEhkfXii-PGNTpIUk,3058
88
+ primitive/utils/printer.py,sha256=f1XUpqi5dkTL3GWvYRUGlSwtj2IxU1q745T4Fxo7Tn4,370
89
+ primitive/utils/shell.py,sha256=j7E1YwgNWw57dFHVfEbqRNVcPHX0xDefX2vFSNgeI_8,1648
90
+ primitive/utils/verible.py,sha256=r7c_hfqvL0UicMmIzK3Cy_BfZI1ZpcfBeLqKEWFWqJo,2252
91
+ primitive-0.1.60.dist-info/METADATA,sha256=Ehe8DxemJilg_9uewSTTCQE9vobsu-P4EmSIKexXNLo,3782
92
+ primitive-0.1.60.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
93
+ primitive-0.1.60.dist-info/entry_points.txt,sha256=p1K8DMCWka5FqLlqP1sPek5Uovy9jq8u51gUsP-z334,48
94
+ primitive-0.1.60.dist-info/licenses/LICENSE.txt,sha256=B8kmQMJ2sxYygjCLBk770uacaMci4mPSoJJ8WoDBY_c,1098
95
+ primitive-0.1.60.dist-info/RECORD,,
@@ -1,53 +0,0 @@
1
- primitive/__about__.py,sha256=S0YUSrE8kYLnnrDEf3Zg8iyjiV8CQb2jsfZ4uoquTtc,130
2
- primitive/__init__.py,sha256=bwKdgggKNVssJFVPfKSxqFMz4IxSr54WWbmiZqTMPNI,106
3
- primitive/cli.py,sha256=VQPSewC6ouGdEG9W1gllawGJTydpOY0Lzg7LURXcqQg,2374
4
- primitive/client.py,sha256=vSJkifx450czuLvu0f2o-viSCC0p2f1UicA-2P5cJAw,2188
5
- primitive/agent/actions.py,sha256=BnGHzh63R4ST_EqEB_hYEOzVwbzEaGKOZTaZo0vb6Vg,5818
6
- primitive/agent/commands.py,sha256=-dVDilELfkGfbZB7qfEPs77Dm1oT62qJj4tsIk4KoxI,254
7
- primitive/agent/process.py,sha256=2ZY3YoJHvoukrsCAZIt-AF2YKY4HEO5_jWji5K3W9fM,2267
8
- primitive/agent/provision.py,sha256=3EEzOV-ria6zf-pvfNddad1lzzd1QmfKInTIjmwX71Y,1673
9
- primitive/agent/runner.py,sha256=wkvXjXxD7dg0XeZIvatpI12RSifYzRYUIL9NX42oRus,6876
10
- primitive/agent/uploader.py,sha256=5ZxonvRlMGRVBYx3hPEaWiPio5lMPi_zhtxz64V5S-A,2379
11
- primitive/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- primitive/auth/actions.py,sha256=2vZEC3LLAXj6eBBmt_2OEDEcBIb3uLkkNjgbZTIaQsY,1095
13
- primitive/auth/commands.py,sha256=JahUq0E2e7Xa-FX1WEUv7TgM6ieDvNH4VwRRtxAW7HE,2340
14
- primitive/daemons/actions.py,sha256=Nt3yNtbBhen0jK4sRsH_N7AP3UBuyL48VaUhtC7wYq8,2015
15
- primitive/daemons/commands.py,sha256=-Muh-6ib4uAVtPn_67AcMrDwuCwYlCnRQozCi2Xurmk,1726
16
- primitive/daemons/launch_agents.py,sha256=qovt32gwpjGDd82z_SY5EGCUjaUyNA49pZFajZsw3eE,4796
17
- primitive/daemons/launch_service.py,sha256=FPB9qKEjhllRfEpct0ng2L9lpIaGJbQwn1JdFT8uBA8,5600
18
- primitive/files/actions.py,sha256=3AOGLEUeplNlkKkyi1QajzxMc93Adh5jRQ8SQHFlJeU,2889
19
- primitive/files/commands.py,sha256=DDizo3xJnU3KLUBTMeeM72viVpnJinLwxs84tmqKhqo,810
20
- primitive/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- primitive/git/actions.py,sha256=OTuGRXfjop9u1LtNaBen87mEU6ROeoa_MDgBbB2l6ig,1428
22
- primitive/git/commands.py,sha256=64B2STTOn0dwVDmJHqEwekmIqKMfSyBBFwKg29Wt8Aw,1230
23
- primitive/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- primitive/graphql/sdk.py,sha256=BhCGmDtc4sNnH8CxbQSJyFwOZ-ZSqMtjsxMB3JRBhPw,1456
25
- primitive/hardware/actions.py,sha256=QwVElFCrGbA27qagapHRxVpf0vkpKu6bNcqCQyYpQkY,18968
26
- primitive/hardware/commands.py,sha256=QE7LLeFdfOqlvz3JwdwJJRZAY3fHI1zB9kYmmDajpq0,1477
27
- primitive/jobs/actions.py,sha256=xg5-ALJEAtculnUIp-avYYJ5hONkl9fWFL83orAs6IQ,8194
28
- primitive/jobs/commands.py,sha256=MxPCkBEYW_eLNqgCRYeyj7ZcLOFAWfpVZlqDR2Y_S0o,830
29
- primitive/lint/actions.py,sha256=tWsrht1dowGprcZjEUtjCJzozEQmh9sv2_C2__YHIOI,2825
30
- primitive/lint/commands.py,sha256=3CZvkOEMpJspJWmaQzA5bpPKx0_VCijQIXA9l-eTnZE,487
31
- primitive/organizations/actions.py,sha256=fNVR0qx9opzMpzGn6lHBy5BqLhIwid1ZepxdtpelZwo,2310
32
- primitive/organizations/commands.py,sha256=_dwgVEJCqMa5VgB_7P1wLPFc0AuT1p9dtyR9JRr4kpw,487
33
- primitive/projects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- primitive/projects/actions.py,sha256=wkQRMbMWRca0wnMKv6Cqh4t6BRCwIorS5ZpS7rMlSbU,2103
35
- primitive/projects/commands.py,sha256=Fqqgpi4cm6zOgkHK--0F0hiiIj32BmgZ-h1MydmWwdE,464
36
- primitive/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- primitive/sim/actions.py,sha256=MkhiAH5QvF2jbnpgWL29HeSrTYiSW0UJpql2wZ4q18w,4900
38
- primitive/sim/commands.py,sha256=8PaOfL1MO6qxTn7mNVRnBU1X2wa3gk_mlbAhBW6MnI0,591
39
- primitive/utils/actions.py,sha256=HOFrmM3-0A_A3NS84MqrZ6JmQEiiPSoDqEeuu6b_qfQ,196
40
- primitive/utils/auth.py,sha256=TtJKTR6tLmNrtWbOjJI-KJh4ZSJ1uG7ApE9GcY63m00,836
41
- primitive/utils/cache.py,sha256=hDVpEL2TePrWOH6q7Me_Oi-DH_viFrRxrVta-z4wBhM,1295
42
- primitive/utils/config.py,sha256=DlFM5Nglo22WPtbpZSVtH7NX-PTMaKYlcrUE7GPRG4c,1058
43
- primitive/utils/files.py,sha256=Yv__bQes3YIlzhOT9kVxtYhoA5CmUjPSvphl9PZ41k4,867
44
- primitive/utils/git.py,sha256=1qNOu8X-33CavmrD580BmrFhD_WVO9PGWHUUboXJR_g,663
45
- primitive/utils/memory_size.py,sha256=4xfha21kW82nFvOTtDFx9Jk2ZQoEhkfXii-PGNTpIUk,3058
46
- primitive/utils/printer.py,sha256=f1XUpqi5dkTL3GWvYRUGlSwtj2IxU1q745T4Fxo7Tn4,370
47
- primitive/utils/shell.py,sha256=-7UjQaBqSGHzEEyX8pNjeYFFP0P3lVnDV0OkgPz1qHU,1050
48
- primitive/utils/verible.py,sha256=r7c_hfqvL0UicMmIzK3Cy_BfZI1ZpcfBeLqKEWFWqJo,2252
49
- primitive-0.1.58.dist-info/METADATA,sha256=3QDuLyoZeKRlghEHBplLVLthic-a3o64edGzI3XHmzE,3782
50
- primitive-0.1.58.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
51
- primitive-0.1.58.dist-info/entry_points.txt,sha256=p1K8DMCWka5FqLlqP1sPek5Uovy9jq8u51gUsP-z334,48
52
- primitive-0.1.58.dist-info/licenses/LICENSE.txt,sha256=B8kmQMJ2sxYygjCLBk770uacaMci4mPSoJJ8WoDBY_c,1098
53
- primitive-0.1.58.dist-info/RECORD,,