runcloud-sdk 0.7.2__tar.gz → 0.7.4__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runcloud-sdk
3
- Version: 0.7.2
3
+ Version: 0.7.4
4
4
  Summary: Python SDK for run.cloud, including sandbox-provider compatibility adapters
5
5
  Author: Newly
6
6
  License-Expression: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runcloud-sdk"
3
- version = "0.7.2"
3
+ version = "0.7.4"
4
4
  description = "Python SDK for run.cloud, including sandbox-provider compatibility adapters"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -15,7 +15,7 @@ from typing import Any, Callable, Optional, Union
15
15
 
16
16
  Transport = Callable[[str, str, Any], Any]
17
17
  DEFAULT_API_URL = "https://api.run.cloud"
18
- USER_AGENT = "runcloud-python/0.7.2"
18
+ USER_AGENT = "runcloud-python/0.7.4"
19
19
 
20
20
 
21
21
  class RunCloudError(Exception):
@@ -125,15 +125,17 @@ class Client:
125
125
  if self._transport is not None:
126
126
  return self._transport(method, path, body)
127
127
  data = json.dumps(body).encode() if body is not None else None
128
+ headers = {
129
+ "Authorization": "Bearer " + self.api_key,
130
+ "User-Agent": USER_AGENT,
131
+ }
132
+ if body is not None:
133
+ headers["Content-Type"] = "application/json"
128
134
  request = urllib.request.Request(
129
135
  self.api_url + path,
130
136
  data=data,
131
137
  method=method,
132
- headers={
133
- "Authorization": "Bearer " + self.api_key,
134
- "Content-Type": "application/json",
135
- "User-Agent": USER_AGENT,
136
- },
138
+ headers=headers,
137
139
  )
138
140
  try:
139
141
  with urllib.request.urlopen(request, timeout=self.timeout) as response:
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import io
5
6
  from typing import Optional
6
7
 
7
8
  from runcloud.client import (
@@ -54,12 +55,8 @@ class Process:
54
55
  return self.returncode
55
56
 
56
57
 
57
- class _Reader:
58
- def __init__(self, value: str):
59
- self._value = value
60
-
61
- def read(self):
62
- return self._value
58
+ class _Reader(io.StringIO):
59
+ pass
63
60
 
64
61
 
65
62
  class App:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runcloud-sdk
3
- Version: 0.7.2
3
+ Version: 0.7.4
4
4
  Summary: Python SDK for run.cloud, including sandbox-provider compatibility adapters
5
5
  Author: Newly
6
6
  License-Expression: Apache-2.0
@@ -72,7 +72,12 @@ class SDKTests(unittest.TestCase):
72
72
 
73
73
  def test_compatibility_adapters_share_the_public_client(self):
74
74
  app = modal.App.lookup("compat", client=self.client)
75
- self.assertEqual(modal.Sandbox.create(app=app).exec("echo ok").wait(), 0)
75
+ modal_sandbox = modal.Sandbox.create(app=app)
76
+ read_process = modal_sandbox.exec("echo ok")
77
+ self.assertEqual(read_process.stdout.read(), "ok\n")
78
+ self.assertEqual(read_process.wait(), 0)
79
+ iter_process = modal_sandbox.exec("echo ok")
80
+ self.assertEqual(list(iter_process.stdout), ["ok\n"])
76
81
  self.assertEqual(
77
82
  E2BSandbox.create(client=self.client).commands.run("echo ok").exit_code, 0
78
83
  )
@@ -99,7 +104,20 @@ class SDKTests(unittest.TestCase):
99
104
  Client(api_key="rc_live_test").request("GET", "/run-cloud/account")
100
105
 
101
106
  request = urlopen.call_args.args[0]
102
- self.assertEqual(request.get_header("User-agent"), "runcloud-python/0.7.2")
107
+ self.assertEqual(request.get_header("User-agent"), "runcloud-python/0.7.4")
108
+
109
+ def test_content_type_is_only_sent_with_a_json_body(self):
110
+ with patch(
111
+ "runcloud.client.urllib.request.urlopen",
112
+ return_value=Response(),
113
+ ) as urlopen:
114
+ client = Client(api_key="rc_live_test")
115
+ client.request("DELETE", "/run-cloud/sandboxes/sbx_test")
116
+ client.request("POST", "/run-cloud/sandboxes", {})
117
+
118
+ delete_request, post_request = (call.args[0] for call in urlopen.call_args_list)
119
+ self.assertIsNone(delete_request.get_header("Content-type"))
120
+ self.assertEqual(post_request.get_header("Content-type"), "application/json")
103
121
 
104
122
 
105
123
  class CredentialTests(unittest.TestCase):
File without changes
File without changes
File without changes