"""Shared utilities helpers.""" from datetime import datetime from functools import wraps import hashlib from time import time from flask import g from flask import request from oto import response from oto.adaptors.flask import flaskify from werkzeug.exceptions import BadRequest from prs import config from prs.constants import error def get_file_code(): """Generate 5 character code for file names. Returns: string: a randomly generated 5 character code, used in generating unique file names. """ return hashlib.md5(str(time()).encode('utf-8')).hexdigest()[:5].upper() def generate_file_base_name(tool_name, country_name, file_code): """Generate file base name. Args: tool_name (str): Used to create a folder w.r.t tool_name. country_name (str): Country name file_code (str): 5 character file code Returns: string: File base name """ current_date_time = get_current_datetime('%Y-%m-%d-%I.%M.%S%p').lower() file_base_name = '{}/{}/{}-{}-{}'.format( config.SERVICE_NAME, tool_name, country_name.replace(' ', '_'), file_code, current_date_time) return file_base_name def get_current_datetime(datetime_format): """Get current datetime in string as per given format. Args: datetime_format (str): datetime format as required by strftime function Returns: string: Current datetime """ return datetime.now().strftime(datetime_format) def log_info_to_loggly(message): """Log message to Loggly as info. Args: message (str): message to be logged in Loggly """ g.ows.log.info(message) def validate_request_json(function): """Decorator to validate json request. Returns: func: function decorated with error-handling logic """ @wraps(function) def validate_json(*args, **kwargs): valid_request_json = True try: tool_param_data = request.get_json() if not isinstance(tool_param_data, dict) or not tool_param_data: valid_request_json = False except BadRequest: valid_request_json = False if not valid_request_json: return flaskify(response.create_error_response( code=error.ERROR_CODE_BAD_REQUEST, message=error.ERROR_MESSAGE_INVALID_REQUEST_BODY)) return function(*args, **kwargs) return validate_json