|
"""Various utilities (logger, time benchmark, args dump, numerical and stats info)""" |
|
|
|
|
|
def is_base64(sb): |
|
import base64 |
|
|
|
try: |
|
if isinstance(sb, str): |
|
|
|
sb_bytes = bytes(sb, 'ascii') |
|
elif isinstance(sb, bytes): |
|
sb_bytes = sb |
|
else: |
|
raise ValueError("Argument must be string or bytes") |
|
return base64.b64encode(base64.b64decode(sb_bytes, validate=True)) == sb_bytes |
|
except ValueError: |
|
return False |
|
|
|
|
|
def base64_decode(s): |
|
import base64 |
|
|
|
if isinstance(s, str) and is_base64(s): |
|
return base64.b64decode(s, validate=True).decode("utf-8") |
|
|
|
return s |
|
|
|
|
|
def get_constants(event: dict, debug=False) -> dict: |
|
""" |
|
Return constants we need to use from event, context and environment variables (both production and test). |
|
|
|
Args: |
|
event: request event |
|
debug: logging debug argument |
|
|
|
Returns: |
|
dict: project constants object |
|
|
|
""" |
|
import json |
|
|
|
local_logger = setup_logging(debug) |
|
try: |
|
body = event["body"] |
|
except Exception as e_constants1: |
|
local_logger.error(f"e_constants1:{e_constants1}.") |
|
body = event |
|
|
|
if isinstance(body, str): |
|
body = json.loads(event["body"]) |
|
|
|
try: |
|
debug = body["debug"] |
|
local_logger.info(f"re-try get debug value:{debug}, log_level:{local_logger.level}.") |
|
local_logger = setup_logging(debug) |
|
except KeyError: |
|
local_logger.error("get_constants:: no debug key, pass...") |
|
local_logger.debug(f"constants debug:{debug}, log_level:{local_logger.level}, body:{body}.") |
|
|
|
try: |
|
return { |
|
"bbox": body["bbox"], |
|
"point": body["point"], |
|
"debug": debug |
|
} |
|
except KeyError as e_key_constants2: |
|
local_logger.error(f"e_key_constants2:{e_key_constants2}.") |
|
raise KeyError(f"e_key_constants2:{e_key_constants2}.") |
|
except Exception as e_constants2: |
|
local_logger.error(f"e_constants2:{e_constants2}.") |
|
raise e_constants2 |
|
|