"""Module for working with status notifications.""" from typing import Any from src.connectors import ows_assets def _remove_none_entries(source: dict[str, Any]) -> dict[str, Any]: """Remove entries with None values from dictionary. Args: source (dict): Source dictionary containing entries with None values. Returns: dict: Return a new dictionary with None values filtered out. """ return {key: val for key, val in source.items() if val is not None} def send_general_status( function: str, status: str, filename: str | None, error_code: str | None = None, description: str | None = None, bucket: str | None = None, input_params: dict[str, Any] | None = None, result_details: dict[str, Any] | None = None, ) -> dict[str, Any]: """Send general status notification about asset file processing. Args: function (str): Status source lambda function name. status (str): Status. filename (str): Current processed asset filename. error_code (str): Status error code (for error status). description (str): Status description (if any). bucket (str): Current processed asset source bucket name. input_params (dict): Source lambda additional input params. result_details (dict): Source lambda additional result details. Returns: dict: Info about published status message. """ if input_params is None: input_params = {} if filename is not None: input_params["key"] = filename if bucket: input_params["bucket"] = bucket message = { "function": function, "status": status, "error_code": error_code, "description": description, "input": input_params, "result": result_details, } cleaned_message = _remove_none_entries(message) ows_assets.post_asset_status(filename, status, description or "", cleaned_message) return cleaned_message