python-sdk-remote 0.0.91__tar.gz → 0.0.93__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 (21) hide show
  1. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/PKG-INFO +1 -1
  2. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/README.md +4 -1
  3. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/constants.py +1 -1
  4. python_sdk_remote-0.0.93/python_sdk_remote/src/get_dependencies.py +58 -0
  5. python_sdk_remote-0.0.93/python_sdk_remote/src/http_response.py +72 -0
  6. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/utilities.py +44 -100
  7. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote.egg-info/PKG-INFO +1 -1
  8. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote.egg-info/SOURCES.txt +2 -0
  9. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/setup.py +1 -1
  10. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/pyproject.toml +0 -0
  11. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/__init__.py +0 -0
  12. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/item.py +0 -0
  13. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/mini_logger.py +0 -0
  14. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/our_object.py +0 -0
  15. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/unified_json.py +0 -0
  16. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/valid_json_versions.py +0 -0
  17. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote/src/validate_environment.py +0 -0
  18. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote.egg-info/dependency_links.txt +0 -0
  19. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote.egg-info/requires.txt +0 -0
  20. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/python_sdk_remote.egg-info/top_level.txt +0 -0
  21. {python_sdk_remote-0.0.91 → python_sdk_remote-0.0.93}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.91
3
+ Version: 0.0.93
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
@@ -1,4 +1,7 @@
1
- # python-package-backend-template
1
+ # python-sdk-package
2
+
3
+ https://github.com/grosser/repo_dependency_graph Ruby, Graph the dependencies of your repositories
4
+ https://github.com/thebjorn/pydeps Python
2
5
 
3
6
  To create local package and remote package layers (not to create GraphQL and REST-API layers)
4
7
 
@@ -3,7 +3,7 @@ import os
3
3
  from logger_local.LoggerComponentEnum import LoggerComponentEnum
4
4
 
5
5
  PYTHON_SDK_LOCAL_COMPONENT_ID = 184
6
- PYTHON_SDK_LOCAL_COMPONENT_NAME = 'python_sdk_local'
6
+ PYTHON_SDK_LOCAL_COMPONENT_NAME = 'python_sdk_remote'
7
7
 
8
8
  ENVIRONMENT_NAME = os.getenv("ENVIRONMENT_NAME")
9
9
  BRAND_NAME = os.getenv("BRAND_NAME")
@@ -0,0 +1,58 @@
1
+ # pip install BeautifulSoup4 requests importlib-metadata
2
+ import subprocess
3
+ import sys
4
+ import json
5
+ from collections import defaultdict
6
+
7
+ import importlib_metadata
8
+ import requests
9
+ from bs4 import BeautifulSoup
10
+
11
+
12
+ def install(packages):
13
+ print("Installing...", packages)
14
+ if isinstance(packages, str):
15
+ packages = [packages]
16
+ try:
17
+ subprocess.run([sys.executable, "-m", "pip", "install", "-U", "--no-deps"] + packages, check=False)
18
+ except Exception as e:
19
+ print(e)
20
+
21
+
22
+ def get_dependencies_per_package(include_packages):
23
+ dependencies_per_package = defaultdict(list)
24
+ for dist in importlib_metadata.distributions():
25
+ package_name = dist.metadata['Name']
26
+ if package_name not in include_packages:
27
+ continue
28
+
29
+ dependencies = dist.metadata.get_all('Requires-Dist', [])
30
+ for dependency in dependencies:
31
+ depend_on = dependency.split()[0]
32
+ if depend_on in include_packages:
33
+ dependencies_per_package[depend_on].append(package_name)
34
+
35
+ return dependencies_per_package
36
+
37
+
38
+ def get_included_packages():
39
+ url = "https://pypi.org/user/circles/"
40
+ class_name = "package-snippet__title"
41
+
42
+ response = requests.get(url)
43
+ soup = BeautifulSoup(response.text, "html.parser")
44
+ package_names = soup.find_all("h3", class_=class_name)
45
+ included_packages = [package_name.text for package_name in package_names]
46
+ install(included_packages)
47
+ return included_packages
48
+
49
+
50
+ def main():
51
+ include_packages = get_included_packages()
52
+ dependencies_per_package = get_dependencies_per_package(include_packages)
53
+ with open('dependencies.json', 'w') as f:
54
+ json.dump(dependencies_per_package, f, indent=4)
55
+
56
+
57
+ if __name__ == "__main__":
58
+ main()
@@ -0,0 +1,72 @@
1
+ import json
2
+ from http_constants import status
3
+
4
+ from .mini_logger import MiniLogger as logger
5
+
6
+ HEADERS_KEY = 'headers'
7
+ AUTHORIZATION_KEY = 'authorization'
8
+ AUTHORIZATION_PREFIX = 'Bearer '
9
+
10
+ # 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 # noqa501
11
+ # TODO Shall we create also createInternalServerErrorHttpResponse(), createOkHttpResponse() like we have in TypeScript?
12
+
13
+ # Former name was create_http_headers()
14
+ def create_authorization_http_headers(user_jwt: str) -> dict:
15
+ logger.start(object={"user_jwt": user_jwt})
16
+ authorization_http_headers = {
17
+ 'Content-Type': 'application/json',
18
+ 'Authorization': AUTHORIZATION_PREFIX + user_jwt,
19
+ }
20
+ logger.end(object={"authorization_http_headers": authorization_http_headers})
21
+ return authorization_http_headers
22
+
23
+
24
+ def get_user_jwt_from_event(event: dict) -> str:
25
+ logger.start(object={"event": event})
26
+ auth_header = event.get(HEADERS_KEY, {}).get(AUTHORIZATION_KEY)
27
+ if auth_header is None:
28
+ auth_header = event.get(HEADERS_KEY, {}).get(AUTHORIZATION_KEY.capitalize())
29
+ user_jwt = auth_header.split(AUTHORIZATION_PREFIX)[1]
30
+ logger.end(object={"user_jwt": user_jwt})
31
+ return user_jwt
32
+
33
+
34
+ def create_return_http_headers() -> dict:
35
+ logger.start()
36
+ return_http_headers = {
37
+ "Content-Type": "application/json",
38
+ "Access-Control-Allow-Origin": "*",
39
+ }
40
+ logger.end(object={"return_http_headers": return_http_headers})
41
+ return return_http_headers
42
+
43
+ def create_error_http_response(exception: Exception) -> dict:
44
+ logger.start(object={"exception": exception})
45
+ error_http_response = {
46
+ "statusCode": status.BAD_GATEWAY,
47
+ "headers": create_return_http_headers(),
48
+ "body": create_http_body({"error": str(exception)})
49
+ }
50
+ logger.end(object={"error_http_response": error_http_response})
51
+ return error_http_response
52
+
53
+
54
+ def create_ok_http_response(body: dict) -> dict:
55
+ logger.start(object={"body": body})
56
+ ok_http_response = {
57
+ "statusCode": status.OK,
58
+ "headers": create_return_http_headers(),
59
+ "body": create_http_body(body)
60
+ }
61
+ logger.end(object={"ok_http_response": ok_http_response})
62
+ return ok_http_response
63
+
64
+
65
+ # https://google.github.io/styleguide/jsoncstyleguide.xml?showone=Property_Name_Format#Property_Name_Format
66
+ def create_http_body(body: dict) -> str:
67
+ # TODO console.warning() if the body is not a valid camelCase JSON
68
+ # https://stackoverflow.com/questions/17156078/converting-identifier-naming-between-camelcase-and-underscores-during-json-seria
69
+ logger.start(object={"body": body})
70
+ http_body = json.dumps(body)
71
+ logger.end(object={"http_body": http_body})
72
+ return http_body
@@ -1,11 +1,12 @@
1
- import json
2
1
  import os
3
2
  from datetime import date, datetime, time, timedelta
4
3
  from dotenv import load_dotenv
5
4
  from url_remote.environment_name_enum import EnvironmentName
6
5
  from urllib.parse import urlparse
7
- from http_constants import status
8
6
 
7
+ from .http_response import (create_authorization_http_headers, get_user_jwt_from_event, # noqa - used for backwards compatibility
8
+ create_return_http_headers, create_error_http_response, create_ok_http_response,
9
+ create_http_body)
9
10
  from .mini_logger import MiniLogger as logger
10
11
 
11
12
  load_dotenv()
@@ -51,56 +52,54 @@ def is_valid_time_range(time_range: tuple) -> bool:
51
52
  """
52
53
  Validate that the time range is in the format 'HH:MM:SS'.
53
54
  """
54
- IS_VALID_TIME_RANGE_METHOD_NAME = "is_valid_time_range"
55
- logger.start(IS_VALID_TIME_RANGE_METHOD_NAME, object={
56
- "time_range": time_range.__str__()})
55
+ logger.start(object={"time_range": time_range.__str__()})
57
56
  if len(time_range) != 2:
58
- logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
59
- "is_valid_time_range_result": False, "reason": "len(time_range) != 2"})
57
+ logger.end(object={"is_valid_time_range_result": False, "reason": "len(time_range) != 2"})
60
58
  return False
61
59
 
62
60
  for time_obj in time_range:
63
61
  if not isinstance(time_obj, time):
64
- logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
62
+ logger.end(object={
65
63
  "is_valid_time_range_result": False, "reason": "time_range contains non-time objects"})
66
64
  return False
67
65
  time_str = time_obj.strftime('%H:%M:%S')
68
66
  if time_obj.strftime('%H:%M:%S') != time_str:
69
- logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
67
+ logger.end(object={
70
68
  "is_valid_time_range_result": False, "reason": "time_range contains invalid time format"})
71
69
  return False
72
70
 
73
- logger.end(IS_VALID_TIME_RANGE_METHOD_NAME, object={
74
- "is_valid_time_range_result": True})
71
+ logger.end(object={"is_valid_time_range_result": True})
75
72
  return True
76
73
 
77
74
 
75
+ # TODO shall we also use Url type and not only str? - Strongly Type which I prefer
76
+ # (if yes we should change it also in all the calls to this function)
78
77
  def validate_url(url: str):
78
+ logger.start(object={"url": url})
79
79
  if url is not None or url != "":
80
80
  parsed_url = urlparse(url)
81
- return parsed_url.scheme and parsed_url.netloc
82
- return True
81
+ is_valid_url = parsed_url.scheme and parsed_url.netloc
82
+ else:
83
+ is_valid_url = True
84
+ logger.end(object={"is_valid_url": is_valid_url})
85
+ return is_valid_url
83
86
 
84
87
 
85
88
  def is_valid_date_range(date_range: tuple) -> bool:
86
89
  """
87
90
  Validate that the date range is in the format 'YYYY-MM-DD'.
88
91
  """
89
- IS_VALID_DATE_RANGE_METHOD_NAME = "is_valid_date_range"
90
- logger.start(IS_VALID_DATE_RANGE_METHOD_NAME, object={
91
- "date_range": date_range.__str__()})
92
+ logger.start(object={"date_range": date_range.__str__()})
92
93
  if len(date_range) != 2:
93
- logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
94
- "is_valid_date_range_result": False, "reason": "len(date_range) != 2"})
94
+ logger.end(object={"is_valid_date_range_result": False, "reason": "len(date_range) != 2"})
95
95
  return False
96
96
 
97
97
  for date_obj in date_range:
98
98
  if not isinstance(date_obj, date):
99
- logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
99
+ logger.end(object={
100
100
  "is_valid_date_range_result": False, "reason": "date_range contains non-date objects"})
101
101
  return False
102
- logger.end(IS_VALID_DATE_RANGE_METHOD_NAME, object={
103
- "is_valid_date_range_result": True})
102
+ logger.end(object={"is_valid_date_range_result": True})
104
103
  return True
105
104
 
106
105
 
@@ -108,21 +107,16 @@ def is_valid_datetime_range(datetime_range: tuple) -> bool:
108
107
  """
109
108
  Validate that the datetime range is in the format 'YYYY-MM-DD HH:MM:SS'.
110
109
  """
111
- IS_VALID_DATETIME_RANGE_METHOD_NAME = "is_valid_datetime_range"
112
- logger.start(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
113
- "datetime_range": datetime_range.__str__()})
110
+ logger.start(object={"datetime_range": datetime_range.__str__()})
114
111
  if len(datetime_range) != 2:
115
- logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
116
- "is_valid_datetime_range_result": False, "reason": "len(datetime_range) != 2"})
112
+ logger.end(object={"is_valid_datetime_range_result": False, "reason": "len(datetime_range) != 2"})
117
113
  return False
118
114
 
119
115
  for datetime_obj in datetime_range:
120
116
  if not isinstance(datetime_obj, datetime):
121
- logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
122
- "is_valid_datetime_range_result": False, "reason": "datetime_range contains non-datetime objects"})
117
+ logger.end(object={"is_valid_datetime_range_result": False, "reason": "datetime_range contains non-datetime objects"})
123
118
  return False
124
- logger.end(IS_VALID_DATETIME_RANGE_METHOD_NAME, object={
125
- "is_valid_datetime_range_result": True})
119
+ logger.end(object={"is_valid_datetime_range_result": True})
126
120
  return True
127
121
 
128
122
 
@@ -148,27 +142,25 @@ def is_list_of_dicts(obj: object) -> bool:
148
142
  >>> is_list_of_dicts(1)
149
143
  False
150
144
  """
151
- IS_LIST_OF_DICTS_FUNCTION_NAME = "is_list_of_dicts"
152
- logger.start(IS_LIST_OF_DICTS_FUNCTION_NAME, object={"obj": obj})
145
+ logger.start(object={"obj": obj})
153
146
  try:
154
147
  if not isinstance(obj, list):
155
148
  is_list_of_dicts_result = False
156
- logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
157
- "is_list_of_dicts_result": is_list_of_dicts_result})
149
+ logger.end(object={"is_list_of_dicts_result": is_list_of_dicts_result})
158
150
  return is_list_of_dicts_result
159
151
  for item in obj:
160
152
  if not isinstance(item, dict):
161
153
  is_list_of_dicts_result = False
162
- logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
154
+ logger.end(object={
163
155
  "is_list_of_dicts_result": is_list_of_dicts_result})
164
156
  return is_list_of_dicts_result
165
157
  is_list_of_dicts_result = True
166
- logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME, object={
158
+ logger.end(object={
167
159
  "is_list_of_dicts_result": is_list_of_dicts_result})
168
160
  return is_list_of_dicts_result
169
161
  except Exception as exception:
170
- logger.exception(IS_LIST_OF_DICTS_FUNCTION_NAME, exception)
171
- logger.end(IS_LIST_OF_DICTS_FUNCTION_NAME)
162
+ logger.exception(object=exception)
163
+ logger.end()
172
164
  raise
173
165
 
174
166
 
@@ -183,15 +175,14 @@ def is_time_in_time_range(check_time: time, time_range: tuple) -> bool:
183
175
  Returns:
184
176
  bool: True if the check_time is within the time range, False otherwise.
185
177
  """
186
- IS_TIME_IN_TIME_RANGE_METHOD_NAME = "is_time_in_time_range"
187
- logger.start(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
178
+ logger.start(object={
188
179
  "check_time": check_time.__str__(), "time_range": time_range.__str__()})
189
180
  if not is_valid_time_range(time_range) or not isinstance(check_time, time):
190
- logger.end(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
181
+ logger.end(object={
191
182
  "is_time_in_time_range_result": False})
192
183
  return False
193
184
  start_time, end_time = time_range
194
- logger.end(IS_TIME_IN_TIME_RANGE_METHOD_NAME, object={
185
+ logger.end(object={
195
186
  "is_time_in_time_range_result": start_time <= check_time <= end_time})
196
187
  return start_time <= check_time <= end_time
197
188
 
@@ -207,16 +198,15 @@ def is_date_in_date_range(check_date: date, date_range: tuple) -> bool:
207
198
  Returns:
208
199
  bool: True if the check_date is within the date range, False otherwise.
209
200
  """
210
- IS_DATE_IN_DATE_RANGE_METHOD_NAME = "is_date_in_date_range"
211
- logger.start(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
201
+ logger.start(object={
212
202
  "check_date": check_date.__str__(), "date_range": date_range.__str__()})
213
203
  if not is_valid_date_range(date_range) or not isinstance(check_date, date):
214
- logger.end(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
204
+ logger.end(object={
215
205
  "is_date_in_date_range_result": False})
216
206
  return False
217
207
 
218
208
  start_date, end_date = date_range
219
- logger.end(IS_DATE_IN_DATE_RANGE_METHOD_NAME, object={
209
+ logger.end(object={
220
210
  "is_date_in_date_range_result": start_date <= check_date <= end_date})
221
211
  return start_date <= check_date <= end_date
222
212
 
@@ -232,67 +222,19 @@ def is_datetime_in_datetime_range(check_datetime: datetime, datetime_range: tupl
232
222
  Returns:
233
223
  bool: True if the check_datetime is within the datetime range, False otherwise.
234
224
  """
235
- IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME = "is_datetime_in_datetime_range"
236
- logger.start(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME)
225
+ logger.start()
237
226
  if not is_valid_datetime_range(datetime_range) or not isinstance(check_datetime, datetime):
238
- logger.end(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME, object={
227
+ logger.end(object={
239
228
  "is_valid_datetime_range": False})
240
229
  return False
241
230
 
242
231
  start_datetime, end_datetime = datetime_range
243
232
  is_datetime_in_datetime_range_result = start_datetime <= check_datetime <= end_datetime
244
- logger.end(IS_DATETIME_IN_DATETIME_RANGE_METHOD_NAME, object={
233
+ logger.end(object={
245
234
  "is_datetime_in_datetime_range_result": is_datetime_in_datetime_range_result})
246
235
  return is_datetime_in_datetime_range_result
247
236
 
248
237
 
249
- # 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 # noqa501
250
- # TODO Take those three functions to a separate file http_response.py
251
- # TODO Shall we create also createInternalServerErrorHttpResponse(), createOkHttpResponse() like we have in TypeScript?
252
-
253
- # Former name was create_http_headers()
254
- def create_authorization_http_headers(user_jwt: str) -> dict:
255
- return {
256
- 'Content-Type': 'application/json',
257
- 'Authorization': f'Bearer {user_jwt}',
258
- }
259
-
260
-
261
- def get_user_jwt_from_event(event: dict) -> str:
262
- auth_header = event.get('headers', {}).get('authorization')
263
- if auth_header is None:
264
- auth_header = event.get('headers', {}).get('Authorization')
265
- return auth_header.split('Bearer ')[1]
266
-
267
-
268
- def create_return_http_headers() -> dict:
269
- return {
270
- "Content-Type": "application/json",
271
- "Access-Control-Allow-Origin": "*",
272
- }
273
-
274
- def create_error_http_response(exception: Exception) -> dict:
275
- return {
276
- "statusCode": status.BAD_GATEWAY,
277
- "headers": create_return_http_headers(),
278
- "body": create_http_body({"error": str(exception)})
279
- }
280
-
281
- def create_ok_http_response(body: dict) -> dict:
282
- return {
283
- "statusCode": status.OK,
284
- "headers": create_return_http_headers(),
285
- "body": create_http_body(body)
286
- }
287
-
288
-
289
- # https://google.github.io/styleguide/jsoncstyleguide.xml?showone=Property_Name_Format#Property_Name_Format
290
- def create_http_body(body: dict) -> str:
291
- # TODO console.warning() if the body is not a valid camelCase JSON
292
- # https://stackoverflow.com/questions/17156078/converting-identifier-naming-between-camelcase-and-underscores-during-json-seria
293
- return json.dumps(body)
294
-
295
-
296
238
  def get_brand_name() -> str:
297
239
  return our_get_env("BRAND_NAME")
298
240
 
@@ -304,10 +246,12 @@ def get_environment_name() -> str:
304
246
 
305
247
 
306
248
  def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True) -> str:
307
- result = os.getenv(key, default)
308
- if raise_if_not_found and result is None:
249
+ logger.start(object={"key": key, "default": default, "raise_if_not_found": raise_if_not_found})
250
+ env_var = os.getenv(key, default)
251
+ if raise_if_not_found and env_var is None:
309
252
  raise Exception(f"Environment variable {key} not found")
310
- return result
253
+ logger.end(object={"env_var": env_var})
254
+ return env_var
311
255
 
312
256
 
313
257
  def get_sql_hostname() -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.91
3
+ Version: 0.0.93
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
@@ -8,6 +8,8 @@ python_sdk_remote.egg-info/requires.txt
8
8
  python_sdk_remote.egg-info/top_level.txt
9
9
  python_sdk_remote/src/__init__.py
10
10
  python_sdk_remote/src/constants.py
11
+ python_sdk_remote/src/get_dependencies.py
12
+ python_sdk_remote/src/http_response.py
11
13
  python_sdk_remote/src/item.py
12
14
  python_sdk_remote/src/mini_logger.py
13
15
  python_sdk_remote/src/our_object.py
@@ -7,7 +7,7 @@ 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.91', # https://pypi.org/project/python-sdk-remote/
10
+ version='0.0.93', # https://pypi.org/project/python-sdk-remote/
11
11
  author="Circles",
12
12
  author_email="info@circles.life",
13
13
  description="PyPI Package for Circles Python SDK Local Python",