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
primitive/jobs/actions.py CHANGED
@@ -1,9 +1,18 @@
1
1
  from typing import List, Optional
2
- from gql import gql
3
2
 
3
+ from gql import gql
4
4
 
5
5
  from primitive.utils.actions import BaseAction
6
+
6
7
  from ..utils.auth import guard
8
+ from .graphql.mutations import job_run_update_mutation
9
+ from .graphql.queries import (
10
+ github_app_token_for_job_run_query,
11
+ job_run_query,
12
+ job_run_status_query,
13
+ job_runs_query,
14
+ jobs_query,
15
+ )
7
16
 
8
17
 
9
18
  class Jobs(BaseAction):
@@ -17,52 +26,7 @@ class Jobs(BaseAction):
17
26
  first: Optional[int] = 1,
18
27
  last: Optional[int] = None,
19
28
  ):
20
- query = gql(
21
- """
22
- fragment PageInfoFragment on PageInfo {
23
- hasNextPage
24
- hasPreviousPage
25
- startCursor
26
- endCursor
27
- }
28
-
29
- fragment JobFragment on Job {
30
- id
31
- pk
32
- slug
33
- name
34
- createdAt
35
- updatedAt
36
- }
37
-
38
- query jobs(
39
- $before: String
40
- $after: String
41
- $first: Int
42
- $last: Int
43
- $filters: JobFilters
44
- ) {
45
- jobs(
46
- before: $before
47
- after: $after
48
- first: $first
49
- last: $last
50
- filters: $filters
51
- ) {
52
- totalCount
53
- pageInfo {
54
- ...PageInfoFragment
55
- }
56
- edges {
57
- cursor
58
- node {
59
- ...JobFragment
60
- }
61
- }
62
- }
63
- }
64
- """
65
- )
29
+ query = gql(jobs_query)
66
30
 
67
31
  filters = {}
68
32
  if organization_id:
@@ -101,73 +65,7 @@ class Jobs(BaseAction):
101
65
  first: Optional[int] = 1,
102
66
  last: Optional[int] = None,
103
67
  ):
104
- query = gql(
105
- """
106
- fragment PageInfoFragment on PageInfo {
107
- hasNextPage
108
- hasPreviousPage
109
- startCursor
110
- endCursor
111
- }
112
-
113
- fragment JobRunFragment on JobRun {
114
- id
115
- pk
116
- createdAt
117
- updatedAt
118
- completedAt
119
- startedAt
120
- status
121
- conclusion
122
- job {
123
- id
124
- pk
125
- slug
126
- name
127
- createdAt
128
- updatedAt
129
- }
130
- jobSettings {
131
- containerArgs
132
- rootDirectory
133
- }
134
- gitCommit {
135
- sha
136
- branch
137
- repoFullName
138
- }
139
- }
140
-
141
- query jobRuns(
142
- $before: String
143
- $after: String
144
- $first: Int
145
- $last: Int
146
- $filters: JobRunFilters
147
- $order: JobRunOrder
148
- ) {
149
- jobRuns(
150
- before: $before
151
- after: $after
152
- first: $first
153
- last: $last
154
- filters: $filters
155
- order: $order
156
- ) {
157
- totalCount
158
- pageInfo {
159
- ...PageInfoFragment
160
- }
161
- edges {
162
- cursor
163
- node {
164
- ...JobRunFragment
165
- }
166
- }
167
- }
168
- }
169
- """
170
- )
68
+ query = gql(job_runs_query)
171
69
 
172
70
  filters = {}
173
71
  if organization_id:
@@ -194,50 +92,18 @@ query jobRuns(
194
92
  },
195
93
  }
196
94
 
197
- result = self.primitive.session.execute(query, variable_values=variables)
95
+ result = self.primitive.session.execute(
96
+ query, variable_values=variables, get_execution_result=True
97
+ )
198
98
  return result
199
99
 
200
100
  @guard
201
101
  def get_job_run(self, id: str):
202
- query = gql(
203
- """
204
- fragment JobRunFragment on JobRun {
205
- id
206
- pk
207
- createdAt
208
- updatedAt
209
- completedAt
210
- startedAt
211
- status
212
- conclusion
213
- job {
214
- id
215
- pk
216
- slug
217
- name
218
- createdAt
219
- updatedAt
220
- }
221
- gitCommit {
222
- sha
223
- branch
224
- repoFullName
225
- }
226
- jobSettings {
227
- containerArgs
228
- rootDirectory
229
- }
230
- }
231
-
232
- query jobRun($id: GlobalID!) {
233
- jobRun(id: $id) {
234
- ...JobRunFragment
235
- }
236
- }
237
- """
238
- )
102
+ query = gql(job_run_query)
239
103
  variables = {"id": id}
240
- result = self.primitive.session.execute(query, variable_values=variables)
104
+ result = self.primitive.session.execute(
105
+ query, variable_values=variables, get_execution_result=True
106
+ )
241
107
  return result
242
108
 
243
109
  @guard
@@ -248,19 +114,7 @@ query jobRuns(
248
114
  conclusion: str = None,
249
115
  file_ids: Optional[List[str]] = [],
250
116
  ):
251
- mutation = gql(
252
- """
253
- mutation jobRunUpdate($input: JobRunUpdateInput!) {
254
- jobRunUpdate(input: $input) {
255
- ... on JobRun {
256
- id
257
- status
258
- conclusion
259
- }
260
- }
261
- }
262
- """
263
- )
117
+ mutation = gql(job_run_update_mutation)
264
118
  input = {"id": id}
265
119
  if status:
266
120
  input["status"] = status
@@ -269,21 +123,19 @@ query jobRuns(
269
123
  if file_ids and len(file_ids) > 0:
270
124
  input["files"] = file_ids
271
125
  variables = {"input": input}
272
- result = self.primitive.session.execute(mutation, variable_values=variables)
126
+ result = self.primitive.session.execute(
127
+ mutation, variable_values=variables, get_execution_result=True
128
+ )
273
129
  return result
274
130
 
275
131
  @guard
276
132
  def github_access_token_for_job_run(self, job_run_id: str):
277
- query = gql(
278
- """
279
- query ghAppTokenForJobRun($jobRunId: GlobalID!) {
280
- ghAppTokenForJobRun(jobRunId: $jobRunId)
281
- }
282
- """
283
- )
133
+ query = gql(github_app_token_for_job_run_query)
284
134
  variables = {"jobRunId": job_run_id}
285
- result = self.primitive.session.execute(query, variable_values=variables)
286
- return result["ghAppTokenForJobRun"]
135
+ result = self.primitive.session.execute(
136
+ query, variable_values=variables, get_execution_result=True
137
+ )
138
+ return result.data["ghAppTokenForJobRun"]
287
139
 
288
140
  def get_latest_job_run_for_job(
289
141
  self, job_slug: Optional[str] = None, job_id: Optional[str] = None
@@ -300,32 +152,11 @@ query ghAppTokenForJobRun($jobRunId: GlobalID!) {
300
152
  ]
301
153
  return job_run
302
154
 
303
- def job_run_start(
304
- self,
305
- job_slug: str,
306
- job_id: str,
307
- ):
308
- if not job_slug and not job_id:
309
- raise ValueError("job_slug or job_id is required")
310
-
311
- self.get_jobs(slug=job_slug)
312
-
313
155
  @guard
314
156
  def get_job_status(self, id: str):
315
- query = gql(
316
- """
317
- fragment JobRunFragment on JobRun {
318
- id
319
- status
320
- }
321
-
322
- query jobRun($id: GlobalID!) {
323
- jobRun(id: $id) {
324
- ...JobRunFragment
325
- }
326
- }
327
- """
328
- )
157
+ query = gql(job_run_status_query)
329
158
  variables = {"id": id}
330
- result = self.primitive.session.execute(query, variable_values=variables)
159
+ result = self.primitive.session.execute(
160
+ query, variable_values=variables, get_execution_result=True
161
+ )
331
162
  return result
File without changes
@@ -0,0 +1,47 @@
1
+ job_fragment = """
2
+ fragment JobFragment on Job {
3
+ id
4
+ pk
5
+ slug
6
+ name
7
+ createdAt
8
+ updatedAt
9
+ }
10
+ """
11
+
12
+ job_run_fragment = """
13
+ fragment JobRunFragment on JobRun {
14
+ id
15
+ pk
16
+ createdAt
17
+ updatedAt
18
+ completedAt
19
+ startedAt
20
+ status
21
+ conclusion
22
+ job {
23
+ id
24
+ pk
25
+ slug
26
+ name
27
+ createdAt
28
+ updatedAt
29
+ }
30
+ jobSettings {
31
+ containerArgs
32
+ rootDirectory
33
+ }
34
+ gitCommit {
35
+ sha
36
+ branch
37
+ repoFullName
38
+ }
39
+ }
40
+ """
41
+
42
+ job_run_status_fragment = """
43
+ fragment JobRunStatusFragment on JobRun {
44
+ id
45
+ status
46
+ }
47
+ """
@@ -0,0 +1,11 @@
1
+ job_run_update_mutation = """
2
+ mutation jobRunUpdate($input: JobRunUpdateInput!) {
3
+ jobRunUpdate(input: $input) {
4
+ ... on JobRun {
5
+ id
6
+ status
7
+ conclusion
8
+ }
9
+ }
10
+ }
11
+ """
@@ -0,0 +1,100 @@
1
+ from primitive.graphql.utility_fragments import page_info_fragment
2
+
3
+ from .fragments import job_fragment, job_run_fragment, job_run_status_fragment
4
+
5
+ jobs_query = (
6
+ page_info_fragment
7
+ + job_fragment
8
+ + """
9
+ query jobs(
10
+ $before: String
11
+ $after: String
12
+ $first: Int
13
+ $last: Int
14
+ $filters: JobFilters
15
+ ) {
16
+ jobs(
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
+ ...JobFragment
31
+ }
32
+ }
33
+ }
34
+ }
35
+ """
36
+ )
37
+
38
+
39
+ job_runs_query = (
40
+ page_info_fragment
41
+ + job_run_fragment
42
+ + """
43
+ query jobRuns(
44
+ $before: String
45
+ $after: String
46
+ $first: Int
47
+ $last: Int
48
+ $filters: JobRunFilters
49
+ $order: JobRunOrder
50
+ ) {
51
+ jobRuns(
52
+ before: $before
53
+ after: $after
54
+ first: $first
55
+ last: $last
56
+ filters: $filters
57
+ order: $order
58
+ ) {
59
+ totalCount
60
+ pageInfo {
61
+ ...PageInfoFragment
62
+ }
63
+ edges {
64
+ cursor
65
+ node {
66
+ ...JobRunFragment
67
+ }
68
+ }
69
+ }
70
+ }
71
+ """
72
+ )
73
+
74
+ job_run_query = (
75
+ job_run_fragment
76
+ + """
77
+ query jobRun($id: GlobalID!) {
78
+ jobRun(id: $id) {
79
+ ...JobRunFragment
80
+ }
81
+ }
82
+ """
83
+ )
84
+
85
+ github_app_token_for_job_run_query = """
86
+ query ghAppTokenForJobRun($jobRunId: GlobalID!) {
87
+ ghAppTokenForJobRun(jobRunId: $jobRunId)
88
+ }
89
+ """
90
+
91
+ job_run_status_query = (
92
+ job_run_status_fragment
93
+ + """
94
+ query jobRun($id: GlobalID!) {
95
+ jobRun(id: $id) {
96
+ ...JobRunStatusFragment
97
+ }
98
+ }
99
+ """
100
+ )
File without changes
File without changes
@@ -1,9 +1,11 @@
1
1
  from typing import Optional
2
- from gql import gql
3
2
 
3
+ from gql import gql
4
4
 
5
5
  from primitive.utils.actions import BaseAction
6
+
6
7
  from ..utils.auth import guard
8
+ from .graphql.queries import organizations_query
7
9
 
8
10
 
9
11
  class Organizations(BaseAction):
@@ -15,54 +17,7 @@ class Organizations(BaseAction):
15
17
  first: Optional[int] = 1,
16
18
  last: Optional[int] = None,
17
19
  ):
18
- query = gql(
19
- """
20
- fragment PageInfoFragment on PageInfo {
21
- hasNextPage
22
- hasPreviousPage
23
- startCursor
24
- endCursor
25
- }
26
-
27
- fragment OrganizationFragment on Organization {
28
- id
29
- pk
30
- slug
31
- name
32
- createdAt
33
- updatedAt
34
- }
35
-
36
- query organizations(
37
- $before: String
38
- $after: String
39
- $first: Int
40
- $last: Int
41
- $filters: OrganizationFilters
42
- $order: OrganizationOrder
43
- ) {
44
- organizations(
45
- before: $before
46
- after: $after
47
- first: $first
48
- last: $last
49
- filters: $filters
50
- order: $order
51
- ) {
52
- totalCount
53
- pageInfo {
54
- ...PageInfoFragment
55
- }
56
- edges {
57
- cursor
58
- node {
59
- ...OrganizationFragment
60
- }
61
- }
62
- }
63
- }
64
- """
65
- )
20
+ query = gql(organizations_query)
66
21
 
67
22
  filters = {}
68
23
  if organization_id:
File without changes
@@ -0,0 +1,10 @@
1
+ organization_fragment = """
2
+ fragment OrganizationFragment on Organization {
3
+ id
4
+ pk
5
+ slug
6
+ name
7
+ createdAt
8
+ updatedAt
9
+ }
10
+ """
File without changes
@@ -0,0 +1,38 @@
1
+ from primitive.graphql.utility_fragments import page_info_fragment
2
+
3
+ from .fragments import organization_fragment
4
+
5
+ organizations_query = (
6
+ page_info_fragment
7
+ + organization_fragment
8
+ + """
9
+ query organizations(
10
+ $before: String
11
+ $after: String
12
+ $first: Int
13
+ $last: Int
14
+ $filters: OrganizationFilters
15
+ $order: OrganizationOrder
16
+ ) {
17
+ organizations(
18
+ before: $before
19
+ after: $after
20
+ first: $first
21
+ last: $last
22
+ filters: $filters
23
+ order: $order
24
+ ) {
25
+ totalCount
26
+ pageInfo {
27
+ ...PageInfoFragment
28
+ }
29
+ edges {
30
+ cursor
31
+ node {
32
+ ...OrganizationFragment
33
+ }
34
+ }
35
+ }
36
+ }
37
+ """
38
+ )
@@ -1,8 +1,11 @@
1
+ from typing import Optional
2
+
1
3
  from gql import gql
2
4
 
3
- from typing import Optional
4
5
  from primitive.utils.actions import BaseAction
6
+
5
7
  from ..utils.auth import guard
8
+ from .graphql.queries import projects_query
6
9
 
7
10
 
8
11
  class Projects(BaseAction):
@@ -14,52 +17,7 @@ class Projects(BaseAction):
14
17
  first: Optional[int] = 1,
15
18
  last: Optional[int] = None,
16
19
  ):
17
- query = gql(
18
- """
19
- fragment PageInfoFragment on PageInfo {
20
- hasNextPage
21
- hasPreviousPage
22
- startCursor
23
- endCursor
24
- }
25
-
26
- fragment ProjectFragment on Project {
27
- id
28
- pk
29
- slug
30
- name
31
- createdAt
32
- updatedAt
33
- }
34
-
35
- query projects(
36
- $before: String
37
- $after: String
38
- $first: Int
39
- $last: Int
40
- $filters: ProjectFilters
41
- ) {
42
- projects(
43
- before: $before
44
- after: $after
45
- first: $first
46
- last: $last
47
- filters: $filters
48
- ) {
49
- totalCount
50
- pageInfo {
51
- ...PageInfoFragment
52
- }
53
- edges {
54
- cursor
55
- node {
56
- ...ProjectFragment
57
- }
58
- }
59
- }
60
- }
61
- """
62
- )
20
+ query = gql(projects_query)
63
21
 
64
22
  filters = {}
65
23
  if organization_id:
File without changes
@@ -0,0 +1,10 @@
1
+ project_fragment = """
2
+ fragment ProjectFragment on Project {
3
+ id
4
+ pk
5
+ slug
6
+ name
7
+ createdAt
8
+ updatedAt
9
+ }
10
+ """
File without changes
@@ -0,0 +1,36 @@
1
+ from primitive.graphql.utility_fragments import page_info_fragment
2
+
3
+ from .fragments import project_fragment
4
+
5
+ projects_query = (
6
+ page_info_fragment
7
+ + project_fragment
8
+ + """
9
+ query projects(
10
+ $before: String
11
+ $after: String
12
+ $first: Int
13
+ $last: Int
14
+ $filters: ProjectFilters
15
+ ) {
16
+ projects(
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
+ ...ProjectFragment
31
+ }
32
+ }
33
+ }
34
+ }
35
+ """
36
+ )
File without changes