sumo-wrapper-python 1.4.0__py3-none-any.whl → 1.6.0__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.
@@ -99,6 +99,9 @@ class AuthProvider:
99
99
  get_token_path(self._resource_id, ".sharedkey", case_uuid)
100
100
  )
101
101
 
102
+ def delete_token(self):
103
+ return False
104
+
102
105
  pass
103
106
 
104
107
 
@@ -322,8 +325,8 @@ class AuthProviderDeviceCode(AuthProvider):
322
325
  if "error" in flow:
323
326
  print(
324
327
  "\n\n \033[31m"
325
- + "Failed to initiate device-code login. Err: %s"
326
- + "\033[0m" % json.dumps(flow, indent=4)
328
+ + "Failed to initiate device-code login. Err: %s\033[0m"
329
+ % json.dumps(flow, indent=4)
327
330
  )
328
331
  return
329
332
  flow["expires_at"] = (
@@ -400,9 +403,10 @@ class AuthProviderSumoToken(AuthProvider):
400
403
  def __init__(self, resource_id, case_uuid=None):
401
404
  super().__init__(resource_id)
402
405
  protect_token_cache(resource_id, ".sharedkey", case_uuid)
403
- token_path = get_token_path(resource_id, ".sharedkey", case_uuid)
404
- with open(token_path, "r") as f:
406
+ self.token_path = get_token_path(resource_id, ".sharedkey", case_uuid)
407
+ with open(self.token_path, "r") as f:
405
408
  self._token = f.readline().strip()
409
+
406
410
  return
407
411
 
408
412
  def get_token(self):
@@ -411,6 +415,11 @@ class AuthProviderSumoToken(AuthProvider):
411
415
  def get_authorization(self):
412
416
  return {"X-SUMO-Token": self._token}
413
417
 
418
+ def delete_token(self):
419
+ if os.path.exists(self.token_path):
420
+ os.unlink(self.token_path)
421
+ return True
422
+
414
423
 
415
424
  @tn.retry(
416
425
  retry=tn.retry_if_exception(_maybe_nfs_exception),
@@ -4,11 +4,13 @@ from functools import wraps
4
4
 
5
5
  def raise_for_status(func):
6
6
  @wraps(func)
7
- def wrapper(*args, **kwargs):
7
+ def wrapper(self, *args, **kwargs):
8
8
  # FIXME: in newer versions of httpx, raise_for_status() is chainable,
9
9
  # so we could simply write
10
10
  # return func(*args, **kwargs).raise_for_status()
11
- response = func(*args, **kwargs)
11
+ response = func(self, *args, **kwargs)
12
+ if response.status_code == 401:
13
+ self._handle_invalid_shared_key()
12
14
  response.raise_for_status()
13
15
  return response
14
16
 
@@ -17,11 +19,13 @@ def raise_for_status(func):
17
19
 
18
20
  def raise_for_status_async(func):
19
21
  @wraps(func)
20
- async def wrapper(*args, **kwargs):
22
+ async def wrapper(self, *args, **kwargs):
21
23
  # FIXME: in newer versions of httpx, raise_for_status() is chainable,
22
24
  # so we could simply write
23
25
  # return func(*args, **kwargs).raise_for_status()
24
- response = await func(*args, **kwargs)
26
+ response = await func(self, *args, **kwargs)
27
+ if response.status_code == 401:
28
+ self._handle_invalid_shared_key()
25
29
  response.raise_for_status()
26
30
  return response
27
31
 
sumo/wrapper/_version.py CHANGED
@@ -1,5 +1,6 @@
1
- # file generated by setuptools-scm
1
+ # file generated by vcs-versioning
2
2
  # don't change, don't track in version control
3
+ from __future__ import annotations
3
4
 
4
5
  __all__ = [
5
6
  "__version__",
@@ -10,25 +11,14 @@ __all__ = [
10
11
  "commit_id",
11
12
  ]
12
13
 
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
14
  version: str
25
15
  __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
30
20
 
31
- __version__ = version = '1.4.0'
32
- __version_tuple__ = version_tuple = (1, 4, 0)
21
+ __version__ = version = '1.6.0'
22
+ __version_tuple__ = version_tuple = (1, 6, 0)
33
23
 
34
24
  __commit_id__ = commit_id = None
sumo/wrapper/login.py CHANGED
@@ -8,6 +8,8 @@ logger.setLevel(level="CRITICAL")
8
8
 
9
9
  modes = ["interactive", "devicecode", "silent"]
10
10
 
11
+ fmu_sumo_uploader_client_id = "a65dc4cc-3dec-43df-9599-e66d3abc4dca"
12
+
11
13
 
12
14
  def get_parser() -> ArgumentParser:
13
15
  parser = ArgumentParser(description="Login to Sumo on azure")
@@ -47,6 +49,16 @@ def get_parser() -> ArgumentParser:
47
49
  help="Print access token",
48
50
  )
49
51
 
52
+ parser.add_argument(
53
+ "-u",
54
+ "--uploader",
55
+ dest="client_id",
56
+ action="store_const",
57
+ const=fmu_sumo_uploader_client_id,
58
+ default=None,
59
+ help="Use fmu-sumo-uploader client registration",
60
+ )
61
+
50
62
  return parser
51
63
 
52
64
 
@@ -54,6 +66,7 @@ def main():
54
66
  args = get_parser().parse_args()
55
67
  logger.setLevel(level=args.verbosity)
56
68
  env = args.env
69
+ client_id = args.client_id
57
70
  mode = args.mode
58
71
  is_interactive = mode == "interactive"
59
72
  is_devicecode = mode == "devicecode"
@@ -71,6 +84,7 @@ def main():
71
84
  env,
72
85
  interactive=is_interactive,
73
86
  devicecode=is_devicecode,
87
+ client_id=client_id,
74
88
  )
75
89
  token = sumo.authenticate()
76
90
 
@@ -208,6 +208,13 @@ class SumoClient:
208
208
  self._retry_strategy,
209
209
  )
210
210
 
211
+ def _handle_invalid_shared_key(self):
212
+ """Handle the invalid shared key by deleting it."""
213
+ if self.auth.delete_token():
214
+ print(
215
+ "Invalid shared key detected and deleted, run again to reset automatically"
216
+ )
217
+
211
218
  @raise_for_status
212
219
  def get(self, path: str, params: Optional[Dict] = None) -> httpx.Response:
213
220
  """Performs a GET-request to the Sumo API.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sumo-wrapper-python
3
- Version: 1.4.0
3
+ Version: 1.6.0
4
4
  Summary: Python wrapper for the Sumo API
5
5
  Author: Equinor
6
6
  License: Apache License
@@ -0,0 +1,16 @@
1
+ sumo/__init__.py,sha256=ftS-xRPSH-vU7fIHlnZQaCTWbNvs4owJivNW65kzsIM,85
2
+ sumo/wrapper/__init__.py,sha256=JK6iMAy2Fdrc7iaIHTn60fHPdRvsgNjZwWD6DJtGUYQ,235
3
+ sumo/wrapper/_auth_provider.py,sha256=XO2WcEJjQuXsDhFZ3wplOL_plxNdAqk2yw2jzv3iLSQ,16660
4
+ sumo/wrapper/_blob_client.py,sha256=SyfyFZ1hHVWKU4lmgUqSjl5TaK_OJNQ__0wDETrp-ag,1623
5
+ sumo/wrapper/_decorators.py,sha256=ZwyrWkfAXiGNSgYsQSEXA13D-WIQM2XPf0v2z9N8HyQ,1002
6
+ sumo/wrapper/_logging.py,sha256=WAGrjPmK2_JC9w1IxT5onq1iEAreEsyzmm95pXBe0dA,1074
7
+ sumo/wrapper/_retry_strategy.py,sha256=JSXy-ki5vWI_N4D52LpK9EoAmPrnT3H6OG0aBLsJRMk,2525
8
+ sumo/wrapper/_version.py,sha256=1J23hr68olyCiSnbHNYm6VGnkzB4hDCEmJzkxBTNSWo,520
9
+ sumo/wrapper/login.py,sha256=PtpQ5Qi8Gm1N0hMnE79Je4QvQ8JMuKqa46TwZgjHRnM,2328
10
+ sumo/wrapper/sumo_client.py,sha256=W1s-ENTRXHgP7GPocuJu1KSpdAzA7bGecS9lQt5T-W0,23028
11
+ sumo_wrapper_python-1.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
12
+ sumo_wrapper_python-1.6.0.dist-info/METADATA,sha256=EUIXN978Z2yuKBTQcOO2dTK1ogVFpnfYozboqDxFww0,14615
13
+ sumo_wrapper_python-1.6.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
14
+ sumo_wrapper_python-1.6.0.dist-info/entry_points.txt,sha256=V_vGky2C3He5vohJAxnBdvpt_fqfUDFj5irUm9HtoFc,55
15
+ sumo_wrapper_python-1.6.0.dist-info/top_level.txt,sha256=rLbKyH9rWgCj3PoLeR7fvC5X8vCaUc5LF8-Y_GBWZL0,5
16
+ sumo_wrapper_python-1.6.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.0)
2
+ Generator: setuptools (82.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,16 +0,0 @@
1
- sumo/__init__.py,sha256=ftS-xRPSH-vU7fIHlnZQaCTWbNvs4owJivNW65kzsIM,85
2
- sumo/wrapper/__init__.py,sha256=JK6iMAy2Fdrc7iaIHTn60fHPdRvsgNjZwWD6DJtGUYQ,235
3
- sumo/wrapper/_auth_provider.py,sha256=du15SjkJ7eDEITbAJXdx6y1L4RALpSpsDrw9zE9E3fI,16472
4
- sumo/wrapper/_blob_client.py,sha256=SyfyFZ1hHVWKU4lmgUqSjl5TaK_OJNQ__0wDETrp-ag,1623
5
- sumo/wrapper/_decorators.py,sha256=3IEi6GXVkkDACHoo8dOeDoBtZh5TlJ6Tw0qlpOVHqLQ,806
6
- sumo/wrapper/_logging.py,sha256=WAGrjPmK2_JC9w1IxT5onq1iEAreEsyzmm95pXBe0dA,1074
7
- sumo/wrapper/_retry_strategy.py,sha256=JSXy-ki5vWI_N4D52LpK9EoAmPrnT3H6OG0aBLsJRMk,2525
8
- sumo/wrapper/_version.py,sha256=qX8_mGjWClM0QeMyVAByaVXEA4Pk87fxkFSMEQx9-KM,704
9
- sumo/wrapper/login.py,sha256=Bp5IgSrsgjWcgOQIQIQ5aJrCBWdK3khS-CnTmB63Rjk,1951
10
- sumo/wrapper/sumo_client.py,sha256=oGck7xvDwebdcwiygck91_oIiX6VVLjyrDK46sxGEYY,22763
11
- sumo_wrapper_python-1.4.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
12
- sumo_wrapper_python-1.4.0.dist-info/METADATA,sha256=ENzPCU_6Mr488nu2rXQzUM0eyPJjyrJ5s8RZlyZGvpU,14615
13
- sumo_wrapper_python-1.4.0.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
14
- sumo_wrapper_python-1.4.0.dist-info/entry_points.txt,sha256=V_vGky2C3He5vohJAxnBdvpt_fqfUDFj5irUm9HtoFc,55
15
- sumo_wrapper_python-1.4.0.dist-info/top_level.txt,sha256=rLbKyH9rWgCj3PoLeR7fvC5X8vCaUc5LF8-Y_GBWZL0,5
16
- sumo_wrapper_python-1.4.0.dist-info/RECORD,,