Skip to content

Commit

Permalink
Tune down DB upgrade dialogs
Browse files Browse the repository at this point in the history
There would be more than one upgrade dialog per database at project
loading if the dialogs were cancelled. The dialogs would pop up
also when closing a project. This happens no more since DB manager
now keeps tabs on which database has shown the dialog. We ask
for upgrade again only when user tries to open an outdated database
in DB editor.

Re #2915
  • Loading branch information
soininen committed Aug 9, 2024
1 parent deb9cbe commit 57fa23a
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
6 changes: 3 additions & 3 deletions spinetoolbox/project_item/logging_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def has_filters(self):
url = resource.url
if not url:
continue
db_map = self._get_db_map(url, ignore_version_error=True)
db_map = self._get_db_map(url)
if db_map is None:
continue
known_filters = self._filter_settings.known_filters.get(resource.label, {})
Expand All @@ -184,9 +184,9 @@ def has_filters(self):
return True
return False

def _get_db_map(self, url, ignore_version_error=False):
def _get_db_map(self, url):
if url not in self._db_maps:
db_map = self._toolbox.db_mngr.get_db_map(url, self._toolbox, ignore_version_error=ignore_version_error)
db_map = self._toolbox.db_mngr.get_db_map(url, self._toolbox)
if db_map is None:
return None
self._db_maps[url] = db_map
Expand Down
4 changes: 3 additions & 1 deletion spinetoolbox/spine_db_editor/widgets/spine_db_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ def load_db_urls(self, db_url_codenames, create=False, update_history=True, wind
self._changelog.clear()
self._purge_change_notifiers()
for url, codename in db_url_codenames.items():
db_map = self.db_mngr.get_db_map(url, self, codename=codename, create=create, window=window)
db_map = self.db_mngr.get_db_map(
url, self, codename=codename, create=create, window=window, force_upgrade_prompt=True
)
if db_map is not None:
self.db_maps.append(db_map)
if not self.db_maps:
Expand Down
15 changes: 9 additions & 6 deletions spinetoolbox/spine_db_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ def __init__(self, settings, parent, synchronous=False):
self._validated_values = {"parameter_definition": {}, "parameter_value": {}}
self._parameter_type_validator = ParameterTypeValidator(self)
self._parameter_type_validator.validated.connect(self._parameter_value_validated)
self._no_prompt_urls = set()

def _connect_signals(self):
self.error_msg.connect(self.receive_error_msg)
Expand Down Expand Up @@ -316,6 +317,7 @@ def close_session(self, url):
Args:
url (str)
"""
self._no_prompt_urls.discard(url)
db_map = self._db_maps.pop(url, None)
if db_map is None:
return
Expand All @@ -334,17 +336,17 @@ def close_all_sessions(self):
for url in list(self._db_maps):
self.close_session(url)

def get_db_map(self, url, logger, ignore_version_error=False, window=False, codename=None, create=False):
def get_db_map(self, url, logger, window=False, codename=None, create=False, force_upgrade_prompt=False):
"""Returns a DatabaseMapping instance from url if possible, None otherwise.
If needed, asks the user to upgrade to the latest db version.
Args:
url (str, URL)
logger (LoggerInterface)
ignore_version_error (bool, optional)
window (bool, optional)
codename (str, NoneType, optional)
create (bool, optional)
window (bool)
codename (str, optional)
create (bool)
force_upgrade_prompt (bool)
Returns:
DatabaseMapping, NoneType
Expand All @@ -361,8 +363,9 @@ def get_db_map(self, url, logger, ignore_version_error=False, window=False, code
logger.msg_error.emit(err.msg)
return None
if prompt_data is not None:
if ignore_version_error:
if not force_upgrade_prompt and url in self._no_prompt_urls:
return None
self._no_prompt_urls.add(url)

Check warning on line 368 in spinetoolbox/spine_db_manager.py

View check run for this annotation

Codecov / codecov/patch

spinetoolbox/spine_db_manager.py#L368

Added line #L368 was not covered by tests
title, text, option_to_kwargs, notes, preferred = prompt_data
kwargs = OptionsDialog.get_answer(
self.parent(), title, text, option_to_kwargs, notes=notes, preferred=preferred
Expand Down

0 comments on commit 57fa23a

Please sign in to comment.