python-sdk-local 0.0.38__tar.gz → 0.0.40__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.
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/PKG-INFO +1 -1
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/python_sdk_local.egg-info/PKG-INFO +1 -1
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/python_sdk_local.egg-info/SOURCES.txt +2 -4
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/sdk/src/constants.py +2 -2
- python-sdk-local-0.0.40/sdk/src/item.py +12 -0
- python-sdk-local-0.0.40/sdk/src/mini_logger.py +61 -0
- python-sdk-local-0.0.40/sdk/src/our_object.py +56 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/sdk/src/utilities.py +72 -50
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/setup.py +1 -1
- python-sdk-local-0.0.38/sdk/src/mini_logger.py +0 -35
- python-sdk-local-0.0.38/sdk/src/our_object.py +0 -52
- python-sdk-local-0.0.38/sdk/tests/__init__.py +0 -0
- python-sdk-local-0.0.38/sdk/tests/our_object_test.py +0 -63
- python-sdk-local-0.0.38/sdk/tests/utilities_test.py +0 -137
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/README.md +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/pyproject.toml +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/python_sdk_local.egg-info/dependency_links.txt +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/python_sdk_local.egg-info/top_level.txt +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/sdk/__init__.py +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/sdk/src/__init__.py +0 -0
- {python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/setup.cfg +0 -0
|
@@ -8,9 +8,7 @@ python_sdk_local.egg-info/top_level.txt
|
|
|
8
8
|
sdk/__init__.py
|
|
9
9
|
sdk/src/__init__.py
|
|
10
10
|
sdk/src/constants.py
|
|
11
|
+
sdk/src/item.py
|
|
11
12
|
sdk/src/mini_logger.py
|
|
12
13
|
sdk/src/our_object.py
|
|
13
|
-
sdk/src/utilities.py
|
|
14
|
-
sdk/tests/__init__.py
|
|
15
|
-
sdk/tests/our_object_test.py
|
|
16
|
-
sdk/tests/utilities_test.py
|
|
14
|
+
sdk/src/utilities.py
|
|
@@ -7,7 +7,7 @@ OBJECT_TO_INSERT_CODE = {
|
|
|
7
7
|
'component_id': PYTHON_SDK_LOCAL_COMPONENT_ID,
|
|
8
8
|
'component_name': PYTHON_SDK_LOCAL_COMPONENT_NAME,
|
|
9
9
|
'component_category': LoggerComponentEnum.ComponentCategory.Code.value,
|
|
10
|
-
'developer_email': '
|
|
10
|
+
'developer_email': 'sahar.g@circ.zone'
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
OBJECT_TO_INSERT_TEST = {
|
|
@@ -15,5 +15,5 @@ OBJECT_TO_INSERT_TEST = {
|
|
|
15
15
|
'component_name': PYTHON_SDK_LOCAL_COMPONENT_NAME,
|
|
16
16
|
'component_category': LoggerComponentEnum.ComponentCategory.Unit_Test.value,
|
|
17
17
|
'testing_framework': LoggerComponentEnum.testingFramework.pytest.value,
|
|
18
|
-
'developer_email': '
|
|
18
|
+
'developer_email': 'sahar.g@circ.zone'
|
|
19
19
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
from .our_object import OurObject
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Item(OurObject):
|
|
6
|
+
|
|
7
|
+
def __init__(self, **kwargs):
|
|
8
|
+
super().__init__(**kwargs)
|
|
9
|
+
|
|
10
|
+
@abstractmethod
|
|
11
|
+
def get_id(self):
|
|
12
|
+
pass # This method needs to be implemented in subclasses
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class MiniLogger:
|
|
6
|
+
|
|
7
|
+
@staticmethod
|
|
8
|
+
def start(message: str, object: dict = None):
|
|
9
|
+
"""
|
|
10
|
+
Print a log message with the current time.
|
|
11
|
+
|
|
12
|
+
Parameters:
|
|
13
|
+
message (str): The message to be printed.
|
|
14
|
+
"""
|
|
15
|
+
if object is None:
|
|
16
|
+
print(f"{datetime.now()} - START - {message}")
|
|
17
|
+
else:
|
|
18
|
+
print(f"{datetime.now()} - START - {message} - {object}")
|
|
19
|
+
|
|
20
|
+
@staticmethod
|
|
21
|
+
def end(message: str, object: dict = None):
|
|
22
|
+
"""
|
|
23
|
+
Print a log message with the current time.
|
|
24
|
+
|
|
25
|
+
Parameters:
|
|
26
|
+
message (str): The message to be printed.
|
|
27
|
+
"""
|
|
28
|
+
if object is None:
|
|
29
|
+
print(f"{datetime.now()} - END - {message}")
|
|
30
|
+
else:
|
|
31
|
+
print(f"{datetime.now()} - END - {message} - {object}")
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def info(message: str, object: dict = None):
|
|
35
|
+
"""
|
|
36
|
+
Print a log message with the current time.
|
|
37
|
+
|
|
38
|
+
Parameters:
|
|
39
|
+
message (str): The message to be printed.
|
|
40
|
+
object (dict): The object to be printed.
|
|
41
|
+
"""
|
|
42
|
+
if object is None:
|
|
43
|
+
print(f"{datetime.now()} - INFO - {message}")
|
|
44
|
+
else:
|
|
45
|
+
print(f"{datetime.now()} - INFO {message} - {object}")
|
|
46
|
+
|
|
47
|
+
@staticmethod
|
|
48
|
+
def error(message: str, object: dict = None):
|
|
49
|
+
"""
|
|
50
|
+
Print a log error message with the current time.
|
|
51
|
+
|
|
52
|
+
Parameters:
|
|
53
|
+
message (str): The message to be printed.
|
|
54
|
+
object (dict): The object to be printed.
|
|
55
|
+
"""
|
|
56
|
+
if object is None:
|
|
57
|
+
print(f"{datetime.now()} - ERROR - {message}",
|
|
58
|
+
file=sys.stderr)
|
|
59
|
+
else:
|
|
60
|
+
print(
|
|
61
|
+
f"{datetime.now()} - ERROR - {message} - {object}", file=sys.stderr)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import json
|
|
3
|
+
import sys
|
|
4
|
+
import os
|
|
5
|
+
from dotenv import load_dotenv
|
|
6
|
+
sys.path.append(os.getcwd())
|
|
7
|
+
from .constants import * # noqa: E402
|
|
8
|
+
load_dotenv()
|
|
9
|
+
from logger_local.Logger import Logger # noqa: E402
|
|
10
|
+
from abc import ABC, abstractmethod # noqa: E402
|
|
11
|
+
|
|
12
|
+
logger = Logger.create_logger(object=OBJECT_TO_INSERT_CODE)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class OurObject(ABC):
|
|
16
|
+
|
|
17
|
+
def __init__(self, **kwargs):
|
|
18
|
+
INIT_METHOD_NAME = '__init__'
|
|
19
|
+
logger.start(INIT_METHOD_NAME, object={'kwargs': kwargs})
|
|
20
|
+
self.kwargs = kwargs
|
|
21
|
+
logger.end(INIT_METHOD_NAME, object={'kwargs': kwargs})
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def get_name(self):
|
|
25
|
+
pass # This method needs to be implemented in subclasses
|
|
26
|
+
|
|
27
|
+
def get(self, attr_name: str):
|
|
28
|
+
GET_METHOD_NAME = 'get'
|
|
29
|
+
logger.start(GET_METHOD_NAME, object={'attr_name': attr_name})
|
|
30
|
+
arguments = getattr(self, 'kwargs', None)
|
|
31
|
+
value = arguments.get(attr_name, None)
|
|
32
|
+
logger.end(GET_METHOD_NAME, object={'attr_name': attr_name})
|
|
33
|
+
return value
|
|
34
|
+
|
|
35
|
+
def get_all_arguments(self):
|
|
36
|
+
return getattr(self, 'kwargs', None)
|
|
37
|
+
|
|
38
|
+
def to_json(self) -> str:
|
|
39
|
+
return json.dumps(self.__dict__)
|
|
40
|
+
|
|
41
|
+
def from_json(self, json_string: str) -> OurObject:
|
|
42
|
+
FROM_JSON_METHOD_NAME = 'from_json'
|
|
43
|
+
logger.start(FROM_JSON_METHOD_NAME,
|
|
44
|
+
object={'json_string': json_string})
|
|
45
|
+
self.__dict__ = json.loads(json_string)
|
|
46
|
+
logger.end(FROM_JSON_METHOD_NAME,
|
|
47
|
+
object={'json_dict': self.__dict__})
|
|
48
|
+
return self
|
|
49
|
+
|
|
50
|
+
def __eq__(self, other) -> bool:
|
|
51
|
+
if not isinstance(other, OurObject):
|
|
52
|
+
return False
|
|
53
|
+
return self.__dict__ == other.__dict__
|
|
54
|
+
|
|
55
|
+
def __ne__(self, other) -> bool:
|
|
56
|
+
return not self.__eq__(other)
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
import os
|
|
3
|
-
|
|
3
|
+
script_directory = os.path.dirname(os.path.abspath(__file__))
|
|
4
|
+
sys.path.append(os.path.join(script_directory, '..'))
|
|
5
|
+
|
|
4
6
|
from dotenv import load_dotenv
|
|
5
|
-
|
|
7
|
+
from datetime import time, datetime, timedelta, date
|
|
6
8
|
from .constants import * # noqa: E402¸
|
|
7
9
|
load_dotenv()
|
|
8
|
-
|
|
10
|
+
from logger_local.Logger import Logger # noqa: E402
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
logger = Logger.create_logger(object=OBJECT_TO_INSERT_CODE)
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
def timedelta_to_time_format(timedelta: timedelta) -> str:
|
|
@@ -30,7 +32,8 @@ def timedelta_to_time_format(timedelta: timedelta) -> str:
|
|
|
30
32
|
'02:30:45'
|
|
31
33
|
"""
|
|
32
34
|
TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME = "timedelta_to_time_format"
|
|
33
|
-
|
|
35
|
+
logger.start(TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME,
|
|
36
|
+
object={'timedelta': timedelta.__str__()})
|
|
34
37
|
|
|
35
38
|
# Calculate the total seconds and convert to HH:MM:SS format
|
|
36
39
|
total_seconds = int(timedelta.total_seconds())
|
|
@@ -41,8 +44,8 @@ def timedelta_to_time_format(timedelta: timedelta) -> str:
|
|
|
41
44
|
# Format as "HH:MM:SS"
|
|
42
45
|
formatted_time = f"{hours:02d}:{minutes:02d}:{seconds:02d}"
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
logger.end(TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME,
|
|
48
|
+
object={'formatted_time': formatted_time})
|
|
46
49
|
return formatted_time
|
|
47
50
|
|
|
48
51
|
|
|
@@ -51,25 +54,26 @@ def is_valid_time_range(time_range: tuple) -> bool:
|
|
|
51
54
|
Validate that the time range is in the format 'HH:MM:SS'.
|
|
52
55
|
"""
|
|
53
56
|
IS_VALID_TIME_RANGE_METHOD_NAME = "is_valid_time_range"
|
|
54
|
-
|
|
57
|
+
logger.start(IS_VALID_TIME_RANGE_METHOD_NAME, object={
|
|
58
|
+
"time_range": time_range.__str__()})
|
|
55
59
|
if len(time_range) != 2:
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
|
|
61
|
+
"is_valid_time_range_result": False, "reason": "len(time_range) != 2"})
|
|
58
62
|
return False
|
|
59
63
|
|
|
60
64
|
for time_obj in time_range:
|
|
61
65
|
if not isinstance(time_obj, time):
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
|
|
67
|
+
"is_valid_time_range_result": False, "reason": "time_range contains non-time objects"})
|
|
64
68
|
return False
|
|
65
69
|
time_str = time_obj.strftime('%H:%M:%S')
|
|
66
70
|
if time_obj.strftime('%H:%M:%S') != time_str:
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
|
|
72
|
+
"is_valid_time_range_result": False, "reason": "time_range contains invalid time format"})
|
|
69
73
|
return False
|
|
70
74
|
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
|
|
76
|
+
"is_valid_time_range_result": True})
|
|
73
77
|
return True
|
|
74
78
|
|
|
75
79
|
|
|
@@ -78,19 +82,20 @@ def is_valid_date_range(date_range: tuple) -> bool:
|
|
|
78
82
|
Validate that the date range is in the format 'YYYY-MM-DD'.
|
|
79
83
|
"""
|
|
80
84
|
IS_VALID_DATE_RANGE_METHOD_NAME = "is_valid_date_range"
|
|
81
|
-
|
|
85
|
+
logger.start(IS_VALID_DATE_RANGE_METHOD_NAME, object={
|
|
86
|
+
"date_range": date_range.__str__()})
|
|
82
87
|
if len(date_range) != 2:
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
|
|
89
|
+
"is_valid_date_range_result": False, "reason": "len(date_range) != 2"})
|
|
85
90
|
return False
|
|
86
91
|
|
|
87
92
|
for date_obj in date_range:
|
|
88
93
|
if not isinstance(date_obj, date):
|
|
89
|
-
|
|
90
|
-
|
|
94
|
+
logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
|
|
95
|
+
"is_valid_date_range_result": False, "reason": "date_range contains non-date objects"})
|
|
91
96
|
return False
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
|
|
98
|
+
"is_valid_date_range_result": True})
|
|
94
99
|
return True
|
|
95
100
|
|
|
96
101
|
|
|
@@ -99,19 +104,20 @@ def is_valid_datetime_range(datetime_range: tuple) -> bool:
|
|
|
99
104
|
Validate that the datetime range is in the format 'YYYY-MM-DD HH:MM:SS'.
|
|
100
105
|
"""
|
|
101
106
|
IS_VALID_DATETIME_RANGE_METHOD_NAME = "is_valid_datetime_range"
|
|
102
|
-
|
|
107
|
+
logger.start(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
|
|
108
|
+
"datetime_range": datetime_range.__str__()})
|
|
103
109
|
if len(datetime_range) != 2:
|
|
104
|
-
|
|
105
|
-
|
|
110
|
+
logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
|
|
111
|
+
"is_valid_datetime_range_result": False, "reason": "len(datetime_range) != 2"})
|
|
106
112
|
return False
|
|
107
113
|
|
|
108
114
|
for datetime_obj in datetime_range:
|
|
109
115
|
if not isinstance(datetime_obj, datetime):
|
|
110
|
-
|
|
111
|
-
|
|
116
|
+
logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
|
|
117
|
+
"is_valid_datetime_range_result": False, "reason": "datetime_range contains non-datetime objects"})
|
|
112
118
|
return False
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
|
|
120
|
+
"is_valid_datetime_range_result": True})
|
|
115
121
|
return True
|
|
116
122
|
|
|
117
123
|
|
|
@@ -139,25 +145,25 @@ def is_list_of_dicts(obj):
|
|
|
139
145
|
False
|
|
140
146
|
"""
|
|
141
147
|
IS_LIST_OF_DICTS_FUNCTION_NAME = "is_list_of_dicts"
|
|
142
|
-
|
|
148
|
+
logger.start(IS_LIST_OF_DICTS_FUNCTION_NAME, object={"obj": obj})
|
|
143
149
|
try:
|
|
144
150
|
if not isinstance(obj, list):
|
|
145
151
|
is_list_of_dicts_result = False
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
|
|
153
|
+
"is_list_of_dicts_result": is_list_of_dicts_result})
|
|
148
154
|
return is_list_of_dicts_result
|
|
149
155
|
for item in obj:
|
|
150
156
|
if not isinstance(item, dict):
|
|
151
157
|
is_list_of_dicts_result = False
|
|
152
|
-
|
|
153
|
-
|
|
158
|
+
logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
|
|
159
|
+
"is_list_of_dicts_result": is_list_of_dicts_result})
|
|
154
160
|
return is_list_of_dicts_result
|
|
155
161
|
is_list_of_dicts_result = True
|
|
156
|
-
|
|
157
|
-
|
|
162
|
+
logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
|
|
163
|
+
"is_list_of_dicts_result": is_list_of_dicts_result})
|
|
158
164
|
return is_list_of_dicts_result
|
|
159
165
|
except Exception as e:
|
|
160
|
-
|
|
166
|
+
logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, exception=e)
|
|
161
167
|
raise e
|
|
162
168
|
|
|
163
169
|
|
|
@@ -172,13 +178,16 @@ def is_time_in_time_range(check_time: time, time_range: tuple) -> bool:
|
|
|
172
178
|
Returns:
|
|
173
179
|
bool: True if the check_time is within the time range, False otherwise.
|
|
174
180
|
"""
|
|
175
|
-
|
|
176
|
-
|
|
181
|
+
IS_TIME_IN_TIME_RANGE_METHOD_NAME = "is_time_in_time_range"
|
|
182
|
+
logger.start(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
|
|
183
|
+
"check_time": check_time.__str__(), "time_range": time_range.__str__()})
|
|
177
184
|
if not is_valid_time_range(time_range) or not isinstance(check_time, time):
|
|
185
|
+
logger.end(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
|
|
186
|
+
"is_time_in_time_range_result": False})
|
|
178
187
|
return False
|
|
179
188
|
start_time, end_time = time_range
|
|
180
|
-
|
|
181
|
-
|
|
189
|
+
logger.end(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
|
|
190
|
+
"is_time_in_time_range_result": start_time <= check_time <= end_time})
|
|
182
191
|
return start_time <= check_time <= end_time
|
|
183
192
|
|
|
184
193
|
|
|
@@ -193,14 +202,17 @@ def is_date_in_date_range(check_date: date, date_range: tuple) -> bool:
|
|
|
193
202
|
Returns:
|
|
194
203
|
bool: True if the check_date is within the date range, False otherwise.
|
|
195
204
|
"""
|
|
196
|
-
|
|
197
|
-
|
|
205
|
+
IS_DATE_IN_DATE_RANGE_METHOD_NAME = "is_date_in_date_range"
|
|
206
|
+
logger.start(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
|
|
207
|
+
"check_date": check_date.__str__(), "date_range": date_range.__str__()})
|
|
198
208
|
if not is_valid_date_range(date_range) or not isinstance(check_date, date):
|
|
209
|
+
logger.end(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
|
|
210
|
+
"is_date_in_date_range_result": False})
|
|
199
211
|
return False
|
|
200
212
|
|
|
201
213
|
start_date, end_date = date_range
|
|
202
|
-
|
|
203
|
-
|
|
214
|
+
logger.end(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
|
|
215
|
+
"is_date_in_date_range_result": start_date <= check_date <= end_date})
|
|
204
216
|
return start_date <= check_date <= end_date
|
|
205
217
|
|
|
206
218
|
|
|
@@ -215,12 +227,22 @@ def is_datetime_in_datetime_range(check_datetime: datetime, datetime_range: tupl
|
|
|
215
227
|
Returns:
|
|
216
228
|
bool: True if the check_datetime is within the datetime range, False otherwise.
|
|
217
229
|
"""
|
|
218
|
-
|
|
219
|
-
|
|
230
|
+
IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME = "is_datetime_in_datetime_range"
|
|
231
|
+
logger.start(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME)
|
|
220
232
|
if not is_valid_datetime_range(datetime_range) or not isinstance(check_datetime, datetime):
|
|
233
|
+
logger.end(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME, object={
|
|
234
|
+
"is_datetime_in_datetime_range_result": False})
|
|
221
235
|
return False
|
|
222
236
|
|
|
223
237
|
start_datetime, end_datetime = datetime_range
|
|
224
|
-
|
|
225
|
-
|
|
238
|
+
logger.end(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME, object={
|
|
239
|
+
"is_datetime_in_datetime_range_result": start_datetime <= check_datetime <= end_datetime})
|
|
226
240
|
return start_datetime <= check_datetime <= end_datetime
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def create_http_headers(jwt_token: str):
|
|
244
|
+
headers = {
|
|
245
|
+
'Content-Type': 'application/json',
|
|
246
|
+
'Authorization': f'Bearer {jwt_token}',
|
|
247
|
+
}
|
|
248
|
+
return headers
|
|
@@ -3,7 +3,7 @@ import setuptools
|
|
|
3
3
|
# python -m build needs pyproject.toml or setup.py
|
|
4
4
|
setuptools.setup(
|
|
5
5
|
name='python-sdk-local',
|
|
6
|
-
version='0.0.
|
|
6
|
+
version='0.0.40', # https://pypi.org/project/python-sdk-local/
|
|
7
7
|
author="Circles",
|
|
8
8
|
author_email="info@circles.life",
|
|
9
9
|
description="PyPI Package for Circles Python SDK Local Python",
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class MiniLogger:
|
|
6
|
-
|
|
7
|
-
@staticmethod
|
|
8
|
-
def info(message: str, object: dict = None):
|
|
9
|
-
"""
|
|
10
|
-
Print a log message with the current time.
|
|
11
|
-
|
|
12
|
-
Parameters:
|
|
13
|
-
message (str): The message to be printed.
|
|
14
|
-
object (dict): The object to be printed.
|
|
15
|
-
"""
|
|
16
|
-
if object is None:
|
|
17
|
-
print(f"{datetime.now()} - {message}")
|
|
18
|
-
else:
|
|
19
|
-
print(f"{datetime.now()} - {message} - {object}")
|
|
20
|
-
|
|
21
|
-
@staticmethod
|
|
22
|
-
def error(message: str, object: dict = None):
|
|
23
|
-
"""
|
|
24
|
-
Print a log error message with the current time.
|
|
25
|
-
|
|
26
|
-
Parameters:
|
|
27
|
-
message (str): The message to be printed.
|
|
28
|
-
object (dict): The object to be printed.
|
|
29
|
-
"""
|
|
30
|
-
if object is None:
|
|
31
|
-
print(f"{datetime.now()} - ERROR - {message}",
|
|
32
|
-
file=sys.stderr)
|
|
33
|
-
else:
|
|
34
|
-
print(
|
|
35
|
-
f"{datetime.now()} - ERROR - {message} - {object}", file=sys.stderr)
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
import json
|
|
3
|
-
import sys
|
|
4
|
-
import os
|
|
5
|
-
from dotenv import load_dotenv
|
|
6
|
-
sys.path.append(os.getcwd())
|
|
7
|
-
from python_sdk_local.sdk.src.constants import * # noqa: E402
|
|
8
|
-
load_dotenv()
|
|
9
|
-
# from logger_local.Logger import Logger # noqa: E402
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# logger = Logger.create_logger(object=OBJECT_TO_INSERT_CODE)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class OurObject:
|
|
16
|
-
|
|
17
|
-
def __init__(self, **kwargs):
|
|
18
|
-
# INIT_METHOD_NAME = '__init__'
|
|
19
|
-
# logger.start(INIT_METHOD_NAME, object={'kwargs': kwargs})
|
|
20
|
-
self.kwargs = kwargs
|
|
21
|
-
# logger.end(INIT_METHOD_NAME, object={'kwargs': kwargs})
|
|
22
|
-
|
|
23
|
-
def get(self, attr_name: str):
|
|
24
|
-
arguments = getattr(self, 'kwargs', None)
|
|
25
|
-
value = arguments.get(attr_name, None)
|
|
26
|
-
return value
|
|
27
|
-
|
|
28
|
-
def get_all_arguments(self):
|
|
29
|
-
return getattr(self, 'kwargs', None)
|
|
30
|
-
|
|
31
|
-
def to_json(self) -> str:
|
|
32
|
-
return json.dumps(self.__dict__)
|
|
33
|
-
|
|
34
|
-
def from_json(self, json_string: str) -> OurObject:
|
|
35
|
-
self.__dict__ = json.loads(json_string)
|
|
36
|
-
return self
|
|
37
|
-
|
|
38
|
-
def __eq__(self, other) -> bool:
|
|
39
|
-
if not isinstance(other, OurObject):
|
|
40
|
-
return False
|
|
41
|
-
return self.__dict__ == other.__dict__
|
|
42
|
-
|
|
43
|
-
def __ne__(self, other) -> bool:
|
|
44
|
-
return not self.__eq__(other)
|
|
45
|
-
|
|
46
|
-
# TODO Shall we call it get_http_headers()? create_http_headers()?
|
|
47
|
-
def make_header(self, jwt_token: str):
|
|
48
|
-
headers = {
|
|
49
|
-
'Content-Type': 'application/json',
|
|
50
|
-
'Authorization': f'Bearer {jwt_token}',
|
|
51
|
-
}
|
|
52
|
-
return headers
|
|
File without changes
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import os
|
|
3
|
-
from dotenv import load_dotenv
|
|
4
|
-
|
|
5
|
-
sys.path.append(os.getcwd())
|
|
6
|
-
from python_sdk_local.sdk.src import our_object # noqa: E402
|
|
7
|
-
from python_sdk_local.sdk.src.constants import * # noqa: E402
|
|
8
|
-
load_dotenv()
|
|
9
|
-
# from logger_local.Logger import Logger # noqa: E402
|
|
10
|
-
|
|
11
|
-
# logger = Logger.create_logger(object=OBJECT_TO_INSERT_TEST)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def test_our_object():
|
|
15
|
-
# TEST_OUR_OBJECT_FUNCTION_NAME = "test_our_object"
|
|
16
|
-
# logger.start(TEST_OUR_OBJECT_FUNCTION_NAME)
|
|
17
|
-
|
|
18
|
-
our_object_1 = our_object.OurObject(a=1, b="Our Object Test")
|
|
19
|
-
our_object_2 = our_object.OurObject(a=1, b="Our Object Test")
|
|
20
|
-
our_object_3 = our_object.OurObject(a="Object3", b=3)
|
|
21
|
-
|
|
22
|
-
# Test == and != operators
|
|
23
|
-
assert our_object_1 == our_object_2
|
|
24
|
-
assert our_object_1 != our_object_3
|
|
25
|
-
|
|
26
|
-
# Test get() method
|
|
27
|
-
a1 = our_object_1.get('a')
|
|
28
|
-
a2 = our_object_2.get('a')
|
|
29
|
-
a3 = our_object_3.get('a')
|
|
30
|
-
b1 = our_object_1.get('b')
|
|
31
|
-
b2 = our_object_2.get('b')
|
|
32
|
-
b3 = our_object_3.get('b')
|
|
33
|
-
|
|
34
|
-
assert a1 == a2 == 1
|
|
35
|
-
assert a3 == "Object3"
|
|
36
|
-
assert b1 == b2 == "Our Object Test"
|
|
37
|
-
assert b3 == 3
|
|
38
|
-
|
|
39
|
-
# Test get_all_arguments() method
|
|
40
|
-
assert our_object_1.get_all_arguments() == {'a': 1, 'b': 'Our Object Test'}
|
|
41
|
-
assert our_object_2.get_all_arguments() == {'a': 1, 'b': 'Our Object Test'}
|
|
42
|
-
assert our_object_3.get_all_arguments() == {'a': 'Object3', 'b': 3}
|
|
43
|
-
|
|
44
|
-
# Test to_json() and from_json() methods
|
|
45
|
-
our_object_1_json = our_object_1.to_json()
|
|
46
|
-
our_object_2_json = our_object_2.to_json()
|
|
47
|
-
our_object_3_json = our_object_3.to_json()
|
|
48
|
-
assert our_object_1_json == '{"kwargs": {"a": 1, "b": "Our Object Test"}}'
|
|
49
|
-
assert our_object_2_json == '{"kwargs": {"a": 1, "b": "Our Object Test"}}'
|
|
50
|
-
assert our_object_3_json == '{"kwargs": {"a": "Object3", "b": 3}}'
|
|
51
|
-
|
|
52
|
-
our_object4 = our_object.OurObject()
|
|
53
|
-
our_object5 = our_object.OurObject()
|
|
54
|
-
our_object6 = our_object.OurObject()
|
|
55
|
-
assert our_object4.from_json(our_object_1_json) == our_object_1
|
|
56
|
-
assert our_object5.from_json(our_object_2_json) == our_object_2
|
|
57
|
-
assert our_object6.from_json(our_object_3_json) == our_object_3
|
|
58
|
-
|
|
59
|
-
# # Test make_header
|
|
60
|
-
# header = our_object_1.make_header(logger.userContext.get_user_JWT())
|
|
61
|
-
# assert 'Authorization' in header
|
|
62
|
-
|
|
63
|
-
# logger.end(TEST_OUR_OBJECT_FUNCTION_NAME)
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
from datetime import time, datetime, timedelta, date
|
|
2
|
-
import sys
|
|
3
|
-
import os
|
|
4
|
-
from dotenv import load_dotenv
|
|
5
|
-
from python_sdk_local.sdk.src import utilities
|
|
6
|
-
from python_sdk_local.sdk.src.mini_logger import MiniLogger
|
|
7
|
-
sys.path.append(os.getcwd())
|
|
8
|
-
from python_sdk_local.sdk.src.constants import * # noqa: E402
|
|
9
|
-
load_dotenv()
|
|
10
|
-
# from logger_local.Logger import Logger # noqa: E402
|
|
11
|
-
|
|
12
|
-
# logger = Logger.create_logger(object=OBJECT_TO_INSERT_TEST)
|
|
13
|
-
|
|
14
|
-
TEST_TIME_DELTA = timedelta(seconds=25853)
|
|
15
|
-
TEST_TIME_FORMAT = "07:10:53"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def test_timedelta_to_time_format():
|
|
19
|
-
# TEST_TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME = "test_timedelta_to_time_format"
|
|
20
|
-
# logger.start(TEST_TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME)
|
|
21
|
-
|
|
22
|
-
time_format = utilities.timedelta_to_time_format(TEST_TIME_DELTA)
|
|
23
|
-
assert time_format == TEST_TIME_FORMAT
|
|
24
|
-
|
|
25
|
-
# logger.end(TEST_TIMEDELTA_TO_TIME_FORMAT_METHOD_NAME)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def test_is_list_of_dicts():
|
|
29
|
-
# TEST_IS_LIST_OF_DICTS_METHOD_NAME = "test_is_list_of_dicts"
|
|
30
|
-
# logger.start(TEST_IS_LIST_OF_DICTS_METHOD_NAME)
|
|
31
|
-
|
|
32
|
-
assert utilities.is_list_of_dicts([]) == True
|
|
33
|
-
assert utilities.is_list_of_dicts([{'a': 1}, {'b': 2}]) == True
|
|
34
|
-
assert utilities.is_list_of_dicts([{'a': 1}, {'b': 2}, 3]) == False
|
|
35
|
-
assert utilities.is_list_of_dicts([{'a': 1}, {'b': 2}, 'c']) == False
|
|
36
|
-
assert utilities.is_list_of_dicts([{'a': 1}, {'b': 2}, {'c': 3}]) == True
|
|
37
|
-
assert utilities.is_list_of_dicts(
|
|
38
|
-
[{'a': 1}, {'b': 2}, {'c': {'d': 5}}, 4]) == False
|
|
39
|
-
|
|
40
|
-
# logger.end(TEST_IS_LIST_OF_DICTS_METHOD_NAME)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def test_is_valid_time_range():
|
|
44
|
-
valid_time_range = (time(12, 34, 56), time(23, 45, 12))
|
|
45
|
-
invalid_time_range = (time(12, 34, 56), time(
|
|
46
|
-
11, 22).hour) # Invalid format
|
|
47
|
-
|
|
48
|
-
assert utilities.is_valid_time_range(valid_time_range) is True
|
|
49
|
-
assert utilities.is_valid_time_range(invalid_time_range) is False
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def test_is_valid_date_range():
|
|
53
|
-
valid_date_range = (date(2023, 10, 26), date(2023, 10, 27))
|
|
54
|
-
invalid_date_range = (date(2023, 10, 26), time(
|
|
55
|
-
23, 45, 12)) # Invalid format
|
|
56
|
-
check_date_inside = date(2023, 10, 27)
|
|
57
|
-
check_date_outside = date(2023, 10, 25)
|
|
58
|
-
|
|
59
|
-
assert utilities.is_valid_date_range(valid_date_range) is True
|
|
60
|
-
assert utilities.is_valid_date_range(invalid_date_range) is False
|
|
61
|
-
assert utilities.is_date_in_date_range(
|
|
62
|
-
check_date_inside, valid_date_range) is True
|
|
63
|
-
assert utilities.is_date_in_date_range(
|
|
64
|
-
check_date_outside, valid_date_range) is False
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def test_is_valid_datetime_range():
|
|
68
|
-
valid_datetime_range = (
|
|
69
|
-
datetime(2023, 10, 26, 12, 34, 56), datetime(2023, 10, 27, 23, 45, 12))
|
|
70
|
-
invalid_datetime_range = (
|
|
71
|
-
datetime(2023, 10, 26, 12, 34, 56), time(23, 45, 12)) # Invalid format
|
|
72
|
-
check_datetime_inside = datetime(2023, 10, 27, 15, 0, 0)
|
|
73
|
-
check_datetime_outside = datetime(2023, 10, 25, 5, 0, 0)
|
|
74
|
-
|
|
75
|
-
assert utilities.is_valid_datetime_range(valid_datetime_range) is True
|
|
76
|
-
assert utilities.is_valid_datetime_range(invalid_datetime_range) is False
|
|
77
|
-
assert utilities.is_datetime_in_datetime_range(
|
|
78
|
-
check_datetime_inside, valid_datetime_range) is True
|
|
79
|
-
assert utilities.is_datetime_in_datetime_range(
|
|
80
|
-
check_datetime_outside, valid_datetime_range) is False
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def test_timedelta_to_time_format():
|
|
84
|
-
duration = timedelta(hours=2, minutes=30, seconds=45)
|
|
85
|
-
formatted_time = utilities.timedelta_to_time_format(duration)
|
|
86
|
-
assert formatted_time == "02:30:45"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def test_is_time_in_time_range():
|
|
90
|
-
valid_time_range = (time(12, 34, 56), time(23, 45, 12))
|
|
91
|
-
invalid_time_range = (time(12, 34, 56), time(23, 45)) # Invalid format
|
|
92
|
-
check_time_inside = time(15, 0, 0)
|
|
93
|
-
check_time_outside = time(5, 0, 0)
|
|
94
|
-
|
|
95
|
-
assert utilities.is_time_in_time_range(
|
|
96
|
-
check_time_inside, valid_time_range) is True
|
|
97
|
-
assert utilities.is_time_in_time_range(
|
|
98
|
-
check_time_outside, valid_time_range) is False
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def test_is_date_in_date_range():
|
|
102
|
-
valid_date_range = [date(2023, 10, 26), date(2023, 10, 27)]
|
|
103
|
-
invalid_date_range = [date(2023, 10, 26), time(
|
|
104
|
-
23, 45, 12)] # Invalid format
|
|
105
|
-
check_date_inside = date(2023, 10, 27)
|
|
106
|
-
check_date_outside = date(2023, 10, 25)
|
|
107
|
-
|
|
108
|
-
assert utilities.is_date_in_date_range(
|
|
109
|
-
check_date_inside, valid_date_range) is True
|
|
110
|
-
assert utilities.is_date_in_date_range(
|
|
111
|
-
check_date_outside, valid_date_range) is False
|
|
112
|
-
assert utilities.is_date_in_date_range(
|
|
113
|
-
check_date_inside, invalid_date_range) is False
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
def test_is_datetime_in_datetime_range():
|
|
117
|
-
valid_datetime_range = [
|
|
118
|
-
datetime(2023, 10, 26, 12, 34, 56), datetime(2023, 10, 27, 23, 45, 12)]
|
|
119
|
-
invalid_datetime_range = [
|
|
120
|
-
datetime(2023, 10, 26, 12, 34, 56), time(23, 45, 12)] # Invalid format
|
|
121
|
-
check_datetime_inside = datetime(2023, 10, 27, 15, 0, 0)
|
|
122
|
-
check_datetime_outside = datetime(2023, 10, 25, 5, 0, 0)
|
|
123
|
-
|
|
124
|
-
assert utilities.is_datetime_in_datetime_range(
|
|
125
|
-
check_datetime_inside, valid_datetime_range) is True
|
|
126
|
-
assert utilities.is_datetime_in_datetime_range(
|
|
127
|
-
check_datetime_outside, valid_datetime_range) is False
|
|
128
|
-
assert utilities.is_datetime_in_datetime_range(
|
|
129
|
-
check_datetime_inside, invalid_datetime_range) is False
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
def test_minilogger_info():
|
|
133
|
-
MiniLogger.info("test_minilogger_info")
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def test_minilogger_error():
|
|
137
|
-
MiniLogger.error("test_minilogger_error")
|
|
File without changes
|
|
File without changes
|
{python-sdk-local-0.0.38 → python-sdk-local-0.0.40}/python_sdk_local.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|