Skip to content

Commit 5922f9a

Browse files
authored
Merge pull request #67 from equinor/219935-callsumoapi-to-sumoclient
Added blob_client for uploading blob
2 parents f6e6114 + f098f8a commit 5922f9a

3 files changed

Lines changed: 47 additions & 19 deletions

File tree

src/sumo/wrapper/_blob_client.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import requests
2+
from ._request_error import raise_request_error_exception
3+
4+
class BlobClient:
5+
6+
def upload_blob(self, blob, url):
7+
headers = {
8+
"Content-Type": "application/octet-stream",
9+
"Content-Length": str(len(blob)),
10+
"x-ms-blob-type": "BlockBlob",
11+
}
12+
13+
try:
14+
response = requests.put(url, data=blob, headers=headers)
15+
except requests.exceptions.ProxyError as err:
16+
raise_request_error_exception(503, err)
17+
18+
if not response.ok:
19+
raise_request_error_exception(response.status_code, response.text)
20+
21+
return response

src/sumo/wrapper/_request_error.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,15 @@ def __init__(self, code, message):
2929

3030
def __str__(self):
3131
return f'Fatal Request Error with status code {self.code} and text {self.message}.'
32+
33+
def raise_request_error_exception(code, message):
34+
"""
35+
Raise the proper authentication error according to the code received from sumo.
36+
"""
37+
38+
if 503 <= code <= 504 or code == 404 or code == 500:
39+
raise TransientError(code, message)
40+
elif 401 <= code <= 403:
41+
raise AuthenticationError(code, message)
42+
else:
43+
raise PermanentError(code, message)

src/sumo/wrapper/_sumo_client.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
from .config import APP_REGISTRATION, TENANT_ID
66
from ._new_auth import NewAuth
7-
from ._request_error import AuthenticationError, TransientError, PermanentError
7+
from ._request_error import raise_request_error_exception
8+
from ._blob_client import BlobClient
89

910
class SumoClient:
1011
def __init__(
@@ -19,6 +20,7 @@ def __init__(
1920
self.access_token = None
2021
self.access_token_expires = None
2122
self.refresh_token = None
23+
self._blob_client = BlobClient()
2224

2325
if token:
2426
payload = self.__decode_token(token)
@@ -43,6 +45,11 @@ def __init__(
4345
self.base_url = f"https://main-sumo-{env}.radix.equinor.com/api/v1"
4446

4547

48+
@property
49+
def blob_client(self):
50+
return self._blob_client
51+
52+
4653
def __decode_token(self, token):
4754
try:
4855
payload = jwt.decode(token, options={"verify_signature": False})
@@ -85,7 +92,7 @@ def get(self, path, **params):
8592
)
8693

8794
if not response.ok:
88-
self._raise_request_error_exception(
95+
raise_request_error_exception(
8996
response.status_code, response.text)
9097

9198
if "/blob" in path:
@@ -116,10 +123,10 @@ def post(self, path, blob=None, json=None):
116123
headers=headers
117124
)
118125
except requests.exceptions.ProxyError as err:
119-
self._raise_request_error_exception(503, err)
126+
raise_request_error_exception(503, err)
120127

121128
if not response.ok:
122-
self._raise_request_error_exception(
129+
raise_request_error_exception(
123130
response.status_code, response.text)
124131

125132
return response
@@ -147,10 +154,10 @@ def put(self, path, blob=None, json=None):
147154
headers=headers
148155
)
149156
except requests.exceptions.ProxyError as err:
150-
self. _raise_request_error_exception(503, err)
157+
raise_request_error_exception(503, err)
151158

152159
if not response.ok:
153-
self._raise_request_error_exception(
160+
raise_request_error_exception(
154161
response.status_code, response.text)
155162

156163
return response
@@ -166,19 +173,7 @@ def delete(self, path):
166173
response = requests.delete(f'{self.base_url}{path}', headers=headers)
167174

168175
if not response.ok:
169-
self._raise_request_error_exception(
176+
raise_request_error_exception(
170177
response.status_code, response.text)
171178

172179
return response.json()
173-
174-
def _raise_request_error_exception(self, code, message):
175-
"""
176-
Raise the proper authentication error according to the code received from sumo.
177-
"""
178-
179-
if 503 <= code <= 504 or code == 404 or code == 500:
180-
raise TransientError(code, message)
181-
elif 401 <= code <= 403:
182-
raise AuthenticationError(code, message)
183-
else:
184-
raise PermanentError(code, message)

0 commit comments

Comments
 (0)