spaceforge 0.0.12__py3-none-any.whl → 0.0.14__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.
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.12'
32
- __version_tuple__ = version_tuple = (0, 0, 12)
31
+ __version__ = version = '0.0.14'
32
+ __version_tuple__ = version_tuple = (0, 0, 14)
33
33
 
34
34
  __commit_id__ = commit_id = None
spaceforge/cls.py CHANGED
@@ -145,7 +145,7 @@ class Webhook:
145
145
 
146
146
  name_prefix: str
147
147
  endpoint: str
148
- secretFromParameter: str
148
+ secretFromParameter: Optional[str] = optional_field
149
149
  labels: Optional[List[str]] = optional_field
150
150
 
151
151
 
@@ -202,4 +202,7 @@ if __name__ == "__main__":
202
202
 
203
203
  from pydantic import TypeAdapter
204
204
 
205
- print(json.dumps(TypeAdapter(PluginManifest).json_schema(), indent=2))
205
+ schema = TypeAdapter(PluginManifest).json_schema()
206
+ schema["$schema"] = "http://json-schema.org/draft-07/schema#"
207
+
208
+ print(json.dumps(schema, indent=2))
spaceforge/plugin.py CHANGED
@@ -43,6 +43,7 @@ class SpaceforgePlugin(ABC):
43
43
  self._api_enabled = bool(self._api_token and self.spacelift_domain)
44
44
  self._workspace_root = os.getcwd()
45
45
  self._spacelift_markdown_endpoint = None
46
+ self._markdown_endpoint_token = os.environ.get("SPACELIFT_API_TOKEN") or False
46
47
 
47
48
  # This should be the last thing we do in the constructor
48
49
  # because we set api_enabled to false if the domain is set up incorrectly.
@@ -109,6 +110,58 @@ class SpaceforgePlugin(ABC):
109
110
 
110
111
  return logger
111
112
 
113
+ def use_user_token(self, id: str, token: str) -> None:
114
+ headers = {
115
+ "Content-Type": "application/json",
116
+ "Authorization": f"Bearer {self._api_token}",
117
+ }
118
+
119
+ query = """
120
+ mutation requestApiKey($id: ID!, $secret: String!){
121
+ apiKeyUser(id: $id, secret: $secret){
122
+ jwt
123
+ }
124
+ }
125
+ """
126
+
127
+ data: Dict[str, Any] = {
128
+ "query": query,
129
+ "variables": {"id": id, "secret": token},
130
+ }
131
+
132
+ req = urllib.request.Request(
133
+ self.spacelift_domain, # type: ignore[arg-type]
134
+ json.dumps(data).encode("utf-8"),
135
+ headers,
136
+ )
137
+
138
+ self.logger.debug(f"Sending request to url: {self.spacelift_domain}")
139
+ try:
140
+ with urllib.request.urlopen(req) as response:
141
+ resp: Dict[str, Any] = json.loads(response.read().decode("utf-8"))
142
+ except urllib.error.HTTPError as e:
143
+ if hasattr(e, "read"):
144
+ resp = json.loads(e.read().decode("utf-8"))
145
+ else:
146
+ # We should not get here, but if we do re-raise the exception
147
+ self.logger.error(f"HTTP error occurred: ({e.code}) {e.reason} {e.msg}")
148
+ raise e
149
+
150
+ if "errors" in resp:
151
+ self.logger.error(f"Error: {resp['errors']}")
152
+ return
153
+
154
+ if (
155
+ "data" in resp
156
+ and "apiKeyUser" in resp["data"]
157
+ and "jwt" in resp["data"]["apiKeyUser"]
158
+ ):
159
+ self._api_token = resp["data"]["apiKeyUser"]["jwt"]
160
+ self._api_enabled = True
161
+ self.logger.debug("Successfully set user token for API calls.")
162
+ else:
163
+ self.logger.error(f"API call returned no data: {resp}")
164
+
112
165
  def get_available_hooks(self) -> List[str]:
113
166
  """
114
167
  Get list of hook methods available in this plugin.
@@ -256,13 +309,16 @@ class SpaceforgePlugin(ABC):
256
309
  self.logger.info(markdown)
257
310
  return True
258
311
 
259
- if self._spacelift_markdown_endpoint is None:
312
+ if (
313
+ self._spacelift_markdown_endpoint is None
314
+ or not self._markdown_endpoint_token
315
+ ):
260
316
  self.logger.error(
261
317
  'API is not enabled, please export "SPACELIFT_API_TOKEN" and "TF_VAR_spacelift_graphql_endpoint".'
262
318
  )
263
319
  return False
264
320
 
265
- headers = {"Authorization": f"Bearer {self._api_token}"}
321
+ headers = {"Authorization": f"Bearer {self._markdown_endpoint_token}"}
266
322
  body = {
267
323
  "plugin_name": self.__plugin_name__,
268
324
  }
spaceforge/schema.json CHANGED
@@ -260,8 +260,15 @@
260
260
  "type": "string"
261
261
  },
262
262
  "secretFromParameter": {
263
- "title": "Secretfromparameter",
264
- "type": "string"
263
+ "anyOf": [
264
+ {
265
+ "type": "string"
266
+ },
267
+ {
268
+ "type": "null"
269
+ }
270
+ ],
271
+ "title": "Secretfromparameter"
265
272
  },
266
273
  "labels": {
267
274
  "anyOf": [
@@ -280,8 +287,7 @@
280
287
  },
281
288
  "required": [
282
289
  "name_prefix",
283
- "endpoint",
284
- "secretFromParameter"
290
+ "endpoint"
285
291
  ],
286
292
  "title": "Webhook",
287
293
  "type": "object"
@@ -383,5 +389,6 @@
383
389
  "author"
384
390
  ],
385
391
  "title": "PluginManifest",
386
- "type": "object"
392
+ "type": "object",
393
+ "$schema": "http://json-schema.org/draft-07/schema#"
387
394
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spaceforge
3
- Version: 0.0.12
3
+ Version: 0.0.14
4
4
  Summary: A Python framework for building Spacelift plugins
5
5
  Home-page: https://github.com/spacelift-io/plugins
6
6
  Author: Spacelift
@@ -2,13 +2,13 @@ spaceforge/README.md,sha256=8o1Nuyasb4OxX3E7ZycyducOrR4J19bZcHrLvFeoFNg,7730
2
2
  spaceforge/__init__.py,sha256=TU-vvm15dK1ucixNW0V42eTT72x3_hmKSyxP4MC1Occ,589
3
3
  spaceforge/__main__.py,sha256=c3nAw4WBnHXIcfMlRV6Ja7r87pEhSeK-SAqiSYIasIY,643
4
4
  spaceforge/_version.py,sha256=RP_LfUd4ODnrfwn9nam8wB6bR3lM4VwmoRxK08Tkiiw,2155
5
- spaceforge/_version_scm.py,sha256=AZGfWDETy7COMkzrSothvXJ8vYrPI7kp7_Tcfcp9hUQ,706
6
- spaceforge/cls.py,sha256=lCGtlMv-rFFVnvfFaq36-GRqLiINswLD78amZigZo7I,6068
5
+ spaceforge/_version_scm.py,sha256=YDX9ERYoOeE60PulkdUCy2JxmS89Xb_igX2wwbidLMQ,706
6
+ spaceforge/cls.py,sha256=8jZ0noS-kIBQWHp7pWHOX6yzs5N30gIEm6-slWgBaKI,6182
7
7
  spaceforge/conftest.py,sha256=U-xCavCsgRAQXqflIIOMeq9pcGbeqRviUNkEXgZol8g,2141
8
8
  spaceforge/generator.py,sha256=7tt0zpqrD2pZsoVxQa0BfzBH1ZtGr6o3r_LmpBjrOJk,16739
9
- spaceforge/plugin.py,sha256=ZURpbGEVReNHw79cHGBeIAfLq0ewrMjhFdB0L8wh0y0,14109
9
+ spaceforge/plugin.py,sha256=fuATKzkkev2hNKWpQYMwJs1ZHgYKxEXGdlqHQ_wmpZ4,16057
10
10
  spaceforge/runner.py,sha256=aBQQLG8MFVrqCzM0X8HgERYbhLKbmlOHUPKjV7-xvpA,3163
11
- spaceforge/schema.json,sha256=scQyV71IlbB5kipAhc880n-PG-FH8BeVk9FWFoA3Wtw,10483
11
+ spaceforge/schema.json,sha256=F0STokM3YYT0xzcNdtnELZJJgpyi49mwk9Oj8ueD39s,10631
12
12
  spaceforge/test_cls.py,sha256=nXAgbnFnGdFxrtA7vNXiePjNUASuoYW-lEuQGx9WMGs,468
13
13
  spaceforge/test_generator.py,sha256=Nst3YVu_iZbFopH6ajjxCfqYrZvybteGbwMfZzjBFnI,32615
14
14
  spaceforge/test_generator_binaries.py,sha256=X_7pPLGE45eQt-Kv9_ku__LsyLgOvViHc_BvVpSCMp0,7263
@@ -25,9 +25,9 @@ spaceforge/test_runner_core.py,sha256=eNR9YOwJwv7LsMtNQ4WXXMPIW6RE_A7hUp4bCpzz1R
25
25
  spaceforge/test_runner_execution.py,sha256=BRlOApCmlpjE9YYvqHc8creSRu2vyPubzOCVXv-on0w,5335
26
26
  spaceforge/templates/binary_install.sh.j2,sha256=UjP_kAdvkkATKds2nqk4ouqLhuIfCgM_x0WQIl1hbIo,477
27
27
  spaceforge/templates/ensure_spaceforge_and_run.sh.j2,sha256=g5BldIEve0IkZ-mCzTXfB_rFvyWqUJqymRRaaMrpp0s,550
28
- spaceforge-0.0.12.dist-info/licenses/LICENSE,sha256=wyljRrfnWY2ggQKkSCg3Nw2hxwPMmupopaKs9Kpgys8,1065
29
- spaceforge-0.0.12.dist-info/METADATA,sha256=oLaAZN0ePJGD4OT6Hl78OAkc7fNb_58InpdqOQJg5to,16804
30
- spaceforge-0.0.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
- spaceforge-0.0.12.dist-info/entry_points.txt,sha256=qawuuKBSNTGg-njnQnhxxFldFvXYAPej6bF_f3iyQ48,56
32
- spaceforge-0.0.12.dist-info/top_level.txt,sha256=eVw-Lw4Th0oHM8Gx1Y8YetyNgbNbMBU00yWs-kwGeSs,11
33
- spaceforge-0.0.12.dist-info/RECORD,,
28
+ spaceforge-0.0.14.dist-info/licenses/LICENSE,sha256=wyljRrfnWY2ggQKkSCg3Nw2hxwPMmupopaKs9Kpgys8,1065
29
+ spaceforge-0.0.14.dist-info/METADATA,sha256=zT9cFLQOwMjkHyrXeUDN4a0Pm_elJI2dpMhrvWetjZc,16804
30
+ spaceforge-0.0.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
+ spaceforge-0.0.14.dist-info/entry_points.txt,sha256=qawuuKBSNTGg-njnQnhxxFldFvXYAPej6bF_f3iyQ48,56
32
+ spaceforge-0.0.14.dist-info/top_level.txt,sha256=eVw-Lw4Th0oHM8Gx1Y8YetyNgbNbMBU00yWs-kwGeSs,11
33
+ spaceforge-0.0.14.dist-info/RECORD,,