python-sdk-remote 0.0.110__tar.gz → 0.0.111__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.

Potentially problematic release.


This version of python-sdk-remote might be problematic. Click here for more details.

Files changed (20) hide show
  1. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/PKG-INFO +2 -2
  2. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/http_response.py +13 -6
  3. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/mini_logger.py +0 -1
  4. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/utilities.py +34 -7
  5. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/validate_environment.py +0 -1
  6. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote.egg-info/PKG-INFO +2 -2
  7. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/setup.py +2 -2
  8. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/README.md +0 -0
  9. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/pyproject.toml +0 -0
  10. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/__init__.py +0 -0
  11. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/constants.py +0 -0
  12. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/item.py +0 -0
  13. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/our_object.py +0 -0
  14. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/unified_json.py +0 -0
  15. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote/src/valid_json_versions.py +0 -0
  16. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote.egg-info/SOURCES.txt +0 -0
  17. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote.egg-info/dependency_links.txt +0 -0
  18. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote.egg-info/requires.txt +0 -0
  19. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/python_sdk_remote.egg-info/top_level.txt +0 -0
  20. {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.111}/setup.cfg +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.110
3
+ Version: 0.0.111
4
4
  Summary: PyPI Package for Circles Python SDK Local Python
5
5
  Home-page: https://github.com/circles-zone/python-sdk-remote-python-package
6
6
  Author: Circles
7
- Author-email: info@circles.life
7
+ Author-email: info@circles.ai
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Operating System :: OS Independent
@@ -1,6 +1,7 @@
1
1
  import json
2
- from typing import Any
2
+ import traceback
3
3
  from http import HTTPStatus
4
+ from typing import Any
4
5
 
5
6
  from .mini_logger import MiniLogger as logger
6
7
 
@@ -8,6 +9,7 @@ HEADERS_KEY = 'headers'
8
9
  AUTHORIZATION_KEY = 'authorization'
9
10
  AUTHORIZATION_PREFIX = 'Bearer '
10
11
 
12
+
11
13
  # TODO Align those methods with typescript-sdk https://github.com/circles-zone/typescript-sdk-remote-typescript-package/blob/dev/typescript-sdk/src/utils/index.ts
12
14
  # TODO Shall we create also createInternalServerErrorHttpResponse(), createOkHttpResponse() like we have in TypeScript?
13
15
 
@@ -17,15 +19,18 @@ def get_payload_dict_from_event(event: dict) -> dict:
17
19
  """Extracts params sent with payload"""
18
20
  return json.loads(event.get('body') or '{}')
19
21
 
22
+
20
23
  def get_path_parameters_dict_from_event(event: dict) -> dict:
21
24
  """Extracts params sent implicitly: `url/param?test=5` -> param
22
25
  (when the path is defined with /{param})"""
23
26
  return event.get('pathParameters') or {}
24
27
 
28
+
25
29
  def get_query_string_parameters_from_event(event: dict) -> dict:
26
30
  """Extracts params sent explicitly: `url/test?a=1&b=2` -> {'a': '1', 'b': '2'}"""
27
31
  return event.get("queryStringParameters") or {} # params sent with ?a=1&b=2
28
32
 
33
+
29
34
  def create_authorization_http_headers(user_jwt: str) -> dict:
30
35
  logger.start(object={"user_jwt": user_jwt})
31
36
  authorization_http_headers = {
@@ -55,13 +60,15 @@ def create_return_http_headers() -> dict:
55
60
  logger.end(object={"return_http_headers": return_http_headers})
56
61
  return return_http_headers
57
62
 
63
+
58
64
  def create_error_http_response(exception: Exception, status_code: HTTPStatus = HTTPStatus.BAD_REQUEST) -> dict:
59
65
  logger.start(object={"exception": exception})
60
66
  error_http_response = {
61
- "statusCode": status_code.value,
62
- "headers": create_return_http_headers(),
63
- "body": create_http_body({"error": str(exception)})
64
- }
67
+ "statusCode": status_code.value,
68
+ "headers": create_return_http_headers(),
69
+ "body": create_http_body({"error": str(exception)}),
70
+ "traceback": traceback.format_exc()
71
+ }
65
72
  logger.end(object={"error_http_response": error_http_response})
66
73
  return error_http_response
67
74
 
@@ -84,4 +91,4 @@ def create_http_body(body: Any) -> str:
84
91
  logger.start(object={"body": body})
85
92
  http_body = json.dumps(body)
86
93
  logger.end(object={"http_body": http_body})
87
- return http_body
94
+ return http_body
@@ -1,7 +1,6 @@
1
1
  import logging
2
2
  import os
3
3
  import sys
4
- from datetime import datetime
5
4
 
6
5
  LOGGER_MINIMUM_SEVERITY = os.getenv("LOGGER_MINIMUM_SEVERITY", "INFO").upper()
7
6
  # logging expects NOTSET/DEBUG/INFO/WARNING/ERROR/FATAL/CRITICAL
@@ -1,13 +1,15 @@
1
+ import json
1
2
  import os
2
3
  from datetime import date, datetime, time, timedelta
4
+ from urllib.parse import urlparse
5
+
3
6
  from dotenv import load_dotenv
4
7
  from url_remote.environment_name_enum import EnvironmentName
5
- from urllib.parse import urlparse
6
8
 
9
+ from .mini_logger import MiniLogger as logger
7
10
  from .http_response import (create_authorization_http_headers, get_user_jwt_from_event, # noqa - used for backwards compatibility
8
11
  create_return_http_headers, create_error_http_response, create_ok_http_response,
9
12
  create_http_body)
10
- from .mini_logger import MiniLogger as logger
11
13
 
12
14
  load_dotenv()
13
15
  # raise Exception("Failed to load environment variables from .env file\n"
@@ -18,6 +20,28 @@ load_dotenv()
18
20
  # TODO Use the const/enum from language package
19
21
  DEFAULT_LANG_CODE_STR = "en"
20
22
 
23
+
24
+ def append_if_not_exist(lst: list, item: object) -> None:
25
+ if item not in lst:
26
+ lst.append(item)
27
+
28
+
29
+ def to_dict(data: json or dict or None) -> dict:
30
+ if data is None:
31
+ return {}
32
+ if isinstance(data, dict):
33
+ return data
34
+ return json.loads(data)
35
+
36
+
37
+ def to_json(data: json or dict or None) -> json:
38
+ if data is None:
39
+ data = {}
40
+ if isinstance(data, dict):
41
+ return json.dumps(data)
42
+ return data
43
+
44
+
21
45
  def timedelta_to_time_format(time_delta: timedelta) -> str:
22
46
  """
23
47
  Convert a timedelta to a time format in HH:MM:SS.
@@ -120,7 +144,8 @@ def is_valid_datetime_range(datetime_range: tuple) -> bool:
120
144
 
121
145
  for datetime_obj in datetime_range:
122
146
  if not isinstance(datetime_obj, datetime):
123
- logger.end(object={"is_valid_datetime_range_result": False, "reason": "datetime_range contains non-datetime objects"})
147
+ logger.end(object={"is_valid_datetime_range_result": False,
148
+ "reason": "datetime_range contains non-datetime objects"})
124
149
  return False
125
150
  logger.end(object={"is_valid_datetime_range_result": True})
126
151
  return True
@@ -251,11 +276,13 @@ def get_environment_name() -> str:
251
276
  return environment_name
252
277
 
253
278
 
254
- def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True) -> str:
255
- logger.start(object={"key": key, "default": default, "raise_if_not_found": raise_if_not_found})
279
+ def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True,
280
+ raise_if_empty: bool = True) -> str:
281
+ logger.start(object={"key": key, "default": default, "raise_if_not_found": raise_if_not_found,
282
+ "raise_if_empty": raise_if_empty})
256
283
  env_var = os.getenv(key, default)
257
- if raise_if_not_found and env_var is None:
258
- raise Exception(f"Environment variable {key} not found")
284
+ if (raise_if_not_found and env_var is None) or (raise_if_empty and not env_var):
285
+ raise Exception(f"Environment variable {key} not found - please check your .env file")
259
286
  logger.end(object={"env_var": env_var})
260
287
  return env_var
261
288
 
@@ -1,5 +1,4 @@
1
1
  # deleted as the validation is done in utilities.our_get_env
2
- from .constants import BRAND_NAME, ENVIRONMENT_NAME, LOGZIO_TOKEN, GOOGLE_PORT_FOR_AUTHENTICATION
3
2
 
4
3
 
5
4
  # TODO Align with https://github.com/circles-zone/typescript-sdk-remote-typescript-package/edit/dev/typescript-sdk/src/utils/index.ts validateTenantEnvironmentVariables() # noqa501
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.110
3
+ Version: 0.0.111
4
4
  Summary: PyPI Package for Circles Python SDK Local Python
5
5
  Home-page: https://github.com/circles-zone/python-sdk-remote-python-package
6
6
  Author: Circles
7
- Author-email: info@circles.life
7
+ Author-email: info@circles.ai
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Operating System :: OS Independent
@@ -7,9 +7,9 @@ package_dir = PACKAGE_NAME.replace("-", "_")
7
7
  # python -m build needs pyproject.toml or setup.py
8
8
  setuptools.setup(
9
9
  name=PACKAGE_NAME,
10
- version='0.0.110', # https://pypi.org/project/python-sdk-remote/
10
+ version='0.0.111', # https://pypi.org/project/python-sdk-remote/
11
11
  author="Circles",
12
- author_email="info@circles.life",
12
+ author_email="info@circles.ai",
13
13
  description="PyPI Package for Circles Python SDK Local Python",
14
14
  long_description="This is a package for sharing common functions used in different repositories",
15
15
  long_description_content_type="text/markdown",