python-sdk-remote 0.0.112__tar.gz → 0.0.114__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.112 → python_sdk_remote-0.0.114}/PKG-INFO +4 -2
  2. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/utilities.py +107 -4
  3. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote.egg-info/PKG-INFO +4 -2
  4. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote.egg-info/requires.txt +2 -0
  5. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/setup.py +5 -3
  6. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/README.md +0 -0
  7. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/pyproject.toml +0 -0
  8. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/__init__.py +0 -0
  9. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/constants.py +0 -0
  10. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/http_response.py +0 -0
  11. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/item.py +0 -0
  12. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/mini_logger.py +0 -0
  13. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/our_object.py +0 -0
  14. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/unified_json.py +0 -0
  15. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/valid_json_versions.py +0 -0
  16. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote/src/validate_environment.py +0 -0
  17. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote.egg-info/SOURCES.txt +0 -0
  18. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote.egg-info/dependency_links.txt +0 -0
  19. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/python_sdk_remote.egg-info/top_level.txt +0 -0
  20. {python_sdk_remote-0.0.112 → python_sdk_remote-0.0.114}/setup.cfg +0 -0
@@ -1,15 +1,17 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.112
3
+ Version: 0.0.114
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.ai
7
+ Author-email: info@circlez.ai
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Operating System :: OS Independent
11
11
  Description-Content-Type: text/markdown
12
+ Requires-Dist: requests
12
13
  Requires-Dist: python-dotenv
13
14
  Requires-Dist: url-remote
15
+ Requires-Dist: pyjwt
14
16
 
15
17
  This is a package for sharing common functions used in different repositories
@@ -1,13 +1,18 @@
1
1
  import json
2
+ import jwt
3
+ import requests
4
+ import re
2
5
  import os
3
- from datetime import date, datetime, time, timedelta
6
+ import random
7
+ from datetime import date, datetime, time, timedelta, timezone
4
8
  from urllib.parse import urlparse
5
9
 
6
10
  from dotenv import load_dotenv
7
11
  from url_remote.environment_name_enum import EnvironmentName
8
12
 
9
13
  from .mini_logger import MiniLogger as logger
10
- from .http_response import (create_authorization_http_headers, get_user_jwt_from_event, # noqa - used for backwards compatibility
14
+ from .http_response import (create_authorization_http_headers, # noqa - used for backwards compatibility
15
+ get_user_jwt_from_event,
11
16
  create_return_http_headers, create_error_http_response, create_ok_http_response,
12
17
  create_http_body)
13
18
 
@@ -19,6 +24,7 @@ load_dotenv()
19
24
 
20
25
  # TODO Use the const/enum from language package
21
26
  DEFAULT_LANG_CODE_STR = "en"
27
+ DEFAULT_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
22
28
 
23
29
 
24
30
  def append_if_not_exist(lst: list, item: object) -> None:
@@ -287,7 +293,6 @@ def our_get_env(key: str, default: str = None, raise_if_not_found: bool = True,
287
293
  return env_var
288
294
 
289
295
 
290
-
291
296
  def get_sql_hostname() -> str:
292
297
  return our_get_env("RDS_HOSTNAME")
293
298
 
@@ -300,5 +305,103 @@ def get_sql_password() -> str:
300
305
  return our_get_env("RDS_PASSWORD")
301
306
 
302
307
 
308
+ def get_dialog_jwt_secret_key() -> str:
309
+ return our_get_env("DIALOG_JWT_SECRET_KEY", raise_if_empty=True)
310
+
311
+
312
+ def encode_jwt(payload: dict, key: str) -> str:
313
+ """Example:
314
+ payload = {
315
+ "user_id": 123,
316
+ "username": "john_doe",
317
+ "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)
318
+ }
319
+ """
320
+ return jwt.encode(payload, key, algorithm='HS256')
321
+
322
+
323
+ def decode_jwt(token: str, key: str) -> dict:
324
+ """key can be private / public"""
325
+ return jwt.decode(token, key, algorithms=['HS256'])
326
+
327
+
328
+ def obfuscate_log_dict(log_dict: dict) -> dict:
329
+ """
330
+ Obfuscate keys:
331
+ - %password%
332
+ - %secret%
333
+ - %token%
334
+ - %jwt%
335
+ - %e%mail%
336
+ - %phone%
337
+ - %name% (first / last / nick / user etc.)
338
+ - %address%
339
+ - %ssn%
340
+ """
341
+ environment_name = get_environment_name()
342
+ if environment_name == EnvironmentName.PLAY1.value:
343
+ return log_dict
344
+ obfuscated_log_dict = {}
345
+ for key, value in log_dict.items():
346
+ if isinstance(value, dict):
347
+ obfuscated_log_dict[key] = obfuscate_log_dict(value)
348
+ elif re.search(r'password|secret|token|jwt|e[\-_]?mail|phone|name|address|ssn', key, re.IGNORECASE):
349
+ obfuscated_log_dict[key] = "***"
350
+ else:
351
+ obfuscated_log_dict[key] = value
352
+ return obfuscated_log_dict
353
+
354
+ # TODO: add tests to the following functions
355
+
303
356
  def remove_digits(text: str) -> str:
304
- return ''.join([i for i in text if not i.isdigit()])
357
+ return ''.join(i for i in text if not i.isdigit())
358
+
359
+
360
+ def generate_otp():
361
+ """Generates a 6-digit OTP"""
362
+ otp = random.randint(100000, 999999)
363
+ return otp
364
+
365
+
366
+ def get_current_datetime_string(datetime_format: str = DEFAULT_DATETIME_FORMAT, tz: timezone = None) -> str:
367
+ current_datetime_string = datetime.now(tz).strftime(datetime_format)
368
+ return current_datetime_string
369
+
370
+
371
+ def datetime_from_str(date_str: str, datetime_format: str = DEFAULT_DATETIME_FORMAT) -> datetime:
372
+ return datetime.strptime(date_str, datetime_format)
373
+
374
+
375
+ def datetime_to_str(input_datetime: datetime, datetime_format: str = DEFAULT_DATETIME_FORMAT) -> str:
376
+ return input_datetime.strftime(datetime_format)
377
+
378
+
379
+ def validate_arguments(args: dict) -> None:
380
+ """
381
+ Validate method arguments to ensure they are not None or ''
382
+ :param args: arguments to be validated (usually locals())
383
+ :return: True if all arguments are not None or '', False otherwise
384
+ """
385
+ for arg, value in args.items():
386
+ if not arg:
387
+ raise ValueError(f"Argument {arg} is cannot be empty (got {value})")
388
+
389
+
390
+ def reformat_time_string(input_str: str) -> str:
391
+ """Example:
392
+ "1234" -> "12:34:00:00"
393
+ """
394
+ hours = input_str[:2]
395
+ minutes = "00" if len(input_str) < 4 else input_str[2:4]
396
+ seconds = "00" if len(input_str) < 6 else input_str[4:6]
397
+ milliseconds = "00" if len(input_str) < 8 else input_str[6:8]
398
+ time_format = f"{hours}:{minutes}:{seconds}:{milliseconds}"
399
+ return time_format
400
+
401
+
402
+ def get_ip_v4():
403
+ return requests.get('https://ipv4.seeip.org/jsonip').json()['ip']
404
+
405
+
406
+ def get_ip_v6():
407
+ return requests.get('https://api.seeip.org/jsonip').json()['ip']
@@ -1,15 +1,17 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-sdk-remote
3
- Version: 0.0.112
3
+ Version: 0.0.114
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.ai
7
+ Author-email: info@circlez.ai
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: Other/Proprietary License
10
10
  Classifier: Operating System :: OS Independent
11
11
  Description-Content-Type: text/markdown
12
+ Requires-Dist: requests
12
13
  Requires-Dist: python-dotenv
13
14
  Requires-Dist: url-remote
15
+ Requires-Dist: pyjwt
14
16
 
15
17
  This is a package for sharing common functions used in different repositories
@@ -1,2 +1,4 @@
1
+ requests
1
2
  python-dotenv
2
3
  url-remote
4
+ pyjwt
@@ -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.112', # https://pypi.org/project/python-sdk-remote/
10
+ version='0.0.114', # https://pypi.org/project/python-sdk-remote/
11
11
  author="Circles",
12
- author_email="info@circles.ai",
12
+ author_email="info@circlez.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",
@@ -23,7 +23,9 @@ setuptools.setup(
23
23
  "Operating System :: OS Independent",
24
24
  ],
25
25
  install_requires=[
26
+ "requests",
26
27
  "python-dotenv",
27
- "url-remote"
28
+ "url-remote",
29
+ "pyjwt",
28
30
  ]
29
31
  )