Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,13 @@ jobs:

fake_f = MagicMock()
fake_f.controller = FakeControllerModule()
fake_f.shared = MagicMock()
fake_f.shared.otel_logging = MagicMock()
fake_f.shared.otel_logging.get_logger = lambda name: MagicMock()
sys.modules['f'] = fake_f
sys.modules['f.controller'] = fake_f.controller
sys.modules['f.shared'] = fake_f.shared
sys.modules['f.shared.otel_logging'] = fake_f.shared.otel_logging

# Pre-populate all f.controller.xxx modules BEFORE any imports
for module_name in ['config', 'database', 'breeder_service', 'breeder_create',
Expand Down Expand Up @@ -382,8 +387,13 @@ jobs:

fake_f = MagicMock()
fake_f.controller = FakeControllerModule()
fake_f.shared = MagicMock()
fake_f.shared.otel_logging = MagicMock()
fake_f.shared.otel_logging.get_logger = lambda name: MagicMock()
sys.modules['f'] = fake_f
sys.modules['f.controller'] = fake_f.controller
sys.modules['f.shared'] = fake_f.shared
sys.modules['f.shared.otel_logging'] = fake_f.shared.otel_logging

# Pre-populate all f.controller.xxx modules BEFORE any imports
for module_name in ['config', 'database', 'breeder_service', 'breeder_create',
Expand Down
6 changes: 2 additions & 4 deletions controller/breeder_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,19 @@
import hashlib
import datetime
import copy
import logging
import os
from dateutil.parser import parse

from f.controller.database import ArchiveDatabaseRepository, MetadataDatabaseRepository
from f.controller.config import BreederConfig, BREEDER_CAPABILITIES, DatabaseConfig
from f.shared.otel_logging import get_logger

# Import wmill at top level so Windmill can detect it for dependency resolution
import wmill
from wmill import Windmill

# Import optuna for schema initialization
import optuna.storages

logger = logging.getLogger(__name__)
logger = get_logger(__name__)

def cancel_job_by_id(job_id: str, reason: str = None) -> bool:
"""Cancel a Windmill job by its ID
Expand Down
4 changes: 2 additions & 2 deletions controller/credential_create.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from f.controller.config import DatabaseConfig
from f.controller.database import MetadataDatabaseRepository
from f.shared.otel_logging import get_logger
import uuid
import logging

logger = logging.getLogger(__name__)
logger = get_logger(__name__)

def main(request_data=None):
"""Create a new credential catalog entry"""
Expand Down
4 changes: 2 additions & 2 deletions controller/credential_delete.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from f.controller.config import DatabaseConfig
from f.controller.database import MetadataDatabaseRepository
import logging
from f.shared.otel_logging import get_logger

logger = logging.getLogger(__name__)
logger = get_logger(__name__)

def main(request_data=None):
"""Delete a credential by ID"""
Expand Down
4 changes: 2 additions & 2 deletions controller/credential_get.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from f.controller.config import DatabaseConfig
from f.controller.database import MetadataDatabaseRepository
import logging
from f.shared.otel_logging import get_logger

logger = logging.getLogger(__name__)
logger = get_logger(__name__)

def main(request_data=None):
"""Get a specific credential by ID"""
Expand Down
4 changes: 2 additions & 2 deletions controller/credentials_get.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from f.controller.config import DatabaseConfig
from f.controller.database import MetadataDatabaseRepository
import logging
from f.shared.otel_logging import get_logger

logger = logging.getLogger(__name__)
logger = get_logger(__name__)

def main(request_data=None):
"""Get list of all credentials"""
Expand Down
5 changes: 3 additions & 2 deletions controller/database.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import psycopg2
import logging
import json
from contextlib import contextmanager

logger = logging.getLogger(__name__)
from f.shared.otel_logging import get_logger

logger = get_logger(__name__)

@contextmanager
def get_db_connection(db_config):
Expand Down
12 changes: 6 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,32 @@
import types
from unittest.mock import MagicMock

# Add parent directory to path for imports
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

# Mock external dependencies before imports
sys.modules['database'] = MagicMock()

# Mock wmill module (only available inside Windmill)
sys.modules['wmill'] = MagicMock()

# Mock optuna.storages module (only needed in production, not tests)
sys.modules['optuna'] = MagicMock()
sys.modules['optuna.storages'] = MagicMock()

# Create stub modules using types.ModuleType
def create_stub_module(name):
module = types.ModuleType(name)
module.__path__ = []
module.__spec__ = None
module.__name__ = name
return module

# Create f and f.controller
fake_f = create_stub_module('f')
fake_controller = create_stub_module('f.controller')
fake_shared = create_stub_module('f.shared')
sys.modules['f'] = fake_f
sys.modules['f.controller'] = fake_controller
sys.modules['f.shared'] = fake_shared

fake_otel = create_stub_module('f.shared.otel_logging')
fake_otel.get_logger = lambda name: MagicMock()
sys.modules['f.shared.otel_logging'] = fake_otel

# Pre-populate all f.controller.xxx modules BEFORE any imports
for module_name in ['config', 'database', 'breeder_service', 'credential_create',
Expand Down
Loading