diff --git a/scp_udg_client_app/commands/last_request.py b/scp_udg_client_app/commands/last_request.py index 8fd66327d18f0fab27d40f8141fe26cb51c81ecf..df239e7d77ea88747d1615cfcaf5cf9f51353bd9 100644 --- a/scp_udg_client_app/commands/last_request.py +++ b/scp_udg_client_app/commands/last_request.py @@ -1,15 +1,17 @@ #!/usr/bin/env python3 -import logging import click import click_config_file +import click_log +from click import ClickException from scp_udg_client_rest import LastRequest -from scp_udg_client_app.helpers import create_api_client_instance, active_login, save_dataset, javaproperties_provider -from scp_udg_client_app.options import login_options, udg_endpoint_option, resource_id_option, inbox_dir_option +from scp_udg_client_app.helpers import create_api_client_instance, active_login, save_dataset, javaproperties_provider, \ + get_token +from scp_udg_client_app.options import udg_endpoint_option, resource_id_option, inbox_dir_option -# Setting up Logger -logger = logging.getLogger() +# Logger configuration +logger = click_log.basic_config(__name__) # Introduce constant RESPONSE_CODE_SUCCESS = "03" @@ -20,31 +22,42 @@ RESPONSE_CODE_SUCCESS = "03" config_file_name="config.properties", help="Read configuration from a Java .properties FILE.") @udg_endpoint_option -@login_options -@click.option('--access-token', hidden=True, prompt=True, prompt_required=False) +@click.option('--token', show_envvar=True) +@click.option('--token-file', type=click.File('r'), show_envvar=True) +@click.option('--is-json', help="Parse input data as JSON", is_flag=True, show_envvar=True) +@click.option('--username', prompt=True, prompt_required=False, show_envvar=True) +@click.password_option(show_default=False, prompt_required=False, show_envvar=True) @resource_id_option @inbox_dir_option @click.pass_context -def last_request(ctx, udg_endpoint, resource_id, access_token, username, password, inbox_dir): +def last_request(ctx, token, token_file, is_json, username, password, udg_endpoint, resource_id, inbox_dir): """Fetch and save the last dataset from an UDG endpoint.""" - api_client = create_api_client_instance(udg_endpoint, access_token) - - if username and not active_login(api_client, username, password): - logger.warning("Login fallito!") - return - + token = get_token(token, token_file, is_json) + if not token and (not username or not password): + raise click.ClickException( + "Authentication credentials not specified (either token or username/password should be provided)") + api_client = create_api_client_instance(udg_endpoint, token) try: + if not active_login(api_client, username, password): + raise click.ClickException("Login failed! Please check your credentials.") response = api_client.last(LastRequest(resource_id=resource_id)) process_response(response, resource_id, inbox_dir) + except ClickException as ce: + raise ce except Exception as e: - logger.error(f"Errore durante il recupero del dataset: {str(e)}") + error_message = f"Unexpected error occurred when fetching the dataset: {str(e)}" + logger.error(error_message) + raise click.ClickException(error_message) def process_response(response, resource_id, inbox_dir): if response.code == RESPONSE_CODE_SUCCESS: save_dataset(response.dataset.actual_instance, resource_id, inbox_dir) + logger.info(f"Dataset saved successfully for resource_id: {resource_id} in directory: {inbox_dir}") else: - logger.warning(response.to_json()) + error_message = f"Failed to fetch dataset for resource_id: {resource_id}. Response code: {response.code}, Response: {response.to_json()}" + logger.warning(error_message) + raise click.ClickException(error_message) if __name__ == '__main__':