diff --git a/pysus/management/scripts/sync_clients.py b/pysus/management/scripts/sync_clients.py index 5cae4cf4..0e4a42f4 100644 --- a/pysus/management/scripts/sync_clients.py +++ b/pysus/management/scripts/sync_clients.py @@ -105,18 +105,22 @@ def main() -> int: datasets = [d.upper() for d in args.datasets] if args.datasets else None - summary = asyncio.run( - run( - datasets, - args.checkpoint_every, - args.force, - args.workers, - args.ftp_connections, - args.saude_only, + try: + summary = asyncio.run( + run( + datasets, + args.checkpoint_every, + args.force, + args.workers, + args.ftp_connections, + args.saude_only, + ) ) - ) - print(summary) - return 0 + print(summary) + return 0 + except Exception as e: + print(f"Error: {e}") + return 1 if __name__ == "__main__": diff --git a/pysus/tests/management/test_scripts.py b/pysus/tests/management/test_scripts.py index fc7d0308..67297ecc 100644 --- a/pysus/tests/management/test_scripts.py +++ b/pysus/tests/management/test_scripts.py @@ -146,6 +146,20 @@ def test_main_runs(self, tmp_path, capsys): ): assert sync_clients.main() == 0 + def test_main_handles_exception(self, tmp_path, capsys): + from pysus.management.scripts import sync_clients + + with patch.object( + sync_clients, "run", new=AsyncMock(side_effect=Exception("mocked error")) + ): + with patch.object(sync_clients, "load_env", return_value={}): + with patch( + "sys.argv", + ["sync_clients", "--datasets", "SINAN"], + ): + assert sync_clients.main() == 1 + assert "Error: mocked error" in capsys.readouterr().out + class TestCompareClientsScript: def test_load_env(self, tmp_path):