feat: enhance configuration and error handling in project setup
- Added new ignore rule for Ruff to allow temporary paths in tests. - Introduced MyPy overrides for specific modules to ignore errors. - Refactored `Cleanup` and `ExperimentTracking` classes to remove async keywords from methods, improving consistency in method signatures. - Updated `Training` class methods to handle synchronous operations, enhancing performance and clarity. - Adjusted `requirements.txt` to remove unnecessary Git dependency, streamlining project setup.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
"""Unit tests for ExperimentTracking class with 100% coverage."""
|
||||
|
||||
import asyncio
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
import pytest
|
||||
@@ -185,7 +184,7 @@ def test_execute_update_success(
|
||||
mock_engine.begin.return_value.__enter__.return_value = mock_connection
|
||||
et.engine = mock_engine
|
||||
|
||||
result = asyncio.run(et._execute_update('UPDATE test SET x = :x', {'x': 1}))
|
||||
result = et._execute_update('UPDATE test SET x = :x', {'x': 1})
|
||||
|
||||
assert result == {'rowcount': 1}
|
||||
mock_connection.execute.assert_called_once()
|
||||
@@ -212,7 +211,7 @@ def test_update_experiment_run_status_success(
|
||||
|
||||
mock_execute = MagicMock()
|
||||
|
||||
async def mock_execute_update(*args, **kwargs):
|
||||
def mock_execute_update(*args, **kwargs):
|
||||
mock_execute(*args, **kwargs)
|
||||
return {'rowcount': 1}
|
||||
|
||||
@@ -226,7 +225,7 @@ def test_update_experiment_run_status_success(
|
||||
'status': 'running',
|
||||
}
|
||||
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
mock_execute.assert_called_once()
|
||||
call_args = mock_execute.call_args
|
||||
@@ -255,7 +254,7 @@ def test_update_experiment_run_status_missing_status(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -264,9 +263,9 @@ def test_update_experiment_run_status_missing_status(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_status_with_error_success(
|
||||
@@ -290,7 +289,7 @@ def test_update_experiment_run_status_with_error_success(
|
||||
|
||||
mock_execute = MagicMock()
|
||||
|
||||
async def mock_execute_update(*args, **kwargs):
|
||||
def mock_execute_update(*args, **kwargs):
|
||||
mock_execute(*args, **kwargs)
|
||||
return {'rowcount': 1}
|
||||
|
||||
@@ -305,7 +304,7 @@ def test_update_experiment_run_status_with_error_success(
|
||||
'error_message': 'Test error',
|
||||
}
|
||||
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
mock_execute.assert_called_once()
|
||||
call_args = mock_execute.call_args
|
||||
@@ -336,7 +335,7 @@ def test_update_experiment_run_status_with_error_truncate_message(
|
||||
|
||||
mock_execute = MagicMock()
|
||||
|
||||
async def mock_execute_update(*args, **kwargs):
|
||||
def mock_execute_update(*args, **kwargs):
|
||||
mock_execute(*args, **kwargs)
|
||||
return {'rowcount': 1}
|
||||
|
||||
@@ -352,7 +351,7 @@ def test_update_experiment_run_status_with_error_truncate_message(
|
||||
'error_message': long_error,
|
||||
}
|
||||
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
call_args = mock_execute.call_args
|
||||
assert len(call_args[0][1]['error_message']) == 1024
|
||||
@@ -377,7 +376,7 @@ def test_update_experiment_run_status_with_error_missing_error_message(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -387,9 +386,9 @@ def test_update_experiment_run_status_with_error_missing_error_message(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_model_saved_success(
|
||||
@@ -413,7 +412,7 @@ def test_update_experiment_run_model_saved_success(
|
||||
|
||||
mock_execute = MagicMock()
|
||||
|
||||
async def mock_execute_update(*args, **kwargs):
|
||||
def mock_execute_update(*args, **kwargs):
|
||||
mock_execute(*args, **kwargs)
|
||||
return {'rowcount': 1}
|
||||
|
||||
@@ -428,7 +427,7 @@ def test_update_experiment_run_model_saved_success(
|
||||
'run_name': 'run_001',
|
||||
}
|
||||
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
mock_execute.assert_called_once()
|
||||
call_args = mock_execute.call_args
|
||||
@@ -457,7 +456,7 @@ def test_update_experiment_run_model_saved_missing_run_name(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -467,9 +466,9 @@ def test_update_experiment_run_model_saved_missing_run_name(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_invalid_update_type(
|
||||
@@ -491,7 +490,7 @@ def test_update_experiment_run_invalid_update_type(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -500,9 +499,9 @@ def test_update_experiment_run_invalid_update_type(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_no_rows_updated(
|
||||
@@ -524,11 +523,11 @@ def test_update_experiment_run_no_rows_updated(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
async def mock_execute_update(*args, **kwargs):
|
||||
def mock_execute_update(*args, **kwargs):
|
||||
return {'rowcount': 0}
|
||||
|
||||
et._execute_update = mock_execute_update
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -538,9 +537,9 @@ def test_update_experiment_run_no_rows_updated(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_status_with_error_missing_status(
|
||||
@@ -562,7 +561,7 @@ def test_update_experiment_run_status_with_error_missing_status(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -572,9 +571,9 @@ def test_update_experiment_run_status_with_error_missing_status(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_update_experiment_run_model_saved_missing_status(
|
||||
@@ -596,7 +595,7 @@ def test_update_experiment_run_model_saved_missing_status(
|
||||
metrics_controller=mock_metrics_controller,
|
||||
)
|
||||
|
||||
et.send_notification_async = AsyncMock()
|
||||
et.send_notification = MagicMock()
|
||||
|
||||
input_data = {
|
||||
'metadata': {'workflow_id': 'test-123'},
|
||||
@@ -606,9 +605,9 @@ def test_update_experiment_run_model_saved_missing_status(
|
||||
}
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
asyncio.run(et.update_experiment_run(input_data))
|
||||
et.update_experiment_run(input_data)
|
||||
|
||||
et.send_notification_async.assert_awaited_once()
|
||||
et.send_notification.assert_called_once()
|
||||
|
||||
|
||||
def test_experiment_tracking_del_with_engine_no_super_del(
|
||||
|
||||
Reference in New Issue
Block a user