python-sdk-remote 0.0.110__tar.gz → 0.0.112__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.
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/PKG-INFO +2 -2
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/http_response.py +13 -6
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/mini_logger.py +0 -1
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/utilities.py +40 -12
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/validate_environment.py +0 -1
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/PKG-INFO +2 -2
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/setup.py +2 -2
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/README.md +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/pyproject.toml +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/__init__.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/constants.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/item.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/our_object.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/unified_json.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/valid_json_versions.py +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/SOURCES.txt +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/dependency_links.txt +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/requires.txt +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/top_level.txt +0 -0
- {python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/setup.cfg +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: python-sdk-remote
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.112
|
|
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.
|
|
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
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/http_response.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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,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.
|
|
@@ -109,7 +133,7 @@ def is_valid_date_range(date_range: tuple) -> bool:
|
|
|
109
133
|
return True
|
|
110
134
|
|
|
111
135
|
|
|
112
|
-
def is_valid_datetime_range(datetime_range:
|
|
136
|
+
def is_valid_datetime_range(datetime_range: (datetime, datetime)) -> bool:
|
|
113
137
|
"""
|
|
114
138
|
Validate that the datetime range is in the format 'YYYY-MM-DD HH:MM:SS'.
|
|
115
139
|
"""
|
|
@@ -118,10 +142,10 @@ def is_valid_datetime_range(datetime_range: tuple) -> bool:
|
|
|
118
142
|
logger.end(object={"is_valid_datetime_range_result": False, "reason": "len(datetime_range) != 2"})
|
|
119
143
|
return False
|
|
120
144
|
|
|
121
|
-
for datetime_obj in datetime_range:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
145
|
+
if not all(isinstance(datetime_obj, datetime) for datetime_obj in datetime_range):
|
|
146
|
+
logger.end(object={"is_valid_datetime_range_result": False,
|
|
147
|
+
"reason": "datetime_range contains non-datetime objects"})
|
|
148
|
+
return False
|
|
125
149
|
logger.end(object={"is_valid_datetime_range_result": True})
|
|
126
150
|
return True
|
|
127
151
|
|
|
@@ -217,7 +241,7 @@ def is_date_in_date_range(check_date: date, date_range: tuple) -> bool:
|
|
|
217
241
|
return start_date <= check_date <= end_date
|
|
218
242
|
|
|
219
243
|
|
|
220
|
-
def is_datetime_in_datetime_range(check_datetime: datetime, datetime_range:
|
|
244
|
+
def is_datetime_in_datetime_range(check_datetime: datetime, datetime_range: (datetime, datetime)) -> bool:
|
|
221
245
|
"""
|
|
222
246
|
Check if the given datetime is within the specified datetime range.
|
|
223
247
|
|
|
@@ -251,15 +275,19 @@ def get_environment_name() -> str:
|
|
|
251
275
|
return environment_name
|
|
252
276
|
|
|
253
277
|
|
|
254
|
-
def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True
|
|
255
|
-
|
|
278
|
+
def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True,
|
|
279
|
+
raise_if_empty: bool = False) -> str:
|
|
280
|
+
logger.start(object={"key": key, "default": default, "raise_if_not_found": raise_if_not_found,
|
|
281
|
+
"raise_if_empty": raise_if_empty})
|
|
256
282
|
env_var = os.getenv(key, default)
|
|
257
|
-
if raise_if_not_found and
|
|
258
|
-
|
|
283
|
+
if ((raise_if_not_found and key not in os.environ and default is None)
|
|
284
|
+
or (raise_if_empty and not env_var and not default)):
|
|
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
|
|
|
262
289
|
|
|
290
|
+
|
|
263
291
|
def get_sql_hostname() -> str:
|
|
264
292
|
return our_get_env("RDS_HOSTNAME")
|
|
265
293
|
|
|
@@ -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.
|
|
3
|
+
Version: 0.0.112
|
|
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.
|
|
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.
|
|
10
|
+
version='0.0.112', # https://pypi.org/project/python-sdk-remote/
|
|
11
11
|
author="Circles",
|
|
12
|
-
author_email="info@circles.
|
|
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",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/unified_json.py
RENAMED
|
File without changes
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote/src/valid_json_versions.py
RENAMED
|
File without changes
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/requires.txt
RENAMED
|
File without changes
|
{python_sdk_remote-0.0.110 → python_sdk_remote-0.0.112}/python_sdk_remote.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|