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
14 changes: 10 additions & 4 deletions src/petab_gui/controllers/mother_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -836,9 +836,10 @@ def new_file(self):
def check_model(self):
"""Check the consistency of the model. And log the results."""
capture_handler = CaptureLogHandler()
logger = logging.getLogger("petab.v1.lint") # Target the specific
# logger
logger.addHandler(capture_handler)
logger_lint = logging.getLogger("petab.v1.lint")
logger_vis = logging.getLogger("petab.v1.visualize.lint")
logger_lint.addHandler(capture_handler)
logger_vis.addHandler(capture_handler)

try:
# Run the consistency check
Expand Down Expand Up @@ -871,7 +872,8 @@ def check_model(self):
self.logger.log_message(msg, color="red")
finally:
# Always remove the capture handler
logger.removeHandler(capture_handler)
logger_lint.removeHandler(capture_handler)
logger_vis.removeHandler(capture_handler)

def unsaved_changes_change(self, unsaved_changes: bool):
self.unsaved_changes = unsaved_changes
Expand Down Expand Up @@ -1154,3 +1156,7 @@ def _show_help_welcome(self):
msg.exec()
if dont.isChecked():
settings.setValue("help_mode/welcome_disabled", True)

def get_current_problem(self):
"""Get the current PEtab problem from the model."""
return self.model.current_petab_problem
28 changes: 27 additions & 1 deletion src/petab_gui/controllers/table_controllers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Classes for the controllers of the tables in the GUI."""

import logging
import re
from collections.abc import Sequence
from pathlib import Path
Expand All @@ -22,7 +23,12 @@
PandasTableModel,
)
from ..settings_manager import settings_manager
from ..utils import ConditionInputDialog, get_selected, process_file
from ..utils import (
CaptureLogHandler,
ConditionInputDialog,
get_selected,
process_file,
)
from ..views.other_views import DoseTimeDialog
from ..views.table_view import (
ColumnSuggestionDelegate,
Expand Down Expand Up @@ -1316,6 +1322,26 @@ def __init__(
mother_controller=mother_controller,
)

@linter_wrapper(additional_error_check=True)
def check_petab_lint(
self,
row_data: pd.DataFrame = None,
row_name: str = None,
col_name: str = None,
):
"""Check a number of rows of the model with petablint."""
problem = self.mother_controller.get_current_problem()
capture_handler = CaptureLogHandler()
logger_vis = logging.getLogger("petab.v1.visualize.lint")
logger_vis.addHandler(capture_handler)
errors = petab.visualize.lint.validate_visualization_df(problem)
if not errors:
return not errors
captured_output = "<br>&nbsp;&nbsp;&nbsp;&nbsp;".join(
capture_handler.get_formatted_messages()
)
raise ValueError(captured_output)

def setup_completers(self):
"""Set completers for the visualization table."""
table_view = self.view.table_view
Expand Down