"""Requests to ows-abacus-state.""" from src.connectors.exceptions import OwsAbacusStateException from src.models import AbacusState from src.requests import get, put SERVICE = 'ows-abacus-state' def get_abacus_state(account_payee_id: int, action_name: str) -> AbacusState | None: """Get ABACUS state(s) by account_payee_id and action_name.""" path = f'/abacus-state/account_payee/{account_payee_id}' try: response = get(SERVICE, path, raise_for_status=True) except Exception as e: raise OwsAbacusStateException( f'Failed to get abacus states for payee {account_payee_id}: {e}' ) data = AbacusState.list_validate(response.json()) return next((item for item in data if item.action_name == action_name), None) def update_abacus_state( abacus_state_id: int, action_status: str, message: str | None ) -> AbacusState: """Update ABACUS state status.""" try: response = put( SERVICE, f'/abacus-state/{abacus_state_id}', body={ 'action_status': action_status, 'message': message, }, raise_for_status=True, ) except Exception as e: raise OwsAbacusStateException( f'Failed to update abacus state {abacus_state_id}: {e}' ) return AbacusState.model_validate(response.json()) def set_state( account_payee_id: int, action_name: str, action_status: str, message: str | None ) -> None: """Upsert ABACUS state.""" state = get_abacus_state(account_payee_id, action_name) if not state: raise OwsAbacusStateException( f'{action_name} is missing for payee {account_payee_id}' ) update_abacus_state(state.abacus_state_id, action_status, message)